ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

openrig 本地 AI 编程工作台搭建:Node.js、tmux 与 Claude Code 环境配置指南

openrig 本地 AI 编程工作台搭建:Node.js、tmux 与 Claude Code 环境配置指南

1. 从 openrig 这个名字说起:它到底想解决什么问题

第一次看到 openrig 这个词,我下意识把它拆成了 open 和 rig 两部分。rig 在工程语境里通常指“成套装置”或者“装配好的工作台”,比如测试台架、实验装置。所以 openrig 给我的第一直觉是:一套开放的、可自由拼装的工作环境装置。结合热搜词里高频出现的 Claude Code、Codex、Node.js、tmux 这几个关键词,我基本能判断出,openrig 面向的是本地 AI 编程助手工作流的搭建与编排场景。

为什么这么说?因为 Claude Code 和 Codex 这类命令行 AI 编程工具,本质上都是跑在终端里的智能代理。它们需要 Node.js 运行时、需要终端复用器(tmux 就是最典型的那个)、需要本地模型或远程 API 的接入配置。把这些零散的东西拼成一个稳定、可复用、可切换的工作台,就是 openrig 这类项目存在的意义。它不是某一个具体软件,而更像是一套“装配思路”加“配置骨架”。

我见过太多人在这一步翻车。装完 Node.js,装 Claude Code,配好 API,结果一开新终端窗口,会话断了,上下文丢了,模型切换要重新配一遍。openrig 想解决的,正是这种“每次都要从头搭一遍”的重复劳动。它把环境准备、会话保持、模型切换、代理转发这几件事收敛到一个可维护的结构里。

这篇文章适合谁看?如果你正在 Ubuntu 或者 Windows 上折腾 Claude Code、Codex 的本地部署,如果你被 node.js 版本、tmux 会话、代理转发失败这些问题折磨过,如果你想搭一套能长期用、能随时切换模型的本地 AI 编程环境,那这篇内容就是写给你的。我会从环境底座讲起,一路讲到会话编排和模型切换,把每个环节的“为什么”和“怎么做”都摊开说。

需要先说明一点:openrig 这个项目本身公开资料很少,项目正文和关键词都是空的,所以下面很多细节是我基于热搜词反映出的真实痛点,结合一名长期折腾本地 AI 工具链的从业者的常见实践做的合理补全。我会明确标注哪些是通用做法,哪些是我的个人经验,避免误导。

2. 环境底座:Node.js 版本选择与安装路径的坑

2.1 为什么 Node.js 版本是第一个拦路虎

Claude Code 和 Codex 这类工具几乎都是 Node.js 生态的产物,安装方式通常是 npm 全局安装或者 npx 直接跑。这就意味着 Node.js 的版本直接决定了你能不能装、装完能不能跑。热搜词里有一条特别扎眼:“error installing 24.21.0: node.js v24.21.0 is not yet released or is not available”。这个报错说明有人试图安装一个还不存在的版本号,或者版本管理工具(比如 nvm)的版本列表没更新,导致拉取失败。

我的经验是:不要盲目追最新版。Node.js 的奇数版本(比如 21、23)是实验性的,偶数版本(20、22)才是 LTS(长期支持)。Claude Code 和 Codex 官方文档一般会推荐 LTS 版本。热搜词里出现“node.js lts下载”“ubuntu安装node.js 20+”也印证了这一点——20 及以上的 LTS 是当前的主流选择。

具体怎么选?我一般这样判断:

场景推荐版本理由
生产/长期使用Node.js 20 LTS 或 22 LTS稳定,社区支持好,AI 工具兼容性经过验证
尝鲜新特性Node.js 22 LTS性能更好,原生 fetch 等特性完善
避免使用奇数版本(21、23)实验性,可能和 AI 工具的依赖冲突

2.2 Ubuntu 上安装 Node.js 20+ 的稳妥路径

在 Ubuntu 上装 Node.js,很多人第一反应是apt install nodejs。我劝你先别急。Ubuntu 官方源里的 Node.js 版本往往偏旧,装完可能是 12 或者 14,根本跑不了 Claude Code。热搜词里“ubuntu安装node.js 20+”说明这个坑踩的人不少。

