Skip to content

implementer agent definition carries effort

smileygames edited this page Sep 11, 2026 · 1 revision

実装委譲エージェントに定義ファイルを与え、effort をそこで固定する判断

Question

実装担当サブエージェントの reasoning effort を high に固定したい(Master 指示、2026-09-11)。effort はスポーン呼び出しのパラメータに無く、エージェント定義ファイルでしか決まらない。一方 skills/task-subagent-spawn/SKILL.md は定義ファイルでの固定を禁じていた。禁止を撤廃するのか、狭めるのか。狭めるなら本文に何を書くのか。

Current resolution

禁止は撤廃せず、理由の射程に合わせて狭める。 実装は #1946 / PR #1947(2026-09-12、release type = patch)。

  • 禁止の理由は「定義本文がサブエージェントのシステムプロンプトを置き換えるため、brake 1 が観測対象にしている素の挙動が変わる」。この理由が及ぶのは brake 1 の評価者だけであり、実装委譲には及ばない。literal を観測対象に限定し、理由文はそのまま残す。
  • 実装委譲用の定義を両ポートに新設(adapter/claude/agents/implementer.md / adapter/codex/agents/implementer.toml)。effort のみ固定し、model は書かない —— skills/task-subagent-spawn/SKILL.md の「非 brake spawn は model を省略して親を継承する」を維持するため。親のティアが変われば追従する。
  • 両ポートとも sentinel 区画を持つ。本文は Li+ 所有の責務記述のみで、利用者所有の内容を挟まない設計にしたため、agent-file-criteria-owned-by-sentinel-region の問い2を通る。いちばん改訂が要る本文が既存ワークスペースへ伝播する。

本文は自己完結で書く —— 置換か重ねかが決まらないまま実装に入るため

定義本文がシステムプロンプトを丸ごと置き換えるのか、基底の上に乗るのかは未決着である。撃つ前に「消えた = 全置換の強い証拠 / 残った = 重ねの証拠にしない」と判定基準を固定して測り、結果は「残った」—— 判別不成立。ハーネスの注入文もサブエージェントに届くため、注入経路の可能性が潰せていない。

この未決着を解かずに実装へ進めるのが、自己完結という選択である。基底が残っていても消えていても成立する本文にすれば、どちらの読みでも動く。差分として書けば、未測定の基底を前提にした記述になり、置換だった場合に崩れる。

Edges

  • depends on agent-file-criteria-owned-by-sentinel-region — 新規2ファイルが区画を持てるかは同 entry の順序つき2問で決まる。本件は本文を Li+ 所有のみに保つ設計側の義務とセットで問い2を通した。同 entry が dialogue-evaluator で問い2に落ちた実例を残したため、区画は自動で付くものではなく書き方の制約であることが先に言語化されていた。
  • relates to brake1-bounded-convergence-loop-on-pr-comments — 本 PR は3ラウンド回した。round 2 の1回目が spend limit で判定ゼロに終わり、baseline 不動を確認のうえ同一ラウンドの撃ち直しとした(往復には数えない)。同 entry の再走行規定が実際に発火した初回の記録。

Background

測定は2セッション(Lin / Lay)で並行して行い、使い捨ての定義ファイル1本を共有ワークスペースに置いた。

  • (A) 定義本文はハーネスが渡す環境情報を消さない。 最小本文の腕が作業ディレクトリ・プラットフォーム・git 判定・日付の4項目すべてに答えた。2セッションで値が割れ、それぞれ自分の親と一致したため、既定値を答えただけの可能性は潰れている。「最小にすると全部まっさらになる」という最悪の読みは否定された。
  • (B) 経路は判別不成立(上記)。
  • (C) 定義ファイルの更新は、走行中セッションの次の spawn から効く。一方、使用可能ツール種別の通知は作成時1回だけで、編集では飛ばない。 削除も同じ経路を通る。

Constraints

  • brake 1 の評価者は対象外。 素の状態を観測に使うという現在の設計判断が効いているため。その判断ごと見直せば評価者にも effort を載せられるが、別の判断であり本件には混ぜない(Master 判断、2026-09-11)。
  • premise の初版に誤りがあり、実装前に訂正した。 「agents は Create-only なので改訂は届かない」と書いていたが、現物は「どのファイルが区画を持つかは列挙ではなく判定基準で決まる」と明記しており、dialogue-evaluator は「一覧の項目ではなく分岐の実例として」名指されていた。1ファイルの結果をディレクトリの性質として一般化した誤読である。誤ったまま実装していれば、いちばん改訂が要る本文が永久に届かない設計になっていた。

Conclusion

採った案 = 禁止の literal を理由の射程へ狭め、実装委譲側にのみ定義ファイルを与える。

却下した案:

  • 禁止を撤廃する。 理由は brake 1 の観測対象に対しては今も有効であり、撤廃は有効な制約を巻き込んで捨てる。
  • 本文に general-purpose の中身を書き起こす。 測定 (A) により、最小本文でも環境情報は消えないと分かっている。重装備は不要。
  • (B) が決まるまで実装を止める。 自己完結という書き方でどちらの読みでも成立させられる以上、測定待ちはブロッカーにならない。

受容した代償

  • Claude 側では sentinel 2行がシステムプロンプトに入る。 agent-file-criteria-owned-by-sentinel-region が既に受容済みのコスト。Codex 側は TOML コメントのため代償ゼロ。
  • 本文に書いたものがそのまま実装委譲の人格になる。 自己完結で書く以上、分量と内容の選択がそのまま挙動の選択になる。

検証の到達点

本変更の受理は、マージしたセッションでは確認できない。 隣接 entry と同じ到達点であり、本サイクルではそれを親自身が踏み外した。マージ直後に「いまこの瞬間から走行中セッションの次の spawn で新しい定義が使われる」と周知したが、成立していない —— 測定 (C) が測ったのはローカルの運用コピーを直接編集した経路であり、リポジトリへのマージが .claude/ に届くのは Li+update を経由したときだけである。他方のセッションが現物(.claude/agents/ に implementer.md が無い)を確認して指摘し、撤回した。マージは配布ではない。

仕様の字面から言えるのはここまで:対象が存在しない現状では、Li+update.md 4c.6 / 4x.5 のどちらの枝を通っても「生成される」に着地する。次に Li+update が走るセッションで作られ、そこから効く。 それが実際に起きたことの確認は未了であり、memory/self-evolution-observation.md の観測対象に置いた。

Related

  • issue #1946 / PR #1947
  • issue #1784 — dialogue-evaluator が問い2に落ちる残余。本件は同じ問いを設計側で通した対照例
  • issue #1782 — セッション内到達の欠落。測定 (C) はこの軸に新しい実測を足している(運用コピーの直接編集は次の spawn に届く/通知は飛ばない)

要求仕様書 (1-6)

参考文書 (A-L)

判断構造

Clone this wiki locally