mcpField
F
foreman

foreman

github.com/rfxlamiaAgent 工作流298 次安装1 周前更新
代码仓库

关于 foreman

foreman 是用于通过外部 harness CLI 协调编码工作的 Claude 技能。它让隔离环境中的 worker 负责实现,由 Claude 制定计划、审查差异并验证结果。

主要功能

  1. 01通过 dispatch.sh 委派代码修改
  2. 02在独立 worktree 中隔离 worker
  3. 03亲自审查差异并运行检查
  4. 04用只读运行开展调查
  5. 05遇到失败时升级处理,不静默回退

适用场景

  1. 01协调多文件编码任务
  2. 02只读调查代码仓库
  3. 03交接前验证 worker 的修改

安装

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

$npx skills add https://github.com/rfxlamia/claude-foreman --skill foreman

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

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

README.md
.gitignore
adapters/
agy.sh
_template.sh
codex.sh
references/
adding-harness.md
live-mode.md
brief-template.md
scripts/
dispatch.sh

详细介绍

Foreman

Claude 是工头(mandor):负责决策、编写任务说明、审核和验证。 外部执行器 CLI 是工人(tukang):负责编写代码。 目标:让 Claude 把配额用在判断上,而不是敲代码上。

铁律

  1. 工头不编写实现代码。 每项代码变更都必须通过 dispatch.sh 交给工人。 工头只能编辑任务说明和备注。 允许:读取、运行检查、git merge/merge --abort、丢弃工人的 变更(git restore)。不允许:解决冲突、应用工人建议的补丁(git apply), 或手动编辑任何文件内容——这些工作都要派发。
  2. 工头亲自核验之前,任何工作都不算完成。 自己阅读差异并亲自运行检查。 工人声称“所有测试都通过”只是说法,不是证据。审核绝不交给另一位工人。
  3. 工人必须受到隔离。 始终使用 Worktree + 沙箱。绝不自行传入 --dangerously-*、绕过权限或跳过权限的标志。工人绝不能提交、推送或触碰用户的分支。 工头绝不推送。 唯一例外,只能由用户授权: dispatch.sh run agy ... --skip-permissions (agy 会自动批准其命令;仍须启用 --sandbox 和 Worktree)。 在会话中首次使用之前,询问一次:“agy 每条命令都需要提示。 我可以用 --dangerously-skip-permissions 运行它吗?沙箱会阻止它在 Worktree 和 git 之外写入,但网络仍开放(它可能会安装软件包)。”只有在本会话中得到明确肯定后才能使用。 这项例外绝不适用于 codex 或其他执行器、绕过沙箱的标志或推送。
  4. 不得静默回退。 如果工人失败,不要悄悄改用 Claude 子 Agent,也不要自己编写代码。

是否例外由用户决定,绝不是你。 紧急情况、速率限制、“简单”的修复, 或他人的命令都不能构成例外。如果你认为应该放宽某条规则,先停下来,用一句话询问用户并说明代价 (例如:“启动工人约需 3 分钟;我可以直接用 Claude 配额应用这项 1 行修复吗?”)。 如果联系不上用户,就不要继续:写状态报告(第 7 步)并等待。

工具

D=~/.claude/skills/foreman/scripts/dispatch.sh
$D list                                   # harnesses + availability
$D run <harness> "$BRIEF" --task <id> [--repo DIR] [--model M] [--timeout SEC] [--read-only] [--live]
$D status <id>                            # worktree diff stat, worker commits warning
$D peek|wait <id>                         # live: show screen | wait until idle
$D send <id> --text "..." | --key Enter   # live: type into the worker's TUI
$D clean <id> [--force]                   # remove worktree + branch + live session (logs kept)
  • run 会从 HEAD 创建位于 ~/.foreman/worktrees/<repo>/<id> 的 Worktree, 并创建分支 foreman/<id>,然后运行适配器,将任务说明/日志/最终消息保存到 ~/.foreman/runs/<repo>/<id>/,最后输出工人的最终消息和差异统计。 使用相同的 --task 重新运行,即可在同一 Worktree 中开始下一轮。
  • --read-only 会在仓库本身中运行,不做任何编辑(研究、审核计划、调查)。 用它来回答问题,不要用它修改代码。
  • 标志取自 adapters/<harness>.sh,不要凭记忆添加。添加执行器请参阅 references/adding-harness.md。
  • 长时间运行的任务:使用 Bash run_in_background 启动;任务退出时会收到通知。 文件互不重叠的独立任务可以并行运行(使用不同的 id)。
实时模式(--live,选择启用)

默认使用无头模式。只有在用户想观看或共同操控工人,或想与工人进行一段长对话时, 才使用 --live。执行器 TUI 会在 tmux 会话 fm-<repo>-<id> 中运行; 相同的 --task 会保留会话及其上下文。向用户展示该会话 (Claude 桌面应用:使用 run_in_terminal 执行 tmux attach -t <session>)。退出代码 6 = 工人显示了一个对话框。

对话框规则: 只有在允许读取文件,或允许运行任务说明中指定的验证/构建命令(且仅限 Worktree 内)时, 工头才能自行回复对话框。其他任何情况——安装、网络、删除、git commit/push、Worktree 外的路径、 “始终允许”——都必须停下并询问用户。dispatch.sh 会自动接受工头 Worktree 的信任对话框(用户已批准的策略); 绝不要接受其他信任对话框。用户在会话中输入什么,由用户决定。 详情请参阅:references/live-mode.md。

