ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

openrig 实战:Claude Code 与 Codex 本地环境编排指南

openrig 实战:Claude Code 与 Codex 本地环境编排指南 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把默认的前缀键从Ctrlb改成Ctrla因为Ctrlb在很多终端里跟翻页冲突。再加一行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 的全局目录到用户目录下避免每次都要 sudomkdir -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_URLhttp://localhost:3000/v1 export OPENAI_API_KEYyour-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 } } ] }这样你按CtrlShiftP输入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-essentialbuild-essential是为了编译一些 npm 原生模块不装的话后面可能报node-gyp错误。第二步安装 Node.js 20 LTScurl -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 和 Codexmkdir -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.confset -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.jsconst 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_URLhttps://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_URLhttps://api.deepseek.com端口 3000。代理日志显示listening on 3000。第二步配置 Codex 的apiBase为http://localhost:3000/v1apiKey填 DeepSeek 的 keymodel填deepseek-chat。第三步运行codex输入“写一个 Python 函数计算斐波那契数列”。Codex 开始请求代理日志显示POST /v1/responses body_size1024。然后代理转发到 DeepSeekDeepSeek 返回 200代理把响应回传给 Codex。Codex 正常输出了代码。第四步我故意把model改成gpt-5.6-sol这是热词里提到的那个不支持的模型。Codex 请求代理代理转发到 DeepSeekDeepSeek 返回 400错误信息是model not found。代理把 400 回传给 CodexCodex 显示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.xcommand not found: claudenpm 全局 bin 目录不在 PATH 里配置~/.npm-global并加入 PATHnode-gyp编译失败缺少 build-essential 或 Pythonsudo apt install build-essential python3EACCES: 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 了。
返回列表