news 2026/10/1 14:57:14

OpenRig:基于Codex CLI的本地AI命令行操作系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OpenRig:基于Codex CLI的本地AI命令行操作系统

1. OpenRig 是什么:一个被误读的开源工具链命名混淆现场

OpenRig 这个名字,在当前技术社区里正经历一场典型的“命名漂移”——它既不是官方发布的知名项目,也不是某个成熟框架的代号,而是一组围绕Codex CLI 工具链高频共现、被开发者自发拼凑出的实践组合体。我第一次在 GitLab CI 日志里看到openrig被当作环境变量前缀时,也以为是某家新创公司的 SDK;直到翻遍 npm registry、GitHub Trending 和 CNCF Landscape,才确认:OpenRig 并非一个独立可安装的软件包,而是开发者对「基于 Node.js + tmux + Codex CLI 构建本地 AI 工程化工作流」这一整套轻量级本地执行环境的口语化统称。

这个命名的源头,极大概率来自早期一批用 Codex CLI 做本地模型调度的工程师,在 tmux session 命名时习惯性打openrig-llm、openrig-codex,久而久之,openrig就成了他们内部对“可复现、可调试、可切换模型后端的本地 CLI 环境”的代称。它不提供二进制下载,没有官网文档,也不托管在 npm 上——但它真实存在于成百上千个.zshrc配置片段、tmuxinator模板和package.json的scripts字段中。

为什么这个“不存在的项目”会突然登上热搜?根本原因在于Codex CLI 的落地断层:官方提供了强大能力(模型路由、上下文管理、多后端抽象),但默认只支持云服务调用;而国内开发者迫切需要一种不依赖公网代理、不触碰敏感网络配置、纯本地可控的接入方式。于是大家开始手动拼装——用 Node.js 做胶水层,用 tmux 做进程隔离与状态保持,用 shell 脚本做环境桥接,最终形成的这套“土法炼钢”式工作流,就被叫作了 OpenRig。

提示:如果你在搜索openrig install或npm install openrig却始终失败,请立刻停止——这不是一个 npm 包。你真正要安装的是@opencode/cli(Codex 官方 CLI),并按需配置 Node.js、tmux 和本地模型运行时(如 Ollama、LM Studio 或自建 vLLM 服务)。

它解决的核心问题非常具体:让一个终端用户,在不修改系统网络设置、不安装任何浏览器插件、不配置全局代理的前提下,仅通过命令行就能完成「模型选择→上下文加载→请求发送→响应解析→结果导出」的完整 AI 工程闭环。适用人群不是算法研究员,而是前端工程师写 prompt 工程脚本、运维人员批量生成部署文档、内容编辑用 CLI 批量润色稿件——一句话:给不想开浏览器、不想点 UI、不想碰 JSON 配置文件的务实派开发者,一套能直接cd && codex run的本地 AI 操作系统。

我去年帮三家中小团队落地过类似方案,最典型的一个场景是:电商运营每天要生成 200+ 商品卖点文案,原来靠人工复制粘贴到网页版 Codex,平均耗时 47 分钟;改用 OpenRig 风格的 CLI 流程后,整个流程压缩到 92 秒,且所有中间产物(原始需求、prompt 模板、生成结果、人工校验标记)全部可审计、可版本化、可回滚。这不是炫技,而是把 AI 工具真正塞进日常开发流水线的第一步。

2. 解构 OpenRig 的三大支柱:Node.js、tmux 与 Codex CLI 的协同逻辑

OpenRig 的实际构成,并非随意堆砌,而是由三个技术组件在特定约束下形成的刚性耦合结构。它们各自承担不可替代的角色,且任一缺失都会导致整个工作流退化为“半自动脚本”。下面我将逐层拆解这三者的分工逻辑、版本适配边界和常见误配陷阱。

2.1 Node.js:不是运行时,而是胶水编排引擎

很多人误以为 Node.js 在 OpenRig 中只是用来跑 Codex CLI 的宿主环境——这是最大的认知偏差。Codex CLI 本身是用 Rust 编写的静态二进制(Windows 下为.exe,Linux/macOS 下为无依赖可执行文件),它完全不依赖 Node.js 运行。Node.js 的真实作用,是作为跨平台任务协调器,负责:

  • 动态生成 Codex CLI 的参数配置(例如根据当前目录下的codex.config.json注入--model gpt-4o-mini)
  • 处理 stdin/stdout 的流式转换(将 CSV 输入转为 Codex 支持的 JSONL 格式,或将 Codex 输出的 Markdown 自动转为 HTML 表格)
  • 实现条件分支逻辑(如if [ -f "local-model.yaml" ]; then codex --backend ollama ...; else codex --backend codex-cloud ...; fi这类 shell 无法优雅处理的嵌套判断)

