7月14日、Johanna Larsonが「How to stop Claude from saying load-bearing」と題した記事を公開した。この記事では、Claude CLIの出力テキストをフックで書き換え、AIの口癖ワードを強制的に置換する方法について詳しく紹介されている。以下に、その内容を紹介する。
Claudeの「口癖」問題
AIコーディングアシスタントを日常的に使っているエンジニアなら、Claudeが頻繁に使う決まり文句に気づいているはずだ。「load-bearing(荷重を担う、転じて"核心的な"の意で多用)」「honest take」「seam」といったワードが、文脈を問わず繰り返し登場する。
Larsonはこの問題に対して、愚痴るだけでなく技術的に解決した。しかも、真面目に修正する方法と、わざとバカバカしい言葉に置き換えて笑い飛ばす方法の、両方を同時に提供している。
仕組み:MessageDisplay フック
Claude Code(旧称:Claude CLI)には、Claudeの応答を表示する直前に任意のスクリプトを挟み込むフック機能がある。今回使うのは MessageDisplay フックだ。
Step 1: 置換スクリプトを書く
以下のPythonスクリプトを ~/.claude/hooks/wordswap.sh として保存し、chmod +x で実行権限を付与する。
#!/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,
}
}))
置換内容がそのままこの記事の笑いどころでもある。「load-bearing」→「cooked」、「you're absolutely right」→「I'm a complete clown」といった具合だ。
Step 2: settings.json に登録する
~/.claude/settings.json のhooksブロックに以下を追加する。
{
"hooks": {
"MessageDisplay": [
{ "hooks": [ { "type": "command", "command": "$HOME/.claude/hooks/wordswap.sh" } ] }
]
}
}
フックはセッション起動時に読み込まれるため、新しいセッションを開始するだけで即座に有効になる。
ポイント整理
- スクリプトはSTDIN経由でJSONを受け取り、
deltaフィールド(応答テキストの差分)を書き換えて返す構造 - 正規表現の
\b(単語境界)を使っているため、単語の一部にマッチする誤爆を防いでいる re.IGNORECASEにより大文字小文字を問わず置換される
replacementsの辞書を書き換えれば、バカバカしい置換ではなく、自分のプロジェクト用語への正規化など実用的な用途にも転用できる。Larsonも「もっと生産的な置換を考えてみて」と促している。
詳細はHow to stop Claude from saying load-bearingを参照していただきたい。