☰
openrig 实战:Claude Code 与 Codex 本地环境编排指南
2026/10/8 8:11:52 网站建设 项目流程

1. openrig 到底是个什么东西

第一次看到 openrig 这个名字,我下意识以为是某个硬件外设的开源项目,毕竟“rig”这个词在硬件圈里太常见了。但翻了一圈社区讨论和实际代码之后才明白,它其实是围绕 Claude Code、Codex 这类命令行 AI 编程助手做的一套本地运行环境编排方案。说白了,openrig 解决的是一个很具体的问题:当你同时用着 Claude Code、Codex CLI,又想在本地跑模型、又想接第三方 API、还想让这些工具在 tmux 里稳定跑起来的时候,环境配置会变得非常碎。openrig 就是把这些碎活儿收拢到一套可复现的配置里。

我为什么会对这个标题感兴趣?因为最近半年,Claude Code 和 Codex 的安装、配置、接入本地模型这些关键词的搜索量涨得非常猛。热词里能看到大量真实痛点:claude code 调用 lmstudio 的本地模型、codex 接入 deepseek、cc switch local proxy failed while handling codex endpoint /responses、codex is ignoring 1 unrecognized configuration setting。这些不是理论问题,是每个想把这套工具链跑起来的人都会撞上的墙。openrig 的价值就在于,它试图用一套统一的 Node.js 环境加 tmux 会话管理,把这些工具的安装、切换、代理、日志排查都标准化。

这篇文章适合谁看?如果你正在 Ubuntu 或者 Windows 上折腾 Claude Code 和 Codex,如果你被 Node.js 版本问题卡过(比如那个经典的error installing 24.21.0: node.js v24.21.0 is not yet released),如果你想在 VS Code 里接入 Claude Code 又不知道怎么配,或者你想让 Codex 接上 DeepSeek、Qwen、GLM 这些模型却总是报错,那这篇内容就是给你写的。我会从整体设计思路讲到具体操作,再到我踩过的坑,尽量让你少走弯路。

需要先说明一点:openrig 本身不是一个官方大厂项目,它更像是社区里一群人为了解决共同痛点攒出来的实践集合。所以我会基于常见的 Node.js 工具链实践来补全细节,同时明确标注哪些是合理推断、哪些是通用做法。你照着做的时候,核心逻辑是通的,具体参数按你自己的环境微调就行。

2. 整体设计思路与方案选型拆解

2.1 为什么是 Node.js 作为底座

Claude Code 和 Codex CLI 这两个工具,本质上都是 Node.js 写的命令行程序。你去看它们的安装方式,几乎清一色是npm install -g或者通过 npx 直接跑。这就决定了 Node.js 是整个工具链的地基。地基不稳,上面全塌。

我见过太多人在这第一步就翻车。热词里有个特别典型的报错:error installing 24.21.0: node.js v24.21.0 is not yet released or is not available。这个错误的根源是,很多教程里写的 Node.js 版本号是拍脑袋写的,或者是从某个未来版本的文档里抄来的,实际根本不存在。Node.js 的版本发布是有严格节奏的,偶数版本是 LTS(长期支持),奇数版本是 Current(尝鲜)。你装一个不存在的版本,npm 自然找不到。

openrig 的思路很务实:锁定 Node.js 20 LTS 或者 22 LTS,不追最新,不追奇数版。为什么是 20 而不是 18?因为 Claude Code 和 Codex 的一些依赖已经开始要求 Node 18 以上,而 20 LTS 在 Ubuntu 上的安装体验最顺,社区支持也最全。为什么不用 24?因为 24 虽然是最新的 LTS 候选,但很多第三方包的兼容性还没跟上,你装完可能遇到一堆engine字段不匹配的警告。

在 Ubuntu 上装 Node.js 20+,我强烈建议用 NodeSource 的源,而不是apt install nodejs。Ubuntu 自带的 Node.js 版本往往很老,你装完 Claude Code 可能直接报语法错误。NodeSource 的命令是这样的:

curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt-get install -y nodejs

装完之后用node -v确认版本,应该是v20.x.x。如果你看到的是v18或者更低,说明源没生效,得检查一下 apt 的缓存。

2.2 tmux 在整套方案里扮演什么角色

很多人不理解为什么 AI 编程工具要跟 tmux 扯上关系。我一开始也没想明白,直到我在一个长任务上吃了亏。Claude Code 和 Codex 在执行复杂任务时,会话可能持续几十分钟甚至更久。如果你直接在 SSH 终端里跑,网络一抖,会话就断了,任务直接中断,前面的上下文全丢。tmux 的作用就是把这个会话“挂”在后台,你的 SSH 断了,tmux 里的进程还在跑,重连之后tmux attach就能接着看。

openrig 把 tmux 作为标准组件,还有一个更细的理由:它需要同时管理多个 AI 工具的会话。你可能一个窗口跑 Claude Code,另一个窗口跑 Codex,还有一个窗口在跑本地模型的服务。用 tmux 的分屏和会话管理,切换起来非常快。而且 tmux 的日志留存能力,对于排查cc switch local proxy failed这类代理错误特别有用,你可以回滚看之前的输出。

在 Ubuntu 上装 tmux 就是一行命令:sudo apt install tmux。装完之后我建议你改一下~/.tmux.conf,把默认的前缀键从Ctrl+b改成Ctrl+a,因为Ctrl+b在很多终端里跟翻页冲突。再加一行set -g mouse on,这样你可以用鼠标直接选窗口和调整分屏,对新手友好很多。

2.3 本地模型与第三方 API 的接入逻辑

热词里claude code 调用 lmstudio 的本地模型和codex 接入 deepseek这两个需求非常集中。这背后的逻辑是:官方 API 有额度限制,而且有些场景下你不想把代码发到远端。本地模型或者第三方 API 就成了刚需。

openrig 处理这个问题的思路是“代理层统一”。它不直接改 Claude Code 或 Codex 的源码,而是在中间加一层本地代理。Claude Code 和 Codex 都支持通过环境变量指定 API 的 base URL,比如ANTHROPIC_BASE_URL或者OPENAI_BASE_URL。你把 base URL 指向本地的代理服务,代理服务再把请求转发到 LM Studio、DeepSeek 或者别的后端。这样做的好处是,切换模型只需要改代理的配置,不用动 AI 工具本身的设置。

那个cc switch local proxy failed while handling codex endpoint /responses的错误,就是代理层在转发 Codex 的/responses端点时出了问题。常见原因有三个:一是代理没正确识别 Codex 的请求格式,二是后端模型不支持/responses这个端点,三是代理的端口被占用了。排查的时候先看代理的日志,确认请求有没有到代理,再看代理有没有成功转发出去。

3. 核心细节解析与实操要点

3.1 Claude Code 安装的完整流程与版本陷阱

Claude Code 的安装看起来简单,但热词里claude code 安装、claude code下载安装、claude code 安装反复出现,说明很多人卡在这一步。我梳理一下在 Ubuntu 上的标准流程。

第一步,确认 Node.js 版本。node -v必须显示v18以上,推荐v20。如果版本不对,回到上一节用 NodeSource 重装。

第二步,全局安装 Claude Code。官方推荐的方式是:

npm install -g @anthropic-ai/claude-code

这里有个坑:如果你之前用sudo npm install -g装过东西,可能会遇到权限问题。我的建议是配置 npm 的全局目录到用户目录下,避免每次都要 sudo:

mkdir -p ~/.npm-global npm config set prefix '~/.npm-global' echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc source ~/.bashrc

然后再执行安装命令,就不需要 sudo 了。

第三步,验证安装。运行claude --version,如果能看到版本号,说明装好了。如果报command not found,检查 PATH 有没有包含 npm 的全局 bin 目录。