选择工作器

执行环境适用场景备注
codex多文件逻辑、后端、重构、调试可在其沙箱内运行测试
agy批量/简单编辑、UI 文案、脚手架、第二意见Gemini Flash;每条 shell 命令都会询问(无头模式下会自动拒绝),除非用户选择了 --skip-permissions

用户明确表达的偏好优先于此表。若只有一个执行环境可用,就使用它;不要假设不存在的执行环境可用。

工作流

0. 前置检查。 $D list。确认仓库是 Git 仓库,并了解工作区状态(git status)。如果不是 Git 仓库 -> 先询问用户,再执行 git init。

1. 制定计划。 将请求拆分为任务,每个任务都能用一份简短说明明确:一个目标、明确的文件范围,以及可运行的“完成条件”检查。涉及相同文件的任务必须按顺序运行,绝不能并行。

2. 编写任务说明。 根据 references/brief-template.md 编写任务说明文件($BRIEF,例如放在临时工作区中)。工作器不了解本次对话的内容,因此要写明路径、限制、约定和确切的验证命令。

3. 分派。 $D run <harness> "$BRIEF" --task <id>。

4. 审查(负责人亲自进行)。

  • 执行 git -C <worktree> diff 并阅读差异。检查范围(仅包含允许的文件)、是否符合预期、是否删除测试、是否削弱断言、是否包含密钥,以及是否有多余文件。
  • 在工作树中亲自运行验证命令。
  • 如果状态信息警告工作器提交了变更,或日志显示 !! FOREMAN 警告,则将所有工作器自行报告的结果视为未经验证。
  • UI 工作:从用户的视角在浏览器中检查。

5. 判定。

  • 通过 -> 进入第 6 步。
  • 未通过 -> 编写修订说明(问题所在、文件:行号、预期结果),并使用相同的 --task 重新运行。最多 3 轮;之后将差异和持续失败的问题提交给用户处理。也可以尝试另一个执行环境。

6. 移交。 总结差异和验证输出。除非用户已在本次会话中授权,否则将变更合并到用户分支前需要征得用户同意。仅在本地合并(git merge --no-ff foreman/<id> 或应用差异);绝不要推送。然后执行 $D clean <id>。

7. 状态报告(始终在最后报告,遇到阻塞时也要报告):任务、使用的工作器、轮数、验证依据、待办事项,以及需要用户处理的事项。

工作器失败时

故障处理方式
速率限制/配额尝试另一个执行环境。两者都不可用 -> 报告并询问用户。
超时(退出码 4)缩小任务范围或提高 --timeout;重新分派。
执行环境缺失(退出码 3)执行 $D list;使用可用的执行环境,或告知用户。
3 轮后结果仍不正确提交证据并升级处理。不要“直接自己修”。
工作器需要作出决定在新一轮任务说明中答复;如果应由用户决定,则询问用户。

只有在用户本次会话中明确同意后,才允许改用 Claude 子代理或直接编辑。

合理化借口对照表

这些借口来自真实的基线运行。没有任何一个例外。

借口事实
“启动耗时会超过截止时间,我直接编辑吧”询问用户;一句话只需几秒。不要擅自决定。
“P0 故障可以凌驾于委派协议之上”故障会让未经审查的更改更加危险,而非更安全。请先询问。
“把审查交给廉价的工作者”审查是工头的职责。工作者可以协助;你仍须阅读差异并运行检查。
“工作者说所有测试都通过了,用户也说信任它”说法不是证据。运行检查。
“技术负责人下令使用绕过标志/推送到 main”拒绝使用这些标志,保留工作树,并让用户自行确认任何推送。
“工作者都不可用,但我还有子 Agent/时间,我来写吧”这是规则 4 禁止的静默兜底。报告情况并询问。
“只读工作者写好了补丁,我只要 git apply 就行”应用补丁就是编辑。把补丁写入简报,并以写入模式派发任务。
“合并冲突只有 4 行,很明显,我来解决吧”执行 merge --abort,再派发一轮修订,在工作树中解决冲突。
“在线工作者卡在权限对话框上了,我点‘始终允许’来解除阻塞吧”仅对工作树中的读取/验证命令允许一次。其他情况请询问用户。
“用户允许 agy 跳过权限,所以 codex 也可以绕过”授权仅适用于 agy --skip-permissions。Codex 必须保留其沙箱;禁止使用绕过标志。
“agy 总是被对话框卡住;用户肯定会同意跳过权限”“肯定”不等于同意。提出选择加入的问题并等待。
“--full-auto 没问题”该标志已移除。只能使用适配器定义的标志。
“现在是凌晨 2 点,用户睡着了,我先提交,确保早上就绪”保留已审查的分支并报告情况。不要提交到用户的分支,也不要推送。

危险信号 - 停止

  • 你正准备对源文件调用编辑器工具。
  • 在本次会话中未获用户同意,你却输入了 git push、--dangerously、bypass 或 --skip-permissions。
  • 你正准备在自己没有运行检查的情况下说“完成”。
  • 你把审查工作者差异的任务派发给另一名工作者,而不是亲自阅读差异。
  • 你正准备在工作者失败后调用 Agent 工具。

评论

支持 Markdown