Help us improve
Share bugs, ideas, or general feedback.
From legal-skills
Orchestrates multiple local agents (Codex, Claude Code, OpenCode) as a PM: splits tasks across independent worktrees/sessions, monitors progress, and consolidates results.
npx claudepluginhub cat-xierluo/legal-skills --plugin transcription-correctorHow this skill is triggered — by the user, by Claude, or both
Slash command
/legal-skills:multi-agent-orchestrationThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
PM 式多 Agent 本地执行编排。它回答一个问题:多个 Agent 如何在同一仓库里用独立 worktree/session 并行干活,并让当前主会话作为 PM 可巡检、可收口、可控制额度消耗。
CHANGELOG.mdLICENSE.txtconfig/claude-provider-settings.example.jsonreferences/agent-teams-troubleshooting.mdreferences/checkpoint-files.mdreferences/legal-domain-templates.mdreferences/model-selection-matrix.mdreferences/parallel-lessons.mdreferences/runtime-dependencies.mdreferences/sentinel-design.mdscripts/check-dependencies.shscripts/clean-worktree.shscripts/lint-wait-script.shscripts/pm-monitor.shscripts/render-runtime-profile.shscripts/sentinel.shscripts/smoke-sentinel.shscripts/smoke-tmux-worker.shscripts/spawn-worker.shscripts/terminal-split.shSpawns isolated parallel agents to execute tasks concurrently, using a Mayor-First architecture with wave-based orchestration and collision detection.
Orchestrates multiple worktree agents using `workmux` CLI: spawn, monitor, communicate, and merge. Invoked via `/coordinator`, useful for parallelizing tasks across git worktrees.
Manages agent execution with task decomposition, two-stage review, and batch sizing. Enforces isolation, verification, and human checkpoints to prevent runaway parallelization.
Share bugs, ideas, or general feedback.
PM 式多 Agent 本地执行编排。它回答一个问题:多个 Agent 如何在同一仓库里用独立 worktree/session 并行干活,并让当前主会话作为 PM 可巡检、可收口、可控制额度消耗。
PM 是当前负责拆解、派工、验收和收口的主会话,不绑定具体产品。Codex 可以做 PM 调 Claude Code 或 OpenCode worker;Claude Code 也可以做 PM 调 Codex 或 OpenCode worker。Skill 只规定角色、隔离、启动、状态和收口协议。
使用本 Skill:
不使用本 Skill:
cross-agent-coordination。git-workflow。| 模式 | 适用 | 默认隔离 |
|---|---|---|
| PM 直接处理 | 轻量、低风险、无并行价值 | 当前工作区 |
| 同宿主 Subagent | 窄范围分析、审阅、局部修订 | 通常不新建 worktree |
| Claude Code Agent Teams | Claude Code 做 PM 且需要团队式协作 | worktree + branch |
| tmux 独立 CLI session | 需要跨产品 worker、长上下文、独立额度或独立进程 | worktree + branch |
| Claude Code agent view | 需要使用官方后台会话、peek/reply/attach 和 claude agents 总览 | 可用 Claude 官方 --worktree / --tmux,或手动 worktree |
| ACP adapter | 项目已提供稳定 adapter,且需要结构化事件流 | adapter 决定,仍建议 worktree + branch |
优先级由项目规则决定。若用户或项目明确要求使用 tmux / 独立 session / 开 worker,进入防逃逸门禁。
强制 session 触发条件:
tmux、独立 session、开 worker、多 Agent 并行、你做 PM / orchestrator、不要你直接写,或项目规则要求 tmux / 独立 session。触发后,PM 在任何业务实现前必须完成启动门禁:
--worktree --tmux 可作为 Claude 专用等价入口。tmux has-session / tmux list-sessions / claude agents --json 验证 session 存活,并确认 pane cwd 或 agent cwd 指向目标 worktree。STATUS.json 出现;若未出现,只能发送 checkpoint-only 纠偏或重启 worker,不得直接接管业务实现。降级规则:
--worktree --tmux 可用。Agent view / Agent Teams 只有在能证明独立后台会话、独立 cwd/worktree 和可巡检状态时才可替代。先分清角色,再选择后端:
| 角色 | 职责 | 可由谁担任 |
|---|---|---|
| PM | 读取任务源、分组、启动 worker、巡检、验收、合并收口 | 当前 Codex、Claude Code、OpenCode 或其他主会话 |
| Worker | 在指定 worktree/branch 内完成限定任务 | Claude Code、Codex、OpenCode、自定义 CLI、shell 脚本、未来 ACP agent |
| Reviewer | 检查 diff、测试、范围和风险 | PM、另一个 worker、code-review subagent |
PM 代理纪律:
后端选择规则:
claude-oauth-* profile,并清理第三方 provider 环境变量。opencode run / opencode acp 能力时,worker backend 选 OpenCode。tmux + worktree;触发 §2.1 时,tmux + worktree 是默认执行层,不是可静默跳过的建议。环境/profile 纪律:
Runtime Profile、settings/profile 路径、模型来源和关键环境变量处理方式,不假定 Claude Code、Codex、OpenCode 共享同一套 shell 环境。ANTHROPIC_BASE_URL / ANTHROPIC_AUTH_TOKEN / 默认模型映射;不要套用 OAuth 的清理命令。which claude/codex/opencode、版本号、cwd、关键 profile 名和 node/npm/python/cargo 等运行信息写入 STATUS.json,便于 PM 判断“环境不一样”是否影响任务。.claude/orchestration.config.json 或等价配置,先读取 trunk、任务源、验证命令、可复制配置和 hook 边界;再用 cross-agent-coordination 判断可执行项、依赖和归属。--worktree 能力时,才允许由 Claude Code 创建,但 PM 仍要验收分支、路径和隔离状态。STATUS.json 出现或已发送 bootstrap correction。.claude/agent-sessions/<session-id>/STATUS.json、RESULT.md、PATCH_SUMMARY.md、git status、commit/PR 状态;Claude 官方 Agent Teams 则优先读取 ~/.claude/teams/<team>/ 和 ~/.claude/tasks/<team>/,claude agents --json、tmux pane 或 agent view 作为兜底观察。发现偏题、阻塞、范围扩大或无阶段性提交时介入。git-workflow 合并和清理。goal-contract.md 或对应 RESULT.md。仅靠 typecheck / 单测 / lint / build 全部通过就宣称"完成"是不充分的——这些只证明"代码能编译",不证明"功能真的能用"。Wave 是在同一 base ref、同一批冲突假设下启动的一组并行 worker。它用来记录“本项目已经并行推进过几轮”、控制并发风险,并让 PM 在每轮结束后复盘 provider/model 表现。
Wave 启动前,PM 必须写清:
wave_id、base ref、目标、worker 清单、每个 worker 的分支/worktree/session。ui-wiring(低风险 UI 接线)、contract-extension(共享契约/依赖变更)、tauri-command(Rust/Tauri/本机依赖)、docs/research、custom。package.json、锁文件、src-tauri/、src/shared/、全局布局、DEC 编号或同一模块入口。并发数量不是固定 3 个。文件范围独立、验证命令独立、无共享契约冲突时,默认目标可提高到 4-6 个 worker;纯文档、翻译、i18n、互不重叠 UI 接线可以更多。涉及共享依赖、锁文件、Tauri command、全局布局、DEC race 或同一模块入口时,降到 1-3 个并按依赖顺序推进。
Provider slot 分配是 PM 的显式规划,不是脚本自动猜测:
backend + settings/profile path + provider + model + max_concurrency。config/minimax.settings.json、config/glm.settings.json;真实 settings 文件保持本地 ignored,不提交。provider/model profile 区分;custom worker 写明实际命令来源。6-worker 示例:
| Worker | 任务风险 | Backend | Settings/Profile | Slot |
|---|---|---|---|---|
| W1 | 高 | Claude Code | config/minimax.settings.json | minimax-1 |
| W2 | 中 | Claude Code | config/minimax.settings.json | minimax-2 |
| W3 | 低 | Claude Code | config/glm.settings.json | glm-1 |
| W4 | 低 | Claude Code | config/glm.settings.json | glm-2 |
| W5 | 文档/研究 | Codex | codex:<profile> | codex-1 |
| W6 | 重复性低风险 | OpenCode/custom | <provider/model or command label> | opencode-1 |
Wave 收口时,PM 记录每个 worker 的 merged / done-unmerged / blocked / deferred / restarted,并评估模型/provider 表现:Isolation Gate、STATUS 心跳、commit 节奏、范围遵循、验证通过率、review 修复次数、diff 质量、阻塞/幻觉/环境误判。下一 Wave 根据该评估调整任务分配:高风险任务给指令遵循和工程可靠性更好的 profile,低风险重复任务给成本或吞吐更优的 profile。
Orchestration Goal 是 PM 层目标循环,用来让多轮 Wave 在条件满足前持续推进。它不把所有任务交给单个 worker;PM 仍按 Wave 从任务源取下一批安全可并行项,worker 仍只执行自己的窄范围任务。
启动 Goal Loop 前,PM 必须写清 Goal Contract,模板见 templates/orchestration-goal.md:
docs/TASKS.md、GitHub Issues、项目配置中的 issue file。merged / done-unmerged / blocked / deferred,主干验证通过,文档已同步。plan-only(只规划下一 Wave)、auto-launch(可自动开下一 Wave)、auto-review(可自动复核 worker 结果)、auto-merge(在项目规则允许时按 git-workflow 合并)。PM 可在支持的宿主中使用 Claude Code / Codex 的 /goal 来包住 PM loop,但 /goal 只负责让 PM 持续执行循环,不替代本 Skill 的 worktree、tmux、checkpoint、review 和 merge 门禁。Goal prompt 必须写明“PM 不直接实现业务代码;实现仍由 worker 完成”。
每轮 Wave 收口后,PM 按以下顺序决定是否自动继续:
自动继续条件:
merged、done-unmerged、deferred 或明确 blocked 且不会影响下一 Wave。git-workflow 处理,base ref、本地主干和远端主干一致或已明确记录差异。必须停止并汇报的条件:
failed、blocked 且影响下一 Wave,或连续两次纠偏无效。项目可放置 .claude/orchestration.config.json,模板见 templates/project-config.json。该配置只声明项目默认值,不替代 PM 判断,也不允许静默执行破坏性动作。
配置可声明:
.npmrc.example 或只读模板。配置安全规则:
.env、真实 settings、token、key、cookie、证书或账号凭证。allowed_config_copy 只允许非敏感文件;forbidden_config_copy 命中时必须停止并报告。spawn-worker.sh 不自动读取项目配置、不自动复制配置、不自动执行 hook,避免把可选约定升级成隐式副作用。main、不复制配置、不跑 hook、只使用 worker prompt 明确列出的验证命令。分支名面向远端协作和 PR,必须体现任务语义,不写执行来源。
docs/ch01-agent-intro
research/issue-13-ch08-materials
fix/agent-session-shell
worktree 路径只用于本地隔离,应加执行来源前缀:
.claude/worktrees/tmux-ch01-agent-intro
.claude/worktrees/team-agent-session-shell
.claude/worktrees/subagent-copyedit-ch02
不要把 tmux-、subagent-、team-、agentteam- 写进分支名。分支类型前缀和提交/PR 格式以 git-workflow 为准。
创建示例:
git worktree add .claude/worktrees/tmux-ch01-agent-intro -b docs/ch01-agent-intro
git worktree add .claude/worktrees/team-agent-shell -b fix/agent-session-shell
Worker 的本地状态统一写到当前 worktree 的 .claude/agent-sessions/<session-id>/(下文简称 Session Context),复用项目既有 .claude/ 协作空间,与 Claude Code 官方 Agent Teams 状态源明确区分。
.claude/agent-sessions/legal-ch01/METADATA.json
.claude/agent-sessions/legal-ch01/STATUS.json
.claude/agent-sessions/legal-ch01/RESULT.md
.claude/agent-sessions/legal-ch01/PATCH_SUMMARY.md
Claude Code 官方 Agent Teams 是另一套机制:团队配置在用户目录 ~/.claude/teams/<team-name>/config.json,任务状态在 ~/.claude/tasks/<team-name>/,inbox 在 ~/.claude/teams/<team-name>/inboxes/。使用官方 Agent Teams 时优先读写这些官方状态源;不要在项目里自造 .claude/teams/ 来冒充官方 team。
.claude/agent-sessions/ 是 PM 巡检状态,不属于业务 diff。PM 和 worker 都必须确认它不进入 commit / push / PR;需要时由 PM 在对应 worktree 的本地 exclude 中忽略。
Worker prompt 应像启动 subagent 一样给足上下文:任务来源、验收标准、允许文件、禁止文件、验证命令、checkpoint 协议、隔离自检和 PM 纠偏协议都要写清。不要只给一句“实现某功能”,否则 worker 容易把环境、依赖或相关技术债扩展成自己的任务。
模板放在 templates/worker-prompt.md,包含两个可复制段落:
STATUS.json,适合高延迟 provider 或 high-effort 模型的第一条消息。对高延迟 provider 或 high-effort 模型,优先用两段式启动:第一条消息使用 Bootstrap-only prompt 创建 Session Context/STATUS.json 并回报 runtime;PM 确认 checkpoint 后,再发送 Full worker prompt。这样能避免 worker 在长思考前没有可观测状态。
默认工具面保持收敛:
check-dependencies.sh:新机器或启动 Wave 前做一次 preflight。render-runtime-profile.sh:为每个 worker 渲染 backend/settings/profile/model/slot 和启动命令。spawn-worker.sh:创建 worktree、Session Context 和 tmux session。sentinel.sh:每个 worker 一个,PM 用 run_in_background=true 启,worker 终态时唤起 PM(见 §7.2)。pm-monitor.sh:多 worker/Wave 巡检;单 worker 或宿主唤醒才用 wait-worker.sh。项目配置模板见 templates/project-config.json。PM 可以把其中的 trunk、验证命令和 provider slot 复制到本轮 Goal/Wave 计划,但脚本不会自动套用该配置。
其余脚本只在对应场景使用:worktree-status.sh 做只读总览,clean-worktree.sh 做 dry-run 清理,smoke-tmux-worker.sh / lint-wait-script.sh 只做 Skill 自测,terminal-split.sh 只是可选可视化辅助,不属于默认启动路径。
默认用 scripts/spawn-worker.sh 创建 worktree、Session Context 和 tmux session;它只负责隔离和启动,PM 仍必须发送 templates/worker-prompt.md 并确认 STATUS.json。不同 backend/profile 的启动命令可先用 scripts/render-runtime-profile.sh 生成,减少手写环境差异。
eval "$(bash scripts/render-runtime-profile.sh \
--backend claude-code \
--runtime-profile minimax \
--api-provider minimax \
--model claude-sonnet-4-5 \
--provider-slot minimax-1 \
--settings config/minimax.settings.json)"
bash scripts/spawn-worker.sh \
--project /path/to/repo \
--branch docs/ch01-agent-intro \
--session legal-ch01 \
--worker-backend "$WORKER_BACKEND" \
--runtime-profile "$RUNTIME_PROFILE" \
--api-provider "$API_PROVIDER" \
--model "$MODEL" \
--provider-slot "$PROVIDER_SLOT" \
--verify-cmd 'npm run typecheck' \
--command "$WORKER_COMMAND"
启动后必须通过最小门禁:tmux has-session 存活、pane cwd 指向 worktree、git branch --show-current 等于目标分支、Session Context/METADATA.json 已记录 base/runtime/verification、Session Context/STATUS.json 在 1-2 分钟内出现。失败时停止 session 或发送 bootstrap correction,不要在 PM 主目录继续实现。
常用 worker command:
claude --settings <local-provider.settings.json> --permission-mode auto。真实 settings 不提交;模板见 config/claude-provider-settings.example.json。env -u ANTHROPIC_API_KEY -u ANTHROPIC_AUTH_TOKEN -u ANTHROPIC_BASE_URL claude --permission-mode auto。claude --settings <settings> -p --output-format stream-json --permission-mode acceptEdits < /tmp/task.prompt.md。codex exec -a never -s danger-full-access - < /tmp/task.prompt.md。opencode run --format json --model <provider/model> "$(cat /tmp/task.prompt.md)",或交互式 opencode --model <provider/model>。不要设 --max-turns:PM 重点是检测 worker 是否真在推进,而不是限制 turn 数。长任务通过 STATUS.json.updated_at、阶段性 commit、pm-monitor.sh stale 事件和 PM 纠偏控制。
Claude Code agent view / 官方后台会话可作为 Claude 专用后端:claude agents、claude agents --json、版本支持时的 --worktree --tmux、--bg 或 /bg。使用前以本机 claude --help / claude agents --help 为准;只有能证明独立 cwd/worktree、可巡检状态和可接管会话时,才可替代 tmux。
Agent Teams 适合 Claude Code 团队式协作;仍要使用 worktree 隔离并把 workdir 指向带来源前缀的 worktree。ACP 只在 adapter 已稳定、能输出结构化状态时启用。Subagent 仅用于轻量、边界窄、输入少的任务;需要长时间写作、独立提交 PR 或跨大量材料整合时升级为 tmux / agent view / Agent Teams。
PM 巡检信号:
.claude/agent-sessions/<session-id>/METADATA.json 是否记录 base ref、runtime profile、provider slot、验证命令和 PR 占位。.claude/agent-sessions/<session-id>/STATUS.json 是否更新,是否报告 blocked / needs_input / done。.claude/agent-sessions/<session-id>/RESULT.md 和 PATCH_SUMMARY.md 是否存在,摘要是否足够 PM 不读完整日志也能验收。介入规则:
Session Context/STATUS.json 时,先发送 checkpoint-only 纠偏;仍无响应时中断当前思考并重发 bootstrap 指令,不直接接管实现。Session Context,避免丢失已落盘产物。tmux 纠偏示例:
tmux send-keys -t legal-ch01 -l -- "PM correction: stop dependency/runtime changes now. Return to ISS-017 only. Do not modify package files or environment config. Update .claude/agent-sessions/legal-ch01/STATUS.json with needs_input=false and continue with the OCR quality report scope."
sleep 0.1
tmux send-keys -t legal-ch01 Enter
纠偏 prompt 应包含四件事:停止什么、回到哪个任务、哪些文件/动作仍然禁止、下一步最小可执行动作。不要只写“你偏题了”。
完整字段见 references/checkpoint-files.md,可复制模板见 templates/checkpoint-status.json、templates/checkpoint-result.md 和 templates/checkpoint-patch-summary.md。PM 默认只读这些 checkpoint 和最终 diff,不定时拉完整日志。
可选自动 PM 监控脚本(保留 Agent Teams inbox、任务状态、Git SHA、PR 状态和 tmux session 多维巡检能力):
bash scripts/pm-monitor.sh \
--project /path/to/repo \
--team-dir ~/.claude/teams/team-name \
--tasks-dir ~/.claude/tasks/tasks-uuid \
--claude-agents-cwd /path/to/repo \
--wave-id wave-5 \
--commit-stale-threshold 1800 \
--progress-stale-threshold 1800 \
--interval 60 \
--log-file .claude/agent-sessions/pm-monitor/events.log \
--branch docs/ch01-agent-intro:legal-ch01
经济型巡检规则:
pm-monitor.sh --once,由 PM 在需要判断是否介入时运行一次,只读取事件行。pm-monitor.sh --log-file ...,脚本持续写事件日志;PM 只在状态变化、用户询问、PR 收口或日志出现 AGENT_NEEDS_INPUT / CHECKPOINT_STALE / CHECKPOINT_TEST_FAILURE 时读取少量日志。--once 或低频读取 log tail,仍比前台反复巡检节省上下文。STATUS.json 只记录 PM 决策必需的结构化信号,详细实现说明继续写 RESULT.md 和 PATCH_SUMMARY.md。scripts/worktree-status.sh;清理用 scripts/clean-worktree.sh,默认 dry-run,真正删除必须显式 --execute。scripts/wait-worker.sh 是单 worker 等待器,不替代 pm-monitor.sh。它主读一个 STATUS.json,在 done、failed、blocked 或 stopped 时退出并输出 RESULT.md / PATCH_SUMMARY.md 路径。适合把“worker 完成时通知 PM”接到不同宿主。
状态源分层:
METADATA.json 是 PM 启动时写入的静态上下文,记录 base/runtime/provider/verification,不作为完成判定。STATUS.json / RESULT.md / PATCH_SUMMARY.md 是完成、阻塞、验证和收口的主协议。tmux capture-pane 是诊断窗口,只在 checkpoint 缺失、过期、终态或显式要求时读取尾部输出。Claude Code PM:
Bash background/run-in-background 只能让等待器在后台运行,不保证触发或唤醒当前 PM / agent session;多 worker 同时等待时尤其可能没有任何完成消息返回。
不要把 background Bash 当作可靠完成通知机制。它最多作为日志写入器或人工可查看的后台 job;PM 仍必须靠 STATUS.json、pm-monitor.sh --log-file、wait-worker.sh --once、tmux/agent view 显式巡检来收口。
单 worker 可临时用 background Bash 跑 wait-worker.sh,但启动时必须同时记录 log 文件或保留可查询命令;多 worker / Wave 默认使用 pm-monitor.sh --log-file,不要为每个 worker 启一个 background wait 并期待宿主逐个回调。
限定条件例外:§7.2 描述的 Sentinel 模式是本规则的"限定条件下可工作变体"——单 worker 单 sentinel、run_in_background=true 启、harness 100% re-invoke 可工作。Wave 6 启用 sentinel 之前仍按上述保守判断走。
bash scripts/wait-worker.sh \
--worktree .claude/worktrees/tmux-ch01-agent-intro \
--session legal-ch01 \
--tmux-session legal-ch01 \
--interval 30
Codex PM:
run_in_background。wait-worker.sh --once 接到当前 thread 的 heartbeat automation;完整 prompt 见 templates/codex-heartbeat-wait.md。创建、修改或删除 automation 时必须先查找并使用 automation_update 工具,不手写 raw RRULE。pm-monitor.sh --once 或 wait-worker.sh --once 低频手动巡检;长任务仍用 pm-monitor.sh --log-file 持续记录事件。wait-worker.sh 的职责是等一个 worker 到终态;它输出终态,不负责唤醒宿主。多 worker、PR 状态、git SHA、gate 和 stale 事件仍由 pm-monitor.sh 负责。
适用:Wave 6 之后,每个 worker 配套启一个 sentinel,PM 由 harness task-notification 事件驱动地唤醒,零 idle token 消耗,保留多轮纠偏能力。设计依据见
references/sentinel-design.md;DEC-031 supersede DEC-030 的限定条件判断。
模式:每个 worker 配一个 scripts/sentinel.sh 进程。Sentinel 轮询 STATUS.json,
读到 done | failed | blocked | stopped 时 capture tmux pane tail、tmux kill-session、
exit。Sentinel 由 PM 用 run_in_background=true 启,exit 触发 harness
task-notification → PM 被 re-invoke。
PM 端调用模式:每 worker 两次 Bash 调用:
# 1) Foreground: 创建 worktree + 启动 worker + 拿 gate 验证
bash scripts/spawn-worker.sh \
--project /path/to/repo \
--branch docs/ch01-agent-intro \
--session legal-ch01 \
--with-sentinel \ # 仅打印 SPAWN_WORKER_SENTINEL_CMD,不在内部启
--command "$WORKER_COMMAND"
# 2) Background: sentinel 事件驱动 wake
# 从 spawn-worker.sh 输出里复制 SPAWN_WORKER_SENTINEL_CMD 那行
bash scripts/sentinel.sh \
--status-file .claude/worktrees/tmux-docs-ch01-agent-intro/.claude/agent-sessions/legal-ch01/STATUS.json \
--tmux-session legal-ch01 \
--poll-interval 5 \
--max-wait 7200
# ↑ 用 Bash run_in_background=true 启
为什么不在 spawn-worker.sh 内部启 sentinel:
spawn-worker.sh 是 fg 工具,sentinel 是 bg 工具,职责分离run_in_background=true)是 harness re-invoke 的前提Sentinel 事件命名空间(独立于 WAIT_WORKER_*):
| 事件 | 触发 |
|---|---|
SENTINEL_START | 启动时 |
SENTINEL_PENDING | STATUS.json 缺失 |
SENTINEL_PANE_TAIL | capture pane 前(best-effort) |
SENTINEL_TERMINAL | 检测到 done / failed / blocked / stopped |
SENTINEL_TMUX_KILLED / SENTINEL_TMUX_GONE | kill tmux 之后 |
SENTINEL_TIMEOUT | --max-wait 到了还没看到终态 |
PM 收到 notification 后的标准动作见 templates/pm-sentinel-response.md:
--status-file / --tmux-session 与 spawn-worker 一致性降级路径:如果 sentinel 没启起来(auto mode 拒 / SIGKILL / 参数错),PM 回到 §7.1
行为:单 worker 用 wait-worker.sh --once,多 worker 用 pm-monitor.sh --log-file。
降级是 graceful 的,不是失败。
调优建议:
--poll-interval:默认 5s。worker 单次 thinking 短时降到 1s,长时保持 5s--max-wait:默认 7200s(2h)。长 worker 拆 sub-task,每个 sub-task 自己的 max-wait--keep-tmux-on-terminal:review 阶段不杀 tmux,便于 PM tmux capture-pane 看 worker 收尾--pane-tail-lines 0:不需要 pane 快照时关掉,少 1 个 tmux capture-pane 调用已知不覆盖:
templates/codex-heartbeat-wait.mdworker 提 PR 不是 PM 收口完成的信号。从提 PR 到合并之间,PM 必须做两件事避免外部抢跑:
提 PR 之后立即跑 mergeable 检查:
gh pr view <N> --json state,mergeable,mergeStateStatus,baseRefName,headRefName
mergeable=CONFLICTING / mergeStateStatus=DIRTY / baseRefName 落后:base 已被 doc-curator 或其他 PR 抢跑。立即按 git-workflow 的「base 落后 / 冲突处理」决策表(update branch vs rebase vs close-and-reopen)处理。mergeable=MERGEABLE 且 base 是最新:进入 review 流程。PM 本地 main 立即 push:
git push origin main,避免本地与 origin/main drift。git fetch origin + git switch -C main origin/main(不是 git pull,squash commit 不会自动 ff),再继续 PM 工作。worker backend 选择(subagent / tmux / Agent Teams)见 §2.1。
worker 完成后:
git status --short、git diff --check main...HEAD、PR diff 范围。git-workflow。bash scripts/clean-worktree.sh --project /path/to/repo --branch docs/ch01-agent-intro --session legal-ch01
bash scripts/clean-worktree.sh --project /path/to/repo --branch docs/ch01-agent-intro --session legal-ch01 --execute
依赖按模式分层;只读文档不需要安装任何工具。首次在新机器上启动 worker 前,先运行:
bash scripts/check-dependencies.sh
bash scripts/check-dependencies.sh --backend claude-code --backend codex --check-gh
| 依赖 | 安装方式 |
|---|---|
git | 通常随开发环境提供 |
bash | 常规脚本需要 bash;pm-monitor.sh 需要 bash 4+ |
jq | macOS: brew install jqLinux: sudo apt-get install jq |
tmux | macOS: brew install tmuxLinux: sudo apt-get install tmux |
常见 Unix 工具如 awk、sed、grep、find、stat、date、mktemp 通常由系统提供;日期解析已兼容 macOS/Linux。
| 模式 | 依赖 |
|---|---|
| PR / mergeability 巡检 | gh,且需要已登录 |
| Claude Code worker | claude;第三方 provider 需要本地 settings 文件 |
| Codex worker | codex |
| OpenCode worker | opencode |
| Codex heartbeat | Codex App automation 能力;创建/修改 automation 必须使用 automation_update |
Claude 官方 agent view / --worktree --tmux | claude,必要时还需要 tmux |
scripts/terminal-split.sh 只在对应终端场景下需要额外工具:Kitty 需要 kitty @,WezTerm 需要 wezterm cli,macOS GUI 终端自动化依赖 osascript,Warp/Ghostty/Zed/Terminal.app 分屏或新标签能力取决于本机应用和辅助功能授权。
完整依赖矩阵见 references/runtime-dependencies.md。依赖检查脚本只报告状态,不安装软件、不启动 worker、不改配置。
只在需要细节时读取:
references/model-selection-matrix.md:模型与执行模式选择。config/claude-provider-settings.example.json:Claude Code 第三方 API provider settings 模板。references/runtime-dependencies.md:按模式拆分的本地依赖矩阵和安装建议。references/checkpoint-files.md:STATUS.json、RESULT.md、PATCH_SUMMARY.md 的字段和模板。references/parallel-lessons.md:tmux/Agent Teams 实战坑点。references/agent-teams-troubleshooting.md:Agent Teams / agent view / Claude 原生 --worktree --tmux 后端排障。references/legal-domain-templates.md:法律项目拆解样例。官方文档:
https://code.claude.com/docs/en/agent-viewhttps://code.claude.com/docs/en/worktreeshttps://code.claude.com/docs/en/cli-usagehttps://code.claude.com/docs/en/checkpointing脚本:
scripts/check-dependencies.sh:检查核心依赖、backend CLI、GitHub CLI 和终端分屏工具。scripts/render-runtime-profile.sh:按 backend/profile 生成 worker command、prompt context 和 spawn metadata。scripts/spawn-worker.sh:创建隔离 worktree、Session Context 和 tmux session,并输出启动 gate。scripts/pm-monitor.sh:自动 PM 巡检脚本,保留 checkpoint 文件、Agent Teams inbox、tasks、Git SHA、PR 状态、tmux session、Wave 和多信号进展监控。scripts/wait-worker.sh:单 worker 等待器,可接 Claude Code background Bash 或 Codex heartbeat automation。scripts/worktree-status.sh:单 worker 只读总览,展示 metadata、checkpoint、tmux 和 git 状态。scripts/clean-worktree.sh:worker session/worktree 安全清理,默认 dry-run,清理前展示 metadata 摘要。scripts/smoke-tmux-worker.sh:临时 repo 端到端 smoke test;只在修改 Skill 脚本后运行。scripts/lint-wait-script.sh:wait/monitor/custom wait 脚本 lint;只在修改 wait/monitor 脚本后运行。scripts/terminal-split.sh:可选可视化辅助,保留 iTerm2、Kitty、WezTerm、Warp、Ghostty、Zed、Terminal.app 支持;默认编排不依赖它。模板:
templates/worker-prompt.md:worker bootstrap 和完整派发 prompt 模板。templates/orchestration-goal.md:PM 级连续多 Wave Goal Contract 模板。templates/project-config.json:可选项目级编排配置模板,声明 trunk、任务源、验证命令、provider slot、非敏感配置复制和 hook 边界。templates/codex-heartbeat-wait.md:Codex App heartbeat 巡检 prompt。templates/wave-summary.md:每轮 Wave 收口和 provider/model 评估模板。templates/checkpoint-status.json:STATUS.json 模板。templates/checkpoint-result.md:完成/失败结果摘要模板。templates/checkpoint-patch-summary.md:PR review 用 diff 摘要模板。