0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Code auto-compact後にCLAUDE.mdのルールが適用されなくなる原因と、PreCompact Hookの2種類の違い

0
Posted at

結論

CLAUDE.mdに書いたルール自体はauto-compact後も消えていない。消えるのは「そのルールをどう適用するか」のセッション内コンテキスト(判断経緯・優先順位の積み上げ)だ。

PreCompact hookには2種類あり、目的が違う:

種類 目的 Claudeの動作への影響
バックアップ型(ファイルコピー) 人間がcompact前の文脈を読み返せる ない
ルール注入型(stdout出力) compactサマリーに有効制約を含める ある

環境・前提

  • Claude Code を sns-automation・masatoman.net のルーティンで 2026-05 から daily 運用
  • 複数リポジトリを1セッションで横断する長時間セッション構成
  • 2026-05-14 に Stop/PreCompact/UserPromptSubmit の 3 hook を初期実装

なぜCLAUDE.mdのルールが守られなくなるのか

誤解: auto-compact がCLAUDE.mdを圧縮している
正確: CLAUDE.mdはシステムプロンプトであり、compactの対象は会話履歴

消えるのは「このタスクではAを優先する」「前のセッションでBより先にCをやると決めた」といった、会話の中で積み上がったルール適用のコンテキストだ。

auto-compact後のClaudeはルールの文字は知っているが、適用優先度の判断に使う文脈が薄くなる。

バックアップ型hookの限界

最初に実装したprecompact-backup.shはこのような構成だ:

#!/bin/bash
INBOX="$HOME/_inbox/claude-sessions"
mkdir -p "$INBOX"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
SESSION_LOG="$HOME/.claude/current-session.jsonl"

if [ -f "$SESSION_LOG" ]; then
  cp "$SESSION_LOG" "$INBOX/session_${TIMESTAMP}.jsonl"
  echo "PreCompact backup: $INBOX/session_${TIMESTAMP}.jsonl"
fi

これはセッションログを人間が読み返すためのものだ。hookのstdout("PreCompact backup: ...")はステータス表示であり、Claudeがcompact時に参照するものではない。バックアップが取れてもClaudeの動作は変わらない。

ルール注入型hookの実装

PreCompact hookのstdoutとして出力した内容を、Claudeがcompactサマリー生成時に参照する。これを利用して現在の有効制約を注入する:

# ~/.claude/hooks/precompact-active-rules.sh
#!/bin/bash
ACTIVE_RULES="${PWD}/active-rules.md"

if [ -f "$ACTIVE_RULES" ]; then
  echo ""
  echo "=== CompactサマリーへのActive Rules注入 ==="
  cat "$ACTIVE_RULES"
  echo "==="
fi
// ~/.claude/settings.json(hooks抜粋)
{
  "hooks": {
    "PreCompact": [
      {
        "type": "command",
        "command": "bash ~/.claude/hooks/precompact-backup.sh"
      },
      {
        "type": "command",
        "command": "bash ~/.claude/hooks/precompact-active-rules.sh"
      }
    ]
  }
}

active-rules.md はCLAUDE.mdとは別のファイルで、今のセッションで特に有効な制約だけを3〜5行で書く。CLAUDE.mdの全ルールを渡すと要約が薄まるため、今の優先度に絞ることが重要だ。

使い分けのまとめ

状況 アプローチ
圧縮前のログを人間が読み返したい バックアップ型(ファイルコピー)
compact後もClaudeが設計判断の優先度を維持してほしい ルール注入型(stdout出力)
両方必要 hooks配列に並べて両方実行

2つのhookはClaude Codeの設定で配列に並べれば順次実行される。バックアップ型と注入型は排他でなく、併用が自然だ。


AI ツールを業務に組み込む設計の実験ログを書いています。 https://masatoman.net

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?