Claude Code 2.1.136
**Enterprise telemetry integration and auto-mode hardening.** 2.1.136 adds environment-variable control for OpenTelemetry survey feedback and a new `hard_deny` classifier rule type for absolute permission blocking — expanding enterprise audit/compliance options and tightening auto-mode decision boundaries.
New primitives
CLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTELenv-varRe-enables the session quality survey for enterprises capturing responses through OpenTelemetry
settings.autoMode.hard_denysettingDefines auto mode classifier rules that block unconditionally regardless of user intent or allow exceptions
Workflow recipes
Sensitive deployments (government, regulated industries) can now wire session quality feedback directly into compliance telemetry pipelines while enforcing immutable permission boundaries that satisfy air-gapped security reviews.
Configure an agent operating in a classified environment with hard_deny rules blocking all file mutations, tool invocations, and external API calls by default. Enable CLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTEL to automatically ship anonymized session quality metrics (latency, tool-call patterns, reasoning depth) to a compartmentalized OpenTelemetry collector. Auditors can then review both the decision boundary (what hard_deny blocked) and agent health (latency/error spikes correlating with blocked requests) in a single chain-of-custody feed.
Multi-server remote MCP fleets previously required daily re-auth and lost server configurations on session clear. These fixes unlock sustained unattended agent operation without stale-credential loops or silent server dropout.
Deploy a long-running agent service using multiple remote MCP servers (e.g., Claude Drive + Slack + Anthropic API). Previously, concurrent OAuth refresh of servers would fail, forcing agents to re-authenticate daily and losing all server connections after /clear. With 2.1.136, the agent can operate for weeks without intervention — servers persist across session clears and refresh concurrently without token collision. Combine with a cron-based /resume loop to implement true agent daemoning.
Agentic relevance
The two new primitives enable enterprise and compliance scenarios. `CLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTEL` integrates session quality signals into OpenTelemetry pipelines for monitoring and audit. `settings.autoMode.hard_deny` allows agents deployed in sensitive environments to define immutable permission boundaries that override both user intent and allow-rule exceptions — critical for enforcement of security policies in multi-tenant or regulated contexts. The remaining ~60 fixes are robustness improvements with moderate indirect impact on agent reliability.
Hardening & fixes (50)
- Fixed MCP servers configured in `.mcp.json`, plugins, and claude.ai connectors silently disappearing after `/clear`
- Fixed a rare login loop where concurrent credential write could overwrite a freshly-rotated OAuth token
- Fixed MCP OAuth refresh tokens being lost when multiple servers refresh concurrently
- Fixed API error (400) when extended thinking emitted a redacted thinking block after a tool call
- Fixed `--resume` / `--continue` not finding sessions when project path contains underscores
- Fixed plan mode not blocking file writes when a matching `Edit(...)` allow rule exists
- WSL2: image paste from Windows clipboard now works via PowerShell fallback
- Fixed plugin `Stop`/`UserPromptSubmit` hooks failing when cache cleanup deletes a version still in use
- Improved visual consistency across slash command dialogs (footer hints, dialog spacing, arrow-key styling, immediate frame rendering)
- Fixed colors appearing at wrong positions in bash command output and markdown code blocks
- Fixed ReasonML diffs rendering corrupted "undefined" text artifacts at word-diff boundaries
- Fixed worktree exit dialog warning about uncommitted files in wrong directory
- Fixed `@` file picker not matching files created mid-session in small non-git directories
- Fixed `@`-mention file picker not finding files in directories with more than 100 entries
- Fixed failed tool calls not being click-to-expand in fullscreen mode when truncated
- Fixed Backspace and Ctrl+Backspace getting swapped after using Ctrl+G on persistent extended-key terminals
- Fixed `/usage` weekly reset showing time of day instead of calendar date
- Fixed welcome banner ellipsis causing column overflow on CJK terminals
- Fixed `/insights` crash when session history contains tool calls with malformed input fields
- Fixed renderer crash when a tool's collapsibility classification changes mid-session
- Fixed `skills` entry in `plugin.json` hiding the plugin's default `skills/` directory
- Fixed IDE shell-integration lock files not respecting `CLAUDE_CONFIG_DIR`
- Fixed trailing whitespace in copied terminal output during streaming
- Fixed plugin uninstall and enable/disable not matching slugs case-insensitively
- Fixed tool error truncation marker showing negative count for surrogate-pair strings
- Fixed env vars from `CLAUDE_ENV_FILE` SessionStart hooks going stale after `/resume` or `/clear`
- Fixed `/branch` saving multi-line session title when given pasted multi-line name
- Fixed stray leading space on second line of wrapped text at column boundary
- Fixed Esc not dismissing dialogs in `/install-github-app`, `/desktop`, `/resume`, `/web-setup`
- Fixed `/doctor` MCP schema errors not naming the missing field or source file path
- Fixed Bash permission prompts showing internal parser diagnostic instead of user-readable explanation
- Fixed plugin slash commands with spaces not resolving to namespaced form
- Fixed `AskUserQuestion` discarding multi-select answers when supplied as array
- Fixed `/clear <name>` not labeling the cleared session for `/resume`
- Fixed `CronList` output missing qualifiers and scheduled prompt
- Fixed "Jump to bottom" overlay leaving color artifacts on CJK characters in fullscreen mode
- Fixed wide markdown tables leaving stale bordered render in terminal scrollback while streaming
- Fixed pasted text being silently dropped during auto-truncation
- Fixed `/release-notes` getting stuck on old version after failed changelog refresh
- Fixed `/mcp` server list not scrolling when more servers than terminal height
- Fixed mid-input slash command autocomplete not working after initial slash command
- Fixed scrolling to bottom re-engaging auto-follow with `autoScrollEnabled: false`
- Fixed prompt suggestions being auto-submitted by Enter on empty input
- Fixed keyboard shortcut hints not reflecting rebound keys from `keybindings.json`
- Fixed `/settings` language change being reverted on Escape
- Fixed `/terminal-setup` only appearing in autocomplete on exact name match
- Fixed "Chat about this" on `AskUserQuestion` dialog erasing question text
- Fixed MCP tool results being invisible when server returns content blocks
- Improved error message when `--worktree` collides with existing or stale worktree
- Changed plugin marketplace removal key to `d` instead of `r`
Raw changelog
## 2.1.136 - Added `CLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTEL` to re-enable the session quality survey for enterprises capturing responses through OpenTelemetry - Added `settings.autoMode.hard_deny` for auto mode classifier rules that block unconditionally regardless of user intent or allow exceptions - Fixed MCP servers configured in `.mcp.json`, plugins, and claude.ai connectors silently disappearing after `/clear` in the VS Code extension, JetBrains plugin, and Agent SDK - Fixed a rare login loop where a concurrent credential write could overwrite a freshly-rotated OAuth token and force re-login - Fixed MCP OAuth refresh tokens being lost when multiple servers refresh concurrently — users with several remote MCP servers should no longer need daily re-authentication - Fixed an API error (400) when extended thinking emitted a redacted thinking block after a tool call - Fixed `--resume` / `--continue` not finding sessions when the project path contains underscores - Fixed plan mode not blocking file writes when a matching `Edit(...)` allow rule exists - WSL2: image paste from Windows clipboard now works via a PowerShell fallback when xclip/wl-paste cannot read image data - Fixed plugin `Stop`/`UserPromptSubmit` hooks failing when cache cleanup deletes a version still in use by a running session - Improved visual consistency across slash command dialogs: standardized footer hints, dialog spacing, and arrow-key styling, and the dialog frame now appears immediately during loading instead of popping in after - Fixed colors appearing at wrong positions in bash command output and markdown code blocks - Fixed ReasonML diffs rendering corrupted "undefined" text artifacts at word-diff boundaries - Fixed worktree exit dialog warning about uncommitted files in the wrong directory after worktree removal - Fixed `@` file picker not matching files created mid-session in small non-git directories - Fixed `@`-mention file picker not finding files in directories with more than 100 entries - Fixed failed tool calls not being click-to-expand in fullscreen mode when their output was truncated - Fixed Backspace and Ctrl+Backspace getting swapped after using Ctrl+G to open an external editor on terminals with persistent extended-key modes - Fixed `/usage` weekly reset showing time of day instead of the calendar date - Fixed welcome banner ellipsis causing column overflow on CJK terminals - Fixed `/insights` crash when session history contains tool calls with malformed input fields - Fixed a renderer crash when a tool's collapsibility classification changes mid-session - Fixed a `skills` entry in `plugin.json` hiding the plugin's default `skills/` directory, and listing a file path now shows an error instead of failing silently - Fixed IDE shell-integration lock files not respecting `CLAUDE_CONFIG_DIR` - Fixed trailing whitespace in copied terminal output during streaming - Fixed plugin uninstall and enable/disable not matching slugs case-insensitively - Fixed tool error truncation marker showing a negative count for surrogate-pair strings - Fixed env vars from `CLAUDE_ENV_FILE` SessionStart hooks going stale after `/resume` or `/clear` - Fixed `/branch` saving a multi-line session title when given a pasted multi-line name - Fixed a stray leading space on the second line of wrapped text at the column boundary - Fixed Esc not dismissing dialogs in `/install-github-app`, `/desktop`, `/resume`, and `/web-setup` - Fixed `/doctor` MCP schema errors not naming the missing field or showing the source file path - Fixed Bash permission prompts showing an internal parser diagnostic instead of a user-readable explanation - Fixed plugin slash commands with spaces (e.g. `/myplugin review`) not resolving to their namespaced form - Fixed `AskUserQuestion` discarding multi-select answers when supplied as an array - Fixed `/clear <name>` not labeling the cleared session for `/resume` - Fixed `CronList` output missing qualifiers and the scheduled prompt - Fixed "Jump to bottom" overlay leaving color artifacts on CJK characters in fullscreen mode - Fixed wide markdown tables leaving a stale bordered render in terminal scrollback while streaming - Fixed pasted text being silently dropped when a long prompt with a pasted-text placeholder was auto-truncated - Fixed `/release-notes` getting stuck on an old version after a failed changelog refresh - Fixed `/mcp` server list not scrolling when there are more servers than fit in the terminal - Fixed mid-input slash command autocomplete not working after an initial slash command - Fixed scrolling to bottom re-engaging auto-follow with `autoScrollEnabled: false` - Fixed prompt suggestions being auto-submitted by Enter on an empty input instead of requiring Tab or arrow to accept - Fixed keyboard shortcut hints not reflecting rebound keys from `keybindings.json` - Fixed `/settings` language change being reverted on Escape after confirming - Fixed `/terminal-setup` only appearing in autocomplete on exact name match instead of partial prefixes - Fixed "Chat about this" on an `AskUserQuestion` dialog erasing the question text - Fixed MCP tool results being invisible when the server returns content blocks - Improved error message when `--worktree` collides with an existing or stale worktree - Changed plugin marketplace removal key to `d` (matching delete elsewhere) instead of `r` which collided with retry