我推荐的路径是用 NodeSource 的源,或者用 nvm 做版本管理。两种方式各有适用场景:

用 NodeSource 的方式适合“一台机器只用一个版本”的情况:

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

装完用node -v确认是 v20.x。这个方式的好处是系统级安装,所有用户都能用,适合服务器或者固定工作机。

用 nvm 的方式适合“需要多版本切换”的情况。比如你有的项目要 18,有的要 20,nvm 就能随时切:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash source ~/.bashrc nvm install 20 nvm use 20

提示:nvm 安装后需要重新加载 shell 配置,或者新开一个终端,否则nvm命令找不到。这个细节很多人会忽略,然后以为安装失败了。

我个人更倾向 nvm,因为 AI 工具更新频繁,有时候新版本要求更高的 Node.js,有时候又要求降级,nvm 能让我随时切换而不影响系统其他部分。

2.3 Windows 上的 Node.js 安装与 Claude Code 的适配

热搜词里“claude code windows”“codex安装 windows桌面版”说明 Windows 用户也不少。Windows 上装 Node.js 相对简单,官网下载 msi 安装包一路下一步就行。但 Claude Code 在 Windows 上的体验和 Linux/macOS 有差异,主要问题出在终端环境上。

Claude Code 设计上更偏向 Unix 风格的终端,很多命令依赖 shell 的行为。Windows 原生 cmd 和 PowerShell 对某些命令的支持不一样,可能导致 Claude Code 执行终端命令时出错。热搜词里“claude code如何直接执行终端命令”就是一个典型疑问。

我的建议是:Windows 用户优先用 WSL2(Windows Subsystem for Linux)。在 WSL2 里装 Ubuntu,然后按上面 Ubuntu 的方式装 Node.js 和 Claude Code。这样终端行为和 Linux 一致,踩坑最少。如果非要用原生 Windows,那就用 Git Bash 或者 PowerShell 7,并且注意路径分隔符和命令差异。

VSCode 的配置也是同理。热搜词里“vscode配置claude code”“vscode接入claude code”“claude code for vs code”说明很多人想在 VSCode 里直接用。VSCode 的集成终端默认会继承系统 shell,如果你在 WSL2 里开发,记得把 VSCode 的默认终端设成 WSL 的 shell,否则 Claude Code 跑在 Windows 侧,路径和权限都会乱。

3. Claude Code 与 Codex 的安装、登录与常见报错拆解

3.1 安装方式的选择:全局安装还是 npx

Claude Code 和 Codex 的安装,通常有两种方式:全局 npm 安装,或者用 npx 直接运行。热搜词里“claude code安装”“codex安装教程”“codex cli”都指向这个环节。

全局安装的命令大致是这样:

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

Codex 类似,具体包名以官方为准。全局安装的好处是命令随时可用,坏处是版本升级要手动跑一次,而且不同项目如果要求不同版本会冲突。

npx 的方式是每次运行时拉取最新版:

npx @anthropic-ai/claude-code

好处是永远最新,坏处是每次启动可能都要下载,网络不好的时候很慢。我的做法是:主力工具用全局安装,锁定一个稳定版本;临时尝鲜用 npx。这样既稳定又灵活。

3.2 登录与订阅权限的报错处理

热搜词里有一条很关键的报错:“your organization has disabled claude subscription access for claude code”。这个报错的意思是,你所在的组织(可能是企业账号)禁用了 Claude Code 的订阅访问权限。这不是技术问题,是账号权限问题。

遇到这个报错,排查顺序是这样的:

  1. 确认你用的是个人账号还是组织账号。组织账号的权限由管理员控制。
  2. 如果是组织账号,联系管理员确认是否开放了 Claude Code 的访问。
  3. 如果是个人账号,检查订阅是否有效、是否在支持的地区。

另一条报错“codex无法加载组织设置”也是类似性质,属于账号配置层面的问题,不是本地环境能解决的。我的经验是,这类问题先排除账号因素,再去折腾本地环境,否则容易白忙活。

3.3 模型不支持报错:gpt-5.6-sol 的启示