我们实测过:当 Node.js 版本低于 18.17.0 时,fs.promises.readFile()在处理大于 16MB 的 prompt 模板文件时会出现内存泄漏,导致 Codex CLI 进程卡死在waiting for response状态;而 Node.js 22.12+ 引入了--max-old-space-size=8192的默认提升,恰好匹配 Codex CLI 加载大 context(>32k tokens)时的内存需求。因此,OpenRig 对 Node.js 的版本要求,本质是对 V8 引擎 GC 策略与大文件 I/O 性能的硬性依赖,而非语法兼容性问题。

注意:不要盲目升级到 Node.js 23.x。Codex CLI 官方明确声明仅验证至 Node.js 22.14.0,23.x 中fetch()API 的 AbortSignal 默认行为变更会导致部分超时重试逻辑失效。我们团队在灰度环境中发现,使用 Node.js 23.3.0 时,codex run --timeout 30s实际等待时间变为 42.7s,误差不可接受。

2.2 tmux:不是终端复用工具,而是状态持久化沙盒

tmux 在 OpenRig 中的作用,常被简化为“方便切屏”——这严重低估了它的工程价值。真正的核心能力是:为每个 Codex CLI 会话创建独立的、可恢复的、带完整环境变量继承的进程命名空间。

举个典型场景:你需要同时运行三个任务——A 任务用gpt-4o生成营销文案,B 任务用deepseek-coder补全代码,C 任务用本地qwen2.5-72b做法律条款分析。如果全在 bash 中用&后台运行,一旦终端关闭,所有进程被 SIGTERM 终止;若用nohup,则日志混杂、无法交互、环境变量丢失。而 tmux 的解决方案是:

# 创建三个命名 session,每个 session 绑定专属环境变量 tmux new-session -d -s codex-marketing 'CODER_MODEL=gpt-4o codex run --config marketing.yaml' tmux new-session -d -s codex-dev 'CODER_MODEL=deepseek-coder codex run --config dev.yaml' tmux new-session -d -s codex-law 'CODER_MODEL=qwen2.5-72b codex run --config law.yaml' # 后续可随时 attach 到任一会话查看实时输出或中断重试 tmux attach -t codex-dev

关键细节在于:tmux session 启动时会完整继承当前 shell 的PATH、HOME及所有自定义变量(如CODER_MODEL),且 session 生命周期独立于终端窗口。这意味着即使你关机重启,只要 tmux server 进程还在(Linux 默认启用),所有 session 状态就完好保存——包括正在运行的 Codex CLI 进程、其 stdout/stderr 缓冲区、以及未完成的 HTTP 连接。

我们曾在线上环境用此机制实现“零停机模型热切换”:当qwen2.5-72b服务重启时,tmux session 中的 Codex CLI 会因连接中断自动重试,而用户只需tmux attach即可看到重连成功的日志,无需重新输入命令。这种可靠性,是单纯用screen或systemd --user无法提供的——因为 tmux 的 socket 通信协议天然支持进程状态快照。

2.3 Codex CLI:不是客户端,而是模型网关抽象层

Codex CLI 的定位,必须跳出“命令行版网页”的思维。它本质上是一个模型后端协议翻译器,将统一的 CLI 参数(--model,--context,--format)翻译为不同后端的实际调用方式:

后端类型Codex CLI 实际行为OpenRig 中的典型用途
Codex Cloud发送 HTTPS 请求到https://api.codex.ai/v1/chat/completions,携带 auth token临时调用高能力模型,无需本地算力
Ollama本地 HTTP 调用http://localhost:11434/api/chat,自动匹配模型名称到 Ollama tag快速验证 prompt 效果,低成本迭代
vLLM调用http://localhost:8000/v1/chat/completions,支持 streaming 和 custom headers生产环境部署,高吞吐低延迟
LM Studio通过http://localhost:1234/v1/chat/completions调用,兼容 OpenAI 标准 APIWindows 用户友好入口,免 Docker

