最近几个月同事们都申请到了一堆模型:GLM、DeepSeek、MiniMax、MiMo等玩得飞起。
我自己也买了不少,还薅到了小米7亿Tokens,每天都在折腾。
用久了之后,一个真实的痛点冒出来了。
Claude Code 全局只有一套模型配置。终端 A 想用 DeepSeek 写代码、终端 B 想用 Mimo 做 Review、终端 C 想用官方 Claude 做架构设计------每次都得手动改环境变量,互相干扰,烦得很。
于是就有了 ccm(Claude Code Model Manager)。
一行命令切换模型,每个终端独立绑定,互不干扰。还能管理配置、查看会话历史。
Github:https://github.com/leeandrew94/ccm-cli

ccm怎么使用
npm i -g @leeandrew94/ccm
装完后 ccm -h 看所有命令,核心就这几个:
Commands:
add <name> 添加模型配置
edit <name> 编辑配置
rm <name> 删除配置
list, ls 查看所有配置
ps 查看运行中的实例
kill <name> 停止实例
test [name] 测试 API 连通性
balance [name] 查询余额
sessions 浏览会话历史
添加模型
ccm add glm,按提示输入 API 地址、Token、模型名称就行:

查看配置和运行状态
ccm ls 列出所有配置好的模型,同时显示哪些正在运行:

查余额
ccm balance 查所有模型余额,加 name 查单个。有些平台不支持余额查询,免费 Token 也查不了。
哦豁,DeepSeek 又要充钱了。不过价格已经降到原价的 1/4,性价比还行。

会话历史
ccm sessions 列出所有历史记录,支持搜索、单个和批量删除,还有 30 天回收站。

还有个 Web 页面可以看历史会话,能直接复制命令恢复对话。
ccm 支持 Claude 的所有启动参数:
ccm mimo --permission-mode <mode>
ccm mimo --continue
ccm mimo --remote-control [name]
等同于:
claude --settings ~/.ccm/settings/mimo.json --permission-mode <mode>

另外加了 Shell 补全(zsh/bash),按 Tab 就能看所有命令:

实现思路是酱紫的
ccm 只叠加模型配置,不替换 Claude Code 的全局 settings.json------状态栏、Skill、MCP Server 等原有能力不受任何影响
终端隔离:用 --settings 代替 export
这是整个项目最关键的设计。
ccm 没有改全局环境变量,而是利用 Claude Code 的 --settings 参数。每个模型对应一个独立的 settings 文件:
{
"env": {
"ANTHROPIC_BASE_URL": "https://api.example.com",
"ANTHROPIC_AUTH_TOKEN": "sk-xxx",
"ANTHROPIC_MODEL": "mimo-v2.5-pro"
}
}
执行 ccm mimo 时,ccm 读取配置、写入 settings 文件、通过 spawn('claude', ['--settings', settingsPath], { stdio: 'inherit' }) 启动 Claude Code。stdio: 'inherit' 保证子进程继承当前终端的输入输出,体验和直接跑 claude 一样。
为什么不用 export?
因为 export 会影响当前 shell 的所有子进程,多个终端会互相覆盖。--settings 把环境变量限制在单个进程内,天然隔离。
进程追踪:文件系统搞定
ccm 用文件系统追踪运行中的实例。启动时在 ~/.ccm/runs/<pid>.json 写入:
{
"pid": 12345,
"profile": "mimo",
"started_at": "2026-05-23T10:00:00Z",
"tty": "/dev/ttys001"
}
存活检测用 POSIX 的 kill(pid, 0)------这个信号不会杀进程,只是检查进程是否存在,是操作系统级别的原子操作。
清理时遍历所有 run 文件,移除 PID 已失效的记录。
终止时先发 SIGTERM 等 500ms,没退出再升级为 SIGKILL。
零依赖 Web 查看器
ccm sessions --web 启动本地 HTTP 服务器,整个 SPA 应用以模板字符串嵌入 TypeScript 源码里:
-
客户端路由:
history.pushState+popstate实现 SPA 路由 -
Markdown 渲染:纯正则实现,支持代码块、表格、引用、标题、链接
-
代码高亮:基于关键字的简单着色,不需要 highlight.js
-
会话索引:右侧栏用
IntersectionObserver追踪当前可见消息
整个页面没有任何外部依赖,不引 CDN、不加载第三方库,所有资源自包含。
成本很低,但能快速找到想恢复的对话,还能直接切到当时的模型继续vibe coding。
用在什么场景
终端 A 跑 DeepSeek 分析数据,终端 B 跑 Mimo 做 coding,终端 C 用官方 Claude 做 Code Revie。
三个终端同时工作,互不干扰,ccm ps 一眼看清谁在用什么。
昨天用 Claude 写了一段代码,今天想找回来继续。
ccm sessions 浏览历史,支持搜索、Web 查看完整对话,误删的还能从回收站恢复。
Claude Code 本身就是 CLI 工具。ccm 就是它的伴侣,用户已经在终端里了。
为了切模型跳出终端、打开 GUI、点几下再回来,上下文切换的成本远高于敲一行 ccm deepseek。
写在最后
ccm 最初就是个工作中的小脚本------每天在不同终端切模型。
手动改环境变量改烦了,cc-switch又满足不了现状,写了几行代码自动化。
后来发现同事也有同样的痛点,才慢慢打磨成完整的工具第一版是Python实现的。
所以好的工具不需要宏大的愿景,只需要解决一个真实存在的问题,然后做到足够简单。
先让自己用得舒服,再让别人也能用得舒服------我想这应该就是我去做工具的初心。
Github:https://github.com/leeandrew94/ccm-cli 欢迎大家提意见反馈
我是赛博李同学,大厂写代码的,觉得有用点个赞 + 转发给需要的TA,感谢支持!,我们下期见!