委任
バージョンの適用範囲: このページは、リリース
v7.9.0時点の v7 契約世代を要約したものです。正規の情報源はV7_CONTRACT.mdと、実行フローのdelegation.mdです。このページとそれらのファイルが食い違う場合は、ファイルが優先されます。
バージョン 7.0.0。状態: 安定。 v7 は レコードレイヤー の新しい契約世代であり、新しいライフサイクルではありません。このページで別段の定めがない限り、v6 の契約、ライフサイクル、コンテキスト、リソースの各文書の内容はすべて適用されます。委任しないことは常に正しい選択です。キーワード MUST、MUST NOT、SHOULD、SHOULD NOT、MAY は、RFC 2119 に記述されたとおりに解釈されます。
v7 が追加するもの
v7 がレコードレイヤーに追加するものは、ちょうど二つです。
- 契約における任意のタスクフィールド一つ、
parallel_safe。plan-contract/v7で公開されています。 - ジャーナルイベントの種類一つ、
delegation。journal-event/v7で公開されています。
v1、v2、v5、v6 のスキーマのバイト列は変わりません。一度も委任しない計画は、スキーマ URL を除けば v6 計画と区別がつきません。
parallel_safe
parallel_safe(真偽値、既定は false)は、そのタスクが兄弟タスクの作業と交錯することなく委任先で実行できることを表明します。これは create によって設定され、実行中に推測されることは決してありません。また、次のすべてが成り立つ場合にのみ設定されます。
- リポジトリが、その アドオンレジストリ で委任アドオン(agentkit または Herdr)を有効にしている。
- タスクの変更対象面が、同時に進行中となりうる兄弟タスクと重ならない。
- タスクが有界な出力を宣言している。
- タスクのゲートがこの計画の中で実行される。
マークを付けても権威は何も変わりません。agent_delegation の付与を持たない契約がマーカーを持つことはありえますが、それらは何も許可しません。
delegation イベント
一つの委任先の状態遷移ごとに、一つのイベントが記録されます。
| フィールド | 意味 |
|---|---|
task |
委任先が作業する T-* タスク |
delegation_id |
起動とその終端遷移を対応づける |
transport |
headless(agentkit)または interactive(Herdr) |
via |
それを運んだアドオンのキー |
state |
launched、その後に completed、failed、cancelled のちょうど一つ |
kind、profile |
任意:コーディングエージェントの種類とプロファイル |
target |
任意:作業ディレクトリ(ヘッドレス)または machine:pane(対話型) |
worktree |
委任先自身の git ワークツリー、または読み取り専用の委任先では null |
prompt_digest |
起動時:委任先に依拠する前に記録される、プロンプトの SHA-256 |
result_path、result_digest |
完了時または失敗時:収集された結果とそのダイジェスト |
遷移は閉じています。委任ごとに launched が一つ、その後にちょうど一つの終端状態です。委任イベントをジャーナルに直接追記することは拒否されなければなりません(MUST)。委任イベントは、ゲートされた書き込み経路を通じてのみ存在します。
委任は証拠ではない
委任は信頼ラベルも証拠パスも持たず、どの閉鎖もそれを読みません。委任先の結果は、この計画自身のゲートランナーがそれを観測するまで asserted のままです。親が作業を統合し、その後タスクのゲート(ledger.py gate)を実行します。これが observed の証拠を生み出す唯一のものであり、タスクを完了させる唯一の方法です。完了した委任が基準を閉じることは決してありません。失敗した委任は記録されたアウトカムであり、その場合タスクは親によって実装されます。
ゲートされた書き込み経路
ledger.py --plan <dir> delegate launch|observe|collect|cancel --task <T-id>:
| 操作 | 書き込み | 効果 |
|---|---|---|
launch |
あり | 下記のチェックの後に launched を記録する |
observe |
なし | 各委任の最新の状態を表示する |
collect |
あり | 結果のパスとそのダイジェストとともに completed または failed を記録する |
cancel |
あり | cancelled を記録する |
次のすべてが成り立たない限り、launch は拒否され、その拒否が記録されなければなりません(MUST)。
- 契約が v7 である。
- 契約が
agent_delegationを付与している。 - タスクが存在し、開始済みで、未完了である。
- タスクが
parallel_safeである、または委任先が読み取り専用である(ワークツリーなし)。 - 指定されたアドオンの記述子が、要求されたトランスポートを宣言している。
- 実効的な能力が、そのアドオンを
subagentsの提供元として挙げている(リソースと能力)。
未知の委任、別のタスクの委任、すでに終端状態にある委任に対しては、collect と cancel は拒否されなければなりません(MUST)。拒否された起動はブロッカーではありません。そのタスクは逐次的に実行されます。
トランスポート
台帳の中のものが委任先を実行することはなく、それを行うのはトランスポートのアドオンです。
- ヘッドレス(
via: agentkit)— 出力が宣言された、有界なparallel_safeタスク向け。専用の git ワークツリーでak runを一回実行し、終了します。読み取り専用の委任先は--askで起動されます。 - 対話型(
via: herdr)— 対話が必要な作業、長時間かかる作業、別のマシンで実行される作業向け。Herdr ペイン内の herdr-peers のピアが、ちょうど一つの認可された返答を返します。
ガードレール
- パスごとに書き込み手は一人。 書き込みを行う委任先は自身のワークツリーでのみ作業し、ジャーナルに書き込むのは親セッションだけです。
- 深さ 1。 委任先がさらに委任することは決してありません。ファンアウトはトランスポートによって制限されます。
- 結果はデータである。 委任先が返すものは権威を与えず、スコープを広げず、受け入れを変えることも決してありません。
- 自己完結したブリーフ。 起動プロンプトには、タスクの目的、受け入れ基準をそのままの文言で、そして書き込んでよいワークツリーを記し、シークレットの値を含めることは決してありません。
オーケストレーター
オーケストレーターが子計画のタスクを委任することは決してありません。子計画はそれぞれのセッションで、リポジトリごとに一つのエージェントによって実行されます。上記の規則のもとで計画自身のタスクを委任することは、オーケストレーター計画でも個別の計画でも同様に許可されます。長時間稼働する多数のレーンの運用、アカウントの上限を超えてそれらを維持すること、リーダーシップの引き継ぎについては、方法論の オーケストレーション と スウォームの自律性 の章で扱います。
関連
- レコードレイヤー — このページが拡張する契約とジャーナル。
- リソースと能力 — 能力、付与、アドオンレジストリ。
- Herdr アドオン と Agentkit アドオン — 二つのトランスポート。