Skip to content

原文(日本語に翻訳)

圧縮完了後に発火する PostCompact フックを追加しました

原文(英語)

Added PostCompact hook that fires after compaction completes

概要

PostCompact フックはClaudeのコンテキストウィンドウが圧縮(compaction)された後に自動的に発火します。手動の /compact コマンドによる圧縮と、コンテキストが一杯になった際の自動圧縮の両方に対応しています。このフックを使うと、圧縮後の状態をログに記録したり、外部システムへ通知を送ったり、後続の処理を自動化したりできます。

基本的な使い方

json
// .claude/settings.json
{
  "hooks": {
    "PostCompact": [
      {
        "matcher": "auto",
        "hooks": [
          {
            "type": "command",
            "command": ".claude/hooks/post-compact.sh"
          }
        ]
      }
    ]
  }
}

フックが受け取る入力JSON(標準入力):

json
{
  "session_id": "abc123",
  "transcript_path": "/path/to/transcript.jsonl",
  "cwd": "/home/user/project",
  "permission_mode": "default",
  "hook_event_name": "PostCompact",
  "trigger": "auto",
  "compact_summary": "圧縮された会話の要約テキスト..."
}

マッチャー値:

  • manual/compact コマンドによる手動圧縮後に発火
  • auto — コンテキスト満杯による自動圧縮後に発火
  • 省略時(空文字列)— 両方に発火

実践例

ユースケース1: 圧縮イベントをSlackに通知

長時間のタスクで自動圧縮が起きたことを知らせる:

bash
#!/bin/bash
# .claude/hooks/post-compact.sh

INPUT=$(cat)
TRIGGER=$(echo "$INPUT" | jq -r '.trigger')
SESSION_ID=$(echo "$INPUT" | jq -r '.session_id')
SUMMARY=$(echo "$INPUT" | jq -r '.compact_summary' | head -c 200)

if [ "$TRIGGER" = "auto" ]; then
  curl -s -X POST "$SLACK_WEBHOOK_URL" \
    -H "Content-Type: application/json" \
    -d "{
      \"text\": \"コンテキストが自動圧縮されました (Session: ${SESSION_ID})\n要約: ${SUMMARY}...\"
    }"
fi

ユースケース2: 圧縮ログの記録

圧縮が発生するたびにログファイルに記録する:

bash
#!/bin/bash
# .claude/hooks/log-compact.sh

INPUT=$(cat)
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
TRIGGER=$(echo "$INPUT" | jq -r '.trigger')
SESSION=$(echo "$INPUT" | jq -r '.session_id')
SUMMARY=$(echo "$INPUT" | jq -r '.compact_summary')

cat >> ~/.claude/compact-log.jsonl << EOF
{"timestamp": "$TIMESTAMP", "trigger": "$TRIGGER", "session": "$SESSION", "summary": "$SUMMARY"}
EOF

echo "[$TIMESTAMP] Compact ($TRIGGER) - Session: $SESSION" >> ~/.claude/compact-history.log

ユースケース3: 圧縮後に追加コンテキストを自動注入

圧縮後にCLAUDE.mdへの参照を促すメモを作成:

json
// .claude/settings.json
{
  "hooks": {
    "PostCompact": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "bash -c 'echo \"[$(date)] Context compacted ($(jq -r .trigger))\" >> /tmp/compact-events.log'"
          }
        ]
      }
    ]
  }
}

ユースケース4: 自動圧縮のみ監視する

json
// .claude/settings.json
{
  "hooks": {
    "PostCompact": [
      {
        "matcher": "auto",
        "hooks": [
          {
            "type": "command",
            "command": ".claude/hooks/on-auto-compact.sh",
            "timeout": 15
          }
        ]
      }
    ],
    "PreCompact": [
      {
        "matcher": "manual",
        "hooks": [
          {
            "type": "command",
            "command": "echo 'Manual compact initiated'"
          }
        ]
      }
    ]
  }
}

注意点

  • PostCompact フックは副作用(ログ記録、通知など)のみに使用できます。フックの出力によって圧縮結果を変更することはできません(ブロック不可
  • trigger フィールドで "manual" または "auto" のどちらによる圧縮かを判定できます
  • compact_summary フィールドに圧縮された会話の要約が含まれます
  • command 型フックのみサポートしています
  • PreCompact フックも利用可能で、圧縮前に処理を行いたい場合に使用できます

関連情報