这个抽象层的价值,在 OpenRig 场景下被放大到极致:你只需维护一份codex.config.json,内容如下:

{ "default": { "backend": "ollama", "model": "qwen2.5:14b", "timeout": 120 }, "production": { "backend": "vllm", "model": "qwen2.5-72b", "timeout": 300, "headers": { "X-Request-ID": "prod-${DATE}" } } }

然后通过codex run --profile production切换后端,所有底层 HTTP 调用细节、认证方式、重试策略均由 Codex CLI 内置逻辑处理。OpenRig 的“可移植性”,本质就是 Codex CLI 这个抽象层的可移植性——同一份 prompt 脚本,在 Mac 上连 Ollama,在 Linux 上连 vLLM,在 Windows 上连 LM Studio,命令完全一致。

但这里埋着一个致命坑:Codex CLI 的--backend参数值必须与本地服务实际监听地址严格匹配。比如你启动 Ollama 时用了OLLAMA_HOST=0.0.0.0:11434,但 Codex CLI 默认只认localhost:11434,就会报错cc switch local proxy failed while handling codex endpoint /responses。解决方案不是改 Ollama 配置,而是用 Codex CLI 的--backend-url显式指定:

codex run --backend ollama --backend-url http://192.168.1.100:11434 --model qwen2.5:14b

这个细节,90% 的新手教程都漏掉,导致卡在“无法连接本地模型”环节长达数小时。

3. 从零构建 OpenRig 环境:四步可验证的实操路径

构建 OpenRig 不是安装一个包,而是建立一套可验证的协作契约。下面是我经过 17 个生产环境验证的标准化流程,每一步都附带可立即执行的验证命令和失败时的精准定位方法。跳过任何一步,后续都可能在codex run时遭遇难以溯源的静默失败。

3.1 环境基线校验:确认 Node.js 与 tmux 的最小可行版本

OpenRig 对基础环境的要求看似宽松,实则存在隐蔽的版本锁链。我们不推荐用nvm install --lts这类模糊指令,而应精确锁定:

# 1. 安装 Node.js 22.12.0(LTS 最新版,非 22.14.0 因其存在已知的 fs.watch 兼容问题) curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - sudo apt-get install -y nodejs=22.12.0~dfsg-1nodesource1 # 2. 验证 Node.js 版本与内存限制 node -v # 必须输出 v22.12.0 node -e "console.log(process.memoryUsage().heapTotal / 1024 / 1024)" # 应 > 250MB(证明 --max-old-space-size 生效) # 3. 安装 tmux 3.3a(Ubuntu 22.04 默认源为 3.2a,缺少重要修复) sudo apt-get install -y software-properties-common sudo add-apt-repository -y ppa:tmux/ppa sudo apt-get update sudo apt-get install -y tmux=3.3a-1~jammy # 4. 验证 tmux session 创建与分离能力 tmux new-session -d -s test 'sleep 5; echo "ok"' && \ sleep 2 && \ tmux capture-pane -p -t test | grep -q "ok" && \ tmux kill-session -t test && \ echo "✅ tmux 基础功能验证通过" || echo "❌ tmux 验证失败"

关键经验:CentOS 7.9 用户请特别注意——其默认 glibc 版本(2.17)不支持 tmux 3.3a 的epoll_pwait调用。必须先升级 glibc 至 2.28(需编译安装),否则tmux new-session会静默退出。我们曾为此在客户现场耗时 3.5 小时排查,最终发现strace -e trace=epoll_pwait tmux new-session返回epoll_pwait(3, [], 1024, NULL, NULL, 8) = -1 ENOSYS (Function not implemented)。

3.2 Codex CLI 安装与二进制完整性校验

Codex CLI 的安装极易受网络波动影响,且官方未提供 checksum 文件。我们必须用双重校验确保二进制文件未被篡改或截断:

# 1. 下载最新 Codex CLI(以 Linux x64 为例) wget https://github.com/opencode-ai/codex-cli/releases/download/v0.12.3/codex-linux-x64 -O /tmp/codex # 2. 校验文件大小(官方发布页明确标注为 12,458,720 字节) [ $(stat -c%s "/tmp/codex") -eq 12458720 ] || { echo "❌ 文件大小校验失败"; exit 1; } # 3. 校验 SHA256(从 GitHub Release 页面复制,非第三方镜像) echo "a1b2c3d4e5f6... /tmp/codex" | sha256sum -c --quiet || { echo "❌ SHA256 校验失败"; exit 1; } # 4. 设置可执行权限并全局链接 sudo chmod +x /tmp/codex sudo ln -sf /tmp/codex /usr/local/bin/codex # 5. 验证 CLI 基础能力 codex --version # 应输出 0.12.3 codex list-backends # 应列出 ollama, vllm, codex-cloud 等

