すべてのデータ型
読めるものはすべて証拠になる。
L0はディスク上の生データ。L1はエージェントが読める形式。L2は必要な時に構造化。同じURLが3つすべてに通る。
オフィスは多くの言語を読みます。 PDF、Excel、写真、ボイスメモ、JSONLチャットログ — すべてエージェントがgrepできる可読テキストになり、元のバイトまでスレッドで遡れます。
L0 — 生ファイル、グラウンドトゥルース
到着したバイト。一切手を加えない。
オフィスが目にするあらゆる種類のファイルは、まずディスクに着地します。生バイトは届いたそのままに保存されます — 元のエンコーディング、元のタイムスタンプ、元のすべて。
L0 → L1 — 一度変換すれば、永遠に読める
すべての生ファイルの隣にmarkdownサイドカーを置く。
PDFはエージェントにとってテキストではありません。写真もテキストではない。音声もテキストではない。小型で安価なモデルが各生ファイルを一度読み、可読な.mdサイドカーを書き、それを隣のディスク上に置きます。
ファイルが到着
2026-05-20-vendor.pdf · 届いた通りにバイトを保存。
コンバータが読む
小型で安価なモデル。PDFのテキスト + 表。画像キャプション。音声の文字起こし。
サイドカーが書き出される
2026-05-20-vendor.mdが生ファイルの隣に並ぶ。フロントマターがバイトを指す。
エージェントが.mdを読む
grep可能 · 引用可能 · 推論可能。生データは誰かが尋ねればワンクリックで参照できる。
URL保持
フロントマターのsource_urlが生バイトまで遡るパスを保持。常に検証可能。
L1 → L2(任意)— 構造化解析を上に重ねる
必要なケースのための構造化抽出。
もう一度パスをかける価値があるファイルがあります。船舶レポートには燃料数値の表があり、請求書には明細行があり、CTスキャンには測定値があります。L2はこれらを可読な.mdの隣に置く構造化された.jsonとして捉えます。散文で十分な場合はこのレイヤーをスキップします。
source_urlを保持。同じチェーン。途切れなし。エージェント自身のチャットもLayer 0
エージェント自身の会話 — 何を尋ねられ、何を答え、どのツールが発火し、どのファイルを読んだか — も同じライブラリに流れ込みます。L0における単なるもう一つのファイル種別に過ぎません。
エージェントの作業ログも証拠です。
Claude Codeは各セッションを.jsonlファイルに書き出します — 追記専用、1メッセージ1行。デーモンが行をライブラリDBにミラーリングします。ストーリービルダーは後で、エージェントチャットの付箋とメールの付箋を、ソースを気にせずに混ぜ合わせます。パイプラインは一つ。来歴も同じ。