Original Reddit post

My sessions the past few days have been absolutely miserable. Garbled tool calls causing mass hallucination. Claude declaring it suspects a security threat. Weird tool issues. Garbage. I finally stopped trying to get anything done and spent an hour running tests to figure out if it was a local or upstream issue. Everything traces back to tool channel corruption. You can revert to fix it, but it will cost you 4.8.

https://gist.github.com/0xdhx/d7086a66b48bbdf6047950a1707801cc I’m on mobile so I’ll let Claude take it from here: Claude Code 2.1.154–2.1.158 corrupts the channel that delivers tool results back to the model. Execution is clean — your commands run exactly once and your files are correct on disk. Only the channel handing the result back is broken. That’s why it looks like the model is hallucinating: it’s reasoning on results that arrived empty, duplicated, out-of-order, or with phantom content. Recognize your session Tool results return empty, then flush late in bursts a turn later. Tail of a parallel batch renders ~15× duplicated (the model sees the same output over and over). Read returns phantom content — one report had a 76-line file come back as 5333 lines, with a row that wasn’t in the file. Results delivered out of order. Model busy-waits — one report has it firing ~500 no-op poll commands waiting for a buffered result. Model fabricates output to fill a batch that looks empty/cancelled (once even a fake user instruction). If any of those match what you’ve been seeing this week, it’s almost certainly the regression below — not the model getting worse, not your prompt, not your context window. ## Strong suspect (not maintainer-confirmed) The 2.1.154 changelog (2026-05-28), verbatim: > “Streaming tool execution is now always enabled, including when telemetry is disabled or on Bedrock/Vertex/Foundry (previously behind a feature flag).” Exact timing of when the cross-platform issue cluster ignites. Another reporter has a clean 2.1.157-good / 2.1.158-bad bisect. `/clear` doesn’t fix it. ## The trade-off — read this BEFORE downgrading 2.1.154 is also where Anthropic shipped Opus 4.8. Pinning to 2.1.153 means: You go back to Opus 4.7 as your top model. No Opus 4.8. No dynamic workflows (the `/workflows` orchestration over tens/hundreds of agents). No `/simplify` cleanup-only review (the full `/code-review --fix` still works). No `! <command>` background shell in `claude agents`. A handful of smaller QoL fixes (plugin auto-load from `.claude/skills`, `EnterWorktree` switching mid-session, several VSCode/IDE fixes, auto-mode on Bedrock/Vertex/Foundry). So this is a real choice, not a free win: Pin to 2.1.153 if reliable tool-result delivery matters more to you than Opus 4.8. Stay on 2.1.158 if you need Opus 4.8 and you can live with mitigations (redirect-to-file, `stdbuf`, don’t poll buffered results, don’t fabricate to fill gaps). Details in the gist. I picked the pin because the corruption was burning more tokens and trust than the 4.7→4.8 jump was earning. Your call may differ. ## How to pin (if you’re going that way) 2.1.153 is the sweet spot below the bug: Agent View needs ≥2.1.139, regression starts at 2.1.154, so 2.1.153 keeps Agent View and predates the bug. ```

  1. Disable auto-updater FIRST (else the supervisor re-bumps you). Add to ~/.claude/settings.json: { “env”: { “DISABLE_AUTOUPDATER”: “1” } }
  2. Downgrade with the built-in installer (no npm): claude install 2.1.153
  3. Restart. Verify: claude --version → 2.1.153 ``` There is no autoUpdates settings key — DISABLE_AUTOUPDATER is an env var inside settings.json. Don’t use minimumVersion; it sets a floor that would block the downgrade. Rollback any time: claude install 2.1.158 + remove the env var. Evidence + the probe-log reproducer Full write-up with the bash probe (appends a label to a log file before echoing, so the log is execution ground-truth and stdout is what the delivery channel returned), real verbatim probe output from a clean 2.1.153 run, the upstream issue cluster, a year-long lineage of the same delivery-not-execution class, and the full list of what you give up below 2.1.154: → ** https://gist.github.com/0xdhx/d7086a66b48bbdf6047950a1707801cc/*/* submitted by /u/Darkhawkx

Originally posted by u/Darkhawkx on r/ClaudeCode