Claude Code / Hooks
Claude Codeの会話が長くなると、過去のやり取りは自動で要約に圧縮され、細部が消えます。圧縮の直前に生ログを丸ごと保存し、圧縮の直後に必要な分だけ読み戻す——その2つのフックの共有ページです。
仕組みを理解しなくても大丈夫です。自分のClaude Codeに次の一文を送ると、AIが手順書を読んで設置からテストまで行います。
次のURLの手順書を読んで、この仕組みを私の環境に導入してください。既存の設定は壊さず、保存先はあらためて私に確認してください。 https://cc-session-notes.pages.dev/SETUP.md手順書(SETUP.md)はAI向けに書かれた自己完結の導入ガイドです。スクリプト全文・設定・テスト方法・注意点を含みます。
会話が一定の長さを超えると、Claude Codeは過去のやり取りを要約に置き換えます(コンテキスト圧縮)。要約は全体像を保ちますが、直近の細かい決定・言い回し・温度感は落ちます。「さっき決めたはずのことを覚えていない」という体感はここから来ます。
圧縮の直前に会話全文をディスクへ保存し、圧縮の直後にその末尾4,000字だけを新しいコンテキストへ差し込みます。圧縮直後のAIの手元には「要約」と「直前のやり取りの原文」の両方が置かれ、要約で丸められる部分を原文が補います。
Claude Codeが圧縮を始める前に PreCompact フックが発火し、その時点の会話全文をMarkdownで書き出します。手動の /compact でも、自動圧縮でも同じように動きます。
過去のやり取りが要約に置き換わります。ここで細部が失われますが、生ログはすでにディスク上にあります。
SessionStart フック(matcher: "compact" により圧縮起因の再開だけに反応)が、いま保存されたばかりのファイルを探し、末尾4,000字を新しいコンテキストへ差し込みます。
注入されるのは末尾だけです。それより前の文脈が要るときは、CLAUDE.md に書いたルールに従ってAIが自分でファイル全体を開きます。
設定はすべてユーザーグローバル(~/.claude/)に置くため、全プロジェクト・全セッションに適用されます。フック登録の要点は次の1行です。
// 通常のセッション開始では発火せず、圧縮を挟んだ再開のときだけ読み戻す
"SessionStart": [
{ "matcher": "compact",
"hooks": [{ "type": "command",
"command": "python3 ~/.claude/postcompact_context.py" }] }
]
圧縮は「コンテキストが溢れたから」起きます。復元で大量に注ぎ戻すとまた溢れて再圧縮という循環になります。橋を架けるのに必要な最小量だけ戻す設計です。
鮮度制限がないと、何日も前の別の作業のログが新しい会話に紛れ込みます。誤った文脈を注入するくらいなら、何も注入しないほうが安全です。
両方のスクリプトとも、ログが読めない・保存先が無い・JSONが壊れている——といった場合は黙って終了します。フックのエラーで圧縮そのものがブロックされることはありません。
会話の全文が平文で残ります。APIキーや個人情報を会話に貼った場合、それもスナップショットに残ります。保存先をDropbox等のクラウド同期フォルダにする場合は、この点を理解したうえで選んでください。
容量は増え続けます。長い会話1件で数MBになります。削除の仕組みは含まれていないため、古いものを定期的に削る運用が要ります(手順書に例を記載)。
作者環境での実績:スナップショット141件(自動圧縮120・手動圧縮20)、総容量91MB。自動・手動の両方で保存と読み戻しの動作を確認済みです。