Skip to content

原文(日本語に翻訳)

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 0

JSONレスポンスでブロック:

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フックはコンパクション直前にのみ呼び出されます(通常のツール実行では呼び出されません)

関連情報