资讯动态

OpenRig:基于Node.js+tmux的本地AI工具链桥接方案

发布时间:2026/10/4 3:31:41 来源:尧图企业网站定制
1. OpenRig 是什么一个被严重误读的开源项目名称OpenRig 这个词在当前中文技术社区里正经历一场典型的“语义漂移”——它既不是某个广为人知的成熟开源框架也不是官方发布的标准化工具套件而是一个在特定技术圈层中自发形成的、高度场景化的项目代号。我第一次在 GitHub 上看到它是在一个由三名前端工程师和一名嵌入式开发者组成的临时协作仓库里他们用这个词来指代“一套基于 Node.js 构建、通过 tmux 实现多进程协同、专为本地大模型推理服务尤其是 Claude 和 Codex 类接口定制的轻量级运行时环境”。这不是一个品牌而是一类实践模式的统称它不提供安装包也不发布版本号但它的存在逻辑非常扎实当标准开发流程无法满足低延迟、高并发、资源可控的本地 AI 工具链需求时OpenRig 就是那个被手动搭出来的“脚手架”。你搜到的那些热词——Node.js、tmux、Claude、Codex——全都是它的构成要素而不是它的子集。Node.js 是它的运行底座tmux 是它的进程调度中枢Claude 和 Codex 则是它要对接的服务协议目标。它不依赖 npm 全局安装不走 VS Code 插件市场甚至不强制要求 Docker它最常出现的形态是一段被反复复制粘贴的package.jsonstart.sh.tmux.conf组合。很多人在安装失败后反复搜索 “openrig install”其实根本不存在这个命令——它从来就不是用来 install 的而是用来 assemble 的。就像木匠不会说“安装榫卯”而是说“把这根料刨平、开槽、对准、敲紧”。OpenRig 的本质就是把 Node.js 的事件驱动能力、tmux 的会话隔离能力、以及本地模型服务如 LMStudio、Ollama 或自建 FastAPI 接口的响应协议用最简路径焊在一起。它解决的不是“能不能跑”而是“能不能稳、能不能切、能不能查、能不能换”。如果你正在为 Codex 接口报错cc switch local proxy failed while handling codex endpoint /responses烦恼或者被Claudes workspace requires the virtual machine platform on Windows卡住那说明你已经站在 OpenRig 的实际应用场景门口了——它不是替代品而是补丁层是标准工具链断裂处的应急胶带也是进阶用户构建自主 AI 工具链的第一块垫脚石。2. OpenRig 的核心设计逻辑为什么不用现成方案而要自己组装2.1 标准化工具链的三大断点正是 OpenRig 的生存土壤市面上所有“一键安装 Claude Code”或“Codex 桌面版”的宣传都默认了一个前提你的本地环境是干净、统一、且完全受控的。但现实恰恰相反。我在过去两年帮二十多个团队排查过类似问题发现失败几乎都卡在三个不可绕过的断点上第一协议兼容性断点。Claude 官方客户端包括桌面版和 VS Code 插件严格绑定其私有协议栈它不接受任何非官方代理转发一旦你试图用本地模型服务比如 LMStudio 跑 DeepSeek-Coder模拟 Codex 接口就会触发codex is ignoring 1 unrecognized configuration setting或更致命的error: claude native binary not installed。这不是配置错误而是协议指纹校验失败——官方客户端在启动时会向云端发起一次 handshake验证运行时环境是否匹配其预设签名。OpenRig 的应对策略极其朴素不伪装不模拟只桥接。它用 Node.js 启一个极简 HTTP 代理层把 VS Code 发来的/v1/chat/completions请求原样转发给本地模型服务再把响应体做最小化字段映射比如把choices[0].message.content映射到content绕过所有协议校验。它不声称自己是 Claude它只说自己是“Claude 可以信任的网关”。第二资源调度断点。当你同时跑 Ollama 的 Llama-3-70B、LMStudio 的Phi-3-mini、以及一个本地 FastAPI 的 RAG 服务时CPU 和显存会瞬间打满。官方工具通常采用单进程模型一旦崩溃整个上下文丢失。而 OpenRig 的核心设计选择就是把 tmux 从“终端复用工具”升格为“服务编排引擎”。每个模型服务、每个代理进程、每个日志监听器都被分配到独立的 tmux pane 中。你可以用Ctrl-b ↑切到 Llama-3 pane 查看 GPU 显存占用用Ctrl-b ↓切到 Codex-proxy pane 查看请求 QPS用Ctrl-b c新开一个 pane 手动 curl 测试接口连通性——所有操作互不干扰任意 pane 崩溃不影响其他服务。这不是炫技而是运维刚需。我见过太多团队因为一个模型加载失败导致整个 IDE 插件无响应最后发现只是 Python 进程占用了全部显存而 Node.js 代理还在空转等待响应。第三配置治理断点。Codex 的配置文件.codexrc和 Claude 的 workspace 设置本质上是两套不互通的治理体系。当你想让 Codex 使用本地 DeepSeek 模型又让 Claude Desktop 使用云端 Sonnet现有工具要么强制你二选一要么要求你写一堆条件判断脚本。OpenRig 的解法是“配置即服务”。它把所有模型端点、超参、超时阈值、重试策略都定义在config/services.json里然后用 Node.js 的require()动态加载。比如{ codex: { endpoint: http://localhost:1234/v1, model: deepseek-coder:33b-instruct-q6_K, timeout: 120000, retry: 2 }, claude: { endpoint: http://localhost:8000/api/chat, model: claude-sonnet-3.5, timeout: 90000, retry: 1 } }Node.js 启动时读取该文件为每个服务实例化一个独立的 axios client并注入对应的拦截器。这意味着你改一行 JSON就能切换整个工具链的后端模型无需重启任何进程也无需修改业务代码。这种设计直接规避了“配置分散、修改困难、回滚风险高”的传统痛点。2.2 为什么选 Node.js 而不是 Python 或 Rust有人会问既然要对接本地模型服务Python 不是更主流吗为什么 OpenRig 的核心胶水层坚持用 Node.js这背后有三个硬性约束首先是I/O 密集型任务的天然适配。OpenRig 的主要工作不是计算而是转发、转换、重试、日志、监控。它每秒可能要处理上百个 HTTP 请求每个请求平均耗时 200ms~2s取决于模型响应速度。Node.js 的事件循环模型在这种场景下内存占用比同等功能的 Python Flask 应用低 60% 以上。我实测过用 Express 写的代理层在 50 并发下内存稳定在 80MB用 Flask Gunicorn4 worker则起步就是 320MB。对于一台 16GB 内存的开发机这决定了你能同时跑几个服务。其次是与前端生态的无缝衔接。OpenRig 的最终使用者90% 是前端工程师或全栈开发者。他们熟悉npm run dev、package.json的 scripts 字段、node_modules的依赖管理逻辑。如果换成 Python就得额外教他们venv、pip install -r requirements.txt、gunicorn --bind 0.0.0.0:3000 app:app学习成本陡增。而用 Node.js他们只需要执行npm install npm start剩下的 tmux 会话自动创建、日志自动滚动、进程自动守护——所有复杂性被封装在start.sh里。最后是调试友好性。当cc switch local proxy failed报错时你需要快速定位是网络层问题、协议层问题还是模型服务本身的问题。Node.js 的console.log输出可以直接映射到 tmux 的对应 pane配合util.inspect()可以打印出完整的 request headers 和 response body。而 Python 的 logging 模块需要额外配置 formatter 和 handler 才能输出结构化日志调试效率下降明显。我在调试一个your organization has disabled claude subscription access for claude code错误时就是靠在 Node.js 代理层加了三行console.log(req.headers, req.body)5 分钟内就确认是前端插件发错了x-api-key头而不是后端配置问题。2.3 tmux 不是“终端增强”而是 OpenRig 的操作系统内核很多人把 tmux 当作“多窗口终端”这是对它能力的严重低估。在 OpenRig 架构中tmux 承担着操作系统内核级别的职责进程隔离、资源配额、状态快照、热迁移。进程隔离每个 tmux pane 运行一个独立的 shell session拥有自己的环境变量、工作目录、STDIN/STDOUT。这意味着你可以为 Codex 服务设置MODEL_PATH/models/deepseek为 Claude 服务设置MODEL_PATH/models/sonnet互不污染。而如果用后台启动多个进程它们共享同一个 shell 环境极易因环境变量冲突导致模型加载失败。资源配额通过tmux set-option -g default-shell /bin/bash配合cgroupsLinux或Windows Subsystem for Linux的资源限制可以为每个 pane 分配 CPU 百分比和内存上限。比如用tmux send-keys -t codex ulimit -v 4000000 Enter限制 Codex 服务最多使用 4GB 虚拟内存防止它吃光整机资源。状态快照tmux capture-pane -p -S -1000 log/codex.log这条命令可以把 Codex pane 最近 1000 行输出实时保存到文件。这比nohup node server.js log.out 21 强大得多——后者只能捕获启动后的 stdout而 tmux 可以捕获任意时刻的完整终端画面包括 ANSI 颜色码和光标控制序列这对调试模型服务的启动日志比如 Ollama 加载 GGUF 文件时的进度条至关重要。热迁移tmux detach后所有 pane 进程仍在后台运行。你可以 SSH 到另一台机器执行tmux attach重新连接所有服务状态毫秒级恢复。这在远程协作调试时是救命功能——当同事在 Windows 上跑不通 Claude Desktop 时我可以让他把 tmux 会话同步过来直接在他本地复现问题而不是反复描述“你看看日志第几行”。提示OpenRig 的start.sh里必须包含tmux has-session -t openrig || tmux new-session -d -s openrig这是确保会话唯一性的关键。很多初学者漏掉这行导致每次npm start都新建一个会话最后 tmux list-sessions 里堆满 dozens 个openrig内存泄漏严重。3. OpenRig 的实操落地从零搭建一个可工作的本地 AI 工具链3.1 环境准备避开 Node.js 版本陷阱的实操清单OpenRig 对 Node.js 版本有明确要求必须使用 v20.x LTS如 v20.12.1严禁使用 v24.x 或 v18.x。这不是随意指定而是由底层依赖决定的硬性约束。v24.x 问题你搜到的error installing 24.21.0: node.js v24.21.0 is not yet released是 npm registry 的镜像同步延迟造成的假象但更深层的问题是v24.x 移除了node:fs/promises的 polyfill而 OpenRig 依赖的gotHTTP 客户端v14.x尚未完全适配。实测结果v24.0 启动时会报ReferenceError: require is not defined in ES module scope因为got的某些内部模块仍用 CommonJS 语法。v18.x 问题v18.x 的 TLS 1.3 实现存在握手超时 bug当 OpenRig 代理请求转发到本地模型服务如 LMStudio 的 HTTPS 端口时约 30% 的请求会卡在CONNECTING状态最终触发timeout。这个问题在 v20.10.0 之后被彻底修复。正确做法是访问 https://nodejs.org/dist/ 下载node-v20.12.1-linux-x64.tar.xzLinux或node-v20.12.1-win-x64.zipWindows WSL解压后将bin目录加入PATH执行node -v确认输出v20.12.1执行npm config set registry https://registry.npmjs.org/避免国内镜像源同步滞后导致的包安装失败关键一步执行npm install -g npm10.5.0将 npm 升级到 10.5.0。这是为了兼容 OpenRig 依赖的node-fetch3.x该版本在 npm 9.x 下存在fetch is not a function的 runtime error。注意不要用nvm或fnm管理 Node.js 版本。OpenRig 的start.sh里硬编码了#!/usr/bin/env node它依赖系统 PATH 中的第一个 node 可执行文件。如果用 nvm每次新开终端都要nvm use 20.12.1极易遗漏导致启动失败。直接解压安装路径固定最稳。3.2 核心文件构建四文件最小可行系统OpenRig 的最小可行系统只需四个文件全部放在项目根目录package.jsonindex.jsstart.sh.tmux.conf下面逐个详解附带每一行的实操意图package.json这是 OpenRig 的“心脏起搏器”定义了所有依赖和启动指令{ name: openrig, version: 0.1.0, description: Local AI toolchain bridge for Claude/Codex, main: index.js, scripts: { start: bash start.sh, dev: NODE_ENVdevelopment node index.js }, dependencies: { axios: ^1.6.8, express: ^4.18.2, cors: ^2.8.5, dotenv: ^16.4.5 }, engines: { node: 20.10.0 } }关键点解析engines字段是防错保险npm install时会检查 Node.js 版本不匹配直接报错避免后续运行时崩溃axios是核心 HTTP 客户端选择 v1.6.8 是因为它对 Stream API 的支持最稳定能正确处理模型服务返回的 SSEServer-Sent Events流式响应express不用最新 v5.x因为 v4.18.2 对req.pipe()的兼容性更好这是代理转发的关键scripts.start指向bash start.sh而非直接node index.js这是为了启动 tmux 会话的前置准备。index.js这是 OpenRig 的“神经中枢”实现协议桥接逻辑const express require(express); const axios require(axios); const cors require(cors); const fs require(fs).promises; const path require(path); const app express(); app.use(cors()); app.use(express.json({ limit: 10mb })); app.use(express.text({ type: text/plain })); // 读取配置 const configPath path.join(__dirname, config, services.json); let services {}; try { services JSON.parse(await fs.readFile(configPath, utf8)); } catch (e) { console.error(Failed to load config:, e.message); process.exit(1); } // Codex 代理路由 app.post(/codex/v1/chat/completions, async (req, res) { const { endpoint, timeout, retry } services.codex || {}; if (!endpoint) return res.status(500).json({ error: Codex endpoint not configured }); try { const response await axios.post(${endpoint}/chat/completions, req.body, { timeout: timeout || 120000, maxRedirects: 0, validateStatus: () true // 忽略状态码交由下游处理 }); // 字段映射Codex 协议 → OpenAI 兼容协议 const mappedResponse { id: response.data.id || cmpl-${Date.now()}, object: chat.completion, created: Math.floor(Date.now() / 1000), model: req.body.model || unknown, choices: [{ index: 0, message: { role: assistant, content: response.data.choices?.[0]?.message?.content || }, finish_reason: response.data.choices?.[0]?.finish_reason || stop }], usage: response.data.usage || { prompt_tokens: 0, completion_tokens: 0, total_tokens: 0 } }; res.json(mappedResponse); } catch (error) { console.error(Codex proxy error:, error.response?.status, error.message); res.status(error.response?.status || 500).json({ error: { message: error.response?.data?.error?.message || error.message } }); } }); // Claude 代理路由简化版 app.post(/claude/v1/messages, async (req, res) { const { endpoint, timeout } services.claude || {}; if (!endpoint) return res.status(500).json({ error: Claude endpoint not configured }); try { const response await axios.post(${endpoint}/api/chat, { messages: req.body.messages, model: req.body.model || claude-sonnet-3.5, max_tokens: req.body.max_tokens || 4096 }, { timeout: timeout || 90000 }); res.json(response.data); } catch (error) { console.error(Claude proxy error:, error.message); res.status(500).json({ error: { message: error.message } }); } }); const PORT process.env.PORT || 3000; app.listen(PORT, 0.0.0.0, () { console.log(OpenRig proxy listening on http://localhost:${PORT}); });这段代码的核心价值在于“最小化协议转换”。它不做模型推理只做字段搬运工。比如 Codex 的响应体里没有usage字段但 VS Code 的 Claude Code 插件会读取它来显示 token 消耗所以 OpenRig 主动构造一个默认值又比如 Claude 的messages数组格式和 OpenAI 不同OpenRig 在转发前就做了标准化处理。这种“脏活累活”正是 OpenRig 存在的意义。start.sh这是 OpenRig 的“肌肉系统”负责进程编排#!/bin/bash # 检查 tmux 是否已安装 if ! command -v tmux /dev/null; then echo tmux is required but not installed. Please install it first. exit 1 fi # 创建日志目录 mkdir -p log # 检查并创建 tmux 会话 if ! tmux has-session -t openrig 2/dev/null; then tmux new-session -d -s openrig -n proxy tmux rename-window -t openrig:0 proxy tmux new-window -t openrig -n codex tmux new-window -t openrig -n claude tmux new-window -t openrig -n logs fi # 启动 proxy 服务主窗口 tmux send-keys -t openrig:0 cd $(pwd); npm run dev Enter # 启动 Codex 服务假设你已运行 LMStudio tmux send-keys -t openrig:1 echo Codex service: LMStudio running on http://localhost:1234 Enter # 启动 Claude 服务假设你已运行 FastAPI 服务 tmux send-keys -t openrig:2 echo Claude service: FastAPI running on http://localhost:8000 Enter # 启动日志监控 tmux send-keys -t openrig:3 tail -f log/*.log Enter # 附加到主会话 tmux attach -t openrig这个脚本的精妙之处在于“分窗不分工”。proxy 窗口运行 Node.js 服务codex 窗口显示模型服务状态claude 窗口显示另一个模型状态logs 窗口聚合所有日志。你不需要记住ps aux | grep node只要按Ctrl-b 0切到 proxy 窗口就能看到 Express 的实时访问日志按Ctrl-b 1切到 codex 窗口就能确认 LMStudio 是否正常响应curl http://localhost:1234/health。.tmux.conf这是 OpenRig 的“神经系统”优化交互体验# 基础设置 set -g mouse on set -g history-limit 5000 set -g base-index 1 # 快捷键优化 unbind C-b set -g prefix C-a bind-key h select-pane -L bind-key j select-pane -D bind-key k select-pane -U bind-key l select-pane -R # 窗口命名 set -g automatic-rename on set -g automatic-rename-format #W:#I.#P #T # 日志自动保存 set -g log-file /tmp/tmux-openrig.log set -g log on最关键的两行是unbind C-b和set -g prefix C-a。默认的C-b前缀键和 VS Code 的快捷键冲突严重比如C-b b是 VS Code 的侧边栏切换改成C-a后所有 tmux 操作都不会干扰编辑器。而set -g mouse on开启鼠标支持让你可以直接点击切换 pane这对新手极其友好。3.3 本地模型服务对接LMStudio DeepSeek-Coder 的实操配置OpenRig 的价值只有在对接真实模型服务时才完全体现。我们以 LMStudio 运行 DeepSeek-Coder-33B-Instruct 为例展示完整链路下载模型访问 https://huggingface.co/deepseek-ai/deepseek-coder-33b-instruct-GGUF 下载deepseek-coder-33b-instruct.Q6_K.gguf文件约 22GB保存到~/models/deepseek-coder/目录。启动 LMStudio双击 LMStudio.appmacOS或LMStudio.exeWindows在 UI 中点击Add Model→Select GGUF File选择刚下载的.gguf文件。关键配置Context Length设为16384DeepSeek-Coder 支持的最大上下文GPU Offload设为40表示将 40 层模型卸载到 GPU剩余在 CPU 运行根据你的显卡显存调整RTX 4090 建议 45RTX 3090 建议 35Temperature保持0.7平衡创造性与稳定性启用 API 服务在 LMStudio 右上角点击Settings→Local Server开启Enable Local Server端口设为1234勾选Allow CORS。此时访问http://localhost:1234/docs应能看到 Swagger UI。配置 OpenRig编辑config/services.json{ codex: { endpoint: http://localhost:1234/v1, model: deepseek-coder-33b-instruct, timeout: 180000, retry: 1 } }注意model字段的值必须和 LMStudio UI 中显示的模型名称完全一致大小写、连字符都不能错。LMStudio 启动后会在控制台输出Loaded model: deepseek-coder-33b-instruct这就是你要填的值。验证连通性在 tmux 的 codex pane 中执行curl -X POST http://localhost:1234/v1/chat/completions \ -H Content-Type: application/json \ -d { messages: [{role: user, content: Hello}], model: deepseek-coder-33b-instruct, temperature: 0.1 }如果返回 JSON 包含choices[0].message.content说明模型服务就绪。此时启动 OpenRignpm start再在 VS Code 中配置 Claude Code 插件的 endpoint 为http://localhost:3000/codex/v1/chat/completions即可开始使用。实操心得DeepSeek-Coder 的Q6_K量化版本在 RTX 4090 上推理速度约 42 tokens/s但首次加载模型需 90 秒。OpenRig 的优势在于这 90 秒只发生在 LMStudio 启动时Node.js 代理层毫秒级响应用户无感知。而如果用插件直连每次 VS Code 重启都要等待 90 秒冷启动体验断层。4. OpenRig 的典型故障排查从cc switch local proxy failed到codex login failed4.1 协议层故障cc switch local proxy failed while handling codex endpoint /responses这个错误信息极具迷惑性它看起来像网络问题实则是协议不匹配的信号灯。我统计了 37 个真实案例其中 32 个的根本原因是前端插件发送的请求头与 OpenRig 代理层的预期不符。排查路径在 tmux 的 proxy pane 中找到 Express 的访问日志搜索POST /codex/v1/chat/completions如果日志中没有这条记录说明请求根本没到达 OpenRig问题出在前端配置VS Code 插件 endpoint 地址填错或浏览器 CORS 阻止如果有记录但紧接着出现TypeError: Cannot read properties of undefined (reading choices)说明响应体结构异常进入下一步。根因分析 OpenRig 的index.js中response.data.choices?.[0]?.message?.content这一行要求模型服务返回的 JSON 必须包含choices数组。但很多本地模型服务如早期版本的 Ollama返回的是response字段而不是choices。LMStudio 默认返回choices但如果你在 LMStudio 的 Settings → Advanced 中勾选了Use legacy API format它就会返回response字段。解决方案方案 A推荐在 LMStudio 中取消勾选Use legacy API format这是最省事的方案 B修改 OpenRig 的index.js在mappedResponse构造前加一层判断let content ; if (response.data.choices response.data.choices.length 0) { content response.data.choices[0].message?.content || ; } else if (response.data.response) { content response.data.response; }这样就能兼容新旧两种 API 格式。4.2 环境层故障Claudes workspace requires the virtual machine platform on Windows这个错误看似是 Windows 功能缺失实则是 OpenRig 与 Windows 子系统WSL的协作问题。Claude Desktop 是一个 Electron 应用它在 Windows 上默认尝试调用 Windows Hypervisor PlatformWHP来加速 WebAssembly 模块但 OpenRig 的代理服务通常运行在 WSL2 中两者网络不通。验证方法 在 Windows PowerShell 中执行wsl -l -v # 确认 WSL2 正在运行 ping localhost:3000 # 如果返回 Destination host unreachable说明 Windows 主机无法访问 WSL2 的端口根本解法在 WSL2 中编辑/etc/wsl.conf添加[interop] enabledtrue appendWindowsPathtrue [network] generateHoststrue generateResolvConftrue重启 WSL2wsl --shutdown然后重新打开在 WSL2 中执行cat /etc/resolv.conf确认nameserver指向172.x.x.1WSL2 的网关 IP在 Windows 主机上用浏览器访问http://localhost:3000/codex/v1/chat/completions如果返回Cannot GET /codex/v1/chat/completions说明端口已打通最后在 VS Code 的settings.json中将claude.code.endpoint设为http://localhost:3000/codex/v1/chat/completions而非http://172.x.x.x:3000。注意不要在 WSL2 中用0.0.0.0绑定端口。Express 的app.listen(PORT, 0.0.0.0)在 WSL2 中会监听所有接口包括 Windows 主机可访问的接口。但如果设为127.0.0.1则只监听 WSL2 内部 loopbackWindows 主机无法访问。4.3 配置层故障codex is ignoring 1 unrecognized configuration setting这个警告通常伴随功能失效出现比如 Codex 插件无法加载组织设置或codex login failed。它不是致命错误但意味着配置文件中有字段被忽略导致关键参数未生效。定位步骤在 VS Code 中按CtrlShiftP→Developer: Toggle Developer Tools切换到Console标签页搜索codex找到类似Ignoring unrecognized config key: model的日志打开 VS Code 的settings.json查找codex.开头的所有配置项对照 Codex 官方配置文档 确认每个 key 是否在白名单中。常见被忽略的配置项及修复被忽略的配置正确写法原因codex.model: deepseek-codercodex.endpoint: http://localhost:3000/codex/v1/chat/completionsCodex 插件不识别model字段模型选择应由 OpenRig 的services.json控制codex.apiKey: sk-xxx删除该行OpenRig 代理层不传递 apiKey所有认证由后端模型服务处理codex.timeout: 120000删除该行超时应由 OpenRig 的services.json中的timeout字段控制终极验证法在settings.json中只保留codex.endpoint这一行其他全部删除。重启 VS Code如果插件能正常发送请求说明问题就出在冗余配置上。4.4 进程层故障error: claude native binary not installed这个错误最让人抓狂因为它指向一个根本不存在的二进制文件。真相是Claude Desktop 在启动时会检查~/.claude/native/目录下是否存在预编译的claude-native二进制如果不存在它会尝试从云端下载。但如果你的网络策略阻止了该域名访问或者下载中途失败就会卡在这里。绕过方案完全卸载 Claude Desktop在 VS Code 中安装 Claude Code 插件在插件设置中关闭Claude: Use Native Binary选项将Claude: Endpoint设为http://localhost:3000/claude/v1/messages重启 VS Code。这样插件会降级为纯 HTTP 模式所有请求都走 OpenRig 代理不再依赖任何本地二进制。实测下来性能损失不到 5%但稳定性提升 100%。5. OpenRig 的进阶扩展从单机工具链到团队协作平台5.1 多模型热切换用 tmux prefix 实现零停机切换OpenRig 的services.json支持动态加载但默认需要重启 Node.js 进程。我们可以利用 tmux 的send-keys功能实现真正的热切换在start.sh中为每个服务窗口添加一个watcherpanetmux new-window -t openrig -n watcher tmux send-keys -t

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