AN-03 L1 準拠レベル: Authority グループ: 作業

Flight Recorder フライトレコーダー

実行ごとに、ハッシュでつながれた記録を残します。実行が何を読んだかも含みます。

定義

Flight Recorder は、実行ごとに残す、追記のみでハッシュがつながった記録です。実行が読んだもの(読み取りマニフェスト)、書いたもの、許可または拒否されたこと、誰が何を承認したかが入っています。データのそばにあって、ひとつの問いに答えます。「この変更には、何が影響した可能性があるか。」

v0.2 仕様ドラフト 更新日

解決する課題

事後検証のとき、ログは散らばっています。「読んだこと」と、その後の行動の間には何のつながりもなく、ログは同じ管理者、ひどい場合には同じエージェントによって書き換えられてしまいます。

もっと根本的なこともあります。あるマージや記憶が汚染された疑いがあるとき、「その実行は何を読んだのか」に答える手段がありません。

仕組み

  • 内容は 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 までに変わる可能性があります。

record.json
{
  "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 権限を持つ管理者に対しても成り立ちます。アンカーがなければ、管理者はログ全体を壊せます。

なぜ読み取りを記録するのですか?

リスクはしばしば読み取りから生じるからです。ウェブページを読んだセッションが、そのあと汚染されたノートを書くことがあります。読み取りマニフェストがあれば、あとから「この変更には何が影響したのか」に答えられます。

このページを引用する

読者・検索エンジン・エージェントのための恒久的な URL と、推奨する引用形式です。

推奨する引用形式
Agent NAS project. “Flight Recorder (フライトレコーダー).” agentnas.com, 2026-11-11. https://agentnas.com/ja/concepts/flight-recorder/