1. openrig 到底是个什么东西
第一次看到 openrig 这个名字,我下意识以为是某个硬件外设的开源项目,毕竟“rig”这个词在硬件圈里太常见了。但翻了一圈社区讨论和仓库结构之后才反应过来,它其实是围绕 AI 编程助手生态做的一套配置编排工具,核心解决的是 Claude Code、Codex 这类命令行 AI 助手在不同模型供应商之间来回切换时,配置散乱、环境难复现的问题。说白了,openrig 想干的事情,就是把“我本地跑通了”变成“你 clone 下来也能跑通”。
这个定位其实非常精准。最近半年,Claude Code 和 Codex 这两套 CLI 工具几乎成了后端和全栈开发者的标配,但真正用过的人都知道,痛点根本不在工具本身,而在于配置。你要接官方订阅、要接第三方 API、要接本地模型,每换一次供应商就得改一遍环境变量、改一遍配置文件、重启一遍终端,稍微手抖一下就是cc switch local proxy failed while handling codex endpoint /responses这种让人头皮发麻的报错。openrig 就是冲着这个场景来的。
它适合谁?三类人最该关注。第一类是同时用 Claude Code 和 Codex 的开发者,需要在两套工具之间共享配置;第二类是想把本地模型(比如通过 LM Studio 跑起来的模型)接进 Claude Code 的人;第三类是团队里负责统一开发环境的人,需要把 AI 助手的配置纳入版本管理。如果你只是偶尔用一下网页版,那 openrig 对你意义不大,但只要你开始把 AI 助手当成日常生产力工具,这套东西迟早会派上用场。
我个人的判断是,openrig 的价值不在于它发明了什么新技术,而在于它把一堆零散的 YAML 配置、Node.js 环境依赖、供应商切换逻辑给标准化了。这种“胶水层”工具往往最容易被低估,但实际用起来省下的时间非常可观。
2. 核心设计思路与方案选型拆解
2.1 为什么是 YAML 而不是 JSON 或 TOML
openrig 选择 YAML 作为配置载体,这个决定背后有很实际的考量。JSON 不支持注释,而 AI 助手的配置里到处都是需要说明的地方,比如“这个 key 是给 Codex 用的”“这个 base_url 指向本地 LM Studio”,没有注释的配置文件维护起来就是灾难。TOML 虽然支持注释,但嵌套结构表达起来比较啰嗦,尤其是当你要描述多个供应商、多个模型、多套环境变量的时候,TOML 的层级会变得很难读。
YAML 的优势在于它天然适合表达层级化的配置,而且支持锚点和引用,这一点在 openrig 里特别关键。你可以定义一个基础的 provider 模板,然后在不同工具下引用它,避免重复写同样的 base_url 和 api_key。我实测下来,一个中等复杂度的 openrig 配置大概在 80 到 150 行 YAML 之间,如果用 JSON 写,同样的内容要膨胀到 200 行以上,而且完全没法加注释。
注意:YAML 对缩进极其敏感,tab 和空格混用会直接导致解析失败。openrig 的配置文件建议统一用两个空格缩进,并且在编辑器里开启“显示空白字符”,否则排查缩进问题会让你怀疑人生。
2.2 Node.js 在整条链路里扮演什么角色
很多人看到 openrig 依赖 Node.js 就有点抵触,觉得“又是一个 npm 套壳工具”。但实际情况是,Claude Code 和 Codex 的 CLI 本身就是基于 Node.js 生态分发的,openrig 作为编排层,复用同一套运行时是最省事的选择。你不需要额外装 Python、不需要装 Go,只要机器上有一个可用的 Node.js LTS 版本,整条链路就能跑起来。
这里有个坑我必须提前说:Node.js 的版本选择比你想的重要。网上经常能看到error installing 24.21.0: node.js v24.21.0 is not yet released or is not available这种报错,原因就是有人手动指定了一个还不存在的版本号。openrig 官方推荐的是 Node.js 20 LTS 或 22 LTS,这两个版本在 Claude Code 和 Codex 上的兼容性最稳。我试过用 Node.js 18 跑,某些依赖会报engine不匹配的警告,虽然勉强能跑,但没必要给自己找麻烦。
安装 Node.js 最省心的方式还是去官网下载 LTS 安装包,Windows 和 macOS 都有图形化安装程序,Ubuntu 上可以用 NodeSource 的源。装完之后用node -v和npm -v确认一下,两个命令都能正常输出版本号,说明环境没问题。
2.3 供应商切换的抽象层设计
openrig 最核心的设计,是把“供应商”和“工具”这两个维度解耦了。传统做法是你在 Claude Code 里配一套,在 Codex 里再配一套,两边互不相干。openrig 的做法是,你先定义好供应商(比如官方订阅、第三方 API、本地 LM Studio),然后声明每个工具用哪个供应商,切换的时候只改一行配置。
这个抽象层的价值在团队协作场景下特别明显。假设你们团队有人用官方订阅、有人用第三方 API、有人用本地模型,以前每个人的配置文件都不一样,代码 review 的时候根本没法看。现在用 openrig,配置文件结构完全一致,只是 provider 字段不同,review 起来一目了然。
2.4 与 Claude Code、Codex 的集成方式
openrig 跟这两套工具的集成,走的是“生成配置文件 + 环境变量注入”的路线,而不是去 hook 它们的内部逻辑。这个选择很聪明,因为 Claude Code 和 Codex 的版本迭代非常快,如果你去改它们的源码或者 hook 内部函数,每次升级都会崩。openrig 只负责把配置写到正确的位置,剩下的交给工具自己处理,升级兼容性就好很多。
具体来说,Claude Code 读取的是用户目录下的配置文件,Codex 也有自己的配置路径。openrig 会根据当前平台(Windows、macOS、Linux)自动判断路径,然后把 YAML 里定义的内容渲染进去。你不需要手动去记那些路径,这也是它比手写配置省事的地方。
3. 核心细节解析与实操要点
3.1 配置文件的结构长什么样
openrig 的配置文件通常叫openrig.yaml,放在项目根目录或者用户配置目录下。一个最小可用的配置大概包含三个部分:providers、tools、defaults。providers 定义供应商信息,tools 定义每个工具用哪个供应商,defaults 定义一些全局的默认值。
providers: official: type: anthropic api_key: ${ANTHROPIC_API_KEY} local: type: openai-compatible base_url: http://localhost:1234/v1 api_key: not-needed tools: claude-code: provider: official codex: provider: local defaults: node_version: "20"这段配置的意思是:Claude Code 用官方供应商,Codex 用本地 LM Studio 的兼容接口。${ANTHROPIC_API_KEY}是环境变量引用,openrig 在渲染的时候会把它替换成实际的值,这样你就不会把密钥硬编码到配置文件里。
提示:环境变量引用这个功能非常关键,尤其是当你要把配置文件提交到 Git 仓库的时候。任何硬编码的 api_key 都有泄露风险,用环境变量引用是最基本的操作。
3.2 供应商类型的区分与参数填写
openrig 目前支持的供应商类型主要有三类:anthropic 类型、openai-compatible 类型、以及自定义类型。anthropic 类型对应 Claude 官方接口,你只需要填 api_key。openai-compatible 类型对应所有兼容 OpenAI 接口的服务,包括 LM Studio、DeepSeek、Qwen、GLM 等,你需要填 base_url 和 api_key。
这里有个细节值得展开:base_url 的结尾要不要带/v1。不同服务的约定不一样,LM Studio 默认是http://localhost:1234/v1,DeepSeek 是https://api.deepseek.com,有些服务带/v1有些不带。我的经验是,先按服务商文档给的地址填,如果报 404 就试着加上或去掉/v1。openrig 本身不会帮你自动补全这个路径,它只负责把配置传下去。
api_key 这一项,对于本地模型来说通常填任意非空字符串就行,LM Studio 默认不校验。但有些兼容服务会校验,所以别留空,填个not-needed或者local都可以。
3.3 工具侧的配置映射逻辑
openrig 在渲染配置的时候,会把 YAML 里的 provider 信息转换成每个工具能识别的格式。Claude Code 和 Codex 的配置格式并不一样,Claude Code 更依赖环境变量,Codex 更依赖配置文件。openrig 内部做了这层转换,你不需要关心每个工具具体要什么格式。
但有一个点你需要知道:Claude Code 对订阅访问有组织级别的限制。如果你看到your organization has disabled claude subscription access for claude code这个报错,说明你的账号所属组织关闭了 CLI 访问权限,这跟 openrig 没关系,是账号策略问题。解决办法要么是找管理员开通,要么是改用 API key 方式接入。
Codex 那边也有类似的坑,codex无法加载组织设置通常是因为登录态过期或者配置文件路径不对。openrig 生成的配置文件会覆盖默认路径,如果你之前手动改过 Codex 的配置,建议先备份再让 openrig 接管。
3.4 环境变量注入的时机与顺序
openrig 注入环境变量的时机是在启动工具之前,它会先读取 YAML,解析出当前工具需要的环境变量,然后设置到当前进程的环境里,再启动工具。这个顺序很重要,因为如果你在 shell 里已经设置了同名的环境变量,openrig 的行为取决于它的覆盖策略。
默认情况下,openrig 会覆盖已有的环境变量。这意味着如果你在.bashrc里设置了ANTHROPIC_API_KEY,但 openrig 配置里指向了另一个 key,最终生效的是 openrig 里的。这个设计是为了保证配置的一致性,但如果你有特殊需求,可以在 YAML 里加一个override: false的标志,让 openrig 尊重已有的环境变量。
注意:在 Windows 上,环境变量的注入方式跟 Unix 系统不一样,openrig 会调用
set命令而不是export。如果你在 Windows 上遇到环境变量没生效的问题,先确认你用的是 PowerShell 还是 CMD,两者的语法有差异。
4. 完整实操流程与关键环节实现
4.1 环境准备:Node.js 与包管理器
第一步是把 Node.js 装好。去 Node.js 官网下载 LTS 版本,Windows 和 macOS 直接下安装包,一路下一步就行。Ubuntu 上我习惯用 NodeSource 的源,命令如下:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt-get install -y nodejs装完之后验证:
node -v npm -v两个命令都能输出版本号就说明没问题。如果你之前装过其他版本,建议用 nvm 管理,避免版本冲突。nvm 的安装方式网上教程很多,这里不展开。
包管理器方面,npm 就够用了,不需要额外装 pnpm 或 yarn。openrig 的依赖树不算复杂,npm 的安装速度可以接受。
4.2 安装 openrig 并初始化配置
安装命令很简单:
npm install -g openrig全局安装之后,openrig命令就可以在任何目录下使用了。第一次使用建议先跑openrig init,它会在当前目录生成一个模板配置文件,你在这个基础上改就行。
openrig init生成的openrig.yaml里会有注释说明每个字段的含义,照着改比从零写要快得多。如果你是在已有项目里用,可以把配置文件放到项目根目录,然后加进.gitignore或者提交到仓库,取决于你的团队约定。
4.3 配置 Claude Code 接入本地模型
这是很多人最关心的场景:怎么让 Claude Code 调用 LM Studio 的本地模型。首先确保 LM Studio 已经启动,并且在设置里开启了本地服务器,默认端口是 1234。然后在 openrig.yaml 里这样配:
providers: lmstudio: type: openai-compatible base_url: http://localhost:1234/v1 api_key: local tools: claude-code: provider: lmstudio保存之后跑openrig apply,它会生成 Claude Code 需要的配置文件。然后启动 Claude Code,如果一切正常,你应该能看到它连上了本地模型。
这里有个实测经验:LM Studio 的模型加载需要时间,如果你在模型还没加载完的时候就启动 Claude Code,会报连接超时。建议先在 LM Studio 里确认模型已经加载完毕,再启动 Claude Code。另外,本地模型的上下文窗口通常比官方模型小,如果你发现对话到一半就断了,大概率是上下文超限,换个窗口大一点的模型或者精简对话内容。
4.4 配置 Codex 接入第三方 API
Codex 接入第三方 API 的流程类似,只是 provider 类型和参数不同。以 DeepSeek 为例:
providers: deepseek: type: openai-compatible base_url: https://api.deepseek.com api_key: ${DEEPSEEK_API_KEY} tools: codex: provider: deepseek然后在环境变量里设置DEEPSEEK_API_KEY,再跑openrig apply。Codex 的配置文件会被更新,启动 Codex 之后就会走 DeepSeek 的接口。
提示:Codex 对模型名称有校验,如果你在配置里指定的模型名不被支持,会报
the 'gpt-5.6-sol' model is not supported when using codex with a这类错误。解决办法是在 provider 里显式指定 model 字段,填服务商实际支持的模型名。
4.5 在 VS Code 里集成 Claude Code
VS Code 的集成方式跟纯 CLI 略有不同。你需要先装 Claude Code 的 VS Code 扩展,然后在扩展设置里指向 openrig 生成的配置文件。具体路径取决于你的操作系统,Windows 一般在%APPDATA%下,macOS 在~/Library/Application Support下,Linux 在~/.config下。
openrig 在 apply 的时候会打印出它写入的路径,你照着填到 VS Code 扩展设置里就行。如果扩展里没有直接的配置路径选项,可以通过环境变量方式注入,在 VS Code 的settings.json里加terminal.integrated.env配置。
4.6 验证配置是否生效
配置写完不代表生效,必须验证。最直接的方式是启动工具之后问一个只有目标模型才能回答的问题,比如问本地模型一个你训练过它的问题,或者问第三方 API 一个它特有的知识。如果回答符合预期,说明链路通了。
另一个验证方式是看日志。Claude Code 和 Codex 都有 verbose 模式,启动的时候加上--verbose或者-v参数,能看到它实际请求的 base_url 和模型名。如果 base_url 跟你配置的不一致,说明 openrig 的配置没被正确读取,检查一下配置文件路径和权限。
5. 常见问题与排查技巧实录
5.1 供应商切换后报错怎么办
最常见的报错就是cc switch local proxy failed while handling codex endpoint /responses。这个错误通常出现在你从官方供应商切到本地或第三方供应商的时候,原因是 Codex 的本地代理层还缓存着旧的配置。解决办法是先停掉 Codex 进程,删掉它的缓存目录,再重新启动。缓存目录的位置在 openrig 的文档里有说明,不同平台不一样。
如果删缓存还不行,检查一下 base_url 是否可达。用curl直接请求一下 base_url,看看能不能通。本地模型的话,确认 LM Studio 的服务器还在跑;第三方 API 的话,确认网络能通、key 没过期。
5.2 Node.js 版本不匹配的排查
error installing 24.21.0: node.js v24.21.0 is not yet released or is not available这个报错,十有八九是你在某个配置里写死了一个不存在的 Node.js 版本号。openrig 本身不会去安装 Node.js,它只是检查版本。如果你在defaults里写了node_version: "24.21.0",而实际机器上装的是 20.x,就会报这个错。
解决办法很简单,把node_version改成你实际安装的版本,或者直接删掉这一行,让 openrig 跳过版本检查。我个人的建议是保留这一行,但填一个真实存在的 LTS 版本号,这样团队里其他人 clone 下来之后能快速发现版本不一致的问题。
5.3 配置文件路径找不到的处理
openrig 在不同平台上的默认配置路径不一样,如果你手动移动过配置文件,或者用了非标准目录,可能会遇到“找不到配置文件”的问题。排查步骤是:先跑openrig config path看它期望的路径是什么,然后确认那个路径下有没有文件。如果没有,要么把文件移过去,要么在命令里用--config参数显式指定路径。
Windows 上还有一个坑:路径里的反斜杠和正斜杠混用会导致解析失败。openrig 内部会做规范化,但如果你在 YAML 里写了带反斜杠的路径,建议改成正斜杠或者双反斜杠。
5.4 常见问题速查表
| 报错信息 | 可能原因 | 解决办法 |
|---|---|---|
| cc switch local proxy failed | 代理层缓存旧配置 | 停进程、删缓存、重启 |
| node.js vXX is not yet released | 版本号写错 | 改成实际安装的 LTS 版本 |
| your organization has disabled claude subscription access | 组织策略限制 | 改用 API key 或联系管理员 |
| codex无法加载组织设置 | 登录态过期或路径不对 | 重新登录或检查配置路径 |
| the 'xxx' model is not supported | 模型名不被支持 | 在 provider 里显式指定支持的模型名 |
| 连接超时 | 本地模型未加载完或网络不通 | 确认模型加载完毕、检查网络 |
5.5 几个我踩过的坑
第一个坑是 YAML 里的布尔值。YAML 会把yes、no、on、off解析成布尔值,如果你某个字段的值恰好是这些词,会被意外转换。比如 api_key 填了no,解析出来就是false,然后请求就失败了。解决办法是给这类值加引号,写成"no"。
第二个坑是环境变量引用在 Windows 上的行为。${VAR}这种语法在 Unix 上没问题,但在 Windows 的 CMD 里,openrig 的解析器可能会把${当成普通字符。如果你在 Windows 上遇到环境变量没被替换的问题,试试用%VAR%语法,或者干脆在 PowerShell 里跑。
第三个坑是多个工具共用同一个 provider 时的并发问题。如果你同时启动 Claude Code 和 Codex,而它们都指向同一个本地模型,LM Studio 可能会因为并发请求而排队,导致响应变慢。解决办法是给每个工具配不同的 provider,或者错开使用时间。
6. 进阶用法与扩展思路
6.1 把 openrig 配置纳入版本管理
团队协作场景下,把openrig.yaml提交到 Git 仓库是很有价值的。但要注意,配置文件里不能有明文密钥,所有敏感信息都要用环境变量引用。另外,不同成员的本地模型地址可能不一样,比如有人用localhost:1234,有人用localhost:8080,这种情况下可以把 base_url 也做成环境变量引用,每个人在自己的 shell 里设置。
6.2 多环境配置的切换
openrig 支持多套配置文件,你可以建openrig.dev.yaml、openrig.prod.yaml这样的文件,然后用--config参数指定用哪套。这个机制适合在开发环境和生产环境之间切换,比如开发环境用本地模型省钱,生产环境用官方 API 保证质量。
6.3 与 CI/CD 流程的结合
如果你在 CI 里跑 AI 辅助的代码审查或者测试生成,openrig 也能派上用场。在 CI 脚本里先跑openrig apply,把配置渲染好,再启动 Claude Code 或 Codex 执行任务。需要注意的是,CI 环境里通常没有交互式终端,要确保 openrig 的命令都是非交互式的,不会卡在等待输入上。
6.4 后续可以扩展的方向
openrig 目前的定位是配置编排,但它的架构留了不少扩展空间。比如可以加一个 provider 健康检查功能,在 apply 之前先 ping 一下 base_url,不通就提前报错。还可以加一个配置校验功能,在渲染之前检查 YAML 的语法和字段完整性,避免把错误配置写进去。这些功能社区里已经有人在讨论了,后续版本可能会加。
我在实际使用中的体会是,openrig 这类工具的价值会随着你使用的 AI 助手数量增加而放大。如果你只用一套工具、一个供应商,手写配置也能凑合。但当你开始在两三套工具和四五个供应商之间来回切换的时候,没有一层抽象是真的会乱。openrig 现在还不算完美,但方向是对的,值得花时间把它跑通。