Windows 用户注意,热词里claude code windows和claude code桌面版的搜索量很高。Windows 上我建议用 WSL2,而不是直接在 PowerShell 里装。因为 Claude Code 的很多依赖是 Unix 风格的,在 WSL2 的 Ubuntu 环境里跑最稳。VS Code 配合 WSL 插件,体验跟原生 Linux 几乎一样。

3.2 Codex 安装与登录的常见卡点

Codex 的安装跟 Claude Code 类似,也是 npm 全局装。但热词里codex登录不上、codex无法加载组织设置、your organization has disabled claude subscription access for claude code这些错误,说明登录环节问题不少。

Codex 的登录通常走的是浏览器回调或者 API Key 两种方式。如果你在公司网络环境下,浏览器回调可能会被拦截,这时候用 API Key 更稳。API Key 的配置一般是在~/.codex/config.json或者环境变量里设置。具体路径看版本,我建议装完之后先跑codex --help,看看它提示的配置文件位置。

codex无法加载组织设置这个错误,通常是因为你的账号没有加入对应的组织,或者组织的管理员关闭了 Codex 的访问权限。这不是技术问题,是账号权限问题。解决办法是联系组织管理员,或者换一个个人账号。

还有一个热词是codex is ignoring 1 unrecognized configuration setting. check for typos or d。这个警告的意思是,你的配置文件里有一个它不认识的字段。Codex 的配置字段在不同版本之间会变,你从网上抄的配置可能对应的是旧版本。解决办法是去看当前版本的官方文档,或者用codex config list看看它认识哪些字段,把不认识的删掉。

3.3 代理层配置:让 Codex 接上 DeepSeek 和本地模型

这是整个 openrig 方案里技术含量最高的部分。热词里codex接入deepseek、使用cc switch 接入 deepseek v4, qwen, glm等模型、第三方api使用技巧都指向这个需求。

核心原理是这样的:Codex 默认请求 OpenAI 的 API,端点格式是/v1/responses或者/v1/chat/completions。DeepSeek 的 API 兼容 OpenAI 格式,所以理论上你只需要把 base URL 改成 DeepSeek 的地址,再把 API Key 换成 DeepSeek 的就行。但实际操作中,Codex 可能会发送一些 DeepSeek 不支持的字段,或者期望一些 DeepSeek 不返回的字段,这就需要一个代理来做格式转换。

我常用的方案是用一个轻量的 Node.js 代理脚本,监听本地端口,把 Codex 的请求转发到 DeepSeek,同时做字段的增删。配置大概是这样的:

export OPENAI_BASE_URL=http://localhost:3000/v1 export OPENAI_API_KEY=your-deepseek-key

代理脚本里,把 Codex 发来的model字段映射成 DeepSeek 支持的模型名,比如deepseek-chat。然后把max_tokens之类的参数做一下范围限制,避免超出 DeepSeek 的限制。

接 LM Studio 的本地模型也是同样的逻辑。LM Studio 启动后会在本地开一个兼容 OpenAI 的端点,通常是http://localhost:1234/v1。你把OPENAI_BASE_URL指向它就行。但要注意,本地模型的上下文窗口通常比云端小,Codex 发过去的 prompt 如果太长,会被截断或者报错。这时候需要在代理层做一下 token 计数和截断。

提示:代理层一定要开日志。cc switch local proxy failed while handling codex endpoint /responses这种错误,没有日志根本没法排查。日志里至少要有请求的 URL、请求体的大小、转发的目标地址、以及后端返回的状态码。

3.4 VS Code 接入 Claude Code 的配置方法

热词里vscode配置claude code、vscode接入claude code、claude code for vs code说明很多人想在编辑器里直接用。Claude Code 本身是命令行工具,但 VS Code 的集成终端可以很好地承载它。更进一步的集成是通过 VS Code 的任务(tasks)或者快捷键绑定,把 Claude Code 的命令映射成编辑器里的操作。

