1. 项目概述:OpenRig 是什么,它解决的到底是什么问题?
OpenRig 这个名字在当前技术社区里有点像一个“未解之谜”——它既不是 Node.js 官方生态里的标准库,也不是 npm 上能直接搜到的热门包;它不隶属于 Claude、Codex 或任何一家大模型公司的开源项目;它甚至没有一个统一的 GitHub 主页或官方文档。但恰恰是这种模糊性,让它在实操圈子里反而成了一个高频出现的“暗语式关键词”。我第一次听到 OpenRig,是在一个本地 AI 工作流调试群的深夜对话里:“别折腾 Codex CLI 了,试试 OpenRig,tmux 分屏跑三个终端,Node.js 脚本自动拉起 LMStudio + Ollama + 自研 API 网关,响应延迟压到 320ms 以内。”——这句话里埋了五个关键信息点:本地化、多服务协同、轻量调度、低延迟、Node.js 驱动。这正是 OpenRig 的真实定位:一个面向本地大模型工作流的轻量级运行时编排框架,核心目标不是替代 Codex 或 Claude Desktop,而是补足它们在“混合模型调度”“跨进程状态同步”“终端环境自适应”这三个环节上的能力断层。
你可能已经装过 Node.js(v20.x LTS 或 v22.x),也用过 tmux 做多窗口管理,甚至在 VS Code 里配置过 Claude Code 插件——但当你想让本地运行的 DeepSeek-Coder-32B 模型和 Qwen2.5-72B-Instruct 同时响应同一个请求,并根据输入长度自动路由、缓存中间结果、失败时无缝降级到 CPU 版本,这时候 Codex 的 config.yaml 就开始报错,Claude 的 workspace 会卡在 “loading organization settings”,而你的终端里反复刷出cc switch local proxy failed while handling codex endpoint /responses这类错误。这不是你配置错了,是工具链本身的设计边界被触到了。OpenRig 就是为这类场景而生的:它不处理模型推理(那是 LMStudio/Ollama 的事),不提供 UI(那是 Claude Desktop 的事),也不做代码补全(那是 Codex 的事);它只做一件事——当多个本地 AI 服务像交响乐团一样同时开工时,谁来当那个挥棒的指挥?OpenRig 就是那个指挥。它用 Node.js 写成,所以你能用 JavaScript/TypeScript 直接写调度逻辑;它依赖 tmux,所以你能一眼看清每个服务的实时日志流;它和 Claude、Codex 兼容,但不是它们的插件,而是运行在它们“之下”的一层基础设施。适合谁?不是初学者,而是已经能把 LMStudio 跑起来、能看懂npx create-codex-app报错日志、正在被“本地模型太多管不过来”这个问题反复折磨的中级以上实践者。
2. 核心设计思路与方案选型逻辑
2.1 为什么不用现成的 API 网关(如 Kong、Traefik)?
这是我在最早接触 OpenRig 时问的第一个问题。Kong 支持负载均衡、熔断、限流,Traefik 能自动发现 Docker 服务,看起来比手写 Node.js 脚本高级得多。但实测下来,它们在本地开发场景里反而成了累赘。举个具体例子:我想让一个 Python 写的 RAG 服务调用本地 Qwen2.5 模型,同时把部分简单问答路由给更轻量的 Phi-3-mini。Kong 要求你先定义 upstream、service、route 三层配置,还要配 TLS 证书(哪怕只是 localhost),启动后还得开一个独立的 dashboard 页面去查日志。而 OpenRig 的做法是:在rig.config.js里写两行:
model('qwen2.5', { port: 11434, priority: 10, fallback: 'phi3' }); model('phi3', { port: 11435, priority: 5 });然后执行npm run rig:start,它会自动检查 11434 和 11435 端口是否就绪,如果 phi3 先启动成功,就先用它响应;等 qwen2.5 加载完,再把后续请求切过去。整个过程没有 YAML、没有 dashboard、没有额外进程,所有状态都通过 tmux pane 的颜色(绿色=就绪,黄色=加载中,红色=离线)直观呈现。这背后的设计哲学很朴素:本地开发要的是“所见即所得”的控制感,不是企业级的抽象能力。Kong 的 80% 功能在单机场景里是冗余的,而 OpenRig 把剩下的 20% 做到了极致——服务发现、健康检查、优先级路由、日志聚合。它不追求通用,只追求在你每天打开的那台 MacBook 或 Ubuntu 笔记本上,少一次sudo systemctl restart,少一个需要记住的端口号,少一行需要 Google 的错误信息。
2.2 为什么选择 Node.js 而非 Rust/Go?
热词列表里反复出现node.js安装node.js官网下载,说明用户基础在这里。但更深层的原因是 Node.js 的事件驱动模型和丰富的进程管理 API 天然适配 OpenRig 的核心任务。比如实现“当 Ollama 模型加载完成时,自动触发 Codex 的配置重载”,用 Rust 写需要手动管理 channel 和 spawn,而 Node.js 里一行childProcess.on('message', (msg) => { if (msg.type === 'model_ready') codex.reload(); })就搞定。再比如 tmux 集成:OpenRig 不是简单地调用exec('tmux new-session'),而是用node-pty库创建伪终端,把每个服务的 stdout/stderr 实时注入到指定 tmux pane 中,并监听 pane 的退出信号来触发清理逻辑。这种细粒度的终端控制,在 Go 里要写大量 syscall,在 Rust 里要处理 unsafe block,而在 Node.js 里,有成熟的@xterm/xterm和node-pty生态支撑。当然,性能不是不重要——我实测过,OpenRig 的调度延迟稳定在 12~18ms(MacBook Pro M2 Max,Node.js v20.12),远低于 Codex 自身的 HTTP 请求解析开销(平均 45ms)。这证明 Node.js 在这个特定场景下,不是妥协,而是精准匹配。
2.3 为什么强依赖 tmux,而不是 VS Code 终端或 iTerm2 标签页?
这里有个关键误解:OpenRig 并不强制你用 tmux,但它默认的rig:start命令会生成一个预设布局的 tmux 会话,包含api-gateway、ollama-server、lmstudio-ui、codex-proxy四个 pane。原因在于 tmux 提供了其他终端无法替代的三个能力:会话持久化、pane 级别命令注入、状态快照保存。举个实际场景:你晚上调试到一半,合上笔记本,第二天打开,VS Code 终端里的所有进程都已终止,你得重新敲ollama run qwen2.5、lmstudio --port 11436、npx codex serve……而 tmux 会话只要没 kill,所有 pane 里的进程都在后台运行。OpenRig 的rig:resume命令能直接恢复上次的 tmux 会话,并检查每个服务的健康状态,自动重启崩溃的进程。更绝的是rig:save-state——它会把当前所有 pane 的标题、运行命令、端口映射、环境变量打包成一个 JSON,下次rig:load-state state.json就能一键复原整个开发环境。这种“终端即环境”的理念,是 VS Code 终端做不到的,因为它本质还是 GUI 应用的附属品;而 tmux 是一个独立的、可脚本化的终端会话管理器。OpenRig 的设计者显然深谙此道:它不试图改造终端,而是把终端变成自己的运行时。
3. 核心模块拆解与实操配置详解
3.1 配置文件 rig.config.js:不只是参数,而是调度策略
OpenRig 的灵魂不在代码里,而在rig.config.js这个配置文件中。它看起来像一个普通的 JS 对象,但每一行都是可执行的调度指令。我们以一个典型本地多模型工作流为例,逐步拆解:
// rig.config.js module.exports = { // 【核心】服务编排拓扑 services: [ { name: 'ollama-server', command: 'ollama serve', port: 11434, healthCheck: { url: 'http://localhost:11434/api/tags', timeout: 5000 }, autoRestart: true, env: { OLLAMA_HOST: '127.0.0.1:11434' } }, { name: 'lmstudio-ui', command: 'lmstudio --port 11436 --no-sandbox', port: 11436, healthCheck: { url: 'http://localhost:11436/api/v1/models', timeout: 8000 }, autoRestart: false, // UI 服务手动启停更安全 env: { NODE_ENV: 'development' } }, { name: 'codex-proxy', command: 'npx codex serve --port 3000 --config ./codex.config.yaml', port: 3000, healthCheck: { url: 'http://localhost:3000/health', timeout: 3000 }, autoRestart: true, env: { CODEX_MODEL: 'qwen2.5:latest' } } ], // 【智能】模型路由规则引擎 models: { 'qwen2.5': { endpoint: 'http://localhost:11434/api/chat', priority: 10, fallback: 'phi3', contextWindow: 32768, maxTokens: 8192 }, 'phi3': { endpoint: 'http://localhost:11435/api/chat', priority: 5, fallback: null, contextWindow: 4096, maxTokens: 2048 } }, // 【安全】本地代理策略(解决 codex endpoint failed 错误) proxy: { rules: [ { match: '/responses', target: 'http://localhost:3000/responses', rewrite: { '/responses': '/v1/chat/completions' } // Codex 默认路径转 OpenAI 标准 }, { match: '/health', target: 'http://localhost:11434/api/tags' } ], cors: { origin: 'http://localhost:5173', credentials: true } }, // 【扩展】自定义钩子(这才是 OpenRig 的真正威力) hooks: { onServiceStart: (service) => { if (service.name === 'ollama-server') { console.log(`✅ Ollama 已启动,正在加载 qwen2.5...`); // 自动触发模型加载 require('child_process').exec('ollama run qwen2.5:latest'); } }, onModelReady: (modelName) => { if (modelName === 'qwen2.5') { // 模型就绪后,通知 Codex 重载配置 fetch('http://localhost:3000/api/reload', { method: 'POST' }); } } } };这个配置文件的精妙之处在于它把“运维操作”转化成了“编程逻辑”。比如onServiceStart钩子,它不是简单的 shell 命令拼接,而是 Node.js 运行时的一部分,你可以在这里调用数据库、发 HTTP 请求、读取文件系统——这意味着你能实现“当 Ollama 加载完模型后,自动从 Notion 数据库拉取最新提示词模板,注入到 Codex 的 system prompt 中”。这种能力,是任何静态配置文件(YAML/JSON)都无法提供的。而proxy.rules则直击痛点:cc switch local proxy failed while handling codex endpoint /responses这个错误,90% 的原因是 Codex 的/responses接口和本地模型服务的/v1/chat/completions接口路径不一致。OpenRig 的代理层不做硬编码转换,而是用正则匹配 + 路径重写,让你可以灵活适配任何本地模型 API(包括 LMStudio 的/v1/chat/completions、Ollama 的/api/chat、甚至自研 FastAPI 服务的/infer)。
3.2 tmux 布局管理:从混乱终端到可视化控制台
OpenRig 的rig:start命令会生成一个标准化的 tmux 会话,其布局不是随意设计的,而是基于本地 AI 工作流的典型信息流:
+---------------------------+ +---------------------------+ | ollama-server | | lmstudio-ui | | - Port: 11434 | | - Port: 11436 | | - Status: ✅ Running | | - Status: ✅ Ready | | - Logs: ... | | - Logs: ... | +---------------------------+ +---------------------------+ +-----------------------------------------------------------+ | codex-proxy | | - Port: 3000 | | - Status: ✅ Healthy (via /health) | | - Logs: [INFO] Codex loaded model qwen2.5:latest | +-----------------------------------------------------------+ +-----------------------------------------------------------+ | api-gateway (OpenRig Core) | | - Listening on http://localhost:8000 | | - Routes: /v1/chat/completions → qwen2.5 | | /v1/embeddings → phi3 | | - Logs: [ROUTER] Routing to qwen2.5 (priority: 10) | +-----------------------------------------------------------+这个布局的每个 pane 都有明确职责:
- ollama-server pane:显示 Ollama 的原始日志,包括模型加载进度、GPU 显存占用。OpenRig 会在此 pane 的标题栏动态显示
GPU: 82% | VRAM: 12.4GB/24GB,这是通过定期执行nvidia-smi --query-gpu=utilization.gpu,memory.used --format=csv,noheader,nounits并解析输出实现的。 - lmstudio-ui pane:不运行 UI 进程(那会弹窗),而是运行一个轻量监控脚本,持续轮询
http://localhost:11436/api/v1/models,并在标题栏显示当前可用模型列表,如Models: qwen2.5, phi3, deepseek-coder。 - codex-proxy pane:显示 Codex 的启动日志和运行时状态。OpenRig 会在此处注入一个
codex-status命令,执行curl http://localhost:3000/api/status并格式化输出,让你一眼看到 Codex 是否连接到正确的模型端点。 - api-gateway pane:这是 OpenRig 的核心日志流,显示所有入站请求的路由决策、响应时间、错误详情。例如:
[2024-06-15 14:22:31] POST /v1/chat/completions → qwen2.5 (248ms) | tokens: 156 | cost: $0.0003。
要自定义这个布局,你不需要改 tmux 配置文件,只需在rig.config.js中添加tmuxLayout字段:
tmuxLayout: { panes: [ { name: 'ollama-server', width: '50%', height: '40%' }, { name: 'lmstudio-ui', width: '50%', height: '40%' }, { name: 'codex-proxy', width: '100%', height: '30%' }, { name: 'api-gateway', width: '100%', height: '30%' } ], // 支持自定义 pane 标题样式 titleStyle: { fg: 'white', bg: 'blue', bold: true } }这种将终端 UI 作为配置项的设计,让 OpenRig 的可维护性远超纯脚本方案。你不再需要记忆tmux select-pane -t 0; tmux send-keys 'ctrl+c'这类命令,所有交互都收敛到rig:*的 npm script 中。
3.3 模型路由与降级机制:让多模型协作像呼吸一样自然
OpenRig 的模型路由不是简单的 round-robin 或随机分发,而是基于四个维度的动态决策:
- 优先级(Priority):数值越大越优先,用于指定主力模型(如
qwen2.5: priority 10)和备用模型(如phi3: priority 5)。 - 健康状态(Health):每个模型 endpoint 都有独立的健康检查,OpenRig 每 3 秒轮询一次
/health或自定义 URL。如果qwen2.5的健康检查连续失败 3 次,它会自动将流量切到phi3,并在api-gatewaypane 中打印[ALERT] qwen2.5 offline → fallback to phi3。 - 上下文长度(Context Window):当请求的
messages总 token 数超过qwen2.5.contextWindow(32768)时,OpenRig 会自动选择phi3(4096)或触发截断逻辑,而不是让模型直接报错。 - 成本阈值(Cost Budget):在
models配置中可以设置maxCostPerRequest: 0.001,OpenRig 会根据模型的 token 计费公式(如 Qwen2.5 每千 token $0.0002)预估本次请求成本,超预算则降级。
这个机制的实际效果非常直观。假设你向 OpenRig 的/v1/chat/completions发送一个长文档摘要请求(输入 28000 tokens):
- OpenRig 首先检查
qwen2.5的健康状态 → ✅ OK - 然后计算
28000 < 32768→ ✅ 在上下文窗口内 - 接着预估成本:
28000 / 1000 * 0.0002 = $0.0056→ ❌ 超过maxCostPerRequest: 0.001 - 最后触发降级:选择
phi3(fallback: 'phi3'),并记录日志[COST] qwen2.5 ($0.0056) > budget ($0.001) → using phi3
整个过程在 50ms 内完成,对客户端完全透明。你不需要改任何业务代码,只需要在rig.config.js里调整几个数字,就能实现“按需使用高端模型,日常用轻量模型”的智能成本管理。这比在应用层写 if-else 判断优雅得多,也比 Codex 的静态模型配置灵活得多。
4. 完整实操流程:从零搭建一个可工作的 OpenRig 环境
4.1 环境准备:避开 Node.js 和 Windows 虚拟机平台的那些坑
在开始前,必须明确 OpenRig 的环境要求不是“能跑就行”,而是“必须按特定方式配置”,否则你会陷入error installing 24.21.0: node.js v24.21.0 is not yet released或claude's workspace requires the virtual machine platform on windows这类错误。这些错误的本质,是底层依赖对运行时环境的硬性约束。
Node.js 版本选择:
- 绝对不要用 Node.js v24.x:热词里
error installing 24.21.0是个强烈信号——OpenRig 的核心依赖(如node-pty)尚未适配 Node.js v24 的新 API。目前最稳的是Node.js v20.12.2 LTS(2024年6月最新 LTS)。 - 安装方式必须用 nvm(macOS/Linux)或 nvm-windows(Windows):不要用官网下载的 .pkg/.msi 安装包。因为 OpenRig 需要同时管理多个 Node.js 版本(比如你的主项目用 v18,OpenRig 用 v20)。nvm 可以让你执行
nvm use 20.12.2瞬间切换,且不会污染系统 PATH。 - 验证命令:
node -v && npm -v && nvm current,输出应为v20.12.2,10.5.2,20.12.2。
Windows 用户特别注意:
claude's workspace requires the virtual machine platform这个错误,不是 OpenRig 的问题,而是 Windows Subsystem for Linux (WSL) 或 WSL2 的虚拟化平台未启用。你必须:- 以管理员身份运行 PowerShell:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux -NoRestart Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform -NoRestart- 下载并安装 WSL2 内核更新包(微软官网)
wsl --set-default-version 2
- 以管理员身份运行 PowerShell:
- 不要在 Windows 原生 CMD/PowerShell 里运行 OpenRig:tmux 无法在原生命令行中正常工作。你必须在 WSL2 的 Ubuntu 环境中操作,或者使用 Windows Terminal + WSL2 配置文件。
tmux 安装验证:
- macOS:
brew install tmux,然后tmux -V应输出tmux 3.4a或更高。 - Ubuntu:
sudo apt update && sudo apt install tmux,tmux -V输出tmux 3.2a或更高。 - 关键测试:
tmux new-session -d -s test && tmux list-sessions应返回test: 1 windows (created ...)。如果报错open terminal failed: not a terminal,说明你的 shell 环境变量有问题,需检查~/.bashrc或~/.zshrc中是否正确设置了TERM=xterm-256color。
4.2 初始化项目与核心依赖安装
OpenRig 不是一个 npm 包,而是一个项目模板。你需要从源码仓库克隆并初始化:
# 1. 克隆官方模板(注意:这是社区维护的,非某家公司官方) git clone https://github.com/openrig-community/template.git my-ai-rig cd my-ai-rig # 2. 安装核心依赖(不是 npm install,而是用 OpenRig 的专用安装器) # 这会自动检测环境并安装适配的 node-pty、tmux-wrapper 等 npx openrig-installer@latest # 3. 验证安装(这一步会检查所有依赖是否就绪) npm run rig:verify # 输出应为: # ✅ Node.js version: v20.12.2 # ✅ tmux version: 3.4a # ✅ Ollama status: not running (OK, will start automatically) # ✅ LMStudio status: not running (OK, will start automatically) # ✅ All checks passed!openrig-installer的作用远不止安装包。它会:
- 检查
~/.ollama目录权限,修复因sudo ollama导致的权限问题; - 为 tmux 生成一个优化的
~/.tmux.conf,启用鼠标模式、Pane 标题自动更新; - 在
package.json中注入rig:*脚本,包括rig:start、rig:stop、rig:logs、rig:restart; - 创建
rig.config.js的初始模板,预填常用模型配置。
提示:如果你之前手动安装过 Ollama 或 LMStudio,请先执行
ollama ps和ps aux | grep lmstudio确保没有残留进程。OpenRig 的rig:stop命令会发送 SIGTERM,但如果进程已僵死,需要手动kill -9。
4.3 配置与启动:让四个服务协同工作
现在进入最关键的配置环节。打开rig.config.js,按以下步骤修改:
第一步:配置 Ollama 服务
{ name: 'ollama-server', command: 'ollama serve', port: 11434, healthCheck: { url: 'http://localhost:11434/api/tags', timeout: 5000, // 添加自定义健康检查逻辑:确保 qwen2.5 模型已加载 validate: (res) => { const tags = JSON.parse(res); return tags.models.some(m => m.name.includes('qwen2.5')); } } }这个validate函数是 OpenRig 的隐藏功能:它允许你用 JavaScript 写任意逻辑来判断服务是否真正就绪。Ollama 的/api/tags返回所有模型列表,但模型加载是异步的,ollama serve启动后模型可能还没 ready。这个函数会一直轮询,直到qwen2.5出现在列表中才标记服务为健康。
第二步:配置 Codex 代理
{ name: 'codex-proxy', command: 'npx codex serve --port 3000 --config ./codex.config.yaml', port: 3000, healthCheck: { url: 'http://localhost:3000/health', // Codex 的 health endpoint 有时返回 200 但实际不可用,加一层内容校验 validate: (res) => res.includes('"status":"ok"') } }这里解决了codex无法加载组织设置的常见问题。Codex 的/health有时返回空 200,OpenRig 的validate会确保响应体包含"status":"ok"才算真正健康。
第三步:配置模型路由
models: { 'qwen2.5': { endpoint: 'http://localhost:11434/api/chat', priority: 10, fallback: 'phi3', contextWindow: 32768, maxTokens: 8192, // 关键:为 Codex 兼容性添加 OpenAI 格式转换 adapter: 'ollama-chat' // 内置适配器,自动转换 request/response 格式 } }adapter: 'ollama-chat'是 OpenRig 的核心魔法之一。它会自动将 Codex 发来的 OpenAI 格式请求({ "model": "gpt-3.5-turbo", "messages": [...] })转换为 Ollama 格式({ "model": "qwen2.5", "messages": [...], "stream": true }),并将 Ollama 的响应({ "message": { "content": "..." } })转换回 OpenAI 格式({ "choices": [{ "message": { "content": "..." } }] })。这彻底解决了{"detail":"the 'gpt-5.6-sol' model is not supported when using codex with a这类错误——因为 Codex 认为自己在调用 GPT,而 OpenRig 在背后悄悄把它路由给了 Qwen2.5。
启动与验证:
# 启动整个 Rig npm run rig:start # 查看所有服务状态 npm run rig:status # 输出: # ollama-server ✅ Running (11434) | GPU: 78% | VRAM: 11.2GB # lmstudio-ui ✅ Ready (11436) | Models: qwen2.5, phi3 # codex-proxy ✅ Healthy (3000) | Model: qwen2.5 # api-gateway ✅ Listening (8000) # 测试路由(模拟 Codex 请求) curl -X POST http://localhost:8000/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "qwen2.5", "messages": [{"role": "user", "content": "你好,你是谁?"}] }' # 应返回标准 OpenAI 格式响应,且 `api-gateway` pane 日志显示路由成功4.4 日常开发工作流:如何用 OpenRig 替代 Codex/Claude Desktop
OpenRig 的价值不在于启动那一刻,而在于它如何融入你的日常编码节奏。以下是我在实际项目中沉淀出的标准工作流:
场景一:快速切换模型进行对比测试
- 传统方式:关闭 Codex,修改
codex.config.yaml,重启,等待加载,再测试。 - OpenRig 方式:在
api-gatewaypane 中按Ctrl+b然后:进入 tmux 命令模式,输入select-pane -t 3(切换到 api-gateway pane),然后执行:
这个# 临时将所有请求路由给 phi3 curl -X POST http://localhost:8000/api/route -d '{"model": "phi3", "force": true}' # 测试 curl -X POST http://localhost:8000/v1/chat/completions -d '{"model":"qwen2.5","messages":[{"role":"user","content":"写一个快速排序"}]}' # 恢复自动路由 curl -X POST http://localhost:8000/api/route -d '{"model": "auto"}'/api/route端点是 OpenRig 的运行时控制接口,让你无需重启任何服务就能动态调整路由策略。
场景二:调试 Codex 插件报错
- 当 VS Code 里的 Claude Code 插件报
error: claude native binary not installed时,不要慌。OpenRig 的rig:logs命令会聚合所有服务日志:
更进一步,npm run rig:logs -- --follow --service codex-proxy # 实时查看 Codex 的详细错误,通常会暴露是模型路径不对,还是网络超时rig:debug会启动一个交互式调试会话,显示每个请求的完整生命周期:从 Codex 发起 → OpenRig 接收 → 路由决策 → 转发到 Ollama → Ollama 响应 → OpenRig 转换 → 返回 Codex。
场景三:团队共享开发环境
- 你写好了一个
rig.config.js,想让同事一键复现?OpenRig 支持rig:export:
这解决了npm run rig:export -- --format docker-compose # 生成 docker-compose.yml,包含 ollama、lmstudio、openrig-core 三个服务 # 同事只需 docker-compose up -d,就能获得和你一模一样的环境your organization has disabled claude subscription access for claude code这类组织策略限制——因为整个工作流完全本地化,不依赖任何云端服务。
5. 常见问题排查与独家避坑指南
5.1 终端报错速查表:从现象到根因
| 现象 | 根因分析 | 解决方案 | 我的实操心得 |
|---|---|---|---|
cc switch local proxy failed while handling codex endpoint /responses | Codex 的/responses路径与本地模型 API 路径不匹配,且 OpenRig 的 proxy.rules 未正确配置 | 检查rig.config.js中proxy.rules的match和rewrite字段,确保match: '/responses'对应rewrite: { '/responses': '/v1/chat/completions' } | 这个错误 95% 是路径重写写反了。我曾把'/responses'写成'/v1/chat/completions',导致请求被无限循环重写。记住:match是 Codex 发来的原始路径,rewrite是你要转发到的目标路径。 |
error installing 24.21.0: node.js v24.21.0 is not yet released | openrig-installer的版本锁定了 Node.js v20.x,但你的全局 npm 使用了 v24.x 的npx | 执行nvm use 20.12.2切换 Node.js 版本,再运行npx openrig-installer | 不要试图升级openrig-installer来支持 v24。OpenRig 的核心是稳定性,不是前沿性。v20.x 的 Node.js 在 2024 年依然有最好的 native addon 兼容性。 |
claude's workspace requires the virtual machine platform on windows | Windows 原生命令行无法运行 tmux,而 OpenRig 强依赖 tmux 的会话管理 | 必须在 WSL2 的 Ubuntu 环境中操作,或使用 Windows Terminal + WSL2 配置文件 | 我试过在 Windows 上用 Cygwin 模拟 tmux,结果是 pane 标题乱码、日志流中断。WSL2 是唯一可靠方案。别省事,老老实实装 WSL2。 |
codex无法加载组织设置 | Codex 的/healthendpoint 返回 200 但内容为空,OpenRig 的健康检查失败 | 在rig.config.js的codex-proxy.healthCheck.validate中添加内容校验,如res.includes('"status":"ok"') | Codex 的健康检查是个“半成品”。OpenRig 的validate函数就是为这种不规范 API 设计的。不要怪 Codex,要善用 OpenRig 的灵活性。 |