mcpField
C
codex-worker

codex-worker

github.com/moonshotaiAgent 工作流11.4k107 次安装5 周前更新
代码仓库

关于 codex-worker

codex-worker 是用于编排多个 Codex CLI Agent 并行工作的技能,每个 Agent 在独立的 Git worktree 和 tmux 会话中运行。它面向可拆分为独立子任务的工作,并提供监控、交互和清理工作进程的命令。

主要功能

  1. 01并行运行 Codex CLI Agent
  2. 02为每个 Agent 创建独立 Git worktree
  3. 03管理 tmux 会话
  4. 04交互式发送提示词并查看输出
  5. 05清理 Agent 与 worktree

适用场景

  1. 01分别分诊多个问题
  2. 02并行重构多个模块
  3. 03修复多个软件包中的 lint 错误

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/moonshotai/kimi-cli --skill codex-worker

安装后在 Claude Code 中输入/codex-worker确认已加载。

详细介绍

codex-worker

协调多个并行运行的 Codex CLI(codex)Agent,每个 Agent 都在自己的 git 工作树和 tmux 会话中运行。

适用场景: 只要发现某项任务可以拆分为互相独立的子任务,就应使用并行处理,不要等用户提出要求。例如:

  • 用户说“整理过去 7 天内更新的所有未解决 issue” → 获取 issue 列表,然后为每个 issue 启动一个 codex worker。
  • 用户说“重构这 5 个模块” → 每个模块启动一个 worker。
  • 用户说“修复各个包中的 lint 错误” → 每个包启动一个 worker。

替代 Task 工具: 当环境中有 codex 和 tmux 时,使用 codex worker 代替内置的 Task(子 Agent)工具。Codex worker 是功能完备的 Agent,拥有自己的文件系统访问权限、shell 和隔离的工作树,能力远胜子 Agent。

预检

command -v codex && codex login status && command -v tmux

这三项都必须成功。项目必须是 git 仓库。

命名约定

Git 分支和工作树目录共用一个任务名称:

<type>-<issue number (optional)>-<short description>

tmux 会话会添加 codex-worker- 前缀,便于筛选 worker:

格式示例
任务名称<type>-<number>-<desc>issue-836-prompt-dollar-sign
Git 分支与任务名称相同issue-836-prompt-dollar-sign
工作树目录<project>.worktrees/<task>kimi-cli.worktrees/issue-836-prompt-dollar-sign
tmux 会话codex-worker-<task>codex-worker-issue-836-prompt-dollar-sign

更多示例:

  • issue-518-mcp-config-isolation
  • fix-share-dir-skills-path
  • feat-ask-user-tool
  • refactor-jinja-templates

仅列出 codex worker:tmux ls | grep ^codex-worker-

用法

所有任务都优先使用 tmux + 交互式 codex。它支持多轮对话,用户可以通过 tmux attach 检查或介入,你也可以从外部发送后续提示词。

启动 worker
NAME="issue-836-prompt-dollar-sign"        # task name
SESSION="codex-worker-$NAME"               # tmux session name
PROJECT_DIR="$(pwd)"
WORKTREE_DIR="$PROJECT_DIR.worktrees"

# 1. Create worktree (skip if exists)
git worktree add "$WORKTREE_DIR/$NAME" -b "$NAME" main 2>/dev/null

# 2. Launch interactive codex inside tmux
tmux new-session -d -s "$SESSION" -x 200 -y 50 \
  "cd $WORKTREE_DIR/$NAME && codex --dangerously-bypass-approvals-and-sandbox"
发送提示词

Codex TUI 需要一些时间初始化,之后才能接收输入。 启动会话后,至少等待 5 秒再发送提示词。随后发送文本并按下 Enter。如果提示词停留在输入框中而没有提交,再按一次 Enter。

sleep 5  # wait for Codex TUI to initialize
tmux send-keys -t "$SESSION" "Your prompt here" Enter
# If it doesn't submit, send another Enter:
# tmux send-keys -t "$SESSION" Enter
查看输出
tmux capture-pane -t "$SESSION" -p | tail -30
连接并进行交互
tmux attach -t "$SESSION"
并行分发
TASKS=(
  "issue-518-mcp-config-isolation|Triage #518: MCP config 被子 agent 继承的隔离问题。分析根因,给出修复方案。"
  "issue-836-prompt-dollar-sign|Triage #836: prompt 包含 $ 时启动静默失败。分析根因,给出修复方案。"
)

PROJECT_DIR="$(pwd)"
WORKTREE_DIR="$PROJECT_DIR.worktrees"

for entry in "${TASKS[@]}"; do
  NAME="${entry%%|*}"
  PROMPT="${entry#*|}"
  SESSION="codex-worker-$NAME"
  git worktree add "$WORKTREE_DIR/$NAME" -b "$NAME" main 2>/dev/null
  tmux new-session -d -s "$SESSION" -x 200 -y 50 \
    "cd $WORKTREE_DIR/$NAME && codex --dangerously-bypass-approvals-and-sandbox"
  sleep 5  # wait for Codex TUI to fully initialize
  tmux send-keys -t "$SESSION" "$PROMPT" Enter
done
后备方案:codex exec

仅在明确不需要后续交互时才使用 codex exec(例如 CI、使用 -o 输出的纯分析任务)。它不支持多轮对话。

codex exec --dangerously-bypass-approvals-and-sandbox \
  -o "/tmp/$NAME-result.md" \
  "Your prompt here"

生命周期管理

列出活跃的 worker:

tmux ls | grep ^codex-worker-

终止已完成的 worker:

tmux kill-session -t "codex-worker-$NAME"

合并后清理工作树:

tmux kill-session -t "codex-worker-$NAME" 2>/dev/null
git worktree remove "$WORKTREE_DIR/$NAME"
git branch -d "$NAME"

批量清理已结束的会话:

tmux list-sessions -F '#{session_name}:#{pane_dead}' \
  | grep ':1$' \
  | cut -d: -f1 \
  | xargs -I{} tmux kill-session -t {}

评论

支持 Markdown