AN-03 L1 準拠レベル: Authority グループ: 作業
Flight Recorder フライトレコーダー
実行ごとに、ハッシュでつながれた記録を残します。実行が何を読んだかも含みます。
Flight Recorder は、実行ごとに残す、追記のみでハッシュがつながった記録です。実行が読んだもの(読み取りマニフェスト)、書いたもの、許可または拒否されたこと、誰が何を承認したかが入っています。データのそばにあって、ひとつの問いに答えます。「この変更には、何が影響した可能性があるか。」
解決する課題
事後検証のとき、ログは散らばっています。「読んだこと」と、その後の行動の間には何のつながりもなく、ログは同じ管理者、ひどい場合には同じエージェントによって書き換えられてしまいます。
もっと根本的なこともあります。あるマージや記憶が汚染された疑いがあるとき、「その実行は何を読んだのか」に答える手段がありません。
仕組み
- 内容は 2 種類。 イベント は 1 件ずつ記録します。コミット、リースの発行と失効、ゲートの要求と判断、ポリシーによる拒否、導出、忘却などです。読み取りマニフェスト は実行ごとにまとめます。どの パス@コミット を、どの範囲で、どの内容ハッシュで読んだかです。読み取りの呼び出しを 1 回ずつ記録することはなく、内容も記録しません。
- すべてのコミットが出どころのメタデータを持ちます。
principal、on_behalf_of、run、lease、purpose、そして読み取りマニフェストへの参照です。 - ハッシュチェーン(日単位)。任意で、署名と外部へのアンカー(2 台目のノードや、オブジェクトロックつきのバケット)を加えられます。目標は「改ざんは不可能」ではなく、「改ざんを検知できる」ことです。
- エクスポート: OpenTelemetry GenAI のスパン、JSON Lines、または SIEM へ。
- プライバシー: 既定ではメタデータだけで、内容は記録しません。記録の保持は、内容の削除とは独立しています。記録そのものにもアクセス制御がかかります。
- **
explain(commit):** そのコミットの背後にある実行、リース、ゲートの判断、読み取りマニフェスト、入力を返します。 - 先に記録し、それから実行する: 影響の大きい操作は、まず意図の記録を書かなければなりません。
小さく始める
- 追記のみの SQLite テーブルと、1 日 1 回のハッシュ。
- すべてのコミットメッセージに、
Run:やLease:などの Git トレーラーを付ける。 - すでにある可観測性の基盤に、OpenTelemetry のスパンをエクスポートする。
インターフェースのスケッチ
説明用の例です。フィールド名は仕様 v0.3 までに変わる可能性があります。
{
"seq": 18211,
"time": "2026-11-12T09:14:22Z",
"kind": "commit",
"run": "run_91ab",
"principal": "agt_cleo",
"on_behalf_of": "usr_wei",
"lease": "lse_7Qk3",
"purpose": "Draft the Q4 release notes",
"subject": { "path": "/shared/launch/notes.md", "commit": "91ce3a7" },
"read_manifest": "rm_5d2e",
"decision": { "effect": "allow", "rule": "r-17" },
"taint": { "external": true, "sensitivity": "private" },
"prev_hash": "sha256:b3a0..."
} 仕様が求めること
- 影響の大きい操作は、効力を持つ前に意図の記録を書かなければならない。書き込みに失敗したら、その操作は失敗しなければならない。
- すべての実行は、読んだパス、コミット、範囲(内容ではない)を記録した読み取りマニフェストを持たなければならない。
- 記録はハッシュでつながれていなければならず、公開されたコマンドで検証できなければならない。
explain(commit)は、実行、リース、ゲートの判断、読み取りマニフェストへの参照を返さなければならない。- 記録の保持は、内容の削除とは独立していなければならない。
借りたものと、新しいもの
以下はすべて既存の部品です。新しいのは読み取りマニフェストです。 「読むこと」を追跡可能な入力の集合にすることで、「汚染されたマージ」や「毒された記憶」を、あとから調べられるようにします。
正直な限界
- 外部へのアンカーがなければ、root 権限を持つ管理者は、ログを壊せてしまいます。
- 記録そのものに機微なメタデータが含まれるため、管理が必要です。
- 読み取りマニフェストの粒度は、保存コストと追跡可能性のトレードオフです。
未解決の問い
- 高スループットのとき、読み取りマニフェストの保存コストをどう抑えるか。
- 複数ノードの記録を、どう統合して検証するか。
よくある質問
エージェントが読んだ内容そのものも記録しますか?
既定では記録しません。記録が持つのは、パス、コミット、範囲、内容ハッシュです。機微な内容をログにコピーせずに、元のデータを指し示すには十分です。内容は Store に残り、リースとラベルによって守られます。
ここでの「改ざんを検知できる」とは、どういう意味ですか?
約束するのは、改ざんを検知できる ことだけです。記録はハッシュでつながれているので、1 件を書き換えるとチェーンの検証が壊れます。外部へのアンカー(2 台目のノードや、オブジェクトロックつきのバケット)があれば、root 権限を持つ管理者に対しても成り立ちます。アンカーがなければ、管理者はログ全体を壊せます。
なぜ読み取りを記録するのですか?
リスクはしばしば読み取りから生じるからです。ウェブページを読んだセッションが、そのあと汚染されたノートを書くことがあります。読み取りマニフェストがあれば、あとから「この変更には何が影響したのか」に答えられます。
関連するコンセプト
- Capability Lease (ケイパビリティ・リース) 1 回の実行のための、期限と予算つきの狭い認可。子リースは、より狭くしかできません。
- Trust Labels (トラスト・ラベル) 2 つの小さなラベルとセッション汚染で、Rule of Two を実現します。
- Cascade Forget (カスケード忘却) 系譜に沿って派生物を削除し、履歴は保持クラスで扱い、できなかったことを報告します。
このページを引用する
読者・検索エンジン・エージェントのための恒久的な URL と、推奨する引用形式です。
- 推奨する引用形式
- Agent NAS project. “Flight Recorder (フライトレコーダー).” agentnas.com, 2026-11-11. https://agentnas.com/ja/concepts/flight-recorder/