走らせながらエージェントへの指示を直し、仕組みを更新・再起動して配り直すことを、ヘッドレスの Claude Code に仕事を分担させる技術検証のあいだ繰り返していました。ところが、直した指示が走っているエージェントに届いていないことに、何度も後から気づきました。
結論
- 私たちの仕組みでは、エージェントへの指示を、起こすときの最初のターンの
-pのプロンプトに入れていました。承認のあとの--resumeで足されるのは再開のプロンプトだけで、指示は1文字も入りません。配り直しは、次に新しく起きるエージェントの作業にしか効きません。 - 承認と、次のエージェントの起動は数秒で続きます。「エージェントが止まったら配り直す」では間に合いませんでした。
- 走っているセッションに確実に届く口は、承認に添える指示(差し戻しの理由の欄)だけでした。これは再開のプロンプトに入ります。
- 配り直し(次に起きるエージェントの作業に効く)と、承認に添える指示(いま走っている作業に効く)は別の口なので、両方やることにしました。
試した仕組み
- エージェントは
claude -pで起こし、節目で承認の申請を出して止まり、人が承認か差し戻しをすると、claude --resumeで続きから走る作りでした。 - 承認なら、そのエージェントが走り切ったあと、次の工程のエージェントが自動で起きました。
- 新しいエージェントを起こすかどうかのスイッチ(以下、起動スイッチ)がありました。オフにしても、走っているエージェントは止めませんでした。
- 指示の調整は、仕組みを調整していた別の Claude Code のセッションが受け持ち、指示を直しては仕組みを更新・再起動して配り直していました。
指示はどこから入るか
下の図は、1つのエージェントが起きてから次のエージェントが起きるまでに、どの口から何が入るかを表しています。私たちの仕組みで指示が入るのは、起こすときの -p だけでした。
再開のプロンプトを組む処理は、承認・条件付き承認・却下のどれの場合でも、承認に添える指示(差し戻しの理由の欄)をプロンプトに入れていました。だから、直した文をそこに貼れば、走っているエージェントにも同じ内容が届きます。逆に、仕組みを配り直しても、すでに走っているセッションには届きません。変更をコミットしただけなら、もちろんどこにも届いていません。

起きたこと
届いていないことに気づくのは、いつも後からでした。
| やったこと | 起きたこと |
|---|---|
「rm は拒否されるので試さない」を全エージェントの指示に足して配り直した | ずっと走っていた素材を作るエージェントには一度も届かず、同じ壁に3回当たった。うち1回は、調整していたセッションが、承認に添える指示に「12枚を消してください」と書いたのが原因だった(消せない物を消せと言った) |
| エージェントが止まったら配り直そうとした | 同じ形で3回際どいことになり、1回は間に合わなかった。走り出したエージェントを 0.4 分の時点で中断した(捨てる作業はほぼ無かった) |
| 承認と、起動スイッチのオフを1行のコマンドに並べて打った | 承認が先にエージェントを起こし、オフが間に合わなかった |
| 1回承認した | 承認したエージェントが 22 分かけて走り切り、その完走が次のエージェントを起こした。1回の承認で、2つ先まで動いた |
| 申請を出す直前のエージェントに中断を求めて、訂正を渡そうとした | 私たちのフックは中断の求めを受け取っても申請を止めず、訂正の文も届けない作りだった。訂正前の数字のまま申請が上がってきた。気づいたのは数字が違ったからで、届かなかったことはどこにも記録されない |
| 配り直しのあとに承認した | 配り直しの再起動で起動スイッチがオフに戻っていたのに気づかず、承認は記録されたが、エージェントは起きなかった(ログには、停止中なので再開しないという旨が出ていた) |
落ち着いた順番
最後に落ち着いたのは、次の順番です。
- 指示を直し始めた時点で、起動スイッチを切る。切れ目を待つのではなく、切れ目を作ります。
- 走っているエージェントが止まったことを確かめる。状態の記録(DB の
status='running')とプロセスの両方を数えます。runningが 0 件でもプロセスが生きていることも、その逆もありました。 - 配り直す。
- 起動スイッチを入れ直す。配り直しの再起動で、スイッチは切れた状態に戻るためです。
- 最後に承認する。承認は次の起動の引き金なので、必ず最後にします。走っているセッションに直しを効かせたいなら、同じ文を承認に添える指示にも貼ります。
確かめていないこと
- 走っているセッションに後から指示を届ける、Claude Code 側のほかの手段(stream-json の入力で追加のメッセージを送るなど)は試していません。私たちの仕組みは、
-pで起こして、承認のたびに--resumeする作りでした。 - 仕様を凍結する、基準を決めるといった要の工程なら、数分の作業を捨ててでも中断し、新しい指示で走らせ直す価値がある、と判断していました。捨てた分の費用は測っていません。
おわりに
私たちの仕組みでは、-p と --resume で動かすエージェントに指示が入る口は、「起こすとき」と「再開のプロンプト」の2つだけでした。直した指示を確実に効かせるには、両方の口に同じ文を入れ、承認を最後にする必要がありました。
※ この記事に書いた Claude Code の振る舞いは、執筆時点のものです。いまは変わっている可能性があります。


