Claudeの思考が削られているという話を手元で数えたら、7月には数える欄が無かった
土曜の朝に、Reddit と Hacker News と GitHub から「個人が作れそうな OSS の種」を掘ってきて、ノートに追記するタスクを回している。前の記事の次に何を作るかを、自分で探す代わりに機械に探させる仕組みだ。種は1件ごとに、困りごと、根拠、既にあるもの、最小版、リスク、の欄が埋まったカードで出てくる。最初の土曜に出てきたのは1件で、Claude Code の思考トークンの使われ方を見る道具だった。
根拠の欄に貼られていたのは r/ClaudeAI の投稿で、43,000 件超の Claude Code 呼び出しを65日間集めた分析として、Fable 5 の呼び出しの 39% が思考トークンゼロ、中央値は 123 トークン、8月の思考予算は7月比で 18〜50% 減った、と書いてある。題は「It’s time to cancel your subscriptions」で始まる。本当かどうかは分からない。ただ、俺は毎日 Claude Code を使っていて、その呼び出しの記録は全部手元にある。数えれば自分の分は分かる。
フックには無くて、ディスクには既にあった
種の最小版の欄には、PostToolUse フックで思考トークン数を受け取ってファイルに追記し、それを週次で集計する、と書いてあった。リスクの欄には「Claude Code のフックコールバックペイロードに thinking token 数が含まれるかどうか未確認」とある。まずそこを確かめた。
含まれていなかった。stdin を丸ごとファイルに落とすフックを一時的に仕込んでみると、来るのはセッション ID、ツール名、ツールの入出力、transcript_path といった項目で、トークン数はどこにも無い。公式のリファレンスとも一致する。OpenTelemetry で出るメトリクスにも入力・出力・キャッシュ読み込み・キャッシュ書き込みの4種しか無く、思考の内訳は無い。
代わりに、transcript_path が指す JSONL の中にあった。Claude Code は会話の記録を ~/.claude/projects/ の下に1行1イベントで書いていて、assistant の応答の行には usage が付いている。その中の output_tokens_details.thinking_tokens が思考トークン数だ。思考の本文は空で署名だけが残っているので中身は読めないが、数は残っている。
つまりフックは要らない。書き足すものも無く、既に書かれているものを後から読めばいい。種の提案より小さくなった。
数える道具
claude-thinking-stats という Go の CLI にした。前の2本と同じで標準ライブラリだけ、依存なし、何も書き換えない。brew install nobu666/tap/claude-thinking-stats で入る。引数なしで実行すると、直近7日を日ごとにこう出す。Claude Code を使わなかった日の行は出ないので、この週は6行だ。9月21日の 418 件は、この道具を作っていた日のものだ。
$ claude-thinking-stats
day requests output thinking think% zero% p50 p95 missing models
2026-09-15 4 4,212 484 11.5 75.0 0 411 0 claude-opus-5
2026-09-18 75 62,020 21,009 33.9 34.7 101 1,185 0 claude-fable-5-1,claude-opus-4-8,claude-opus-5,claude-sonnet-4-6
2026-09-19 128 142,638 64,250 45.0 21.9 146 1,517 0 claude-fable-5-1,claude-sonnet-4-6
2026-09-20 60 82,744 51,813 62.6 25.0 127 3,298 0 claude-fable-5-1,claude-opus-5,claude-sonnet-4-6
2026-09-21 418 445,982 135,882 30.5 30.6 104 1,211 0 claude-fable-5-1,claude-sonnet-4-6
2026-09-22 43 45,427 15,056 33.1 32.6 141 1,271 0 claude-fable-5-1requests は応答の数。同じ応答が content ブロックごとに複数行に分かれて書かれていて usage は同じ値なので、message.id で束ねている。output と thinking は合計トークンで、think% は出力トークンに占める思考トークンの割合。zero% は思考トークンがゼロだった応答の割合、p50 と p95 は応答あたりの思考トークンの中央値と 95 パーセンタイル。models はその行に含まれるモデルの一覧だ。-by でセッション別、モデル別、プロジェクト別、effort(思考の強さの設定)別に切り替えられ、-top 10 で思考の多かった応答を10件出す。
missing は、usage に thinking_tokens の欄そのものが無かった応答の数だ。自分で仕様を書いた時点では「古い版や思考しないモデルでは欄が無いだろうから、欠落は0扱いにして件数だけ見せる」という保険のつもりだった。この列が主役になる。
7月には欄が無かった
全期間をモデル別で回した。
$ claude-thinking-stats -by model -since all
model requests output thinking think% zero% p50 p95 missing
claude-fable-5 513 515,442 0 0.0 100.0 0 0 513
claude-fable-5-1 943 1,020,927 284,017 27.8 32.0 140 1,200 0
claude-opus-4-8 49 272,302 191 0.1 98.0 0 0 45
claude-opus-5 227 222,721 37,356 16.8 76.7 0 1,162 144
claude-sonnet-4-6 1,688 1,904,717 592,570 31.1 56.8 0 1,061 827
claude-sonnet-5 510 262,013 0 0.0 100.0 0 0 510
note: 2039 responses had no thinking_tokens field (counted as 0; see the missing column)Fable 5 は 513 件全部が missing。思考ゼロなのではなく、数える欄が無い。Sonnet 5 の 510 件も全部無く、Sonnet 4.6 は 1,688 件のうち 827 件、Opus 5 は 227 件のうち 144 件が無い。表の6モデル、全部で 3,929 件のうち 2,039 件、半分強に欄が無かった。
月で切ると、7月の 1,434 件は全部欄なし、8月は 1,177 件のうち 605 件が欄なし、9月の 1,318 件は全部欄あり。欄が最初に現れた日は8月16日で、最後に欄なしの応答があった日は8月23日だった。transcript には書いた時点の Claude Code の版も記録されていて、版で切ると境目は 2.1.229 で、それより前の版で書かれた行に thinking_tokens は1つも無い。
モデル別の表で欄なしが多いのはモデルの新旧ではなく、いつ使ったかで決まっている。Fable 5 と Sonnet 5 を使っていたのは7月で、Opus 5 の欄なし 144 件は8月14日まで、欄あり 83 件は8月16日からだ。Opus 4.8 も欄ありは9月の4件だけ。Fable 5.1 が transcript に現れるのは9月に入ってからで、942 件は全部9月だ。
投稿は、8月は7月比で減ったと言っている。俺の transcript では、7月の応答はモデルが何であれ思考トークンを数えられない。8月も後半に入るまで数えられない。投稿の人がどうやって7月の数を出したのかは書かれていないので分からないが、少なくとも Claude Code が自分で残している記録から、7月と8月の思考量を比べることは、俺の手元ではできなかった。
欄がある範囲では、投稿の数字から大きくは外れていなかった
投稿が数えたのは Fable 5 で、手元でその欄があるのは後継の Fable 5.1 だけだ。世代が違うので厳密には並べられない。その上で見ると、Fable 5.1 の 942 件は、思考ゼロが 32.1%、中央値が 140 トークン。投稿の 39% と 123 から、大きくは外れていない。
ここからは道具の出力ではなく、同じ Fable 5.1 の応答を手元で分けて数えた。思考ゼロの応答は出力トークンの中央値が 377 で、思考ありの応答の 906 より短い。ツールを呼んで結果を受けて次のツールを呼ぶ、という連鎖の途中の短い応答が思考なしで返っていると読める。
これを「削られている」と呼ぶかどうかは、この数字からは言えない。比べる相手が無いからだ。7月の Fable 5 が同じ種類の応答でどれだけ思考していたかは、欄が無いので分からない。分かるのは、いつから数えられるようになったかと、数えられるようになってからの分布だけだ。解約するかどうかを決める材料は、少なくとも俺の記録からは出てこなかった。
だから道具は、そこまでしか主張しない。思考が減った気がしたら -by day で週をまたいで zero% を見る。effort やモデルを選ぶときに -by effort と -by model で、払っている設定が思考量を変えているかを見る。使用量の上限に当たったら -top 10 で、何がそれだけ思考したかを見る。俺の場合、-top 10 の上位はブログ記事のレビューと書き直しの応答で、1件で1万7千トークン思考していた。
比べる前に、数えられる範囲を見る
投稿を読んだときは、数えれば白黒つくと思っていた。数えて出てきたのは白黒ではなく、俺の記録のどこからが数えられるか、だった。種のリスク欄の「含まれるかどうか未確認」は当たっていて、その代わりに記録は既にディスクにあり、その記録は8月16日より前には思考の欄を持っていなかった。
外の誰かの数字を自分の記録で検算するときは、数字を突き合わせる前に、欄なしの列を見る。保険で足したつもりの列に、最初に回した日で一番大きな数字が入っていた。
comments powered by Disqus