sessions.ja.md
docs/i18n/integrations/sessions.ja.md
セッショングラフ
<!-- translations:start -->
English · 한국어 · 中文 · Русский · Español · Français · Deutsch
<!-- translations:end -->
Tesserae のセッショングラフは、プロジェクトに関する Claude Code / Codex の会話を型付き知識グラフのファーストクラスノードに変換し、登場したドキュメントにリンクし直します。コンパイル後、tesserae project ask "3D Gaussian Splatting について何を決めたか?" と尋ねると、それらを生成したセッションへの出所付きで具体的な Insight / Decision / Question / TODO / Hypothesis / Takeaway ノードが返されます。
仕組み
セッションごとに 2 つのパスがあります:
- 構造的(常時実行、LLM なし)。
tesserae sessions discover --importが.tesserae/harness_sessions/に書き込んだ正規化されたHarnessSessionレコードを読みます。各セッションについてSessionエンベロープノードを発行し、エージェントが開いたすべてのドキュメントからdiscussed_inエッジを発行し、既存のdecisionsフィールドをSessionDecisionノードに変換します。 - LLM(オプトイン、
ANTHROPIC_API_KEY設定時に実行)。正規化された会話ターン(metadata["turns"]フィールド — 生のトランスクリプトファイルではない)を JSON のみの発見スキーマで Claude に送信します。6 種類の発見を返し、それぞれ特定のターンと現在のグラフ内の特定のドキュメントノード ID を引用します。content_hash + project_root_hash でキャッシュされるため、変更されていないセッションは次のコンパイルで呼び出しをスキップします。
セットアップ
# このプロジェクトのセッションを `.tesserae/harness_sessions/` にインポートします。cwd でフィルタリングするため、このプロジェクト内で実行されたセッションのみがインポートされます。
tesserae sessions discover --import
# コンパイル。構造的パスは無料で実行されます。`claude` CLI にサインインしていれば LLM パスが自動実行されます — API キー不要。
tesserae project compile
セッションなしでコンパイルするには(例: ハーネス履歴のないサーバーで):
tesserae project compile --no-sessions
構造的のみを強制するには(キーが設定されていても LLM 呼び出しをスキップ):
tesserae project compile --sessions-llm=false
設定
.tesserae/config.json は sessions ブロックを受け入れます:
{
"sessions": {
"enabled": true,
"llm_enabled": "auto",
"max_turns_per_chunk": 30,
"model": "claude-sonnet-4-7-20251201",
"include_doc_id_context": 200
}
}
CLI フラグは設定を上書きします。llm_enabled = "auto"(デフォルト)は claude CLI にサインインしているか ANTHROPIC_API_KEY が設定されているときに LLM パスを実行します。どちらもない場合は構造的パスのみが実行されます(エラーなし、アウトバウンド呼び出しなし)。
クエリ
既存の検索/wiki ツールに加えて、2 つの MCP ツールが追加されます:
list_sessions(since?, limit?)— アクティブプロジェクトの Session エンベロープ(id、started_at、title、発見数)。find_session_findings(node_id, kinds?)—discussed_inまたはreferences経由でnode_idにリンクされたすべてのセッション派生発見。オプションで insight / decision / question / todo / hypothesis / takeaway にフィルタリング。
CLI から:
tesserae sessions list
tesserae project ask "what did we decide about extractor dedup?"
プライバシー
claudeCLI 未サインイン かつANTHROPIC_API_KEY未設定(または--sessions-llm=false)では、アウトバウンドネットワーク呼び出しはゼロです。構造的パスのみが実行されます。- LLM パスが実行されると、まだキャッシュされていないセッションの完全な正規化された会話ターンが送信されます。トランスクリプトファイル自体はディスクに残り、LLM の JSON 出力のみがグラフとセッションごとのキャッシュに永続化されます。
- キャッシュファイルは
.tesserae/session_findings/<session_id>.findings.jsonにcontent_hashとproject_root_hashの両方とともに存在します。プロジェクト間でコピーされたキャッシュファイルは読み取り時に拒否されます — プロジェクト間の再生はありません。 - セッションは読み込み後
session_matches_projectでフィルタリングされるため、cwdが兄弟プロジェクトのトランスクリプトはこのプロジェクトのグラフにノードを生成しません。
Vault レイアウト
発見は Obsidian vault の下で発見ごとに 1 ページずつセッションごとにグループ化されてレンダリングされます:
<vault>/
sessions/
<session-id-slug>/
cache-findings-by-content-hash.md
path-index-needs-basename-suppression.md
...
発見ページの <!-- user-notes:start --> … <!-- user-notes:end --> ブロック内のユーザーノートは、他のすべての vault ページと同じ契約で再コンパイル後も保持されます。
トラブルシューティング
- コンパイル後に Session ノードが表示されません。先に
tesserae sessions discover --importを実行しましたか?コンパイルパスは.tesserae/harness_sessions/のみを消費し、~/.claude/projects/を自動的にスキャンしません(数千の履歴セッションがあるマシンではそのスキャンに数分かかることがあります)。 - LLM コストの懸念。キャッシュにより、各セッションは content-hash ごとに最大 1 回 LLM に送信されます。長いセッションは
max_turns_per_chunk(デフォルト 30)で 5 ターンの重複でチャンクされます。総コストを制限するには、max_turns_per_chunkを下げる、include_doc_id_contextを下げる、または--sessions-llm=falseを設定します。 - 発見が存在しないノード ID を引用します。オーケストレーターは引用されたすべての参照をライブドキュメントグラフに対して検証し、不明なものを静かにドロップします。ログに警告が表示される場合、LLM が引用を幻覚しました — 生き残った参照は依然として信頼できます。
仕様
完全な設計は docs/superpowers/specs/2026-05-19-session-graph-extractor-design.md にあります。実装計画は docs/superpowers/plans/2026-05-19-session-graph-extractor-plan.md です。