注意:Windows 用户遇到node_modules\@opencode\cli\bin\opencode.exe 与你运行的 windows 版本不兼容错误,根本原因是 Codex CLI 官方 Windows 版本仅支持 Windows 10 20H1 及以上(内核版本 >= 19041)。若你的系统是 Windows Server 2016(内核 14393),必须改用 WSL2 环境运行,而非强行安装 Windows 二进制。

3.3 本地模型后端接入:Ollama 与 vLLM 的最小化配置

OpenRig 的核心价值在于本地模型调度,因此必须验证至少一个本地后端能被 Codex CLI 正确识别。我们以 Ollama 为例(因其安装最简):

# 1. 安装 Ollama(官方一键脚本) curl -fsSL https://ollama.com/install.sh | sh # 2. 拉取一个轻量模型(避免首次运行卡在下载) ollama pull qwen2.5:0.5b # 仅 1.2GB,5 秒内完成 # 3. 启动 Ollama 服务并验证端口 ollama serve & # 后台启动 sleep 3 curl -s http://localhost:11434/health | jq -r '.status' 2>/dev/null | grep -q "healthy" || { echo "❌ Ollama 服务未就绪"; exit 1; } # 4. 让 Codex CLI 识别 Ollama 后端 codex configure backend ollama --url http://localhost:11434 # 5. 执行一次最小化测试 echo '{"messages":[{"role":"user","content":"2+2="}]}' | \ codex chat --backend ollama --model qwen2.5:0.5b --format json 2>/dev/null | \ jq -r '.choices[0].message.content' | grep -q "4" && \ echo "✅ Ollama 接入验证通过" || echo "❌ Ollama 接入失败"

对于 vLLM 用户,关键配置在于--host和--port参数必须与 Codex CLI 的--backend-url严格对应:

# 启动 vLLM(注意 --host 0.0.0.0 允许外部访问) python -m vllm.entrypoints.api_server \ --model qwen2.5-72b \ --host 0.0.0.0 \ --port 8000 \ --tensor-parallel-size 2 # Codex CLI 配置(必须用 IP,不能用 localhost) codex configure backend vllm --url http://192.168.1.100:8000

3.4 OpenRig 工作流模板:一个可立即运行的codex-run脚本

现在将前三步整合为一个可复用的codex-run脚本,它体现 OpenRig 的精髓——环境感知 + 后端自适应 + 结果结构化:

#!/bin/bash # codex-run: OpenRig 核心工作流脚本 # 用法: ./codex-run --model qwen2.5:14b --input prompts.csv --output results.jsonl set -euo pipefail # 1. 环境探测:自动选择最优后端 if command -v ollama &> /dev/null && curl -s http://localhost:11434/health | jq -r '.status' 2>/dev/null | grep -q "healthy"; then BACKEND="ollama" MODEL="${MODEL:-qwen2.5:14b}" elif nc -z 127.0.0.1 8000 &> /dev/null; then BACKEND="vllm" MODEL="${MODEL:-qwen2.5-72b}" else BACKEND="codex-cloud" MODEL="${MODEL:-gpt-4o-mini}" fi # 2. 输入预处理:CSV → JSONL(Codex CLI 标准格式) if [[ -f "$INPUT" ]]; then csvjson "$INPUT" | jq -r '{messages: [{role:"user", content:.prompt}]}' fi > /tmp/codex-input.jsonl # 3. 执行 Codex CLI(带超时与重试) timeout 300 codex batch \ --backend "$BACKEND" \ --model "$MODEL" \ --input /tmp/codex-input.jsonl \ --output "$OUTPUT" \ --timeout 120 \ --retry 3 \ --concurrency 4 # 4. 输出后处理:JSONL → 可读 Markdown 报告 jq -r '.choices[0].message.content' "$OUTPUT" | \ awk 'NR%2==1{printf "## Prompt %d\n", NR/2+1} {print}' > "${OUTPUT%.jsonl}.md" echo "✅ OpenRig 工作流完成:$OUTPUT 与 ${OUTPUT%.jsonl}.md 已生成"

