claudekit / updates / claude-code-2-1-208
[ PATCH · ]

Claude Code 2.1.208

A screen reader mode (`--ax-screen-reader`) adds opt-in plain-text rendering, a `vimInsertModeRemaps` setting maps two-key insert-mode sequences like `jj` to Escape, and `CLAUDE_CODE_PROCESS_WRAPPER` routes every self-spawn through a required corporate launcher. Several long-session memory leaks (MCP stderr, LSP documents, tool-result payloads) and transcript size (up to 79x in edit-heavy sessions) are cut down, and fixes land for the context window resetting to 200k after an auto-update (false "100% context used"), truncated stream-json output when piping large responses from `claude -p`, and a 2.1.207 regression where Bedrock auth failed for AWS SSO profiles.

Official announcement →

This article is a summary based on official documentation.

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, set CLAUDE_AX_SCREEN_READER=1, or add "axScreenReader": true to settings.

  • vimInsertModeRemaps setting

    Leaving insert mode in vim mode meant reaching for the Escape key every time. The vimInsertModeRemaps setting now maps two-key insert-mode sequences like jj to Escape, so vim users can return to normal mode the way they’re used to.

  • CLAUDE_CODE_PROCESS_WRAPPER

    In 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 /tasks

    Background agents vanished the moment they finished, making results hard to find. Completed agents now stay listed in /tasks until cleanup, and attaching to a stopped agent shows its transcript immediately instead of a blank “Session is starting” screen.

  • Catastrophic removals inside $(…)/backticks/<(…) now prompt

    A destructive command like rm -rf ~ hidden inside command substitution could run unprompted under --dangerously-skip-permissions and 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 agents process 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_TOKENS and similar env vars silently using the mantissa of scientific-notation values1e6 became 1. 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_request carried a non-string set_model payload — 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 tools list 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_region differs 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.
  • apiKeyHelper script 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": true in settings.
  • Orgs using Bedrock with AWS SSO should upgrade — if auth broke after 2.1.207 for profiles whose sso_region differs 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-notes no 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.