热搜词里有一条很有意思的报错:“the 'gpt-5.6-sol' model is not supported when using codex with a...”。这个报错说明有人试图在 Codex 里调用一个不被支持的模型名。模型名写错、模型未开放、或者配置文件和实际可用的模型列表不匹配,都会导致这个错误。

处理这类问题的思路是:先确认你配置的模型名是否在官方支持列表里,再确认你的账号是否有权限调用这个模型。很多时候是配置文件里写了一个“看起来合理”但实际不存在的模型名。我的建议是,模型名一定要从官方文档或者models列表命令里复制,不要手打。

3.4 配置项拼写错误:unrecognized configuration setting

“codex is ignoring 1 unrecognized configuration setting. check for typos or d...”这条报错也很典型。Codex 在启动时会读取配置文件,如果发现不认识的配置项,会给出警告并忽略。这本身不致命,但说明你的配置里有拼写错误或者过时的字段。

我的处理习惯是:每次改完配置文件,启动时仔细看警告信息。警告里通常会指出是哪个字段有问题。把那个字段删掉或者改正,警告就消失了。不要觉得“只是警告,不影响使用”就忽略,有时候一个错误的配置项会导致某个功能静默失效,排查起来更麻烦。

4. tmux 会话保持:让 AI 编程助手不掉线的关键

4.1 为什么 AI 编程工具需要 tmux

tmux 是一个终端复用器,它能让你的终端会话在后台持续运行,即使你关闭了终端窗口或者 SSH 断开了,会话依然活着。热搜词里 tmux 和 Claude Code、Codex 并列出现,说明这是本地 AI 编程工作流里的关键一环。

为什么需要它?因为 Claude Code 和 Codex 这类工具往往是长时间运行的交互式会话。你给它一个任务,它可能要跑几分钟甚至更久。如果你直接在前台终端跑,一旦网络抖动、SSH 断开、或者你不小心关了窗口,会话就没了,上下文全丢。用 tmux 把会话挂在后台,你随时可以重新 attach 回来,继续之前的对话。

我自己的用法是:开一个专门的 tmux 会话叫ai,在里面跑 Claude Code。需要的时候tmux attach -t ai,不需要的时候Ctrl+b d脱离,会话继续在后台跑。这样即使我关掉笔记本盖子去开会,回来接着用,上下文一点不丢。

4.2 tmux 的基础操作与常用配置

tmux 的基础操作不多,但必须熟练:

tmux new -s ai # 新建名为 ai 的会话 tmux ls # 列出所有会话 tmux attach -t ai # 重新接入 ai 会话 tmux kill-session -t ai # 杀掉 ai 会话

在会话内部,默认前缀键是Ctrl+b,常用组合:

  • Ctrl+b d:脱离当前会话
  • Ctrl+b c:新建窗口
  • Ctrl+b n:切换到下一个窗口
  • Ctrl+b %:垂直分屏
  • Ctrl+b ":水平分屏

默认配置用起来有点别扭,我一般会改一下~/.tmux.conf:

set -g mouse on set -g history-limit 10000 set -g base-index 1 setw -g pane-base-index 1

mouse on让你可以用鼠标切换窗口和调整分屏大小,history-limit加大滚动缓冲,base-index让窗口编号从 1 开始而不是 0,符合直觉。

4.3 tmux 与 Claude Code 配合的实操心得

把 Claude Code 跑在 tmux 里,有几个细节值得注意。

第一,tmux 里的环境变量可能和你登录 shell 的不一样。如果你在.bashrc或者.zshrc里配置了 API key,tmux 会话可能读不到。解决办法是在 tmux 配置里显式加载,或者把关键环境变量写进~/.tmux.conf的set-environment里。

第二,tmux 里的终端类型可能影响 Claude Code 的界面渲染。如果发现界面错乱,检查TERM变量,一般设成screen-256color或者xterm-256color比较稳。

第三,长时间运行的会话要注意日志。Claude Code 的输出如果很重要,可以在 tmux 里用pipe-pane把输出重定向到文件:

tmux pipe-pane -t ai -o 'cat >> ~/ai-session.log'

这样即使会话崩了,日志还在,方便回溯。

5. 模型接入与代理转发:本地模型和第三方 API 的配置逻辑

