原文(日本語に翻訳)
PreCompactフックのサポートを追加しました。フックが終了コード2を返すか{"decision":"block"}を返すことでコンパクションをブロックできるようになりました。
原文(英語)
Added PreCompact hook support: hooks can now block compaction by exiting with code 2 or returning {"decision":"block"}
概要
PreCompactフックが新たにサポートされました。このフックはClaudeがコンテキストのコンパクション(圧縮)を実行しようとする直前に呼び出されます。フックが終了コード2を返すか、{"decision":"block"}を返すことで、コンパクションを一時的にブロックできます。重要な作業の最中にコンテキストが圧縮されることで発生する予期しない挙動を防ぐのに役立ちます。
基本的な使い方
settings.jsonにPreCompactフックを登録します。
json
{
"hooks": {
"PreCompact": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "/path/to/pre-compact-check.sh"
}
]
}
]
}
}フックスクリプトでブロックする方法
終了コード2でブロック:
bash
#!/bin/bash
# pre-compact-check.sh
# 重要な処理中はコンパクションをブロック
if [ -f /tmp/critical-task-running ]; then
echo "重要なタスクが実行中のためコンパクションをブロックします"
exit 2
fi
exit 0JSONレスポンスでブロック:
bash
#!/bin/bash
# 特定の条件でコンパクションをブロック
if [ "$SOME_CONDITION" = "true" ]; then
echo '{"decision":"block","reason":"条件によりコンパクションを無効化"}'
exit 0
fi
echo '{"decision":"allow"}'実践例
長時間実行タスク中のコンパクション防止
bash
#!/bin/bash
# deploy-check.sh: デプロイ実行中はコンパクションをブロック
DEPLOY_LOCK="/tmp/deployment-in-progress"
if [ -f "$DEPLOY_LOCK" ]; then
echo '{"decision":"block","reason":"デプロイ実行中のためブロック"}'
exit 0
fi
exit 0ファイル編集中のコンパクション制御
bash
#!/bin/bash
# 重要なファイルが開かれている場合はブロック
if lsof /path/to/critical-file.db 2>/dev/null | grep -q WRITE; then
exit 2 # 終了コード2でブロック
fi
exit 0ログを残しながらコンパクションを許可
bash
#!/bin/bash
# コンパクション発生をログに記録するだけで許可
echo "$(date): コンパクション開始" >> /var/log/compaction.log
exit 0 # 0 = 許可注意点
- 終了コード
0はコンパクションを許可します - 終了コード
2はコンパクションをブロックします {"decision":"block"}を返してもブロックできます- ブロックしすぎるとコンテキスト制限に達する可能性があるため、適切な条件設定が重要です
- PreCompactフックはコンパクション直前にのみ呼び出されます(通常のツール実行では呼び出されません)