Claude Code Model Router — VSCode Extension
在 VSCode 内一键启动 CCMR 网关,并以网关模式启动 Claude Code,使用 DeepSeek / Kimi / Qwen / GLM / MiniMax / MiMo 等第三方模型;与官方订阅模式(~/.claude/)完全隔离。
功能
- 一键启停网关:状态栏点击或命令面板
CCMR: Start/Stop/Restart Gateway
- 本地内嵌网关:直接在扩展宿主进程内运行 Express 服务(默认
127.0.0.1:8088,端口冲突自动递增)
- API Key 安全存储:所有密钥通过 VSCode
SecretStorage 加密保存,不写入 .env 或 settings.json
- 默认模型选择:Quick Pick 列出全部模型 + Ready/无 Key 状态
- Claude Code 终端集成:
CCMR: Open Claude Code Terminal (Gateway Mode) 创建集成终端并自动注入 ANTHROPIC_BASE_URL / ANTHROPIC_AUTH_TOKEN / ANTHROPIC_MODEL / CLAUDE_CONFIG_DIR=~/.claude-gateway
- 状态栏菜单:点击
$(rocket) CCMR :8088 | deepseek-v4-pro 弹出聚合菜单
使用步骤
- 安装本扩展。
- 命令面板执行
CCMR: Manage API Keys,至少配置一个 provider 的 Key(密钥存入 SecretStorage)。
- 命令面板执行
CCMR: Pick Default Model,选择默认模型。
- 状态栏点击网关图标 →
Start Gateway。
- 命令面板执行
CCMR: Open Claude Code Terminal (Gateway Mode),在弹出终端里使用 claude,即可对话。
也可以在已运行的网关上,自己开终端:
ANTHROPIC_BASE_URL=http://127.0.0.1:8088 \
ANTHROPIC_AUTH_TOKEN=ccmr-local-gateway \
CLAUDE_CONFIG_DIR=~/.claude-gateway \
claude
前提:本机已安装 Claude Code CLI(npm i -g @anthropic-ai/claude-code)。
命令清单
| 命令 |
说明 |
CCMR: Start Gateway |
启动本地网关 |
CCMR: Stop Gateway |
停止网关 |
CCMR: Restart Gateway |
重启(应用新模型/Key) |
CCMR: Pick Default Model |
选择默认模型 |
CCMR: Open Claude Code Terminal (Gateway Mode) |
打开网关模式终端 |
CCMR: Manage API Keys |
管理 API Key(SecretStorage) |
CCMR: Show Output |
查看 Output 面板日志 |
配置项
| 配置 |
默认 |
说明 |
ccmr.gateway.port |
8088 |
监听端口(与 CLI 默认 8080 错开) |
ccmr.gateway.autoStart |
false |
VSCode 启动时自动启动网关 |
ccmr.gateway.timeout |
300 |
上游请求超时(秒) |
ccmr.gateway.enableLogging |
true |
Output 面板打印请求日志 |
ccmr.defaultModel |
deepseek-v4-pro |
默认模型名称或别名 |
ccmr.claude.command |
claude |
Claude Code CLI 命令 |
ccmr.claude.configDir |
(auto) |
网关模式 Claude Code 配置目录,默认 ~/.claude-gateway |
为什么是「终端注入」而不是「直接接管官方 Claude Code 扩展」
经过对官方 Claude Code VSCode 扩展(anthropic.claude-code)行为的调研:
- 环境变量不会被扩展面板读取:扩展激活后已加载完毕,事后修改
process.env 不生效。
- 没有公开的 inter-extension API:
vscode.extensions.getExtension('anthropic.claude-code').exports 未暴露重定向能力。
- 唯一会被扩展面板生效的入口是
~/.claude/settings.json 里的 env 字段——但官方订阅模式就是从这里读 token,覆写它会直接破坏用户的官方订阅。
claude --ide 走的是内部 MCP 通道:用 ~/.claude/ide/ 下的锁文件做发现,不是为第三方扩展设计的扩展点。
因此 CCMR VSCode 扩展坚持 「网关 + 集成终端注入环境变量」 模式:
- 官方订阅模式(
claude 直接启动、~/.claude/)零侵入
- 网关模式只作用于扩展通过
createTerminal({ env }) 启动的子进程
- 用户随时可以用
Stop Gateway 干净退出
如果未来官方扩展提供 claudeCode.baseUrl 之类的设置项,本扩展会自动写入;在那之前,终端方案是唯一既稳又安全的接入路径。
参考:
与 CLI 版本(ccmr npm 包)的关系
本扩展直接复用了 claude-code-model-router 的核心:
ConfigManager 加载内置 provider 注册表与 alias
createServer() 提供 Express 网关
ModelRouter 完成 Anthropic ↔ 上游 provider 的路由与 SSE 透传
CLI 与扩展可以共存:
- CLI 默认
:8080,扩展默认 :8088,端口隔离
- CLI 走
process.env + .env,扩展走 SecretStorage
- CLI 用
~/.claude-gateway 隔离官方订阅,扩展同样使用
开发
npm install
npm run build
# F5 在 Extension Development Host 中启动
与本地 CCMR 仓库同步联调
发布版本依赖 npm 上的 claude-code-model-router@^1.3.3。如果你需要同时改 CCMR 主仓代码并立刻在扩展里看到效果,有两条路:
方案 1:npm link(推荐,零文件修改)
# 1. 在 CCMR 主仓
cd ../Claude-Code-Model-Router
npm run build
npm link
# 2. 回到扩展仓
cd ../Claude-Code-Model-Router-VSCode
npm link claude-code-model-router
# 3. 之后每次主仓改代码
cd ../Claude-Code-Model-Router && npm run build
# 扩展不需要 reinstall,重启 Extension Development Host 即可
或直接用本仓提供的脚本:
npm run link:dev # 等价于 npm link claude-code-model-router
npm run unlink:dev # 解除链接,恢复 npm 版本
方案 2:file: 依赖(package.json 临时改动,记得发布前还原)
# 临时切到本地路径
npm pkg set dependencies.claude-code-model-router="file:../Claude-Code-Model-Router"
npm install
# 还原
npm pkg set dependencies.claude-code-model-router="^1.3.3"
npm install
⚠️ 不要把 file: 路径或 link: 的 package.json 改动提交到主分支,发布到 Marketplace 时 vsce 会按 package.json 解析依赖,相对路径在用户机器上不存在。
测试
npm test # 下载 VSCode + 跑 Mocha E2E(激活、命令注册、网关启停)
License
MIT