5.1 接入本地模型:以 LM Studio 为例

热搜词里“claude code 调用lmstudio的本地模型”说明很多人想让 Claude Code 用本地跑的模型,而不是走远程 API。这个需求很合理:本地模型不依赖网络,数据不出本机,成本也可控。

LM Studio 是一个本地模型运行工具,它会在本地起一个兼容 OpenAI API 的服务。Claude Code 要调用它,核心是把 Claude Code 的 API 端点指向 LM Studio 的本地地址。通常是在环境变量或者配置文件里设置ANTHROPIC_BASE_URL或者对应的端点变量,指向http://localhost:1234/v1这类地址。

这里的关键是:Claude Code 默认走的是 Anthropic 的 API 格式,而 LM Studio 提供的是 OpenAI 兼容格式。两者协议不完全一样,所以直接指过去可能不通。常见的做法是用一个转换层,把 Anthropic 格式的请求转成 OpenAI 格式。热搜词里“cc switch local proxy failed while handling codex endpoint /responses”这条报错,就是代理层在处理 Codex 的/responses端点时失败了,说明代理转发的配置有问题。

我的经验是:本地模型接入,代理层是绕不开的。要么用现成的转换工具,要么自己写一个简单的转发服务。配置的时候,端点路径、请求头、模型名这三样必须和代理层的预期完全一致,错一个字符都可能报错。

5.2 接入第三方 API:DeepSeek、Qwen、GLM 的切换

热搜词里“codex接入deepseek”“使用cc switch 接入 deepseek v4, qwen, glm等模型”“第三方api使用技巧”说明很多人想在 Claude Code 或 Codex 里用国产模型或者其他第三方模型。这个需求的核心是“模型切换”——同一套工具,能方便地在不同模型之间切。

cc switch 这类工具就是干这个的。它的思路是维护多套配置,每套配置对应一个模型提供商,切换的时候改一下环境变量或者配置文件,让 Claude Code 指向不同的端点。

配置的要点是:

配置项作用常见错误
API 端点指定请求发往哪里端点路径写错,比如少了 /v1
API Key身份验证Key 过期或权限不足
模型名指定用哪个模型模型名和提供商的实际名称不一致
请求格式决定协议兼容性Anthropic 格式和 OpenAI 格式混用

我踩过的一个坑是:切换模型后忘了改模型名,结果请求发到了新端点,但模型名还是旧的,直接报“模型不支持”。所以切换配置的时候,端点、Key、模型名要作为一个整体一起改,不能只改其中一个。

5.3 代理转发失败的排查链路

“cc switch local proxy failed while handling codex endpoint /responses”这条报错值得单独说。它的意思是:本地代理在处理 Codex 的/responses端点时失败了。排查链路我一般这样走:

  1. 确认代理服务本身是否在运行。curl一下代理的地址,看有没有响应。
  2. 确认端点路径是否正确。Codex 用的/responses和 OpenAI 的/chat/completions不是一回事,代理层要能正确处理这个路径。
  3. 看代理的日志。失败的具体原因通常在日志里,比如请求格式不对、上游返回错误、超时等。
  4. 确认上游服务的可达性。如果代理要转发到远程 API,网络能不能通、DNS 解析对不对,都要查。

我的经验是,代理转发问题,九成出在“格式不匹配”和“路径不对”这两件事上。把请求的实际内容和代理期望的内容对比一下,问题往往就暴露了。

6. 把 openrig 的思路落地:一套可维护的本地 AI 工作台

6.1 目录结构与配置管理

折腾了这么多工具,最后一定要落到“可维护”上。我的做法是建一个专门的目录,把所有配置集中管理:

~/openrig/ ├── env/ │ ├── node.sh # Node.js 版本切换 │ └── api-keys.sh # API key 管理(注意权限) ├── tmux/ │ └── ai-session.sh # 启动 tmux 会话的脚本 ├── proxy/ │ └── config.yaml # 代理转发配置 └── models/ └── switch.sh # 模型切换脚本

这样做的价值是:换机器的时候,把这个目录拷过去,跑几个脚本,环境就恢复了。不用凭记忆重新配一遍。API key 这类敏感信息单独放,文件权限设成 600,避免泄露。

