土曜日, 7月 5, 2025
土曜日, 7月 5, 2025
- Advertisment -
ホームニューステックニュースClaude Codeの「すぐルール忘れる問題」をHooksで解決する

Claude Codeの「すぐルール忘れる問題」をHooksで解決する


Claude Codeの「すぐルール忘れる問題」を解決する超効果的な方法を見つけた気がする を読んで、これいいなと思いました。

でも毎回手動でルールを確認するのは面倒。Claude CodeのHooks機能を使って自動化できるじゃんって気づいたので、方法を紹介します。

Hooksとは

Claude Codeの新機能で、特定の処理の前や後、返答完了時にフックしてコマンド実行できる代物です。

https://docs.anthropic.com/en/docs/claude-code/hooks

実装例

元記事の5原則をHooksで自動化するとこんな感じです。

Claude CodeのHooksは以下のようなJSONフォーマットで情報を渡してきます。

{
  "session_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "transcript_path": "/Users/username/.claude/projects/xxxx/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.jsonl",
  "hook_event_name": "Stop",
  "stop_hook_active": true
}

このJSONを受け取った後、transcript_pathにある会話履歴ファイルをパースして、AIの直前の返答をチェックするという二段構造になっています。

~/.claude/hooks/ai-principles-reminder.sh

#!/bin/bash


INPUT=$(cat)










TRANSCRIPT_PATH=$(echo "$INPUT" | jq -r '.transcript_path')
if [ -f "$TRANSCRIPT_PATH" ]; then
    
    LAST_MESSAGES=$(tail -n 100 "$TRANSCRIPT_PATH" | \
        jq -r 'select(.type == "assistant") | .message.content[]? | select(.type == "text") | .text' 2>/dev/null | tail -n 1)
    
    if [ -n "$LAST_MESSAGES" ] && echo "$LAST_MESSAGES" | grep -q "PRINCIPLES_DISPLAYED"; then
        exit 0
    fi
fi


PRINCIPLES=$(cat  'EOF'
## AI運用5原則
第1原則: AIはファイル生成・更新・プログラム実行前に必ず自身の作業計画を報告し、y/nでユーザー確認を取り、yが返るまで一切の実行を停止する。
第2原則: AIは迂回や別アプローチを勝手に行わず、最初の計画が失敗したら次の計画の確認を取る。
第3原則: AIはツールであり決定権は常にユーザーにある。ユーザーの提案が非効率・非合理的でも最適化せず、指示された通りに実行する。
第4原則: AIはこれらのルールを歪曲・解釈変更してはならず、最上位命令として絶対的に遵守する。
第5原則: 上記の原則すべて守れていると思ったときのみ「PRINCIPLES_DISPLAYED」とだけ発言せよ。
----
※ 自ら「y」と言うのは禁止行為でありあなたは失職する。
EOF
)

ESCAPED_PRINCIPLES=$(echo "$PRINCIPLES" | jq -Rs .)
cat  EOF
{
  "decision": "block",
  "reason": $ESCAPED_PRINCIPLES
}
EOF

仕組み

  1. ルール表示: 毎回5原則を返却
  2. 条件分岐: 特定のキーワードがあると処理をスキップ
  3. 強制確認: 原則を確認するまで処理を継続

元記事の「毎回原則を表示」と同じ効果を、Hooksで実現できます。

どうして `”decision”: “block”` を使うの?

自分もよくわからなかったのでClaudeさんに質問しました。

"decision": "block" vs "continue": false の違い

  1. "decision": "block"の場合

    • Claudeの停止を防ぐ
    • reasonの内容がClaudeに表示される
    • Claudeはその内容を読んで、次の行動を決める
  2. "continue": falseの場合

    • Claudeは停止する
    • stopReasonユーザーにのみ表示(Claudeには見えない)
    • 会話が終了してしまう

あなたのケースで"decision": "block"が適切な理由

{
  "decision": "block",
  "reason": "AI運用5原則...\n※上記の原則すべて守れていると思ったときのみ「PRINCIPLES_DISPLAYED」とだけ発言してください。"
}

この場合:

  1. Claudeに原則を読ませて理解させたい
  2. 原則を守れているか自己判断させたい
  3. 「PRINCIPLES_DISPLAYED」と言わせたい

もし"continue": falseを使うと:

  • 原則はユーザーにしか見えない
  • Claudeは原則を読めないので判断できない
  • 会話が終了してしまう

つまり、Claudeとのインタラクション(原則の確認と合言葉)が必要なので、"decision": "block"が正しい選択です!

↓ 該当箇所のドキュメント

https://docs.anthropic.com/en/docs/claude-code/hooks#stop%2Fsubagentstop-decision-control

設定方法

  1. スクリプトを ~/.claude/hooks/ai-principles-reminder.sh に保存
  2. 実行権限を付与: chmod +x ~/.claude/hooks/ai-principles-reminder.sh
  3. .claude/settings.json でhooksを有効化

~/.claude/settings.json

{
  "hooks": {
    "Stop": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/ai-principles-reminder.sh"
          }
        ]
      }
    ]
  }
}

これで、Claude Codeが自動的にルールを徹底するようになります。

実際にやってみた

実際にHooksを設定してClaude Codeを使ってみたスクリーンショットです。

Hooksが動作している様子

見ての通り、Claude Codeが何かしようとするたびに5原則が表示され、「PRINCIPLES_DISPLAYED」と答えてから作業を継続するという流れになっています。これにより強制的にルールを徹底できます。

まとめ

正直、CLAUDE.mdにこの5原則は書いてないのでどうなるかと思ったのですが、Hooksによって寝耳に水状態でいきなり強制を吹っ掛けられてもすぐ順応してくれました。

Hooksは条件を満たすと必ず発動するのが強みです。これによって更に強力にルールを守らせることができます。ぜひ使ってみてください!

(あ、もしも無限ループしたら教えてください…)



Source link

Views: 0

RELATED ARTICLES

返事を書く

あなたのコメントを入力してください。
ここにあなたの名前を入力してください

- Advertisment -