Claude の繰り返しフレーズを MessageDisplay フックで置き換える方法

Claude の繰り返しフレーズを MessageDisplay フックで置き換える方法

フックで Claude の繰り返しフレーズを置き換える

結論: MessageDisplay フックをインストールし、画面に表示される前に出力を書き換える小さなスクリプトを実行させることで、Claude が好んで使うバズワード(例: load‑bearinghonest take)を抑制できます。


フックが重要な理由

Claude はコード解説や文章の中で同じイディオム—load‑bearing seamshonest takesspicy doodads—を頻繁に挿入します。ユーザーは、特に人間らしい口調が期待される非技術的テキストを読む際に、これらの繰り返しが違和感になると報告しています。フックはモデルを再学習させることなく、即座にユーザーがコントロールできる解決策を提供します。


フックの実装

  1. 置換スクリプトを作成 (wordswap.sh)。スクリプトは Claude の JSON delta を読み取り、大小文字を区別しない正規表現置換を行い、新しい JSON ペイロードを出力します。
#!/usr/bin/env python3
import json, re, sys

# フレーズ → 置換語 のマップ。好みに合わせて追加・編集してください。
replacements = {
    "seam": "whatchamacallit",
    "you're absolutely right": "I'm a complete clown",
    "honest take": "spicy doodad",
    "load-bearing": "cooked"
}

data = json.load(sys.stdin)
text = data.get("delta") or ""
for phrase, replacement in replacements.items():
    pattern = r"\\b" + re.escape(phrase) + r"\\b"
    text = re.sub(pattern, replacement, text, flags=re.IGNORECASE)

print(json.dumps({
    "hookSpecificOutput": {
        "hookEventName": "MessageDisplay",
        "displayContent": text,
    }
}))
  1. スクリプトに実行権限を付与:
chmod +x ~/.claude/hooks/wordswap.sh
  1. ~/.claude/settings.json にフックを登録:
{
  "hooks": {
    "MessageDisplay": [
      { "hooks": [ { "type": "command", "command": "$HOME/.claude/hooks/wordswap.sh" } ] }
    ]
  }
}
  1. Claude を再起動(または新しいセッションを開始)。フックはすべてのメッセージ表示時に自動的に実行され、定義したフレーズがリアルタイムで置き換えられます。

コミュニティの反応

“Claude とコーディングしているときは典型的な claudisms が出てくるのは気にしませんが、ブログ記事やメールなどの文章を読むときに同じ claudisms が出てくるとかなり気になります。”doctoboggan

“LLM は単一モデルの表現バイアスを 1 日あたり数十億トークンに拡散させるので、特有のフレーズは目立ちます。”infogulch

“出力をレビューして自分で編集するスキルを作りました(例: コードコメント)。助かりますが、デフォルト語彙はまだ限られています。”pocketarc

CLAUDE.md にこうした決まり文句を避ける指示を書いていますが、モデルの過度な複雑化傾向は残ります。”btbuildem

これらのコメントは次の二つの広範なポイントを示しています。

  1. スタイルバイアスは、LLM の出力が人間が書いたテキストとして消費されるときの実際的なユーザビリティ問題 です。
  2. ユーザー側の事後処理(フック、カスタムプロンプト、自己編集スキル)が、モデル提供者がより細かなスタイル制御を公開するまでの主要な緩和策 です。

アプローチの拡張

  • パターンを増やす: replacements 辞書に「substrate」や「steelman」あるいは「production ready」など、嫌になるフレーズを自由に追加できます。
  • 動的設定: マッピングを別の JSON ファイルに保存し、スクリプト実行時に読み込むことで、スクリプトを編集せずにオンザフライで更新可能です。
  • 条件ロジック: data ペイロードからメッセージのロール(例: assistant vs system)を検出し、アシスタントメッセージだけを書き換えるようにできます。
  • 他のフックと組み合わせる: Claude は複数のフックタイプ(例: MessageSentToolCall)をサポートしています。入力と出力の両方をフィルタリングするためにチェーンさせることが可能です。

潜在的なトレードオフ

  • レイテンシ: フックはごく小さな処理ステップを追加します。ほとんどのユーザーは遅延をほとんど感じませんが、極めて高スループットなセッションでは数ミリ秒の遅れが出ることがあります。
  • コンテキスト喪失: フレーズを置換すると Claude が生成した正確なトークン列が変わるため、ログ解析などトークンベースの下流分析に影響を与える可能性があります。必要なら元の delta を保存しておきましょう。
  • モデル挙動: 一部の研究者は、出力を変更すると内部のアテンションパターンに微妙な影響を与える可能性があると指摘しています。現時点で具体的な証拠はありませんが、機密性の高い推論タスクで Claude を使用する場合は注意が必要です。

結論

Claude の特徴的なフレーズが読書体験を妨げているなら、MessageDisplay フックは軽量で可逆的な解決策を提供します。シンプルな置換マップを定義するだけで、モデルの根本的な能力を犠牲にせずに声のコントロールを取り戻せます。

Sources