把这个脚本保存为codex-run,chmod +x后即可使用。它自动完成:

  • 后端健康检查与降级(Ollama → vLLM → Codex Cloud)
  • 输入格式转换(无需手动写 JSON)
  • 批量请求并发控制(避免单次请求压垮本地模型)
  • 输出结构化(生成人类可读的 Markdown 报告)

这才是 OpenRig 的真实形态:不是一堆孤立命令,而是一个有状态、可感知、会决策的本地 AI 操作系统。

4. 排查 OpenRig 常见故障:从cc switch local proxy failed到auth token unavailable

OpenRig 的故障往往表现为晦涩的错误信息,根源却高度集中。下面我按发生频率排序,给出每个错误的完整排查链路、根因定位命令和一线工程师的真实修复方案。这些不是文档抄录,而是我在 32 次远程支持中总结的实战路径。

4.1cc switch local proxy failed while handling codex endpoint /responses

这是 OpenRig 环境中最高频的报错,90% 的案例并非网络问题,而是Codex CLI 的 backend URL 解析逻辑缺陷。其真实含义是:“我尝试向某个 backend 发起 HTTP 请求,但该 backend 的 base URL 格式不符合我的预期”。

排查步骤:

  1. 确认 Codex CLI 当前配置的 backend URL

    codex configure show backend ollama # 输出示例:{"url":"http://localhost:11434"}
  2. 手动测试该 URL 是否可达且返回正确格式

    curl -v http://localhost:11434/health # ✅ 正确响应:HTTP/1.1 200 OK + {"status":"healthy"} # ❌ 错误响应:HTTP/1.1 404 Not Found(说明 Ollama 未正确暴露 health 端点)
  3. 检查 Ollama 实际监听地址

    ss -tlnp | grep :11434 # 正常应显示:LISTEN 0 128 *:11434 *:* users:(("ollama",pid=1234,fd=6)) # 若显示 127.0.0.1:11434,则外部无法访问,需修改 ~/.ollama/config.json: # { "host": "0.0.0.0:11434" }
  4. 终极验证:绕过 Codex CLI 直接调用

    # 模拟 Codex CLI 的请求头 curl -X POST http://localhost:11434/api/chat \ -H "Content-Type: application/json" \ -d '{"model":"qwen2.5:0.5b","messages":[{"role":"user","content":"test"}]}'

    若此命令成功,说明问题在 Codex CLI 配置;若失败,说明 Ollama 服务异常。

实战技巧:很多用户在 WSL2 中运行 Ollama,但 Windows 主机防火墙阻止了 11434 端口。此时curl http://localhost:11434在 WSL2 内成功,但在 Windows CMD 中失败。解决方案不是关防火墙,而是用netsh interface portproxy add v4tov4 listenport=11434 listenaddress=127.0.0.1 connectport=11434 connectaddress=127.0.0.1建立端口映射。

4.2unable to locate the codex cli binary or required runtime components

此错误表明 Codex CLI 的二进制文件虽存在,但其依赖的动态库或运行时组件缺失。根本原因通常是Codex CLI 二进制与系统 glibc 版本不兼容。

验证方法:

# 查看 Codex CLI 依赖的 glibc 版本 objdump -p /usr/local/bin/codex | grep GLIBC_ # 输出示例:GLIBC_2.34, GLIBC_2.32 # 查看系统实际 glibc 版本 ldd --version | head -1 # 输出示例:ldd (Ubuntu GLIBC 2.31-0ubuntu9.12) # 若系统版本 < 二进制要求版本,则必然失败

修复方案(按优先级排序):

  1. 升级系统 glibc(仅限 Ubuntu/Debian)

    sudo apt-get update && sudo apt-get install -y libc6
  2. 降级 Codex CLI 到兼容版本(推荐)

    # 查找历史版本中 glibc 依赖较低的 release wget https://github.com/opencode-ai/codex-cli/releases/download/v0.10.1/codex-linux-x64 # v0.10.1 仅依赖 GLIBC_2.28,兼容 CentOS 7.9
  3. 使用容器隔离(终极方案)

    docker run --rm -it -v $(pwd):/workspace -w /workspace \ -p 11434:11434 \ --network host \ ubuntu:22.04 \ bash -c "apt update && apt install -y curl && \ curl -fsSL https://ollama.com/install.sh | sh && \ curl -fsSL https://github.com/opencode-ai/codex-cli/releases/download/v0.12.3/codex-linux-x64 -o /usr/local/bin/codex && \ chmod +x /usr/local/bin/codex && \ codex run --model qwen2.5:0.5b --prompt 'hello'"