我的做法是在.vscode/tasks.json里加一个任务:

{ "version": "2.0.0", "tasks": [ { "label": "Claude Code", "type": "shell", "command": "claude", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated" } } ] }

这样你按Ctrl+Shift+P,输入Run Task,选Claude Code,就能在一个专用面板里启动 Claude Code。它跟你的代码在同一个工作区,上下文切换很自然。

如果你想让 Claude Code 直接读取当前打开的文件,可以在命令里加上文件路径参数。不过 Claude Code 的交互模式更适合对话式操作,直接传文件路径反而限制它的能力。我一般是在 Claude Code 里用自然语言描述需求,让它自己去读文件。

4. 实操过程与核心环节实现

4.1 从零搭建 openrig 环境的完整步骤

我把整个搭建过程拆成可复现的步骤。你在一台干净的 Ubuntu 22.04 或者 24.04 上照着做,应该能跑通。

第一步,更新系统包并安装基础工具:

sudo apt update && sudo apt upgrade -y sudo apt install -y curl git tmux build-essential

build-essential是为了编译一些 npm 原生模块,不装的话后面可能报node-gyp错误。

第二步,安装 Node.js 20 LTS:

curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt-get install -y nodejs node -v npm -v

确认node -v输出v20开头。如果输出的是v18或者v21,说明源不对,检查一下/etc/apt/sources.list.d/nodesource.list的内容。

第三步,配置 npm 全局目录并安装 Claude Code 和 Codex:

mkdir -p ~/.npm-global npm config set prefix '~/.npm-global' echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc source ~/.bashrc npm install -g @anthropic-ai/claude-code npm install -g @openai/codex

第四步,配置 tmux。创建~/.tmux.conf:

set -g mouse on set -g prefix C-a unbind C-b bind C-a send-prefix set -g base-index 1 setw -g pane-base-index 1

然后启动一个 tmux 会话:tmux new -s openrig。在这个会话里,你可以开多个窗口,一个跑 Claude Code,一个跑 Codex,一个跑代理服务。

第五步,配置代理层。我写一个最简单的 Node.js 代理示例,放在~/openrig/proxy.js:

const http = require('http'); const https = require('https'); const TARGET = process.env.TARGET_BASE_URL || 'https://api.deepseek.com'; const PORT = process.env.PROXY_PORT || 3000; const server = http.createServer((req, res) => { let body = ''; req.on('data', chunk => body += chunk); req.on('end', () => { console.log(`[proxy] ${req.method} ${req.url} body_size=${body.length}`); const url = new URL(req.url, TARGET); const options = { hostname: url.hostname, port: url.port || 443, path: url.pathname + url.search, method: req.method, headers: { ...req.headers, host: url.hostname, }, }; const proxyReq = https.request(options, proxyRes => { res.writeHead(proxyRes.statusCode, proxyRes.headers); proxyRes.pipe(res); }); proxyReq.on('error', err => { console.error('[proxy] error:', err.message); res.writeHead(502); res.end(JSON.stringify({ error: err.message })); }); proxyReq.write(body); proxyReq.end(); }); }); server.listen(PORT, () => { console.log(`[proxy] listening on ${PORT}, target=${TARGET}`); });

启动代理:TARGET_BASE_URL=https://api.deepseek.com node ~/openrig/proxy.js。

第六步,配置 Codex 使用代理。在~/.codex/config.json里设置:

{ "apiBase": "http://localhost:3000/v1", "apiKey": "your-deepseek-key", "model": "deepseek-chat" }

然后运行codex,看它能不能正常对话。如果报错,先看代理的日志,确认请求有没有到代理,再看代理有没有成功转发。

4.2 参数选择与计算:上下文窗口和超时设置

在代理层做转发的时候,有两个参数必须根据后端模型来调整:上下文窗口大小和请求超时时间。

上下文窗口方面,DeepSeek 的deepseek-chat支持 64K 上下文,而 LM Studio 里跑的本地模型可能只有 8K 或者 16K。Codex 默认可能会发送很长的 prompt,如果超过后端的限制,请求会失败。你需要在代理层做一个简单的 token 估算,超过阈值就截断。粗略的估算方法是:英文大约 4 个字符一个 token,中文大约 1.5 个字符一个 token。你可以用body.length / 3作为保守估计,超过后端限制的 80% 就截断。

超时方面,本地模型的首 token 延迟可能很高,尤其是模型刚加载的时候。默认的 HTTP 超时可能只有 30 秒,不够用。在代理层设置proxyReq.setTimeout(120000),给两分钟。如果两分钟还没响应,再报错也不迟。

还有一个容易忽略的参数是max_tokens。Codex 可能会发送一个很大的max_tokens,但后端模型可能限制单次输出最多 4096 个 token。代理层需要把这个值 clamp 到后端支持的范围,否则请求会被拒绝。

4.3 实操现场记录:一次完整的 Codex 接 DeepSeek 调试

我记录一次真实的调试过程,让你感受一下排查的思路。

目标:让 Codex 通过本地代理接上 DeepSeek,跑通一个简单的代码生成任务。

第一步,启动代理,设置TARGET_BASE_URL=https://api.deepseek.com,端口 3000。代理日志显示listening on 3000。

第二步,配置 Codex 的apiBase为http://localhost:3000/v1,apiKey填 DeepSeek 的 key,model填deepseek-chat。

第三步,运行codex,输入“写一个 Python 函数计算斐波那契数列”。Codex 开始请求,代理日志显示POST /v1/responses body_size=1024。然后代理转发到 DeepSeek,DeepSeek 返回 200,代理把响应回传给 Codex。Codex 正常输出了代码。

第四步,我故意把model改成gpt-5.6-sol,这是热词里提到的那个不支持的模型。Codex 请求代理,代理转发到 DeepSeek,DeepSeek 返回 400,错误信息是model not found。代理把 400 回传给 Codex,Codex 显示the 'gpt-5.6-sol' model is not supported when using codex with a...。这个错误信息跟热词里的一模一样,说明问题出在模型名不对,而不是代理本身有问题。

第五步,我把model改回deepseek-chat,一切恢复正常。这次调试让我确认了一件事:代理层的日志是排查问题的关键。没有日志,你只能看到 Codex 报错,不知道是代理挂了、后端挂了、还是模型名错了。

5. 常见问题与排查技巧实录

5.1 安装阶段的典型报错与解决

我把安装阶段最常见的报错整理成一张表,方便你速查。

报错信息根本原因解决办法
error installing 24.21.0: node.js v24.21.0 is not yet released版本号不存在,Node.js 没有这个版本改用setup_20.x或setup_22.x
command not found: claudenpm 全局 bin 目录不在 PATH 里配置~/.npm-global并加入 PATH
node-gyp编译失败缺少 build-essential 或 Pythonsudo apt install build-essential python3
EACCES: permission denied用 sudo 装过 npm 包,权限混乱清理/usr/lib/node_modules,改用用户目录
codex is ignoring 1 unrecognized configuration setting配置文件里有旧版本字段用codex config list对比,删掉不认识的字段

注意:在 Ubuntu 上装 Node.js,千万不要用apt install nodejs就完事。Ubuntu 仓库里的版本往往落后好几个大版本,装完 Claude Code 可能直接跑不起来。NodeSource 的源是经过验证的,跟着做就行。

5.2 代理与网络相关的排查思路

代理相关的错误,热词里最典型的就是cc switch local proxy failed while handling codex endpoint /responses。这个错误的排查顺序是这样的:

第一,确认代理进程还在跑。ps aux | grep proxy看看有没有对应的 Node 进程。如果进程没了,看代理的日志最后几行,通常是崩溃了。

第二,确认端口没被占用。lsof -i :3000看看 3000 端口是不是被别的程序占了。如果被占了,换一个端口,同时改 Codex 的apiBase。

第三,确认请求格式。Codex 的/responses端点跟/chat/completions的格式不一样。如果你的代理只处理了/chat/completions,遇到/responses就会失败。解决办法是在代理里同时处理这两个端点,或者把/responses的请求转换成/chat/completions的格式再转发。

第四,确认后端支持。有些第三方 API 只支持/chat/completions,不支持/responses。这时候你必须在代理层做转换,不能直接透传。

5.3 登录与权限问题的处理

codex登录不上和your organization has disabled claude subscription access for claude code这两个问题,本质上不是技术问题,是账号和权限问题。

Codex 登录不上,先检查网络能不能访问 OpenAI 的认证端点。如果网络没问题,再看 API Key 有没有过期。API Key 过期的话,去后台重新生成一个。

组织权限问题,通常是因为你的账号被管理员限制了。这种情况下,换个人账号,或者让管理员在后台把你的账号加到允许列表里。如果是公司统一采购的订阅,可能需要用公司邮箱登录,而不是个人邮箱。

还有一个热词是codex破甲,这个词在社区里指的是一些绕过限制的技巧。我不建议在这上面花太多时间,因为这类技巧往往不稳定,而且可能违反服务条款。把精力放在正常配置上,收益更长远。

5.4 本地模型接入的独家避坑技巧

接 LM Studio 本地模型的时候,我踩过几个坑,分享给你。

第一个坑是模型加载慢。LM Studio 启动后,模型不是立刻就能用的,需要等它加载完。如果你在模型还没加载完的时候就发请求,会收到连接拒绝或者超时。解决办法是在代理层加一个重试逻辑,或者手动确认 LM Studio 的界面显示模型已就绪。

第二个坑是上下文长度不匹配。本地模型的上下文窗口通常比云端小,Codex 发过去的 prompt 如果太长,LM Studio 会直接报错。你需要在代理层做截断,或者调小 Codex 的max_tokens。

第三个坑是并发请求。LM Studio 默认可能只处理一个请求,如果你同时开多个 Codex 会话,请求会排队甚至失败。解决办法是在 LM Studio 的设置里调大并发数,或者在代理层做请求队列。

第四个坑是模型名称映射。LM Studio 里的模型名称可能跟 Codex 期望的不一样。你需要在代理层把 Codex 发来的模型名映射成 LM Studio 里实际的模型名。这个映射关系最好写在一个配置文件里,方便修改。

6. 我个人的经验体会与后续扩展

这套 openrig 方案我用了大概三个月,最大的感受是:环境标准化比工具本身更重要。Claude Code 和 Codex 的版本更新很快,今天能用的配置明天可能就变了。但只要你把 Node.js 版本、tmux 会话、代理层这三样东西固定下来,工具怎么更新你都能快速适配。

我现在的做法是,把整个 openrig 环境写成一个setup.sh脚本,放在 Git 仓库里。换一台新机器,跑一遍脚本,十分钟就能恢复完整环境。脚本里包括 Node.js 安装、npm 全局目录配置、Claude Code 和 Codex 安装、tmux 配置、代理脚本部署。这样即使机器重装,我也不用重新回忆每一步怎么操作。

后续我打算把代理层做得更完善一些,加上请求缓存和用量统计。缓存可以减少重复请求,用量统计可以让我知道每个模型花了多少 token。这两个功能对控制成本很有帮助,尤其是用第三方 API 的时候。

如果你也在折腾这套工具链,我的建议是先从最小可用环境开始:Node.js 20 + Claude Code + tmux。跑通之后再逐步加 Codex、加代理、加本地模型。不要一上来就追求全功能,那样很容易在某个环节卡住然后放弃。一步一步来,每跑通一个环节就记录下来,慢慢你就有一套自己的 openrig 了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询