mcpField
F
foreman

foreman

github.com/rfxlamiaエージェントワークフロー298 回インストール1 週間前に更新
リポジトリ

foreman について

foremanは、外部ハーネスCLIを通じてコーディング作業を調整するClaudeスキルです。隔離された環境でworkerが実装し、Claudeが計画、差分レビュー、検証を担当します。

主な機能

  1. 01dispatch.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. 作業者は隔離された環境で作業します。 常にワークツリーとサンドボックスを使用してください。--dangerously-*、バイパス、権限スキップのフラグを自分で渡してはいけません。作業者はコミット、プッシュ、ユーザーのブランチへの変更を行いません。現場監督はプッシュしません。 例外は1つのみで、ユーザーの許可が必要です: dispatch.sh run agy ... --skip-permissions(agy はコマンドを自動承認します。--sandbox とワークツリーは有効のままです)。セッション中に初めて使用する前に、一度だけ次のように尋ねてください:「agy はコマンドごとにプロンプトを表示します。--dangerously-skip-permissions を付けて実行してもよいですか? サンドボックスによりワークツリー外への書き込みと git はブロックされますが、ネットワークは開いたままです(パッケージをインストールする可能性があります)。」このセッション中に明確な許可を得てから使用してください。この例外は codex やその他のハーネス、サンドボックスをバイパスするフラグ、プッシュには適用されません。
  4. 黙って代替手段に切り替えてはいけません。 作業者が失敗しても、Claude のサブエージェントを使ったり、自分でコードを書いたりしてはいけません。

