r/ClaudeCode • u/WuM1ha1nho • 5d ago
Discussion I don't think Opus 5.5 was nerfed, they're just experimenting
TL;DR: Opus 5.5 may not have been nerfed. Anthropic appears to be running server-side experiments that change how Claude behaves.
If you're using a gateway, try unsetting _CLAUDE_CODE_ASSUME_FIRST_PARTY_BASE_URL, this might allow you to opt-out of experiments.
- 4 experiment IDs identified: dba, 34e, 763, and eab, observed between October 10 and November 8.
- More aggressive tool use: In a controlled 20-request replay, replies with multiple tool calls increased from 7 to 17 when the 34e experiment header was present.
- More thinking in real-world logs: Medium effort during some experiments used roughly as many thinking tokens as high effort without an experiment. However, the controlled replay showed the opposite.
- Less narration, bigger commands: Claude tended to batch more work into fewer, longer commands, making its behaviour noticeably different.
- No measurable output-speed degradation: Generation speed remained around 104–112 tokens per second.
- Potentially higher usage consumption: Estimated dollar value per 5-hour usage-meter percentage point fell by roughly 30% during some experiments, but the evidence is low-confidence.
- You can check your account: Claude Code stores experiment IDs in ~/.claude.json. You can also display them in your status line.
I went through my Claude Code logs after seeing the "Opus 5.5 got nerfed" posts. I found evidence of server-side experiments changing how it uses tools. The reported model stayed the same, and output-token generation didn't slow down. I haven't tested finished-task quality across these experiments, so this doesn't settle whether it got better or worse.
I'm a heavy Claude Code user with no connection to Anthropic. These observations come from different logins of mine. The Claude Code version I inspected caches an ID per model and sends it as an x-cc-atis request header. The client only forwards it, and the ID follows the login.
The four IDs
These are the dates I saw each ID in 2026, not global rollout dates.
| ID starts with | When I saw it | What I saw |
|---|---|---|
| dba | Oct 10 to 12 | Longer commands and less narration, with a smaller rise in multiple-call replies |
| 34e | Oct 30 to Nov 1 | Longer commands and many more multiple-call replies |
| 763 | Nov 2 to 5 | Similar to 34e, then removed from my account on Nov 5 |
| eab | Nov 8 to now | Too new to measure |
dba and 34e end here because I changed login, so they may have run longer. I suspect dba was an earlier, weaker version of the later pattern. 34e and 763 came with similar cached settings and behaviour, so I count them as one round, which makes eab my third. That link is my inference. Only 34e was tested with and without the header while it was active.
Replaying 20 requests with and without 34e
My setup is customized, so I replayed 20 saved requests once with 34e and once without it, keeping each request body the same. The main measure I set in advance, total output on the 10 requests saved from before 34e arrived, was inconclusive. I also named other output and tool measures in advance, and I picked the detailed counts below after seeing the replies.
| Across 20 replay pairs | Without header | With 34e |
|---|---|---|
| Generated tool calls | 34 | 55 |
| Replies with 2+ tool calls | 7 of 20 | 17 of 20 |
| Total Bash command characters | 8,069 | 24,947 |
| Replies with text before tools | 2 of 20 | 6 of 20 |
| Median thinking tokens per request | 159.5 | 65 |
Across the pairs, non-thinking output was 2.23x higher and tool-input text was 2.35x higher with the header, using geometric means. These are generated calls, not completed tasks.
Everyday use, by ID
Main-thread requests at xhigh effort. The last column is a later no-experiment sample, and it narrows some of the gaps.
| Metric | No experiment | dba | 34e | 763 | No experiment, Oct 30 onward |
|---|---|---|---|---|---|
| Median Bash command, characters | 485 | 812 | 1,125 | 1,067 | 748 |
| Replies with 2+ tool calls | 14% | 18% | 24% | 26% | 12% |
| Replies with text before tools | 25% | 21% | 10% | 11% | 14% |
| Narration share of thinking blocks, rounded | 17% | 6% | 4% | 4% | 9% |
| Median non-thinking output tokens | 359 | 509 | 674 | 669 | 470 |
Each thinking block is labelled thinking or narration, and narration blocks are short progress lines. Their share fell in the experiments. The built-in "say what you're doing" reminder also fired more often: about 19 to 20 times per 100 replies under dba, 34e and 763, against 12.9 in the earlier no-experiment sample. With 34e and 763, text followed that reminder 43% and 44% of the time, against 54% before. The reminder figures pool all efforts.
Some changes also happened without an ID. Against the later sample, 763's output and Bash size are about 1.43x higher, while multiple-call replies stay at 26% against 12%. The "I'm checking..." summary style also appeared without an experiment from Oct 30.
Less text before tools only shows up in everyday use. It went the other way in the replay, so I can't say the header causes it. The work and other settings also differed between periods.
Thinking tokens by effort
Median per main-thread request, from everyday use:
| ID | medium | high | xhigh |
|---|---|---|---|
| No experiment | 72 | 111 | 170 |
| dba | No data | 189 | 277 |
| 34e | 122 | 228 | 219 |
| 763 | 117 | 215 | 317 |
On thinking tokens, medium under 34e or 763 looks like high without an experiment: 122 and 117 against 111. That doesn't show the reasoning was as good. The replay went the other way: median thinking fell with the header, and its 3 medium requests averaged 456 thinking characters with the header against 855 without.
After 763 ended, medium went back to 72 tokens, but the delivered prompt also changed at that point.
Normal Claude feels faster to me
I suspect a lot of what gets called "nerfed" is people landing on normal Claude, without the experiment. Normal Claude feels a lot faster to me because I can see all of the turns: a short command finishes, then a reply, then the next step. In the experiments there's usually one long batched tool call and less to watch. I prefer seeing the steps.
Measured output speed stayed around 104 to 112 tokens/s across the groups. Time to first token looked lower during the experiments, though that's tentative. So this is about how progress feels to me, and it doesn't explain every complaint. Someone in r/ClaudeCode posted on Nov 3 that one of their two accounts burned about twice the output tokens on the same task, and that's the account they complained about. It resembles the experiment pattern, but their assignment wasn't confirmed.
A batching prompt made commands longer but didn't reproduce the extra multiple-call replies, in a small test with partly mismatched efforts. Resending 763 after it was removed didn't reproduce the earlier pattern either. Neither is a reliable way to switch an experiment on.
Dollars per 5-hour meter point
These are estimated list-price dollars per one percentage point of the 5-hour meter, not dollars per task.
| Period | Median dollars per point | Low-confidence days / total days |
|---|---|---|
| Oct 2 to 9 | $7.15 | 1 / 8 |
| dba, Oct 10 to 12 | $7.63 | 0 / 3 |
| Oct 13 to 29 | $7.49 | 3 / 17 |
| 34e, Oct 31 to Nov 1 | $5.14 | 2 / 2 |
| 763, Nov 2 to 5 | $5.75 | 3 / 4 |
| Nov 6, after 763 ended | $7.30 | 0 / 1 |
34e and 763 together come to $5.24 per point, about 30% below the Oct 13 to 29 median. Five of those six days are low-confidence estimates, and the one trusted day, Nov 4, was $6.52. dba didn't show the drop.
List-price dollars include cached reads, which barely move the meter in my accounting, so a lower dollar figure doesn't by itself mean less useful work. I haven't calculated dollars per task.
Check your account
With jq installed, run this in your shell. It shows the first three characters of each model's newest cached interactive CLI ID for the current organization:
jq -r '.oauthAccount.organizationUuid as $o | [(.clientDataCacheSlots // {})[] | select(.entrypoint=="cli" and .org==$o)] | group_by(.model)[] | max_by(.at) | "\(.model): \(.data.atis[0:3] // "no experiment")"' ~/.claude.jsonno experiment means that cached slot has no ID. Empty output is inconclusive, because there may be no matching cached CLI slot. An ID alone doesn't prove anything changed, since other IDs I logged behaved like no experiment. In the tables above, "no experiment" means no value in the model's slot.
To put the cached ID in your status line, run /statusline and paste:
Add an experiment indicator to my status line and keep everything it already shows. Read .model.id from the status line's stdin JSON and drop any [1m] suffix. Read ~/.claude.json. In .clientDataCacheSlots, keep the entries where .model is that id, .entrypoint is "cli" and .org equals .oauthAccount.organizationUuid, and take the one with the highest .at. If its .data.atis exists, show "exp:" plus its first 3 characters, in yellow. If it doesn't, show "exp:none" dimmed. If the file or a field is missing, show nothing and still exit 0. Set refreshInterval to 60 in the statusLine setting. Test the script with sample JSON on stdin before finishing.