4.3codex auth token is unavailable

此错误仅在使用 Codex Cloud 后端时出现,表面是认证失败,实则是Codex CLI 的 token 存储机制与系统 keyring 冲突。

排查链路:

  1. 检查 token 是否已登录

    codex login status # 若输出 "Not logged in",则需重新登录
  2. 手动触发登录并捕获详细日志

    codex login --verbose # 观察是否卡在 "Opening browser..." 或 "Waiting for callback..."
  3. 绕过浏览器,用 API Key 直接配置

    # 从 Codex 官网获取 Personal Access Token codex configure auth --token YOUR_API_KEY_HERE
  4. 若仍失败,检查 keyring 后端

    # Codex CLI 使用 secretstorage(D-Bus)存储 token python3 -c "import secretstorage; c=secretstorage.dbus_init(); print('OK')" 2>/dev/null || echo "❌ secretstorage 未就绪" # 修复:sudo apt-get install -y dbus-user-session && systemctl --user restart dbus

关键经验:在 tmux session 中执行codex login时,由于 D-Bus session bus 未正确继承,会导致 token 存储失败。解决方案是在 tmux 中显式设置:

export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$(id -u)/bus" codex login

4.4node_modules\@opencode\cli\bin\opencode.exe 与你运行的 windows 版本不兼容

此错误明确指向Windows 子系统兼容性问题。opencode.exe是 Codex CLI 的旧版 Windows 二进制,已被弃用,但某些文档仍引用它。

根本解决方案:

  1. 彻底删除旧版残留

    Remove-Item -Recurse -Force "$env:APPDATA\npm\node_modules\@opencode\cli"
  2. 改用官方推荐的 Windows 二进制

    # 下载 codex-windows-amd64(非 opencode.exe) Invoke-WebRequest -Uri "https://github.com/opencode-ai/codex-cli/releases/download/v0.12.3/codex-windows-amd64.exe" -OutFile "$env:LOCALAPPDATA\Programs\codex\codex.exe" $env:PATH += ";$env:LOCALAPPDATA\Programs\codex"
  3. 验证执行环境

    # 必须在 Windows 10 20H1+ 或 Windows 11 中运行 Get-ComputerInfo | Select-Object WindowsVersion, OsHardwareAbstractionLayer # WindowsVersion 应 >= 2009,OsHardwareAbstractionLayer 应 >= 10.0.19041

若你的系统不满足,唯一可靠方案是在 WSL2 中运行整个 OpenRig 环境,而非在 Windows 原生终端中挣扎。我们团队已将此作为标准交付方案——WSL2 的 Ubuntu 22.04 环境,配合 Windows Terminal,体验远超原生 Windows CLI。

5. OpenRig 的进阶实践:从 CLI 工具到本地 AI 操作系统

当 OpenRig 环境稳定运行后,它的价值才真正开始释放。此时不应再将其视为“一个好用的命令行工具”,而应升级为本地 AI 操作系统(Local AI OS)——一个具备进程管理、资源调度、状态持久化和跨设备同步能力的完整平台。下面分享我们在三个真实场景中的深度实践。

5.1 用 tmux + systemd 实现 Codex CLI 的无人值守服务

OpenRig 的终极形态,是让 Codex CLI 成为后台常驻服务。我们为一家内容安全公司构建了codex-guardian服务,实时扫描上传的 PDF 文档并生成合规报告:

# /etc/systemd/system/codex-guardian.service [Unit] Description=Codex Guardian AI Service After=network.target [Service] Type=simple User=aiops WorkingDirectory=/opt/codex-guardian Environment="PATH=/usr/local/bin:/usr/bin:/bin" Environment="CODER_MODEL=qwen2.5-72b" ExecStart=/usr/bin/tmux new-session -d -s guardian 'codex watch --dir /incoming --ext .pdf --on-change "./process.sh {}"' Restart=always RestartSec=10 StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target

配套的process.sh脚本实现全自动流水线:

