この記事は、連載「追わない技術」の第 6 回です。うまくいかない症状と、その対処を一つずつ並べています。各回はファイルやスクリプトを一つ置けば完結します。その仕組みがなぜ要るのかは、置いたあとに解説を読めば分かります。連載の全体像と各回の一覧は序論にあります。
今回は、渡した仕事を、作業の途中でレビューさせる話です。サブエージェントは、いまの会話とは別に起動して、指示された範囲だけをやって報告を返してくるAIです。サブエージェントに仕事を渡す、いまの会話のAIを、ここでは本体と呼びます。困るのは、サブエージェントが仕事をしている途中で、その仕事を別の目に見直させる(レビューさせる)ときです。レビューするのは、本体か、差分を見直す別のサブエージェントです。どちらにとっても、仕事をしているサブエージェントは別の作業者で、どこまで済ませ、何を残しているかは見えません。それでも、途中で返したレビューの指摘は、人が作業の途中で口を挟むときと同じく、作業の指示として受け取られます。
サブエージェントに仕事を渡しているなら、作業の途中でレビューさせたときのことを、思い出してみてください。そのレビューの指摘は、サブエージェントがそれまでに何を済ませ、何を残していたかを知ったうえで書かれていましたか。
CC BY 4.0
「選び直して」とだけ返すと、サブエージェントは結論を変えます
以前の実験で私は、スクリプトで作った 40 件の問題の一覧から、サブエージェントに「先に直すべきもの」を優先順に 3 件選ばせ、そのあと「もう一度 3 件を選び直してください」とだけ返しました。私は、意見も、事実も、何も言っていません。
| 2 回目の頼み方 | 1 回目にいちばん先に直すべきとした問題を、2 回目で外した回数 |
|---|---|
| 「もう一度 3 件を選び直してください」 | 12 回のうち 7 回 |
| そこに「変える必要が無いと判断したなら、同じ 3 件をそのまま書いてください。」を足す | 6 回のうち 0 回 |
いちばん先に直すべきとした問題を外した理由は、2 回目の頼み方にあります。問題の中身は変えていません。「選び直して」という日本語は別のものを選ぶことを含意するので、サブエージェントにとって依頼に逆らう応答になるのは、据え置き(同じものを選ぶこと)のほうです。
なぜ、途中のレビューは、済んだぶんしか見えないまま書かれるのか
Claude Code のサブエージェントのページによると、サブエージェントは、新しく隔離されたコンテキストで始まります。例外は、こちらの会話を引き継いで始めるフォーク(fork)だけです。それ以外のサブエージェントには、こちらの会話の履歴も、本体がそれまでに読んだファイルも見えません。
Claude Code のベストプラクティスのページは、作業を終わったとみなす前に、新しいコンテキストのサブエージェントに差分を見直させる手を勧めています。同じ節によると、差分を見直すサブエージェントに見えるのは、差分と、こちらが渡した基準だけです。その変更を生んだ推論は見えません。作業の途中の差分に出ているのは、そこまでに済んだぶんだけです。差分に無い箇所が、書き忘れなのか、まだ手を付けていないだけなのかは、差分からは分かりません。
本体が知っている仕事の中身も、一部だけです。Claude Code の仕組みのページによると、サブエージェントのツール呼び出しは、本体のコンテキストに入りません。本体に戻るのは、サブエージェントが終わったときにまとめた結果です。作業の途中では、そのまとめもまだありません。
同じベストプラクティスの節には、もう 1 つ記述があります。隙間を探すよう頼まれて差分を見直すサブエージェントは、仕事が健全なときでも、そう頼まれたために、たいてい何かを報告する、というものです。
サブエージェントのページによると、サブエージェントは、起動した側からのメッセージを、作業の途中の軌道修正も含めて、ふつうの作業の指示として扱い、それに従って動きます。途中で返したレビューの指摘は、中身が正しいかどうかと関係なく、残りの作業の指示として入ります。
区切り(サブエージェントが報告を返したあと)で返した指摘は、置かれる場所が別です。サブエージェントのページによると、終わったサブエージェントに本体がメッセージを送ると、サブエージェントは、止まったところから再開します。そのときサブエージェントが持っているのは、それまでのツール呼び出しと結果と推論を含む、会話の履歴の全部です。区切りで返した指摘が足されるのは、そこまでの仕事と報告の全部の後ろです。
やり残しは、仕事をしているサブエージェントの報告にも、書かれないことがあります。Smyth ほか(2026)は、エージェント自身の記録ではしていない作業を、最終の応答がしたと報告することを、完了の言い過ぎ(overclaiming)として数えました。ファイルの見直しを頼んだ課題で、頼まれたファイルを全部は読まなかった実行が 67.9% ありました。そのうち 80.4% で、最終の応答は、全部読んだと書くか、読み残しに触れていませんでした。報告に「できました」と書いてあっても、説明されていない残作業が隠れていることがあります。
作業の途中で、レビューの指摘が返ってきたとき
あなたは、ある機能の修正をサブエージェントに任せ、そのサブエージェントが動いているあいだに、別のサブエージェントに、ここまでの差分に抜けが無いかをレビューさせました。指摘が何件か返ってきました。修正を任せたサブエージェントの報告は、まだ返っていません。あなたなら次のどちらにしますか。
- 返ってきた指摘を、いま送る
- 報告が返り、不足点を洗い出させてから、もう一度レビューさせる
答えは、報告が返り、不足点を洗い出させてから、もう一度レビューさせるほうです。レビューしたサブエージェントに見えていたのは、ここまでの差分と、渡した基準だけです。途中の差分に出ているのは済んだぶんだけで、修正を任せたサブエージェントのツール呼び出しも推論も本体には戻らず、まとめもまだありません。だから、返ってきた指摘のうち、書き忘れを突いたものと、まだ手を付けていない箇所を突いたものは、差分からは分けられません。隙間を探すよう頼まれたレビューが、仕事が健全なときでも、たいてい何かを報告することも、さきほど見たとおりです。いまその指摘を送れば、修正を任せたサブエージェントは、それを作業の指示として受け取って動き、送ったあなたは、どの指摘が済んでいない部分についてのものかを分けないまま、残りの作業の向きを変えることになります。報告が返ってから、仕事をしたサブエージェントに不足点を聞けば、そのサブエージェントは、そこまでのツール呼び出しと推論を持ったまま再開し、自分の作業の履歴を見ながら不足点を挙げることができます。レビューの指摘が足されるのは、そのあとで、終わった仕事と報告の全部の後ろです。
理解したことは一文にできます。
作業の途中のレビューは、済んだぶんしか見えない側が書き、その指摘がそのまま作業の指示として入る。だから、レビューさせるのは区切りまで待ち、仕事をしたサブエージェントに不足点を洗い出させてからにする。
レビューさせても困らないのは、2 つの場合です
- ほかの残作業に影響しない、範囲を狭めた作業であること
- 不足点を十分に洗い出したあとであること
不足点を洗い出させるときは、「不足はありませんか」に、据え置きを許す一文を添えます ——「足りているなら、足りていると書いてください」。上の選び直しの実験では、変える必要が無いならそのまま書くよう 1 文を足した 6 回で、いちばん先に直すべきとした問題を外した回は 0 回でした。この一文は、前もってファイルに書いて置いておくものと違い、聞くたびにその場で書く文です。だから書き忘れても、そのことに気づくことができません。
追加のメッセージを送ったのは、74 回とも報告が返ったあとでした
私は、過去のセッション 46 本で、サブエージェントを起動した 342 回の記録から、作業を続けさせるために追加のメッセージを送った時点を数えました。報告が返る前(途中)に送ったか、返ったあと(区切り)に送ったかは、その報告が本体へ返った時刻と、送った時刻を比べれば、プログラムで分けることができます。
| 送った時点 | 回数 |
|---|---|
| 途中(報告が返る前) | 0 |
| 区切り(報告が返ったあと) | 74 |
74 回のうち 68 回は、上の選び直しの実験で送ったメッセージです。実験か実務かは、サブエージェントに渡した依頼の文の 1 行目に書いた用途の名前で分けました。残る実務の 6 回は、どれも通信が切れたところから作業を再開させるためのもので、中身を見直させたものはありませんでした。
検証手順: 追加のメッセージを送った時点を、プログラムで「途中」と「区切り」に分ける
前提
サブエージェントへ追加のメッセージを送って作業を続けさせる手段と、その記録(起動・報告・送信の時刻)が要ります。残っていないなら、この手順は使うことができません。「報告が返った時刻」は、本体側に結果が届いた時刻で採ってください。サブエージェントの最後の発言で採ると、書き終えてから届くまでの間に送ったメッセージが、「途中」に数えられます。
所要時間: 30 分(記録が手元にある場合)
手順
- 記録から、サブエージェントへ送った追加のメッセージを全部拾います
- それぞれについて、宛先のサブエージェントの報告が本体へ返った時刻と比べ、前なら「途中」、後なら「区切り」に分けます
- 「途中」に分かれたメッセージの 1 行目を並べて読みます
合格条件
合格の条件は、手順 2 で、どのメッセージも「途中」か「区切り」のどちらかに分かれ、全部が「途中」にはならないことです。全部が「途中」なら、時刻の採り方を間違えています。
合格しなかったとき
- 全部が「途中」になる —— 報告の時刻をサブエージェントの最後の発言で採っています。本体側に結果が届いた時刻で採り直してください
後始末
集計に使った中間ファイルを削除します。記録そのものは消さないでください。結果は日付つきで残します。記録は増え続け、同じスクリプトを明日走らせると数が動くからです。
CC BY 4.0 はここまで
途中でレビューさせなくなったもの
- 私は、作業の途中でレビューさせるのをやめました。途中の差分には済んだぶんしか出ず、レビューする側には、まだ手を付けていない箇所と書き忘れが分けられません
- 続けているものもあります —— 区切りまで待ち、仕事をしたサブエージェントに不足点を洗い出させてから、レビューさせることです
次回は「モデルを選ばない技術」。私は、どのモデルに渡すかを比べるのをやめました。 比べるのに使った時間で、仕組みのほうがいくつも作れたからです。