What changed
Claude Code 2.1.208 shipped on July 14, 2026. A new accessibility mode for screen reader users lands, along with settings for vim insert-mode remaps and a corporate process wrapper. Bug fixes concentrate on long-session memory leaks and performance, background-agent attach, headless/SDK output stability, and a Bedrock auth regression.
New features
-
Screen reader mode (
--ax-screen-reader)The terminal UI’s spinners, re-renders, and box graphics were hard to follow with a screen reader. An opt-in plain-text rendering mode now renders output in a screen-reader-friendly form. Run
claude --ax-screen-reader, setCLAUDE_AX_SCREEN_READER=1, or add"axScreenReader": trueto settings. -
vimInsertModeRemapssettingLeaving insert mode in vim mode meant reaching for the Escape key every time. The
vimInsertModeRemapssetting now maps two-key insert-mode sequences likejjto Escape, so vim users can return to normal mode the way they’re used to. -
CLAUDE_CODE_PROCESS_WRAPPERIn corporate environments that require every process to run through an internal launcher, Claude Code’s self-spawn paths bypassed it. Agent view and the background service now honor a corporate launcher by running every Claude Code self-spawn through a required wrapper executable set via
CLAUDE_CODE_PROCESS_WRAPPER. -
Mouse-click support for multi-select menus in fullscreen mode
Multi-select menus and “Other” input rows in fullscreen mode were keyboard-only. Mouse clicks now select entries and activate the “Other” input row.
Key improvements
-
Input responsiveness while agent task lists update
Task-list updates re-rendered the entire UI, so input stuttered. Task updates no longer re-render the entire UI.
-
Lower per-tool-call CPU overhead in print/SDK sessions with many MCP tools
The tool pool was reassembled on every tool call, so CPU cost grew with the number of MCP tools. Caching tool-pool assembly makes tool rounds up to 7x faster at high tool counts.
-
Reduced session transcript size
Edit-heavy sessions accumulated superseded file-history backups, bloating the transcript. Pruning superseded backups reduces transcript size up to 79x in edit-heavy sessions and bounds checkpoint disk usage.
-
Completed background agents stay listed in
/tasksBackground agents vanished the moment they finished, making results hard to find. Completed agents now stay listed in
/tasksuntil cleanup, and attaching to a stopped agent shows its transcript immediately instead of a blank “Session is starting” screen. -
Catastrophic removals inside
$(…)/backticks/<(…)now promptA destructive command like
rm -rf ~hidden inside command substitution could run unprompted under--dangerously-skip-permissionsand auto mode. Such removals inside$(…), backticks, and<(…)now prompt too, matching the plain form.
Bug fixes
Sessions & context
- The context window resetting to 200k after an auto-update — the context window and auto-compact indicator briefly reset to 200k after the CLI auto-updates, causing a false “100% context used” when resuming long-context sessions. Fixed.
- Fast mode staying off after switching back to a model that supports it — it now restores automatically when enabled in settings.
- Repeated “No completion record was found” notices on session resume — orphaned background tasks now collapse into a single summary.
- Several memory leaks in long sessions — MCP stdio server stderr accumulating up to 64 MB per server, LSP documents staying open indefinitely (now LRU with a 50-doc cap), async hook output retained after backgrounding, and unbounded growth in headless/SDK sessions from large tool-result payloads. The file edit read cache is also bounded to 16 MB instead of pinning up to 1,000 full files.
Background agents
- Replies typed to a background agent being lost when delivery fails — the text is now saved and delivered when the session restarts.
- Background-session attach failing permanently after a binary replacement — after an update replaced the binary a running
claude agentsprocess was launched from, attach failed with “Couldn’t start the background daemon”. Fixed. - Remote Control clients attaching to a terminal-hosted session not seeing background agents and workflow progress until a task started or stopped — fixed.
- “Change directory” in SDK hosts (e.g. Claude Desktop) failing with “A turn is in progress” on idle sessions that have a running background task — fixed.
Headless / SDK output
- Truncated stream-json/JSON output and a missing result message when piping large responses from
claude -p— fixed. CLAUDE_CODE_MAX_OUTPUT_TOKENSand similar env vars silently using the mantissa of scientific-notation values —1e6became1. Fixed.- Stream-json input killing the session on blank CRLF or whitespace-only lines from Windows-style SDK hosts — fixed.
- Headless stream-json sessions hanging permanently when a
control_requestcarried a non-stringset_modelpayload — the CLI now answers with an error response. - SDK sessions losing agents defined via the initialize request when a plugin refresh ran before the client attached — fixed.
Tools (Edit, Read, Grep, Glob, Agent)
- The Edit tool failing on files modified after reading when the target text still matches uniquely — fixed.
- Read, Grep, and Glob edge cases — Read reporting empty files as “shorter than offset”, Grep silently returning “No files found” for invalid regex patterns, Grep count mode under-reporting totals when paginated, and Glob crashing with an unclear error when the pattern, path, or working directory contained a null byte.
- The Agent tool launching with no tools when a subagent’s
toolslist resolves to nothing — it now returns a clear error naming the unrecognized entries. - Very large markdown tables stalling rendering or using excessive memory — tables over 200 rows show the first 200 with a ”… N more rows” notice.
Network & auth
- A 2.1.207 regression where Bedrock auth failed with “Session token not found or invalid” for AWS SSO profiles whose
sso_regiondiffers from the Bedrock region — fixed. - Supervised and background sessions crashing when a server closed an HTTP/2 connection with a GOAWAY while requests were in flight — fixed.
apiKeyHelperscript failures being hidden behind a generic 401 after ~10 silent retries — the script’s own error is now shown within 3 attempts.- Bedrock streaming requests failing with a misleading “Truncated event message received” when a gateway transforms the response — the error now names the content-type and points at the proxy.
Notes
- Screen reader mode is opt-in — it isn’t on by default; enable it via
claude --ax-screen-reader,CLAUDE_AX_SCREEN_READER=1, or"axScreenReader": truein settings. - Orgs using Bedrock with AWS SSO should upgrade — if auth broke after 2.1.207 for profiles whose
sso_regiondiffers from the Bedrock region, this release resolves it. - Large markdown tables show only the first 200 rows — tables over 200 rows now render the first 200 plus a count of the rest. Check the source file when you need the whole thing.
/release-notesno longer pollutes context — “Show all” previously injected the entire changelog into the model’s context, attaching it to every subsequent request. Viewing release notes no longer adds them to context.