原文(日本語に翻訳)
圧縮完了後に発火する 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フックも利用可能で、圧縮前に処理を行いたい場合に使用できます