#!/bin/bash PDF_FILE="$1" BASENAME=$(basename "$PDF_FILE" .pdf) TMP_DIR="/tmp/codex-$$" mkdir -p "$TMP_DIR" # 1. PDF → Text 提取 pdftotext -layout "$PDF_FILE" "$TMP_DIR/text.txt" # 2. Text → Prompt 构建 echo "请分析以下文本中的潜在违规内容,按【风险等级】【违规类型】【原文片段】格式输出:" > "$TMP_DIR/prompt.txt" cat "$TMP_DIR/text.txt" >> "$TMP_DIR/prompt.txt" # 3. Codex CLI 批量处理 codex batch \ --backend vllm \ --model qwen2.5-72b \ --input "$TMP_DIR/prompt.txt" \ --output "/reports/${BASENAME}.jsonl" \ --format jsonl # 4. 清理 rm -rf "$TMP_DIR"

关键设计点:

  • tmux session 名称guardian作为服务标识,便于tmux list-sessions监控
  • codex watch的--on-change参数触发脚本,避免轮询浪费 CPU
  • systemd的RestartSec=10保证服务韧性,即使 Codex CLI 崩溃也能自动恢复

上线后,该服务日均处理 12,000+ PDF,平均响应时间 8.3 秒,CPU 占用稳定在 42%(8 核服务器),完全替代了原先的云 API 调用方案。

5.2 构建跨设备同步的 Codex 配置中心

OpenRig 的最大痛点是配置分散:codex.config.json在笔记本,tmuxinator模板在台式机,prompt 模板在 NAS。我们用 Git + SSHFS 实现了零配置同步:

# 1. 在 NAS 创建配置仓库 mkdir /nas/codex-configs && cd /nas/codex-configs git init --bare # 2. 在每台设备克隆为工作区 git clone ssh://nas/codex-configs ~/.codex-configs cd ~/.codex-configs ln -sf ~/.codex-configs/codex.config.json ~/.codex.config.json ln -sf ~/.codex-configs/tmuxinator.yml ~/.tmuxinator/codex.yml # 3. 设置自动同步钩子 cat > .git/hooks/post-merge << 'EOF' #!/bin/bash # 同步 tmuxinator 配置 cp tmuxinator.yml ~/.tmuxinator/codex.yml
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/1 14:56:50

三菱FX3U运料小车PLC控制:梯形图状态机设计与调试实战

车间里那台每天来回跑的运料小车&#xff0c;是很多电工朋友接触三菱FX3U之后&#xff0c;真正想亲手写下来的第一个完整PLC程序。它不像皮带线那么简单&#xff0c;正反转、行程检测、装料卸料延时&#xff0c;一样都少不了&#xff1b;也不像机械臂那么复杂&#xff0c;整个项…

作者头像 李华
网站建设 2026/10/1 14:55:59

OpenClaw深度解析:AI Agent时代的安全危机与TaoToken统一接入实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/1 14:55:32

STM32上电启动到RTOS任务调度:完整链路解析

搞嵌入式这么多年&#xff0c;每次看到新手拿着一个点不亮的STM32板子问我为什么&#xff0c;我都想先把这哥们从按下复位键到main函数之间到底发生了什么讲清楚。其实很多人卡在第一步&#xff0c;不是代码写得不对&#xff0c;而是压根不知道芯片上电之后系统是怎么一步步走到…

作者头像 李华
网站建设 2026/10/1 14:55:32

蛋白质二级结构预测实战:从数据预处理到CNN与Transformer模型

简介&#xff1a;这套基于Python的蛋白质二级结构预测项目源码&#xff0c;面向生物信息学与机器学习方向的初学者&#xff0c;以及需要完成期末大作业的高校学生。项目同时实现了ResNet编码器&#xff08;CNN&#xff09;与Transformer两种建模方案&#xff0c;涵盖数据加载、…

作者头像 李华
网站建设 2026/10/1 14:53:23

VSCode安装与配置全攻略:C/C++、Python环境搭建及常见问题

1. 装机前的核心认知&#xff1a;为什么这么多人会卡在第一步拿到“VSCode安装教程”这个题目时&#xff0c;我其实挺有感触的。每年都有无数前端、后端、算法、通信专业的同学和刚转行的朋友来找我&#xff0c;说“我明明照着教程装了VSCode&#xff0c;怎么还是跑不起来C语言…

作者头像 李华