Claudeの文章の癖が抜けない問題 — Opus 5.5での状況と抑え方
返答が「Xではない。Yだ」型や造語だらけになる問題は、GitHub issue #77136で575超の反応を集めました。症状、issueの結末、output styleとCLAUDE.mdとhookでの抑え方をまとめます。
Claude Codeの返答が「Xではない。Yだ」の型ばかりになる、聞いたことのない造語が説明なしに使われる、短く頼むと逆に暗号のような文になる。こうした「文章の癖」への不満が、GitHubのanthropics/claude-codeリポジトリのissue #77136に集まりました。反応は575件を超え、コメントは130件超です。
issueは2026年10月3日に閉じています。理由は修正の取り込みではなく、報告者が「5.5世代のモデルで解消された」と判断したためです。一方で、閉じた直後に「Sonnet 5.5でも癖が出る」という反論も付いています。この記事では、症状の中身、閉じるまでの経緯、そして今日から使える抑え方を、公式docsの仕様と突き合わせて順に見ます。
issue #77136は何を訴えていたか
タイトルは「Claude 4.7, 4.8, 5.0, and Fable increasingly default to repetitive rhetorical tics」です。2026年7月13日に立てられ、bug と area:model のラベルが付きました。本文は、Reddit上で450票超を集めた「Opus 4.8は読むのも作業するのも苦痛」というスレッドの要約として書かれています。
報告された癖の型
本文が挙げる繰り返しパターンは次のとおりです。
- 「load-bearing」「prose」「hand-waving」「reflexive hedging」「honest framing」のような語を、定訳のように繰り返す
- 文頭で「それはYではない。Xだ」と、否定から入る
- 標準語のように使われる造語や警句("instrumentation is the unlock" など)
- その場で作った比喩で、読み手が解読しないと意味が取れない
- 簡単な質問への長い返答と、自明な注意書きの段落化
- 「簡潔に」と頼むと、短いが暗号的な文になる(密度を簡潔さと取り違える)
- 会話での論争的な言い回し("here's where I'd push back")
コメントには、Fableが書いたPR説明文の例も貼られています。「q23 grades at strict tolerance despite reporting hectares. Integer slack would apply to the field_id column」のように、文法は通るのに「integer slack」のような語が何を指すか推測しないと読めない、という指摘です。
報告者が見ていた影響
本文は影響を5点に整理しています。読解コストの増加、旧モデルからの退行と受け取られていること、プロンプトでの対策が長続きしないこと、造語が利用者の語彙に移ること、そして文書の整形に別モデルを通す手間でトークンが最大2倍になることです。
注目点は3番目です。issueは、スタイル指示が数ターンで元の口調に戻る、と書いています。さらに「モデルは書くことで考える」ので、文体を強く縛ると推論の質が落ちるのではと警戒する声も紹介しています。ただし後者は報告者側の懸念で、検証された事実ではありません。
コメントには、韓国語話者から同程度に深刻だという報告もあります。英語圏だけの現象とは限らないようです。
Anthropic側の反応とissueの結末
2026年8月17日、Claude Codeチームのメンバー(GitHubアカウントbcherny)が回答しています。要点は4つです。
- Claude Code 2.1.233でOpusに技術的な質問を非対話で投げたところ、報告されたパターンは出なかった
- 長いセッションでの既定の話し方という性質上、決定的な合否としては再現できない
- Claude Codeのバグではなくモデルの挙動に関するフィードバックとして、モデル調整への入力にする
- 当面の手段としてcustom output styleを勧め、スタイルを設定しても崩れる場合は会話の実例を別issueにしてほしい
「答えを先に、標準的な用語で、判断を変える注意書きだけ残す」という要望は妥当だ、とも書かれています。
その後の流れは次のとおりです。
issue #77136の経過
- 2026-07-13issueが作成される
Opus 4.8以降の文章の癖を訴える形で、bugとarea:modelのラベル付きで立ちました。
- 2026-08-17Claude Codeチームが回答
モデル挙動のフィードバックとして扱い、output styleを当面の手段に挙げました。
- 2026-09-23〜10-02Opus 5.5への好意的な報告
「文法と語彙が人間の言葉に戻った」「ほぼ解消した」「unslop系のskillの大半を消せた」というコメントが続きました。
- 2026-10-03報告者がissueを閉じる
「5.5世代のモデルで対処された」として、報告者本人が閉じました。
Opus 5.5そのものの仕様はClaude Opus 5.5の解説にあります。
閉じ方に注意が要ります。クローズしたのはAnthropicではなくissueの作成者で、チームが「直した」と宣言した記録は、このissueの中にはありません。実際、閉じた同日に別の利用者が、claude-sonnet-5.5でも「honest」「push back」「load-bearing」「prose」とセミコロンが、1時間から1日に数回は出ると書いています。その人のCLAUDE.mdには、禁止語を並べた指示がすでに入っていました(内容は次の節で見ます)。症状の出方は日によっても違うとのことです。
つまり「Opus 5.5では軽くなったという声が多いが、モデルと使い方によっては残る」というのが、issueから読み取れる範囲の結論です。
癖を抑える手段と、それぞれの限界
公式docsは、指示の置き場所ごとに効き方が違うと明記しています。
| 手段 | 位置づけ | 効かないとき |
|---|---|---|
| output style | 位置づけ毎回のリクエストにスタイルの指示を付ける | 効かないとき指示であって強制ではない |
| CLAUDE.md | 位置づけ毎セッション読み込まれる文脈 | 効かないとき長い・矛盾する・曖昧だと守られにくい |
| hook | 位置づけClaude Code側が実行する | 効かないとき検査できる形(語の一致など)に限られる |
output styleに書く
output styleは「応答の役割・口調・形式」を決める指示のまとまりで、docsによれば有効なスタイルの指示は毎回のリクエストに付きます。このメンバーの回答も、これを最も近い手段として挙げていました。2.1.238では「custom・project・pluginのoutput styleが、セッションの途中で既定の口調に戻る」不具合も直っています。2.1.237以降なら、結果を先頭に置き前置きと総括を省く組み込みのConciseスタイルも選べます。
自作する場合の骨子は、issueで報告者が有効だと書いていた「語の種類を禁止する」書き方です。issueは「concise」を頼むと密度が上がるだけだとも述べているので、「短く」よりも禁止する型を並べるほうが筋に合います。次は例です。効果を保証するものではなく、自分の環境で試して調整する前提の書き方例です。
mkdir -p ~/.claude/output-styles
cat > ~/.claude/output-styles/plain.md <<'EOS'
---
name: Plain
description: 結論から、比喩と造語なしで書く
keep-coding-instructions: true
---
返答の最初の文で、結果か答えを言い切る。
次の書き方はしない。
- 比喩、警句、その場で作った言い回し
- 「AではなくBだ」という否定から入る文
- 定義していない略称や造語(使うなら初出で言い換える)
- 「正直に言うと」「ここは押し返したい」などの会話的な演出
注意書きは、読み手の判断が変わるものだけ書く。
PR説明やコミットメッセージでも同じ規則で書く。
EOSそのうえで /output-style plain で切り替えます。docsによれば、outputStyle の値は大文字小文字が区別され、一致しない名前は既定のスタイルになります。コマンド側は大文字小文字を無視します。
押さえておく制約がもう一つあります。docsによると、output styleはメインの会話とフォークに効きますが、通常のサブエージェントは自前のシステムプロンプトで動くため、スタイルが効きません。サブエージェントの最終報告に造語が混ざるときは、サブエージェント定義の側にも同じ禁止を書く必要があります。
CLAUDE.mdに書くときの注意
docsは、CLAUDE.mdを「強制される設定ではなく文脈」と位置づけています。具体的で短い指示ほど守られやすく、1ファイル200行以内が目安で、矛盾する指示があるとClaudeがどちらかを任意に選ぶことがあるとも書いています。
閉じた直後のコメントに貼られていたCLAUDE.mdは、おおむね次の内容でした(意訳)。
- 迎合の定型句を使わない
- em-dashと「prose」「comprehensive」「honest」を使わない
- 「clear」「simply」「just」を修辞に使わない
- セミコロンを避け、接続詞でつなぐ
- 短い文の連続に分割しない
これだけ書いても、禁止した語そのものが出続けるというのがその報告です。別のコメントでは、プロジェクトに名前付きのルールやラベルが多いと、問題の説明まで比喩やラベルで済ませる傾向が強まる、というモデル自身の説明が引用されています。モデルの自己説明は検証できませんが、ルールを増やすほど効くとは限らない、という見方の材料にはなります。
実務上の手順としては、次の順が無理がありません。
- 「何を書かせたいか」を肯定形で1〜2行にする(例: 結果を先頭に、平易な語で)
- 実際に出た癖を2〜3個だけ、出た文面のまま禁止例として足す
- 古い指示や矛盾を
/doctor prompt-auditで洗う。docsによれば、旧モデル向けに書かれた指示や互いに矛盾するファイルを報告してくれる
hookで機械的に拾う
守られているかどうかを人の目に頼らず確かめたいなら、Stop hookが使えます。docsによれば、Stop hookはClaudeの最終応答の本文を last_assistant_message で受け取り、decision: "block" と reason を返すと会話が続き、Claudeが理由に沿って直します。次は、決め打ちの語だけを検出する最小の例です。
{
"hooks": {
"Stop": [
{ "hooks": [ { "type": "command", "command": "~/.claude/hooks/tic-check.sh" } ] }
]
}
}#!/bin/bash
# ~/.claude/hooks/tic-check.sh(例。jqが必要)
input=$(cat)
# 直前のhookで続行中なら二重に止めない
[ "$(echo "$input" | jq -r '.stop_hook_active')" = "true" ] && exit 0
msg=$(echo "$input" | jq -r '.last_assistant_message')
if echo "$msg" | grep -Eqi 'load-bearing|hand-waving|honest framing'; then
echo '{"decision":"block","reason":"比喩的な専門語が含まれています。平易な言葉に書き直してください。"}'
fi検出できるのは語の一致までで、「Xではない。Yだ」型や比喩の質は拾えません。使うなら、自分のセッションで繰り返し出た語を少数足す程度が現実的です。hookの全体像はClaude Code hooksの解説にあります。
なお、MessageDisplay hookは表示を差し替えられますが、docsによれば画面表示だけが変わり、Claudeにも履歴にも元の文が残ります。癖を隠す用途はあっても、次のターンのモデルの文体は変わりません。
どの手段から試すか
使い分けの目安を、症状別に置きます。
| 症状 | 最初に試すこと |
|---|---|
| 返答全体が長く前置きが多い | 最初に試すことConcise(2.1.237以降)か自作スタイル |
| 特定の語・型が繰り返される | 最初に試すことスタイルに禁止例を足し、Stop hookで検出 |
| サブエージェントの報告だけ読みにくい | 最初に試すことサブエージェント定義に禁止を書く |
| 設定しても数ターンで戻る | 最初に試すこと2.1.238以降か確認し、実例を別issueにする |
output styleとCLAUDE.mdの役割の違いはoutput styleとCLAUDE.md・Skillsの比較に、スタイルの書き方のパターンはoutput styleの自作パターン集にまとめています。
まとめ
文章の癖は、Claude Codeの設定の不具合ではなくモデルの挙動として扱われています。issueはOpus 5.5世代の報告で閉じましたが、Anthropicが修正を宣言したわけではなく、Sonnet 5.5での残存報告もあります。設定側では、肯定形の短い指示、実例に基づく禁止、サブエージェントへの個別指示の3点が最小の構成です。それでも崩れる場合に、会話の実例を添えて報告するのが、チームが求めている次の一手です。