exec 是 umputun/cc-thingz 中的一个技能,用途是按顺序执行计划文件中的任务,每个任务都在独立的子代理中运行。当用户说出“exec”“execute plan”“run plan”,或希望逐任务实现某个计划文件时,可以使用该技能。
主要能力
- 解析计划文件:如果参数中包含文件路径则直接使用;否则列出 plans_dir 用户配置目录(默认 docs/plans/)中的 .md 文件,排除 completed/ 目录。若只有一个计划则自动使用,若有多个则询问用户选择。
- 读取计划文件并统计任务范围:统计 ### Task N: 或 ### Iteration N: 形式的任务段总数。
- 检测默认分支:通过 detect-branch.sh 确定默认分支。
- 询问工作树隔离:检测当前分支状态,询问用户是在隔离的 git worktree 中创建功能分支,还是在当前工作目录中就地创建。
- 创建任务列表:使用 TaskCreate 为每个计划任务段以及各审查阶段创建任务。
- 创建分支:在就地模式下,通过 create-branch.sh 创建功能分支;在 worktree 模式下跳过此步。
- 初始化进度文件:通过 init-progress.sh 创建带标题的进度文件,并报告完整路径。
- 任务循环:重复查找第一个仍有 [ ] 复选框的任务段,向用户公告任务内容,然后启动一个子代理执行该任务。子代理返回后重新读取计划文件,检查该任务的复选框是否已变为 [x]。若成功则继续;若失败则用新的子代理重试,最多 task_retries 次(用户配置,默认 1)。若所有重试均失败,则停止并向用户报告失败。
- 多阶段审查:任务全部完成后,依次运行审查阶段 1(综合审查,迭代 1 启动 5 个并行审查代理:质量、实现、测试、简化、文档;后续迭代仅启动 2 个关键问题审查代理)、审查阶段 2(代码异味分析,运行一次)、审查阶段 3(外部对抗性审查循环)、审查阶段 4(仅关键问题,2 个审查代理 + 修复器)。
- 最终整理:rebase、清理提交、验证。
- 统计汇总:从会话日志聚合 token、时长、git 统计。
使用方式
- 文件解析:始终使用 resolve 脚本读取提示和代理文件,不要手动构建覆盖链。例如: bash ${CLAUDE_PLUGIN_ROOT}/skills/exec/scripts/resolve-file.sh prompts/task.md ${CLAUDE_PLUGIN_DATA} bash ${CLAUDE_PLUGIN_ROOT}/skills/exec/scripts/resolve-file.sh agents/quality.txt ${CLAUDE_PLUGIN_DATA}
- 占位符替换:读取提示文件后,在传给子代理之前替换所有占位符,包括 PLAN_FILE_PATH、PROGRESS_FILE_PATH、DEFAULT_BRANCH、${CLAUDE_PLUGIN_ROOT}、RESOLVE_SCRIPT、PLUGIN_DATA_DIR、USER_RULES 以及阶段特定值(FINDINGS_LIST、REVIEW_PHASE、DIFF_COMMAND)。
- 自定义规则加载:执行前通过 Bash 工具运行 bash ${CLAUDE_PLUGIN_ROOT}/scripts/resolve-rules.sh planning-rules.md ${CLAUDE_PLUGIN_DATA} 检查用户自定义规则。若输出非空,则作为已解析的自定义规则内容存储,并在替换 USER_RULES 时用“ADDITIONAL CUSTOM RULES:\n”作为标签包裹;若为空则替换为空字符串。
- 分支创建:就地模式下必须运行 bash ${CLAUDE_PLUGIN_ROOT}/skills/exec/scripts/create-branch.sh <plan-file-path>,不要手动创建分支。
- 进度文件:初始化使用 bash ${CLAUDE_PLUGIN_ROOT}/skills/exec/scripts/init-progress.sh /tmp/progress-<plan-name>.txt <plan-file-path> <branch-name>;之后始终使用 append-progress.sh 写入,不要直接写入。
- 任务循环:每次迭代只启动一个任务子代理,等待其返回后再启动下一个。
- 审查阶段:审查阶段 1 中,将 review.md 作为 playbook 读取(而非子代理提示),由主会话发起并行 Agent 工具调用。
适用场景
- 用户希望按计划文件逐任务实现功能或修复问题。
- 需要将计划中的任务隔离执行,避免相互干扰。
- 需要在任务完成后进行多阶段代码审查和最终整理。
- 需要统计执行过程中的 token、时长和 git 数据。
限制
- 任务循环必须串行执行,不能并行批量启动多个任务子代理;计划任务是有序且相互依赖的,并行运行会破坏计划和工
作树。
- 编排器本身不读取代码、不调试错误、不调查诊断信息、不修复问题;所有代码工作都在子代理内完成。
- 停止循环的唯一条件是计划中不再有 [ ] 复选框,不能根据子代理返回文本停止。
- 最大迭代次数安全限制为 50,达到后停止并向用户报告。
- worktree 隔离仅支持 git;hg 仓库会跳过 worktree 询问并在当前目录继续。
- 外部审查提示和最终整理提示使用 git 特定命令,未做 VCS 翻译;hg 用户可通过覆盖 .claude/exec-plan/prompts/codex-review.md 和 .claude/exec-plan/prompts/finalizer.md 实现 hg 原生审查/整理。
- 自动模式不免除工作树隔离询问,因为该选择影响用户的工作目录。
- 若用户选择 worktree 隔离,主工作目录必须完全不被触碰;需验证主树分支未变,若变化则停止并报告隔离违规。
- 审查阶段 1 中,若达到 review_iterations(用户配置,默认 5)仍有问题,则报告“Review phase 1: max iterations reached, moving on”并继续。
- 修复器返回后检查未提交更改,若有则显示所有路径并警告这些更改不在下一次审查使用的已提交分支差异中;此检查仅报告,不重试、不中止、不提交遗留内容。