「Opusに固定したはずなのに、なんだか応答の質が揺れる」「上位プランなのに、ある時間帯から急に頭が悪くなった気がする」「統計画面の『よく使うモデル』が、実感とまるで合わない」。
2026年6月に入って、この種の声がまた増えています。固定したモデルが会話の途中で別のモデルに切り替わる、新しいセッションを開いたら指定が無視されている、どのモデルが実際に動いているのか分からない——いわゆる「モデルの透明性」の問題です。Anthropic自身も、5月の公式のポストモーテムで、一定期間の品質の低下が3つの製品の変更に起因したと認めています。つまりこれは気のせいでは片付かない、実在する痛みです。
ただ、ここで多くの人が止まってしまいます。「たぶん切り替わっている気がする」という体感のままでは、報告もできないし、対策も打てない。
結論を先に言うと、推測する必要はありません。 どのモデルがどのターンを実際に処理したかは、あなた自身のマシンのログに、そのまま記録されています。
なぜ画面からは分からないのか
/status や /model で「今の」モデルは確認できます。ですが、これらが教えてくれるのは設定の現在値であって、過去のセッションで実際に何が応答したかではありません。会話の途中で静かに切り替わったり、上位の枠を使い切った後に下位のモデルへフォールバックしたりした事実は、画面の表示には残りません。だから「昨夜のあの遅さは何だったのか」を、UIから後追いで確かめることはできないのです。
正本になるのは message.model
Claude Codeは、セッションを1行1件のJSONとして次の場所に書き出しています。
~/.claude/projects/<プロジェクト>/<セッションID>.jsonl
この中の "type":"assistant" の各行にある message.model が、そのターンで実際に応答したモデル(APIが返したモデル)です。同じ行に timestamp も入っています。これが、どんなUIの要約よりも信頼できる、地に足のついた事実です。
試しに、全セッションを通して、各ターンの提供モデルを時刻の順に並べてみます(jq を使う一行です)。そのままターミナルに貼ってください。何もマシンの外には出ません。
cat ~/.claude/projects/*/*.jsonl | jq -r 'select(.type=="assistant" and .message.model and .message.model!="<synthetic>") | "\(.timestamp) \(.message.model)"' | sort
1行が1つの提供ターンです。
2026-06-09T14:21:03Z claude-opus-4-8
2026-06-09T14:24:55Z claude-opus-4-8
2026-06-09T15:02:11Z claude-sonnet-4-6 ← ここで段が落ちている
2026-06-09T15:08:40Z claude-sonnet-4-6
Opusに固定していたはずなのに、ある時刻から claude-sonnet-4-6 が続いている区間があれば、それが証拠です。正確なUTCの時刻が付いているので、自分の作業の記憶と突き合わせられます。
見つけた差を、影響の大きさで仕分ける
ここで大事なのは、すべての差を同じ重みで騒がないことです。
-
Opus同士(たとえば
claude-opus-4-7とclaude-opus-4-8)の入れ替わりは、弱い手がかりです。 どちらも最上位で、出力の質に体感できるほどの差は出にくく、通常の運用でも起こりえます。 -
Opusを固定したのに
claude-sonnet-4-6のような非Opusの段へ静かに落ちていたなら、それが鋭い証拠です。 段をまたぐ降格こそが、体感できる質の差を生みます。報告する価値があるのはこちらです。
ログが証明すること、しないこと
正直でいましょう。message.model が教えてくれるのは「どのモデルがそのターンを提供したか」だけです。それ自体は、「わざと下げた」という意図までは証明しません。あなたがやるべきなのは、観測した事実——ターンごとの提供モデルと時刻——を淡々と並べることです。原因の判断は、ルーティングを監査できる人(Anthropicのサポート)に委ねます。逸話ではなく、時刻つきの記録とFeedback IDが付いた報告は、保守する人が実際に動ける報告になります。
モデル別の集計や、直近N日だけの集計も
上の時系列に加えて、「モデルごとに何ターン提供されたか」を集計すると、報告に効く数字になります。さらに「全期間の集計」は「今」提供されているものと正反対になることがあります。古い統計の『よく使うモデル』が実感と合わないのはこのためです。直近7日だけの窓で集計し直すと、傾向の変化が一目で分かります。
これらのコマンド(モデル別のターン数の集計、直近N日の窓での集計)と、モデルIDの読み方の早見表を、コピペで使える形で1ページにまとめてあります。jq がない環境向けの python3 版も置いています。ブラウザの中だけで完結し、何も外に送りません。
-
自己診断ツール(ドラッグするだけ・おすすめ): モデル切替タイムライン —
.jsonlをブラウザに置くだけで、いつ・何回 Opus から下位の段へ無言で降格したかを時系列で可視化します(何もアップロードしません)。 -
コマンド版(
jq/python3でコピペ): Claude Codeが実際にどのモデルで動いたかを自分で確認する方法
おわりに
「なんだか質が落ちた気がする」を、「この時刻からこのターンまで、固定したOpusではなくSonnetが応答していた」という具体的な事実に変えるだけで、見える景色が変わります。まず自分のログを読む。これが、モデルの透明性の問題に対して、利用者の側からできる一番確実な一手です。
なお、こうした「静かに起こって、気づきにくい事故」を実行の手前で止めたり、後から検証したりするための無料(MIT)の安全フックとローカル点検を cc-safe-setup(npx cc-safe-setup)で配っています。よければ覗いてみてください。
本記事は、自分のセッションのログに対するローカルな検証方法の説明です。アカウントや法務の助言ではなく、Anthropicのルーティングの意図についての主張もしません。モデルやUsage Policyの疑問は、Anthropic自身の文書とサポートで確認してください。