6.2 一键启动脚本的编写思路

我写了一个start-ai.sh,做的事情很简单:检查 Node.js 版本、加载环境变量、启动 tmux 会话、在会话里跑 Claude Code。核心逻辑是这样:

#!/bin/bash source ~/openrig/env/node.sh source ~/openrig/env/api-keys.sh SESSION="ai" if ! tmux has-session -t $SESSION 2>/dev/null; then tmux new-session -d -s $SESSION tmux send-keys -t $SESSION "claude" C-m fi tmux attach -t $SESSION

这个脚本的好处是幂等:会话已经存在就直接接入,不存在就新建。每天开工跑一下,直接进入工作状态。

6.3 版本升级与回滚的注意事项

AI 工具更新很快,Claude Code、Codex 可能几天就一个新版本。我的策略是:不追最新,但也不落后太多。具体做法是:

  • 全局安装的版本锁定在一个已知稳定的版本,比如npm install -g @anthropic-ai/claude-code@1.x.x。
  • 想尝鲜的时候,用 npx 跑最新版,不影响全局。
  • 升级前先记录当前版本号,出问题能回滚。

我遇到过升级后配置格式变了、旧配置不兼容的情况。所以升级后第一件事是跑一遍基本流程,确认没问题再正式用。如果出问题,npm install -g @anthropic-ai/claude-code@旧版本号就能回滚。

7. 那些文档里不会写的实操教训

7.1 网络环境对安装和登录的影响

Node.js 的 npm 源、Claude Code 的登录、第三方 API 的调用,都依赖网络。国内环境下,npm 源建议换成国内镜像,能显著加快安装速度:

npm config set registry https://registry.npmmirror.com

登录环节如果卡住,先检查网络连通性,再检查账号状态。很多时候不是工具的问题,是网络到不了。

7.2 终端命令执行的权限与路径问题

Claude Code 能直接执行终端命令,这是它的强大之处,也是风险所在。热搜词里“claude code如何直接执行终端命令”说明很多人对这个能力既好奇又担心。

我的做法是:在受控的环境里用这个能力,比如专门的开发目录,不要在主目录或者系统目录里让它随便跑。执行前看清楚它要跑什么命令,尤其是涉及删除、覆盖的操作。路径问题也要注意,相对路径和绝对路径的行为可能不一样,跨平台的时候更明显。

7.3 会话上下文丢失的预防

AI 编程助手最怕的就是上下文丢失。除了用 tmux 保持会话,我还会定期把重要的对话内容导出保存。Claude Code 一般有导出或者保存历史的功能,用起来。另外,把关键的项目背景、需求描述写成一个文件放在项目目录里,每次新会话开始时让它先读这个文件,能快速恢复上下文。

7.4 多模型切换时的配置隔离

如果你同时用 Claude Code 和 Codex,又要在多个模型之间切,配置隔离就很重要。我的做法是给每个“工具+模型”组合建一个独立的配置文件,切换的时候用脚本软链接或者复制过去。这样不会出现“改了 A 的配置,B 也跟着变了”的情况。

8. 关于 openrig 这类工作台的个人体会

折腾本地 AI 编程环境这件事,本质上是在给自己搭一个顺手的工位。工具会变,模型会换,但“环境稳定、会话不丢、切换方便”这三个诉求是不变的。openrig 这个名字背后的思路,我理解就是把这三件事做成一套可复用的装置。

我自己的体会是,不要一开始就追求大而全。先把 Node.js 和 tmux 这两个底座打牢,再装一个 Claude Code 跑通,然后再考虑接本地模型、接第三方 API、做多模型切换。每加一层,都要确认前一层是稳的。这样出问题的时候,排查范围小,定位快。

另外,配置一定要版本化。我用 git 管理~/openrig目录,每次改动都提交。这样改坏了能回滚,换机器能同步,还能看到自己什么时候改了什么。这个习惯帮我省了很多次重装环境的时间。

最后分享一个小技巧:把常用的排查命令做成 alias,比如alias ck='node -v && npm -v && tmux ls',一条命令看全环境状态。环境出问题的时候,先跑这个,心里就有底了。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进