大家好,我是鲁工。
这两天把ccmr的VSCode插件版Vibe出来了,已经发布到插件市场。
插件市场地址:
https://marketplace.visualstudio.com/items?itemName=luwill.claude-code-model-router-vscode
ccmr全名Claude Code Model Router,是我去年12月份用Claude Code Vibe出来的一个轻量级模型路由网关,目的就是在不动官方Claude订阅的前提下,让Claude Code切到DeepSeek、Kimi、Qwen、GLM、MiniMax、MiMo这些第三方国产模型上跑。CLI版之前已经迭代过几轮,目前已经可以稳定高效使用,我自己每天都在用ccmr接DeepSeek V4 Pro跑个1亿左右的token。
ccmr具体详情可以翻这两篇旧文:
Claude Code同时双开Opus 4.5与国产大模型,我Vibe了一个轻量级路由工具
ccmr更新,同步支持DeepSeek V4/Kimi K2.6/MiMo v2.5 Pro等六大国产模型任意切换
最直接的触发点是读者反馈。CLI版那几篇文章发出去之后,陆陆续续有几位读者私信问我,能不能直接在VSCode里用ccmr,我就顺手Vibe了一下。

ccmr做个VSCode插件版其实也挺合理。以Claude Code为代表的CLI Coding Agent工具,虽然代表了未来的主流方向,但当下绝大多数用户的真实工作流都在IDE 里:写代码、调试、看diff,顺手在IDE内置终端里跟Claude Code对话。
VSCode在国内开发者里的占有率有多高不用多说,对这部分用户来说,IDE才是Vibe Coding的主战场。一个工具如果只在CLI层面顺手,到了IDE用户这里就得退一步去翻命令历史、复制粘贴shell脚本,体验就有点割裂。
所以这次的目标很明确:把ccmr的网关和Claude Code启动这两步全部塞进VSCode,让IDE用户在编辑器里就能完成「装 Key、选模型、点启动、开终端」这一整套流程,不再局限于CLI的使用选项。
做之前我以为最自然的方案是直接接管官方Claude Code的VSCode 扩展(anthropic.claude-code),让它走我的网关。后来研究了下代码和VSCode扩展机制,结论是这条路目前走不通,原因如下。

首先是时机问题。VSCode扩展激活的时候,环境变量已经被Node进程加载完毕,事后再去改 process.env,扩展面板里那些已经实例化的对象不会重新读取。所以即便我在自己的扩展里改了变量,官方扩展看不见。
第二个是没有公开的扩展间API。我试过vscode.extensions.getExtension('anthropic.claude-code').exports,拿到的对象里没有任何重定向baseUrl的能力。
然后是配置文件的入口太危险。Claude Code for VSCode扩展面板唯一会动态读的入口,是 ~/.claude/settings.json里的env字段。但这个文件就是官方订阅模式存token的地方,一旦覆写,原本能正常用的Claude订阅会被直接破坏。这个代价太大,相当于为了用国产模型把Claude订阅搞挂,得不偿失。
最后是IDE通道的设计意图。claude --ide走的是内部MCP通道,靠~/.claude/ide/下的锁文件做服务发现,从设计上就不是给第三方扩展接入的。
所以最后我换了个思路:不去接管官方扩展,而是在我自己的扩展里启动一个集成终端,把环境变量通过vscode.window.createTerminal({ env })直接注入到子进程。这样网关模式只作用于扩展启动的那个终端,官方订阅模式(直接敲claude启动的那种)完全零侵入,两边互不影响,是隔离的。
听起来很原始,但兜了一圈才确认这是目前最稳的接入方式。如果未来官方扩展真的开放 claudeCode.baseUrl这种设置项,到时候再回过来对接也不迟。
然后说一下ccmr VSCode怎么安装和使用。
直接在VSCode插件栏搜索ccmr即可找到ccmr VSCode插件。

装好插件之后,命令面板搜ccmr能看到一组命令,状态栏右下角会出现一个$(rocket) CCMR的小火箭图标。

上来先执行CCMR: Manage API Keys,把至少一个provider的API-Key填进去。所有的Key都走VSCode的SecretStorage加密保存,不会存到.env或者settings.json里,安全性这块比CLI版的明文.env要高一些。

然后CCMR: Pick Default Model选默认模型,Quick Pick列表里会标注每个模型的Ready/缺Key状态,能直观地看到哪个能用、哪个还没配Key。
然后状态栏点小火箭,选Start Gateway,扩展宿主进程内会直接起一个Express服务,默认监听 127.0.0.1:8088。8088这个端口是特意挑的,因为CLI版默认在8080,错开之后两边可以同时跑互不冲突。如果8088也被占了,扩展会自动往后递增端口找个空位。

最后CCMR: Open Claude Code Terminal (Gateway Mode)开一个集成终端,里面已经把 ANTHROPIC_BASE_URL、ANTHROPIC_AUTH_TOKEN、ANTHROPIC_MODEL、CLAUDE_CONFIG_DIR=~/.claude-gateway 全部注入好,直接claude就进去了。~/.claude-gateway这个隔离目录是我从CLI版沿用过来的设计,目的就是确保网关模式的会话历史、登录态跟官方订阅模式 (~/.claude/) 物理隔离,不会互相污染。

整套流程下来,从打开VSCode到拉起一个由DeepSeek或者Kimi驱动的Claude Code,大概半分钟左右。
插件版没有重写网关,依赖里直接claude-code-model-router@^1.4.0,复用了CLI那边的ConfigManager、createServer()、ModelRouter这套核心。所以两边的模型支持是一致的,CLI那边新增一个provider,插件版升一下依赖就能拿到。
两边可以共存:CLI默认8080,插件默认8088,端口隔离;CLI走process.env + .env,插件走SecretStorage,配置隔离;都用 ~/.claude-gateway隔离官方订阅,行为一致。
ccmr一开始只是给自己解决一个小别扭,最后竟然也做到了VSCode插件市场。这种小工具的好处是迭代成本极低,看到不顺手的地方就改,改完直接用上。
插件目前是0.2.0版本,欢迎大家在VSCode插件市场搜Claude Code Model Router装一下试试。用过之后有任何反馈,可以直接在GitHub提issue,或者直接微信我。
如果觉得有用,点个赞或者在看,也方便更多朋友看到。
感谢您阅读我的文章。我是鲁工,九年AI算法老兵,AI全栈开发者,深耕AI编程赛道。
夜雨聆风