FACTUAL ACTIVITY RECORD · 実際の作業をもとにした活動記録
Custom AgentのlifecycleをMakoへ中央集約する
作業区切りの進捗packet、深さ1の起動、Task完了照合を組織運用へ揃える
目的
複数のCustom Agentが親子関係をつくって直接起動し合う運用では、上流のagentを終了したときに実行中のdownstreamや未回収のhandoffを見落とす可能性があった。実際にこの作業でも、Organization Designerの完了通知を待たずにsessionを終了し、最終handoffを受け取れない状態が起きた。
agentの実行状態と停止判断をMakoへ集め、domain leadは要件と順序を所有しながら、agent lifecycleそのものは操作しない境界が必要だった。あわせて、複数Taskを一つのPull Requestで扱うときの完了漏れと、別repositoryのGit helperを相対pathで呼ぶ誤操作を同じ運用面から防ぐことを目的とした。
実装
AGENTS.mdと.agents/skills/software-delivery/SKILL.mdでは、domain leadを要件、call order、開始条件、合流条件のowner、MakoをCustom Agent lifecycleの唯一のownerとして分離した。role agentによるdirect spawn、message、interrupt、closeを禁止し、Makoがroot直下で各roleを起動する構成へ変更した。
.codex/config.tomlのmax_depthは4から1へ変更し、Custom Agentをroot直下だけで動かす設定にした。起動にはrole id、fork_context = false、必要最小限のstructured handoff packetを必須とし、full-historyのcontext forkとCustom Agent role overrideを併用しない。同じ作業を続けるときは、roleを変えずに既存threadへinputを送りresumeする規則とした。
Makoのactive agent ledgerは、threadとrole、要求元、handoff sequence、running・waiting・completed・error、active downstreamを保持する。downstreamが動いているparentを完了または停止扱いにせず、progress確認はnon-interruptingな状態照会に限定した。強制停止候補は、未応答、明確なruntime errorまたは停止、CEOの明示的な中断指示に絞った。
- Makoを除く7つのCustom Agentは、時間間隔ベースの定期報告ではなく、作業開始、requirementsやTask作成後、設計・draft・実装・検証の完了、role間handoff、review準備、blocker、最終handoffという意味のある区切りでpacketを返す。
- packetにはcurrent phase、完了済み、実行中または待機中のroleとTask、作業対象、検証証拠、next action、blockerまたはriskを含める。
- packetの受領自体はcompletionや停止を意味しない。Makoはactive agentとdownstreamの状態を確認してから集約statusを更新する。
- completionとfinal handoffには、開始した作業、変更、検証、記録済み成果、独立確認、未完了またはblockerを残す。
このprogress packetとlifecycle境界は、AGENTS.mdだけでなく、7つの.codex/agents/*.toml、software deliveryとPR reviewのSkill、review checklist、rules、hooks、setup、operating model、handoff exampleへ同期した。作業中にCEOは「定期的」という表現を、時間ではなく作業の意味のある区切りごとの報告へ変更するよう判断し、全surfaceを同じ定義へ揃えた。
.agents/skills/software-delivery/references/github-templates.mdにはTask-to-PR close manifestを追加した。原則は一つのPull Requestに一つのTaskとし、複数を扱う場合はprimaryとsecondaryまたはsupportingの全Task、各完了条件、反映後actionを本文とhandoffへ列挙する。Makoは反映前にmanifestと関連Taskを照合し、反映後は全件を完了更新するか、未完了理由とnext actionを残す。closing keywordだけを完了台帳として扱わない。
authentication helperとbranch-push helperには、scriptの所在から求めたrepository rootと、操作対象のGit top-levelを物理pathで比較する検査を追加した。両者が異なる場合はremoteへ接続する前に終了code 2で拒否する。同じrepositoryである場合だけ認証preflightへ進み、固定されたbranch名ではなくremote default branchを実際に読み取る。push helperも同じdirectoryの認証helperを呼び、既存のprotected branchとnon-force pushの境界を維持した。tracking policyにはlocal package storeを追加した。
検証では、project設定と7つのagent定義をTOMLとしてparseし、max_threads = 12とmax_depth = 1を確認した。2本のshell scriptの構文、別repositoryからのhelper利用とprotected branchの拒否、認証preflight、local Markdown link、旧direct-spawn表現と新しいlifecycle・fork・Task完了policyの横断検索、git diff --checkを実施した。
一次Commitの差分へ行単位で照合した、.codex/config.tomlのcutoff時点の抜粋を示す。
[agents]
# Global cap for concurrently open custom-agent threads; static agent definitions do not consume slots.
# If all seven current roles run one instance each, 12 leaves capacity for five additional concurrent threads.
max_threads = 12
# Mako is the only agent lifecycle owner; every custom role runs directly under root depth 0.
max_depth = 1
job_max_runtime_seconds = 1800図を描画しています…
確認したこと
確認結果
最終差分は28ファイル、346行追加、98行削除だった。中央集約lifecycle、深さ1の起動、7 roleの作業区切りprogress packet、Task完了照合、repository-local helper境界が、設定、agent定義、Skills、rules、hooks、template、運用文書へ揃った。
作業中に早く終了して最終handoffを受け取れなかったOrganization Designerは、CEOの判断で新しいsessionへ置き換えず、同じroleとsessionのまま再開した。その後は実行中のreviewerを時間経過だけで完了扱いせず、明示的な結果まで待つ進行を行った。
TOML、shell syntax、repository identityの拒否、protected branchの拒否、認証preflight、link、policy残存検索、差分検査が成功した。
実際のpushは検証で再実行していない。fork_contextとrole overrideの併用制約は公開資料から直接確認できず、このprojectのpolicyとして扱った。また、すべてのruntime中断条件や複数Task経路を網羅する試験は行っていない。
完了とした根拠
Custom Agent lifecycle、作業区切りのprogress packet、Task完了照合、repository-local helperの境界が28ファイルで一致し、設定、文書、template、helperの静的検査が成功した時点を、このActivityの完了とした。