\[!小心\] 请勿在公司硬件或连接到公司网络的设备上使用此工具。 此工具自动批准所有Codex CLI权限提示,无需人工审核,包括破坏性命令。为了获得最大程度的隔离,请在 专用裸机服务器 没有个人数据,没有保存的凭据,也无法访问敏感网络。您对任何后果承担全部责任。
约洛法典
在tmux中运行并行OpenAI Codex CLI代理,并自动进行权限审批。通过实时合并冲突检测和自动冲突解决,将每个代理隔离在自己的git工作树中。
当审批策略设置为 on-request 或 untrusted,Codex CLI在运行命令、应用编辑或访问网络之前提示用户。标准代理窗口由Codex的 --yolo 最大自动化模式;对于仍然出现的提示样式,tmux审批器守护进程仍然存在。
目录
安装
一个衬垫 (macOS、Linux、WSL、Termux):
command -v curl >/dev/null || { s=; [ "$(id -u)" != 0 ] && s=sudo; command -v apt-get >/dev/null && { $s apt-get update && $s apt-get install -y curl; } || command -v dnf >/dev/null && $s dnf install -y curl || command -v yum >/dev/null && $s yum install -y curl || command -v apk >/dev/null && $s apk add curl || command -v pacman >/dev/null && $s pacman -S --noconfirm curl || command -v pkg >/dev/null && pkg install -y curl || command -v brew >/dev/null && brew install curl; }; curl -fsSL https://raw.githubusercontent.com/codex-yolo/codex-yolo/refs/heads/main/install.sh | bash && export PATH="${CODEX_YOLO_BIN_DIR:-$HOME/.local/bin}:${CODEX_YOLO_HOME:-$HOME/.codex-yolo}/bin:$PATH"此克隆到 ~/.codex-yolo 并将二进制文件符号链接为 ~/.local/bin.如果 ~/.local/bin 不可写,安装程序将回退到 ~/.codex-yolo/bin;您还可以设置 CODEX_YOLO_BIN_DIR 选择一个可写的bin目录。它还安装 git, tmux, curl,以及 codex 如果他们失踪了。Codex CLI首先从独立的GitHub版本安装,npm作为后备。重新运行单行程序会升级codex yolo和codex CLI:如果更新的稳定codex CLI版本发布在 openai/codex /releases/latest 和安装 codex 二进制文件是由此脚本放置的,它将被新版本覆盖(npm或系统管理的codex安装将保持不变;set CODEX_YOLO_SKIP_CODEX_UPGRADE=1 禁用,或 CODEX_YOLO_CODEX_VERSION=rust-v0.X.Y 以固定特定标签)。用以下内容覆盖安装位置 CODEX_YOLO_HOME:
CODEX_YOLO_HOME="$HOME/my/path"; command -v curl >/dev/null || { s=; [ "$(id -u)" != 0 ] && s=sudo; command -v apt-get >/dev/null && { $s apt-get update && $s apt-get install -y curl; } || command -v dnf >/dev/null && $s dnf install -y curl || command -v yum >/dev/null && $s yum install -y curl || command -v apk >/dev/null && $s apk add curl || command -v pacman >/dev/null && $s pacman -S --noconfirm curl || command -v pkg >/dev/null && pkg install -y curl || command -v brew >/dev/null && brew install curl; }; curl -fsSL https://raw.githubusercontent.com/codex-yolo/codex-yolo/refs/heads/main/install.sh | CODEX_YOLO_HOME="$CODEX_YOLO_HOME" bash && export PATH="${CODEX_YOLO_BIN_DIR:-$HOME/.local/bin}:$CODEX_YOLO_HOME/bin:$PATH"本地安装 (来自克隆的仓库;如果已安装Codex CLI,则不需要网络访问):
git clone https://github.com/codex-yolo/codex-yolo.git ~/.codex-yolo
cd ~/.codex-yolo
./install.sh --local手动安装:
git clone https://github.com/codex-yolo/codex-yolo.git ~/.codex-yolo
ln -s ~/.codex-yolo/codex-yolo ~/.local/bin/codex-yolo然后从任何项目目录运行:
cd /path/to/your/project
codex-yolo "fix the tests" "update docs"该工具在您调用它的任何目录中运行代理(或 -d/--dir 路径(如果指定)。
快速开始
# Run three agents in parallel
codex-yolo "fix the login bug" "add unit tests for auth" "update the README"
# Use a specific model
codex-yolo -m o4-mini "refactor the API layer"
# Point agents at a different project
codex-yolo -d /path/to/project "run the test suite and fix failures"启动后,您将进入一个tmux会话,每个代理有一个窗口。最后一个窗口(control)实时跟踪审计日志并接受斜线命令。
工作树模式
随着 --worktree (-w),每个代理都有自己的git工作树和分支,因此并行任务不会覆盖彼此的文件:
codex-yolo -w -s feat -d /path/to/repo \
"implement auth system" \
"add database migrations" \
"write API tests"这将在以下位置创建工作树 -worktrees//,使用以下命令运行每个任务 codex exec,投票分支与 git merge-tree,并打开一个 merge 窗口,等待代理完成,然后将分支合并回基分支。
跳过自动合并以手动检查工作树:
codex-yolo -w --no-merge -s feat -d /repo "task1" "task2"
git diff main..feat-1
git diff main..feat-2
git checkout main && git merge feat-1 && git merge feat-2
source ~/.codex-yolo/lib/worktree-manager.sh
wt_cleanup feat看 docs/workfree-mode-demo.md 完整的演示。
导航
| 关键 | 行动 |
|---|---|
Ctrl-b w | 列出所有代理窗口并选择一个 |
Ctrl-b s | 在代理窗口之间切换 |
Ctrl-b n | 下一窗格 |
Ctrl-b p | 上一窗格 |
Ctrl-b x | 停止当前代理,关闭窗格 |
Ctrl-b d | 分离(代理继续运行) |
稍后重新连接 codex-yolo -r (或 codex-yolo --resume).
控制命令
这 control 窗口在继续显示审核日志的同时接受斜线命令。
/loop 1h Continue experiments and push best submission
/loop 1h /plan Draft the next implementation plan
/loop 1h /queue ["/status", "/clear", "/plan Draft the next implementation plan"]
/queue ["/status", "/clear", "Continue from the latest result"]
/plan Draft the implementation plan before coding可用命令:
| 命令 | 操作 |
|---|---|
/permissions auto-review | 开放法典 /permissions,使自动审核成为当前 agent-1,然后返回聊天 |
/plan [prompt] | 发送Codex /plan 到 agent-1;仅此控制窗格命令支持粘贴多行提示,并自动确认计划审批 |
/queue ["item1", "item2"] | 按顺序运行提示或斜线命令 agent-1;每个项目都等待前一个项目完成 |
/queue add ["item"] | 将待处理项目附加到活动队列 |
/queue edit ["item"] | 替换一个待处理的队列项 |
/queue remove | 删除挂起的队列项,例如 2 或 2-4 |
/queue dequeue | 删除下一个待处理项目; /queue deque 也被接受 |
/queue show | 显示编号的队列项目 |
/queues | 列出活动队列 |
/queues cancel | 取消一个队列 |
| `/loop | |
| ` | 发送 ` |
到 agent-1 立即,然后每间隔一次,直到取消;如果 以...开始 /plan,每次迭代都使用范围计划自动审批| | /loop /queue ["item1", "item2"] |立即运行完整队列,然后在每次队列运行完成并经过间隔后重复| | /loops |列出活动循环| | /loops cancel |取消一个循环| | /help` |显示命令帮助|
间隔为整数 s, m, h,或 d例如 30s, 15m, 1h,或 1d. 队列项列表必须是带引号的字符串数组。对多行项目使用单引号、双引号或三引号:
/queue ['item1', 'item2', 'item3']
/queue ["item1", "item2", "item3"]
/queue ["""item1
item1""", """item2
item2"""]
/queue ['''item1
item1''', '''item2
item2''']/plan, /queue,以及 /loop 在工作树模式下被禁用,因为代理窗口正在运行 codex exec 并且可以退出。 粘贴多行时 /plan 将命令粘贴到交互式控制窗格中,在第一行之后立即粘贴 /plan 行作为同一计划提示的一部分发送。 预定 /loop /plan 命令使用与直接控制窗格相同的范围计划审批标记 /plan 每次迭代中的命令。 预定 /loop /queue [...] 命令在发送下一个项目之前等待每个排队的项目完成,并且在上一个队列运行完成之前,它们不会开始下一个循环迭代。
来自CLI的一次性控制命令
通过 -c "/..." 在 control 启动后立即打开窗口——与在 codex-yolo> 提示。要组合多个命令,请将它们包装起来 /queue [...] 而不是重复 -c.
codex-yolo -c "/loop 10m /plan Draft the next implementation plan"
codex-yolo -c '/queue ["/plan first", "/loop 1h /plan continue"]'
codex-yolo --resume -c "/loops"多行字符串以粘贴形式发送,因此多行 /plan 和 /queue 工作:
codex-yolo -c "$(printf '/plan line one\nline two\nline three')"当启动还启动Codex自动审查对账时(即没有任务的交互模式和 codex-auto-review 权限配置文件),注入在发送密钥之前等待对账完成,因此第一个 /plan 或 /loop 登陆Codex聊天提示,而不是欢迎/权限屏幕。
选项
-s, --session NAME Custom tmux session name (default: codex-yolo-)
-d, --dir PATH Working directory for agents (default: current directory)
-m, --model MODEL Model to use (e.g., o4-mini, o3, gpt-4.1)
-p, --poll SECONDS Approver poll interval (default: 0.3)
-f, --file FILE Read a multiline prompt from a text file
-c, --command STRING Slash command to run in the control pane after launch
(e.g. "/loop 10m /plan ...", "/queue [...]", "/help").
Must start with '/'. Multi-line strings are sent as a paste.
Works with --resume to inject into an existing session.
-r, --resume Re-attach to an existing yolo session
--permissions PROFILE Set Codex /permissions profile (default: full-access when allowed, else auto-review)
--no-codex-sandbox Disable Codex sandboxing (for externally sandboxed containers)
--force-codex-sandbox Require Codex sandboxing; do not auto-fallback when unsupported
-h, --help Show help
Worktree options:
-w, --worktree Run each agent in its own git worktree
--base-branch BRANCH Base branch for worktrees (default: current branch)
--no-merge Skip auto-merge after agents complete
--no-cleanup Keep worktrees after merge
--conflict-poll SECS Conflict detection interval (default: 5)
install.sh options:
--local Install from the local repo without pulling from GitHub默认情况下, codex-yolo 探针 codex sandbox linux true 一次。集装箱内 其中bubblewrap因命名空间权限错误而失败, codex-yolo 创建a 临时假货 bwrap 早些时候 PATH 并推出没有Codex的代理商 沙盒。假的 bwrap 在bubblewrap之后执行命令 -- 直接使用分离器,因此它只能在外部隔离的内部使用 集装箱。使用 --force-codex-sandbox 需要真正的沙箱和表面 相反,失败。
食品法典委员会 /permissions, codex-yolo 活动时默认为完全访问 食品法典委员会要求允许。如果要求禁用完全访问,则使用 自动审核(codex-auto-review).在Codex沙箱所在的容器中 不可用,codex yolo不得不依赖外部隔离 auto 默认 还使用自动审查。用以下内容覆盖此内容 --permissions full-access, --permissions auto-review,或 --permissions none.为 标准交互式自动审查会话, codex-yolo 也调和了TUI 一旦启动,那么 /permissions 显示 Auto-review (current).
运作原理
- 启动器 (
codex-yolo)创建一个tmux会话,并为每个任务生成一个窗口,每个窗口运行codex --yolo对于标准会话或codex exec在工作台模式下。如果Codex Linux沙箱不可用,启动命令包括Codex的无沙箱绕过标志。 - 控制面板 (
lib/control-pane.sh)打开control窗口,跟踪审核日志,并处理斜线命令,如/loop和/permissions auto-review. - 审批者守护进程 (
lib/approver-daemon.sh)在后台运行,每0.3秒轮询一次。对于每个窗格,它:
- 通过以下方式捕获可见内容 tmux capture-pane - 检测七种提示样式(见下文) - 通过发送确认密钥 tmux send-keys 选择第一个审批选项(Enter,或 y 用于显示提示 Yes, proceed (y)) - 对每个窗格应用2秒的冷却时间,以防止双重批准
- 审计日志 在
/tmp/codex-yolo-.log用时间戳记录每个审批和控制事件。每个会话都有自己的日志,因此并发的codex-yolo进程不会干扰。
工作树管道
当 --worktree 启用后,三个附加组件将与审批人一起运行:
- 工作树管理器 (
lib/worktree-manager.sh)在中为每个代理创建一个分支和git工作树-worktrees//. - 冲突守护进程 (
lib/conflict-daemon.sh)民意调查每--conflict-poll秒和运行git merge-tree --write-tree跨越树枝对。冲突会记录到审核日志中。 - 合并解析器 (
lib/merge-resolver.sh)等待codex exec代理完成,自动提交未提交的更改,将分支合并到基分支中,并在发生合并冲突时启动Codex解析器任务。
检测信号
批准人需要主信号加上至少一个辅助信号才能开火:
| 信号 | 类型 | 模式 |
|---|---|---|
| 问题/标题 | 初级 | Would you like to run, Would you like to make, Allow Codex to, Approve app tool call, Do you trust the contents, Enable full access |
| 审批选项 | 次要(至少一个) | Yes, just this once, Yes, proceed (y), Yes, continue, Yes, and don't ask, Run the tool and continue, Apply full access, Yes, and allow this host |
| 否认/背景 | 次要(至少一个) | No, and tell Codex, Decline this tool call, Go back without, Cancel this, may have side effects, may access external, may modify, untrusted, prompt injection |
处理的提示类型:
| 提示 | 触发 | 动作 |
|---|---|---|
| 命令执行 | Would you like to run the following command? | Enter 或 y → 首次批准选项 |
| 文件编辑 | Would you like to make the following edits? | Enter → “是的,就这一次” |
| MCP工具调用 | Approve app tool call? | Enter → “运行工具并继续” |
| 信任目录 | Do you trust the contents of this directory? | Enter → “是,继续” |
| 完全访问 | Enable full access? | Enter → 是,继续 |
| 网络/主机 | Allow Codex to access | Enter → “是的,就这一次” |
| MCP激发 | Yes, provide the requested info | Enter → 批准 |
文件结构
codex-yolo # Main launcher script
lib/
common.sh # Logging, prerequisite checks
control-pane.sh # Interactive control window + slash command scheduler
approver-daemon.sh # tmux capture-pane monitor + auto-approver
worktree-manager.sh # Git worktree lifecycle
conflict-daemon.sh # Real-time conflict detection via git merge-tree
merge-resolver.sh # Sequential merge + Codex-powered conflict resolution
test_approver.sh # Test suite
install.sh # Cross-platform installer
docs/
worktree-mode-demo.md # Step-by-step worktree demo先决条件
- 终端复用器 (用3.4测试)
- 法典 (OpenAI Codex CLI——从独立的GitHub版本或
npm install -g @openai/codex) - 版本控制系统 2.38+(工作台模式需要--
git merge-tree --write-tree)
测试
# Run all tests
bash test_approver.sh
# Verbose output (shows passing tests)
bash test_approver.sh -v
# Filter by pattern
bash test_approver.sh "Command:"
bash test_approver.sh "Trust"
bash test_approver.sh Integration
bash test_approver.sh Concurrent测试套件包括:
- 对所有六种Codex CLI提示类型(命令、编辑、工具、信任、完全访问、网络)进行提示检测
- MCP激发提示检测
- 假阳性电阻(代码输出、部分信号、上下文缺失)
- 冷却逻辑、命令构建、审计日志
- 使用真实tmux会话进行端到端集成测试
- 并发守护进程隔离(会话之间无串扰)
- 工作树创建、清理、冲突检测和合并行为
主要特点
- 并行多代理执行 --独特地支持在tmux中并行执行多个Codex CLI代理,并具有非侵入性的终端级权限自动批准功能。
- Git工作树隔离 --每个代理都可以在自己的分支和工作树中工作,然后合并回基分支。
- 实时冲突检测 --后台守护进程轮询
git merge-tree跨所有分支对并记录出现的冲突。 - 自动冲突解决 --在合并冲突时,会生成一个Codex解析器任务来解决冲突标记并提交合并。
- 便利优先的自动化 --标准会议使用Codex
--yolo,因此这仅适用于可以接受广泛命令执行的隔离环境。 - 综合检测逻辑 --使用多信号方法处理所有六种Codex CLI提示类型以及MCP诱导,从而最大限度地减少误报。
- 可靠性和可追溯性 --每窗格冷却、详细的审计日志记录和广泛的测试套件强调可靠性和可追溯性。
- 无需CLI修补或容器化 --完全在终端级别工作,无需修改Codex二进制文件或将其包装在容器中。
发展历史
该工具是通过调整 克劳德·约洛 OpenAI的Codex CLI方法。关键设计决策:
- TUI覆盖检测:Codex CLI使用全屏Ratatui TUI覆盖层进行审批对话框(不是像Claude Code那样的内联文本)。这
tmux capture-pane这种方法仍然有效,因为tmux捕获了渲染的终端内容,包括TUI覆盖。
- 批准按键:选择列表中的第一个选项始终是审批选项,并且是预先选择的(
❯).发送Enter证实了这一点。
- 多信号检测:简单的关键字匹配会从代码输出中产生太多的误报。双层方法(主要问题/标题信号+次要批准/拒绝信号)消除了这些问题。
- 每块玻璃冷却:在没有冷却的情况下,0.3秒的轮询间隔可以发送多个
Enter同一提示的按键。每窗格2秒的冷却时间可防止双重批准。
- 自动化模式:Codex CLI具有批准策略和独立的沙盒模式。当前
codex-yolo标准会话通过--yolo,它将自动化置于沙箱保护之上。使用专用、隔离的环境。