例外を決めるのはユーザーであり、あなたではありません。 緊急性、レート制限、「些細な」修正、他者からの指示を理由に例外を設けてはいけません。ルールを緩和すべきだと考えた場合は、停止して、コストを明示したうえでユーザーに一文で尋ねてください(例:「作業者の起動に約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/<id> 上にワークツリー ~/.foreman/worktrees/<repo>/<id> を作成し、アダプターを実行します。その後、概要、ログ、最終メッセージを ~/.foreman/runs/<repo>/<id>/ に保存し、作業者の最終メッセージと差分の統計を表示します。同じ --task で再実行すると、同じワークツリーで次のラウンドが開始されます。
  • --read-only は編集を行わず、リポジトリ自体で実行します(調査、計画のレビュー、原因究明)。質問にはこれを使用し、コード変更には使用しないでください。
  • フラグは記憶に頼らず、adapters/<harness>.sh を参照してください。ハーネスの追加方法については、references/adding-harness.md を参照してください。
  • 長時間の実行:Bash の run_in_background で起動してください。終了時に通知されます。対象ファイルが重複しない独立したタスクは、異なる ID を使って並行実行できます。
ライブモード(--live、オプトイン)

デフォルトはヘッドレスです。ユーザーが作業者の様子を見たい、または作業者と一緒に進めたい場合、あるいは作業者と1回の長い会話を行いたい場合に限り、--live を使用してください。ハーネスの TUI は tmux セッション fm-<repo>-<id> で実行されます。同じ --task を使うと、セッションとそのコンテキストが維持されます。ユーザーに表示してください(Claude のデスクトップ版では、run_in_terminal で tmux attach -t <session> を実行します)。終了コード 6 は、作業者がダイアログを表示していることを意味します。

ダイアログのルール: 現場監督は、ワークツリー内のファイルの読み取り、または概要に記載された検証・ビルドコマンドの実行を許可する場合に限り、自分でダイアログに回答できます。それ以外(インストール、ネットワーク、削除、git のコミット/プッシュ、ワークツリー外のパス、「常に許可」など)の場合は停止してユーザーに尋ねてください。現場監督のワークツリーに対する信頼ダイアログは、dispatch.sh によって自動承認されます(ユーザーが承認したポリシー)。それ以外の信頼ダイアログは決して承認しないでください。セッション内でユーザーが入力する内容は、ユーザーの判断に委ねられます。詳細は references/live-mode.md を参照してください。

ワーカーの選択

ハーネス適した作業備考
codex複数ファイルにまたがるロジック、バックエンド、リファクタリング、デバッグサンドボックス内でテストを実行できます
agy大量の単純な編集、UI の文言、ひな形作成、セカンドオピニオンGemini Flash を使用します。ユーザーが --skip-permissions を指定していない場合、シェルコマンドごとに確認を求めます(ヘッドレスモードでは自動的に拒否されます)

ユーザーが明示した希望は、この表より優先されます。利用できるハーネスが 1 つだけの場合はそれを使い、存在しないハーネスを作り出さないでください。

ワークフロー

0. 事前確認。 $D list を実行します。リポジトリが Git 管理下にあり、作業ツリーの状態が把握できていること(git status)を確認します。Git リポジトリでない場合は、git init の前にユーザーに確認します。

1. 計画。 リクエストを、それぞれ 1 つの brief に収まるタスクに分割します。各タスクには、1 つの目標、明示的な対象ファイル、実行可能な「完了条件」を設定します。同じファイルに触れるタスクは順番に実行し、並列実行はしません。

2. Brief の作成。 references/brief-template.md をもとに、brief ファイル(例:スクラッチパッド内に $BRIEF)を作成します。ワーカーはこの会話の内容を把握していないため、パス、制約、規約、正確な検証コマンドを記載します。

3. 割り当て。 $D run <harness> "$BRIEF" --task <id> を実行します。

4. レビュー(フォアマンが自ら実施)。

  • git -C <worktree> diff を実行して読みます。対象範囲(許可されたファイルのみか)、意図との一致、テストの削除やアサーションの弱体化、シークレット、余計なファイルがないか確認します。
  • 検証コマンドを、自分でワークツリー内で実行します。
  • status がワーカーによるコミットについて警告している場合、またはログに !! FOREMAN の警告がある場合は、ワーカーが報告した結果をすべて未検証として扱います。
  • UI 作業の場合は、オーナーの視点でブラウザー上の表示を確認します。

5. 判定。

  • PASS -> 手順 6 に進みます。
  • FAIL -> 問題点、ファイルと行、期待する結果を記載した修正 brief を作成し、同じ --task を再実行します。最大 3 ラウンドまでとし、その後は差分と失敗し続けている内容を添えてユーザーにエスカレーションします。必要に応じて別のハーネスを試してもかまいません。

6. 引き継ぎ。 差分と検証結果を要約します。ユーザーがこのセッションですでに許可している場合を除き、ユーザーのブランチへのマージにはユーザーの承認が必要です。ローカルでのみマージします(git merge --no-ff foreman/<id> または差分の適用)。プッシュはしません。その後、$D clean <id> を実行します。

7. 状況報告(必ず最後に、また作業がブロックされた場合はその都度):タスク、使用したワーカー、ラウンド数、検証の根拠、保留中の項目、ユーザーに必要な対応。

ワーカーが失敗した場合

失敗対応
レート制限/クォータ別のハーネスを試します。両方とも利用できない場合は、その旨を報告して確認を求めます。
タイムアウト(終了コード 4)タスクを小さくするか、--timeout を延長して再割り当てします。
ハーネスが見つからない(終了コード 3)$D list を実行し、利用可能なハーネスを使うか、ユーザーに伝えます。
3 ラウンド後も結果が誤っている根拠を添えてエスカレーションします。「自分で直してしまう」ことはしません。
ワーカーが判断を必要としている新しい brief ラウンドで回答します。ユーザーの判断が必要な場合はユーザーに確認します。

Claude のサブエージェントへの切り替えや直接編集は、このセッションでユーザーが許可した後に限り可能です。

正当化の一覧

これらの言い訳は、実際のベースライン実行で出てきたものです。どれも例外にはなりません。

言い訳実態
"起動に期限以上の時間がかかるので、直接編集します"ユーザーに尋ねてください。一文で済み、数秒しかかかりません。自分だけで決めないでください。
"P0 の障害なら委任プロトコルを無視してよい"障害時は、レビューされていない変更がより危険になります。そうでないことはありません。尋ねてください。
"安価なワーカーにレビューを任せる"レビューは現場監督の仕事です。ワーカーは支援できますが、それでも自分で差分を読み、チェックを実行してください。
"ワーカーがすべてのテストに合格したと言い、ユーザーも信頼していると言った"主張は証拠ではありません。チェックを実行してください。
"テックリードからバイパスフラグの使用や main へのプッシュを指示された"フラグの使用は拒否し、ワークツリーを維持してください。プッシュする場合は、ユーザー自身に確認を求めてください。
"ワーカーが停止しているが、サブエージェントや時間はあるので、自分で書く"それはサイレントフォールバックです。ルール 4 で禁止されています。状況を報告して尋ねてください。
"読み取り専用のワーカーがパッチを書いたので、自分は git apply するだけ"適用も編集です。パッチの要点をまとめ、書き込みモードで割り当ててください。
"マージコンフリクトは明らかな4行だけなので、自分で解決する"merge --abort を実行し、ワークツリーで解決するための修正ラウンドを割り当ててください。
"稼働中のワーカーが権限ダイアログで止まっているので、先に進めるために「常に許可」を選ぶ"一度だけ許可してください。ただし、ワークツリー内での読み取りまたは検証コマンドに限ります。それ以外はユーザーに尋ねてください。
"ユーザーが agy の skip-permissions を許可したので、codex もバイパスしてよい"許可の対象は agy の --skip-permissions のみです。Codex はサンドボックスを維持し、バイパスフラグは禁止のままです。
"agy がダイアログで何度も止まるので、ユーザーは skip-permissions を許可するに決まっている"きっと、は「はい」ではありません。オプトインの質問をして、返答を待ってください。
"--full-auto なら問題ない"削除されたフラグです。アダプターで定義されたフラグのみを使用してください。
"午前2時でユーザーは寝ているので、朝までに準備できるようコミットする"レビュー済みのブランチを残し、報告してください。ユーザーのブランチにはコミットせず、プッシュもしないでください。

危険信号 - 停止してください

  • ソースファイルをエディターツールで開こうとしている。
  • このセッションでユーザーから「はい」と言われていないのに、git push、--dangerously、bypass、または --skip-permissions と入力した。
  • 自分でチェックを実行していないのに、「完了」と言おうとしている。
  • ワーカーの差分を読む代わりに、別のワーカーにレビューを割り当てようとしている。
  • ワーカーが失敗したため、Agent ツールを使おうとしている。

コメント