Claude Code v2.1.303
What's changed Bug fixes and reliability improvements
Read full notes
What's changed
- Bug fixes and reliability improvements
AI CLIs & agents · Anthropic
Anthropic's agentic coding tool for the terminal, IDE and desktop.
v2.1.303Release history
What's changed Bug fixes and reliability improvements
What's changed Added CLAUDE_CODE_AUTO_MODE_MODEL to choose the model the client-side auto mode classifier uses; it does not change the model for server-side auto mode Added an Idle compaction row to /config for turning idle compaction off or back on; the…
CLAUDE_CODE_AUTO_MODE_MODEL to choose the model the client-side auto mode classifier uses; it does not change the model for server-side auto modeIdle compaction row to /config for turning idle compaction off or back on; the notices shown after an idle compaction now say how to turn it off/design-sync and /design-login that standalone Claude Design (claude.ai/design) closes by December 14, 2026/autocompact and /effort saving to the wrong model when a gateway names Opus 4 or 4.1 with a prefix, such as anthropic/claude-opus-4-1claude plugin and other subcommands sometimes exiting before a queued settings or config write finished, which could lose the change or leave a .tmp file behindbin/ folder, and reporting an error when a search that finds nothing (rg, grep, findstr, git grep) is piped into Select-Object or another formatting cmdlet/mcp to authorize or reconnect an MCP server where that option isn't availableclassifier_category missing from OpenTelemetry tool_decision events for most auto mode classifier blocks, and new tool_decision attributes pushing out tool_use_id, tool_source and tool_parameters when OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT is lowclaude remote-control --help not printing its usage and exiting when not signed in/design consent and /design revoke suggesting /design-login when they fail in a cloud session, where it isn't available; the message now points to claude.ai/design/settingsresultType, ttlMs or cacheScopeclaude plugin details <name>@builtin suggesting claude plugin list, which never shows built-in plugins, when the plugin isn't found; it now points to /plugin.git file points at a directory that doesn't exist--plugin-dirclaude -p and Agent SDK sessions with no permission mode to start in default mode on third-party providers, with telemetry off or on a fresh install; --permission-mode auto keeps autosubagent_type: "fork") to be on by default in claude -p, the Agent SDK, the desktop app and VS Code, as they already are in the terminal; CLAUDE_CODE_FORK_SUBAGENT=0 turns them off, and claude mcp serve never offers themclaude -p, the Agent SDK, the desktop app and VS Code now run in the foreground by default← for agents footer hint to hide 10 seconds after a session opens; the count of agents waiting on you still shows/feedback: it now points to GitHub issues instead of an organization admin@browser banner saying "Browser connected" when no browser with the Claude extension can be reached…
What's changed Added CLAUDE_CODE_RETRY_WATCHDOG_MAX_USAGE_LIMIT_WAIT_MS so unattended retry mode (CLAUDE_CODE_RETRY_WATCHDOG) ends a request at a usage limit that resets too far away instead of waiting Added OpenTelemetry tracing guidance to the claude-api…
CLAUDE_CODE_RETRY_WATCHDOG_MAX_USAGE_LIMIT_WAIT_MS so unattended retry mode (CLAUDE_CODE_RETRY_WATCHDOG) ends a request at a usage limit that resets too far away instead of waitingclaude-api skill, including setting up trace destinations with the ant CLI% motion to vim mode: jump to the matching bracket, alone or with d/c/yrows to a mod's Input: a text field of several lines in the terminal, where Enter submits and Shift+Enter or a backslash before Enter starts a new lineclassifier_verdict and permission_mode to OpenTelemetry tool_decision events, so auto mode classifier decisions can be told apart from permission rulesclassifier_category to OpenTelemetry tool_decision events, naming the built-in rule a classifier block matched, when OTEL_LOG_TOOL_DETAILS=1WorktreeCreate hook without asking when it may hold unpushed commitsfable (and best) model alias erroring on the Anthropic API when the newest Fable model is not available to your organization: Claude Code now retries once on the previous Fable model>0q covering the folder trust prompt, and >4m before the shell prompt at exit, in terminals built on VTE older than 0.53 such as MATE Terminal on RHEL 8GOK text appearing in the prompt at startup in some versions of iTerm2application-inference-profile running your awsAuthRefresh command and delaying model-switch hooks when the provider is not Bedrockclaude auth status or claude plugin list exited in the middle of a token refresh/rewindask decision not showing which plugin or skill the hook comes from/diff not noticing a conflicted cherry-pick or revert in reftable repositories when one of its git checks timed out or failedcd in the same session$.model.fork returning nothing-to-fork when called before the first response of a new Claude Code process had finished, as in claude -p runs and cloud sessions/compact and auto-compact briefly freezing the UI while the visible transcript is rebuiltdeniedMcpServers to keep those tools off[killed] line in their output file.catch handler to run only when the hook throws or times out; events raised beneath the hook's own calls now skip that hook without asking its .catch$.env.set to resolve with {} once the variable is set or unset, or with { deny } saying why when the write is not made$$ and multi-line \[ … \] blocks and inline $…$ and \(…\) mathWhat's changed Added virtualText to a mod's prompt decorations: text drawn in the prompt box that never enters the draft or the submitted prompt Added cache_creation_5m_tokens and cache_creation_1h_tokens to the OpenTelemetry api_request event, splitting cache…
virtualText to a mod's prompt decorations: text drawn in the prompt box that never enters the draft or the submitted promptcache_creation_5m_tokens and cache_creation_1h_tokens to the OpenTelemetry api_request event, splitting cache writes by lifetime$.ui.view({ agentId }) for mods: shows an agent's transcript in the main view when you ask, and $.ui.view({}) goes backdir prop on a mod's Text for right-to-left text: on Windows and in VS Code's terminal its rows read in that direction and sit flush right/advisor on Claude Platform on AWS; no advisor runs until you pick one with /advisor, advisorModel or --advisor, and CLAUDE_CODE_DISABLE_ADVISOR_TOOL=1 turns it offgen_ai.provider.name, gen_ai.conversation.id, gen_ai.tool.name and error.typeprompt and model in the agent.spawn mod hook, which could only refuse workflow agents beforeprompt.change mod hook, raised when the prompt box's text changes without a typed edit: a recalled history entry, a clear, an undo, or a plugin's fill/autocompact warning about high token usage when you choose a smaller auto-compact windowclaude --help naming a removed tool in its description of --restrictedclaude agents not refreshing any pull request's status when the data for one of them came back incomplete/tasks shortly after finishing, leaving no way back to the conversationENABLE_TOOL_SEARCH=auto) turning off part-way through a conversation, for example while MCP servers reconnect after a resumeforceLoginOrgUUID leaving the refused organization's token stored, or live after /loginArtifact("(unprintable path)") while a call's input arrives; its row now shows "Waiting…" and "Running…" as Bash's does/branch dropping messages, and claude purge skipping subfolder projects, when they contain a Unicode line or paragraph separator (U+2028, U+2029)WorktreeCreate and WorktreeRemove hooks not running when Claude Code starts with --worktree (not yet with --tmux)tool_result events missing git_commit_id after git commit -q in repositories using reftable ref storageprompt.submit hook rewrote or dropped still being recorded as typed in the OpenTelemetry user_prompt event and interaction span, and in session title requestsmodel: aliases like haiku now resolve, a subagent's model no longer overrides it, and an unavailable model falls back to the caller's instead of allowing the action--worktree sessions sometimes starting from the wrong commit when a tag or branch was named like a commit ID, and their starting git status naming a branch other than the new worktree's--worktree failing to reopen a worktree in repositories using git's reftable ref storageclaude remote-control servers giving up on renewing their connection after a brief sign-in error, such as a locked keychain; they now retry, and warn when you need to run claude /login--worktree failing in a worktree of a bare repository when origin's default branch can't be fetched; the fallback base is now the current checkout's HEAD, not the main repository'sprompt.edit hook not being raised for a newline entered with the chat:newline keybinding (Ctrl+J, or a rebound Enter)claude daemon stop --any printing "stopped" while a stuck background service kept running: it now waits, force-kills the service, and says so with exit 1 if it is still thereclaude daemon stop exiting with no output, and leaving sessions listed as running, when telemetry is turned off/healthz or SIGTERM shutdown) while nobody reads their output; logs keep the latest 256 KiB and count drops (not on Windows)plugin-authoring skill: Claude scans a mod's files for keys before opening them, and asks before scanning a folder outside the project…
What's changed Added CLAUDE_CODE_DISABLE_FILE_MENTIONS environment variable: Claude gets the paths of @ file mentions to read with its file tools, not the files' contents Added idle compaction in the terminal: a 200K+ token conversation left idle for about 54…
CLAUDE_CODE_DISABLE_FILE_MENTIONS environment variable: Claude gets the paths of @ file mentions to read with its file tools, not the files' contentsCLAUDE_CODE_IDLE_COMPACT_MIN_TOKENS to change idle compaction's 200K-token minimum; "idleCompaction": false in settings.json turns it off. Both need v2.1.290 or later$.prompt.media so a prompt.submit hook of a mod installed by managed settings can read the bytes of an image or document attached to the prompt$.session.identity() for mods installed by managed settings: how the session is signed in, and its organization and email when managed forceLoginOrgUUID lists that organizationsize, weight, mono and tabular to a mod's Text and named spacing steps (xs to xl) to its Box; bold is deprecated in favor of weight--shutdown-drain-sec to claude self-hosted-runner orchestrator: on SIGTERM it stops polling and gives the poll in flight and running spawn hooks up to that many seconds to finishskill.prompt hook receives/effort and /fast in agent view to set what new sessions start with; a bare /model, /effort or /fast there now opens a picker--safe-mode--disallow-tools and a disallowed_tools case field to claude plugin eval to keep specific built-in tools, such as Agent, out of eval runsCLAUDE_CODE_ATTRIBUTION_HEADER=0 in the env of a Claude apps gateway's code policyCLAUDE_CODE_ATTRIBUTION_HEADER=0queue door to the session.append mod hook, so a mod can make the transcript's queue records differ from the prompt as sent/plugin and claude plugin validate naming a mod's hooks that are skipped where an organization manages Claude Code/usage warnings for max effort, workflows, always-on context and large tool resultsapiKeyHelper was in useANTHROPIC_BASE_URL ending with "Prompt is too long · automatic compaction failed" near 200K tokens instead of sending the request--max-turns, --max-budget-usd, an interrupt, or the end of the host's conversation.claude in itUserPromptSubmit or mod prompt.submit hooks were still running (regression in 2.1.296)--plugin-dir folder, whose code Claude Code reloads and runs outside the sandbox--debug, --debug-file), and a hang on exit when the debug log is on a disk or network mount that stops accepting writes-c scripts that don't run rm. An rm built at run time in a script Claude Code can't read no longer prompts unless CLAUDE_CODE_STRICT_INLINE_SHELL_RM_PROMPT=1claude mcp list, claude doctor and /status reporting an empty .mcp.json as invalid/btw jumping the transcript to the bottom when asked while scrolled up in fullscreenbwrap: Can't mkdir /mnt/c/Program Files/ClaudeCode when the sandbox can write to the Windows driveclaude remote-control sessionsprompt.submit rewrite being silently dropped, sending the prompt as typed, for some prompts with a pasted image or an image that can't be read.config.json in the config directory/sandbox reporting success when its setting could not be saved because the project folder is not writable; it now says nothing changed and whyconstructor or prototype in an MCP config never being connectedconstructor or toString asking for permission in auto mode and bypass permissions mode.catch, being run again without end when it waits on another mod's noun that does its work outside the callavailableModelsMatch: exact or deniedModels blocks; it now answers 400 and leaves them out of its model listsANTHROPIC_BASE_URLANTHROPIC_BASE_URL being aborted after 180 seconds with no data arriving; they now wait 300 seconds, whether or not feature flags are loadedtool.describe or prompt.section…
What's changed Added a code key to the Claude apps gateway's managed.policies[]: the same settings as cli, also applied in Claude Desktop's Code tab; beside desktop, it turns on Claude Desktop's gateway mode Added autoCompactWindow to subagent frontmatter and…
code key to the Claude apps gateway's managed.policies[]: the same settings as cli, also applied in Claude Desktop's Code tab; beside desktop, it turns on Claude Desktop's gateway modeautoCompactWindow to subagent frontmatter and --agents definitions, so a subagent can auto-compact earlier than the main conversation's windowCLAUDE_CODE_WORKFLOW_SUBAGENT_MODEL to run every workflow agent on one model while other subagents keep theirsCLAUDE_CODE_OVERLOADED_RETRY_MAX_DELAY_MS environment variable to set a longer maximum delay for the backoff when retrying an overloaded (529) request/plugin on a plugin whose hooks are left out because another enabled plugin has the same nameallow_large option to the Read tool so Claude can read a text file past the usual size limits in one call when it needs the whole file and the context has roomPreToolUse hooks that deny a tool call with "continue": false, and managed prompt hooks that block one, refusing the call but not ending the turnupdatedMCPToolOutput in some sessions.mcp.json or plugin MCP server that was switched off for that folder, after changing directory or reloading pluginsallowedProviders with "gateway" locking out laptops that name that gateway in user settingsforceLoginMethod to gateway with no forceLoginGatewayUrl (regression in 2.1.295)--teleport opening an empty conversation when the session's history could not be read52;c;… escape sequence printed on screen after copying in older VTE-based terminals such as MATE Terminal/diff panel or dialog was openUserPromptSubmit hook or a mod's prompt.submit hook ending headless sessions, clearing the typed prompt, or letting the unchecked prompt throughclaude self-hosted-runner printing misleading errors when registration is refused: it now names the org admin setting, or says a restarted on-demand runner needs a fresh work order--capacity above 1$ methods running in the main session's working directory instead of the calling agent's, and ignoring the turn their calling hook holds$.agent.register succeeding from a mod's hook that was still running after the mod was reloaded or removed; the call is now refused$.http.fetch in mods refusing a HEAD request when the response declares a Content-Length over the 4 MiB body limitclaude plugin marketplace add, marketplace update and plugin install failing with an internal error for a marketplace named like constructor; add now refuses such names clearlyconstructor or prototype being deleted by the next save of that plugin's optionsCLAUDE_CODE_RESUME_INTERRUPTED_TURN re-running a finished turn after a restart when an MCP tool result had ended that turnBASH_ARGV0 shell variable and then use it; these now prompt for approval← being run twice, once unseen in the foreground, when the background service was slow to answer← moved the session to the background; it is still not sent, but ↑ now brings it back/clear in headless sessions/mcp or claude mcp when an MCP server needs authentication/code-review ending on a raw JSON array in cloud sessions, the Agent SDK and IDE integrations; the findings now print as a numbered listtool_result events missing git_commit_id after git commit -q or git -C <dir> commitCLAUDE_CODE_TRANSCRIPT_LOCAL_GC dropping a message from the saved transcript when its text held a Unicode line or paragraph separator (U+2028, U+2029)claude purge leaving a prompt in the history file when its text held a Unicode line or paragraph separator (U+2028, U+2029)claude plugin install failing for GitHub owner/repo plugin sources on machines with no GitHub SSH key; the clone is now retried over HTTPSrm -rf /c/Users/<name> in Git Bash not asking in bypass permissions modecode settings, the reason shows as a reply--debug output to name unrecognized frontmatter fields in custom agent files, with a hint for likely typos…
What's changed Added onFailure: "block" for command and HTTP hooks: a hook that can't start, times out, or exits with an unexpected code blocks the action instead of letting it through Added Program Status Protocol (OSC 7501) support: terminals that implement…
onFailure: "block" for command and HTTP hooks: a hook that can't start, times out, or exits with an unexpected code blocks the action instead of letting it through/copy picker, so a drafted message copies without its > markersclaude plugin install, enable, disable and marketplace add when the settings file they write to does not loadclaude -p run is waiting for when it stays open after its last turntimeouts.upstream_ttfb_ms on the Claude apps gateway's Bedrock, Vertex, Foundry and other cloud upstreams: a value you set now limits how long a stream may take to start there, after which it fails over or gets a 502← is waiting for the current tool to finishmodels list to every Claude apps gateway upstream: only the listed models are sent there, on failover too, and one * in an entry is a wildcardforceLoginMethod: "gateway" and forceLoginGatewayUrl in your own user settings on machines with no managed settings, so /login opens on that Claude apps gatewayclaude plugin validate when a plugin's README has no install line: it prints the line to paste and never changes the exit code, even with --strictupstream_request_id to the Claude apps gateway's inference audit event: the request ID from Amazon Bedrock, the Anthropic API or another upstream, for support cases$.ui.notify for mods: raises a native notification through your own notification setting and says which channel sent itButton: strings and Text, so a row of a list is one pressable with a chip or a dim detail insideCLAUDE_CODE_RETRY_WATCHDOG_MAX_WAIT_MS to limit how long unattended retry mode (CLAUDE_CODE_RETRY_WATCHDOG) waits out 429 and 529 errorsrequest-id header to the Claude apps gateway's successful inference responses, so request_id in Claude Code telemetry matches the gateway's audit log[1m] model when a gateway, Bedrock, Vertex or Foundry refuses the context-1m beta; Claude Code now resends without itclaude -p text output dropping earlier responses when background work started another turn; each turn's response now prints when the turn endscommand_description instead of descriptionhost:80) to plain http:// pages on that host/plugin's Errors tab removing a marketplace that failed to load, and uninstalling its plugins, on Enter without asking firstclaude plugin marketplace add reporting success for a marketplace whose name no plugin can be installed under; such an add is now refusedCLAUDE_AUTO_BACKGROUND_TASKS moving a subagent to the background while an edit or shell command waited behind it, which started that call before the subagent finishedclaude remote-control sessions right after a phone message, without the /config toggle, or when started from inside Claude Code/tui exiting without a message, or with a raw system error, when Claude Code could not be started againavailableModels not appearing in the /model picker for sessions signed in to a Claude apps gateway; such a model now shows its built-in row in place of a modelPicker row added for the same modelCLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC hiding the Claude apps gateway spend limit in /usage and the status line. The spend limit request goes to the gateway the session is signed in to←; Claude now keeps working in the foreground--tools and --restricted not applying to built-in tools that register after launch, and deprecated tool names reaching tools outside the caller's tool set/loop that was moved to the background with ←; cancelling a pending wakeup now shows a noticeFORCE_COLOR=3, which put color escape codes into the output Claude readsclaude agents starting a new background service as it exited when both were stopped with a session open (for example at a reboot), which could delay shutdown and restart an interrupted sessionworker being shown as "Agent" in auto-mode denial notices and in the activity lists of task detail viewsTaskStop, which can never be the cause/loop stopping without notice when its next wakeup came due while the session's process was down; the session now says so and Claude is told/advisor dialog showing a checkmark on a saved advisor model that is no longer available; it now opens on "No advisor"~ moving the cursor past the last character of a line, so x after it did nothing, and 3~ running on into the next line…
What's changed Fixed prompt and agent hooks written as instructions (such as "Block commands that...") allowing what they should block Improved how prompt hooks on Stop and SubagentStop written as instructions (such as "Carry on if the build is broken") are…
prompt and agent hooks written as instructions (such as "Block commands that...") allowing what they should blockprompt hooks on Stop and SubagentStop written as instructions (such as "Carry on if the build is broken") are judged, so Claude is less likely to stop earlyWhat's changed Added Claude Haiku 5.5 (claude-haiku-5-5), now the default Haiku model on the Anthropic API — 1M context, $0.10/$0.50 per Mtok ($0.50/$2.50 for prompts over 100K) Added agentType to the subagentStatusLine payload, so scripts can tell custom…
claude-haiku-5-5), now the default Haiku model on the Anthropic API — 1M context, $0.10/$0.50 per Mtok ($0.50/$2.50 for prompts over 100K)agentType to the subagentStatusLine payload, so scripts can tell custom subagent types apartisDeferred to $.tool.register for mods: false lists the tool's schema in the prompt from the start instead of behind tool search← moved the session to the background; if a queued message can't move, ← now stays put and says so/model effort ←/→ wrapping past the highest or lowest level, which could accidentally save Low as a model's default effort/tui disconnecting Claude in Chrome in a session started with --chrome, and ignoring --no-chromeSendMessage in sessions, including resumed ones, where a host, a permission rule or a --tools list removed that tool--agent sessions being told a built-in tool was disabled for the whole session when only their own tool list left it out/clearclaude logs, stop, kill, rm and claude daemon status, stop, uninstall sometimes signing you out when your login had expired or was about toworker being shown as "Agent" when it starts, and the agent detail dialog's title losing the agent type once the agent finishesArtifact("(unprintable path)") while a publish call was still streaming in/ultrareview upload on Linux wrongly refusing some repositories, such as one inside another checkout, over a settings file that "could not be parsed" while a sandboxed command was running/ultrareview upload's refusal over split-index files advising a git command that could leave git unable to read its indexclaude remote-controlclassic.* events being skipped while the plugin hooks worker restarts, which left settings hooks to answer without themclaude plugin test failing for mods that call $.session.append; tests can read the appended rows back with the new mock.sessionclaude plugin eval refusing every Bash-granting run on Macs with Docker Desktop (links under ~/.docker/bin); the refusal now names which part of a credential store held the linkdesktop policy sets Claude Desktop's built-in browser keys, such as builtinBrowserEnabledclaude agents offering bypass permissions that background sessions then ignored when consent was saved only in .claude/settings.local.json or a --settings file; it now asks for consent first, and a session that ignores bypass shows a short notice that stays← backgrounding a session after 10 seconds while the prompt held unsent text (it now cancels the move) or a question was waiting for your answer← had just been pressed to move the session to the background/feedback returning to the drafts list after Ctrl+O or Ctrl+Z while a report was sending, leaving the send impossible to cancelclaude purge stopping silently (exit 0, or a hang in a terminal) when a file or folder could not be deleted; it now deletes the rest, lists what it could not delete, and exits 1>> and << on a line of only spaces leaving the cursor past the end of the line, where a following x deleted nothingV then d) the cursor lands on the first non-blank, and . after it acts on the cursor's line/loop wakeup or scheduled task; Claude is no longer told, and the session stays asleepclaude_code.at_mention logging to emit at most 100 agent and 100 MCP-resource events each time a prompt is read…
What's changed Added --marketplace <source> to claude plugin install: adds the marketplace if needed, under the same policy checks as claude plugin marketplace add, then installs the plugin from it Added an effort parameter to the Agent tool, so Claude runs a…
--marketplace <source> to claude plugin install: adds the marketplace if needed, under the same policy checks as claude plugin marketplace add, then installs the plugin from iteffort parameter to the Agent tool, so Claude runs a sub-agent at the effort level you ask forCLAUDE_CODE_OVERLOADED_RETRY_BASE_DELAY_MS environment variable to set a longer base delay for the backoff when retrying an overloaded (529) requestprompt.autocomplete, an event a mod hooks to add its own rows to the prompt box's autocomplete list$.model.complete for mods: prompt and system take blocks of text, and cache: true on a block caches the request up to itagent.spawn mod hook, with their run and index, so a mod can refuse thempermissionMode: auto entering auto mode when auto mode is unavailable (disabled by settings, circuit breaker, or a model that doesn't support it)/ultrareview uploads under ~/.claude/seed-adminrm -rf on the 8.3 short name or another alternate Windows spelling of the home folder or a drive not being treated as removing itallowed-tools rule coming back in a later turn when you leave auto mode or plan mode partway through that turnNO_PROXY being ignored for Claude Code's own API requests (sign-in, policy, feedback, artifacts) when HTTPS_PROXY is setclaude plugin commands such as marketplace add and install running before an organization's managed settings had loaded on a first runclaude -p and Agent SDK runs stopping a background command 5 seconds after the final result, and one-shot claude -p runs dropping a scheduled wakeup; both are now waited forclaude --resume session picker or with /resume/resume, /branch or /clear never firing, and saved tasks ignoring later creates and deletes after two writes to the tasks file milliseconds apart/loop silently stopping when the session's process restarted (for example after a crash), because its pending wakeup was lostpages was a list such as "6,9,15"; it now returns an error saying to read each page or range separately/bug, /share and /feedback <text> starting over after Ctrl+O or Ctrl+Z while a report was being sent, and closing as cancelled after it had been sent/remote-env replacing your saved default environment when you pressed Enter right away: the list now opens on your default, and no row has a check mark when no default is in effectf/t/F/T/;/, jumping to, or deleting up to, a match on another line of the prompt/add-dir path box letting Shift+Enter or a paste add a line break, and treating fast-typed "tab", "up" or "down" as those keys! leaving the row selected/cd or a permission change, and added a transcript line when a nested one isn't loaded/name letting Claude invoke a skill that is reserved for the user$.state calls through one const taking minutes to load or validateclaude plugin validate listing a matcher or state value for a hooks module that the engine reads from elsewhereclaude plugin validate listing a $.state value read through a top-level var that was declared again or reassigned; such a module is now refused$ method restarting the hook origin, which could run a guard hook with a .catch above it again without endconfig.set, state.set, env.set or agent.spawn hook that denies after calling next(e) being answered as a refusal: the hook is now reported as failed, by name/theme, the /config Theme menu and the first-run theme step saving a theme before a plugin's config.set hook was askedtool.check hook answering allow running a tool that requires your answer (a question, a plan approval) without showing its dialognext(e) and then failed while the turn was interrupted letting the call through; the call is now rejected…
What's changed Fixed a regression in 2.1.290 where cloud sessions could drop answers to permission prompts Fixed a regression in 2.1.288 where the last messages of a session could be lost when quitting
What's changed Added serverToolUses to the result of a mod's turn.step hook: the tool calls the API ran itself (the advisor), each with its id, name, input, start and end Added agentId to the tool.check event of plugin hooks, so a hook can tell a subagent's…
serverToolUses to the result of a mod's turn.step hook: the tool calls the API ran itself (the advisor), each with its id, name, input, start and endagentId to the tool.check event of plugin hooks, so a hook can tell a subagent's permission check from the main session'sceiling to the question and verdict a mod's tool.check hook reads, naming the approval an organization requires for a toolThemeKey and Color types to the plugin hooks typings, so an editor lists the theme colors a mod's drawing can nameclaude plugin validate: each hook a mod registers at a gating site is listed with whether it has a .catch (gatingHooks under --json)claude attach <name> and claude logs <name>: part of a session name works in place of the id/claude-api managed-agents-onboard <url> to set up the Managed Agents pattern a page describes as ant apply files/claude-api managed-agents-onboard <quickstart-name> to build a Console quickstart template, such as deep-researcher, with the ant CLIoffset to read on/rewind not listing a prompt sent while Claude was still working/loop with an interval, reminders) silently not coming back on resume once the conversation was compacted; covers compactions made from this version on/background hand-off, and recurring ones firing an extra run on every resume, respawn or fork--json-schema runs exiting non-zero with is_error: true on a success result when the connection dropped after the structured output was already deliveredCLAUDE.md, rule or AGENTS.md symlinked outside the working directories loading under permissions.blockReadsOutsideWorkingDirectories or a Read deny rulexn-- host label matching differently from one process to the next/ultrareview dropping uncommitted changes without a warning on Windows when git stash create failed, and refusing them after a git add -N file was deleted or movedplansDirectory setting's project-root check for paths that contain a backslash on macOS and Linuxclaude daemon run and claude daemon logs; they now show as \uXXXX escapes.catch being unloaded, and its .catch skipped, when the hook kept the hooks worker busy on a prompt or tool callturn.step result listing a tool call that a mid-response model fallback had discardedclaude plugin validate and plugin loading refusing a hooks module that destructures an option named like one of its top-level functions/ultrareview failing to upload uncommitted changes when core.safecrlf=true is set in git's configuration! shell blocks in skills and commands failing when the file is saved with CRLF line endings/permissions tab was clicked while searching in fullscreen modeanswer on turn.complete for a subagent that hands its report back in auto modeprompt.submit hook that drops a prompt after calling next(e) being ignored silently: the hook is now reported as failed, by namedisableClaudeAiConnectors and allowedMcpServers URL rules not being applied to some MCP entries declared in .mcp.json, plugins or agents@-mention under the read block or --restricted being able to read a file outside the working directories through a link changed mid-read/loop run count, countdown and live status line after the session enters a worktree that it createsclaude agents sessions in manual permission mode asking for approval to read an image pasted into a reply or a new agent's promptdeclare, typeset, export or readonlylanguage setting…
What's changed Fixed a deny or ask rule on a nested part of a compound shell command not holding over a user-installed mod's approval on managed machines Fixed the terminal freezing on short code blocks with many unclosed <script> tags or deeply nested ${…
<script> tags or deeply nested ${ substitutionsRead deny rules not applying to files @-mentioned, changed, or selected in the IDE through a symlinkclaude auth status that may have made sign-outs more frequentplugin list, plugin eval and plugin update showing a stale copy of a plugin installed from a local folder marketplace, and hot reload for a symlinked --plugin-dir@ in its path, an uppercase host or a file: pathTZ="$HOME" rm -rf build) when the sandbox auto-allows commandsclaude plugin validate skipping the plugin when the folder also holds a marketplace manifestagent.spawn for teammates, one agent id across plugin hook events, and idle and waiting states in $.agent.list()ui.render hook wrote made a row throw while drawn; the engine now draws its own row instead[-], which now also keep one column in from the terminal's edgeClient that fails while drawn taking down everything the mod drew around it; it now fails alone and raises ui.faultclaude plugin validate failing an Anthropic marketplace's own plugin and listing a clean plugin.json in --jsonError or nothing as its reason when the failure carried no message<script> tagsWhat's changed Added $.ui.selection() for mods: returns the text you last selected in fullscreen mode and, when the selection lies within one transcript row, that row Added a built-in gh api to cloud sessions whose image has no GitHub CLI, and fixed the…
$.ui.selection() for mods: returns the text you last selected in fullscreen mode and, when the selection lies within one transcript row, that rowgh api to cloud sessions whose image has no GitHub CLI, and fixed the built-in sending control characters from file names, jq filters or GitHub errors to the terminal--max-findings <n>|all to /code-review to report more or fewer findings than the usual limit; the choice is reused until you pass --max-findings default--resume sometimes dropping files and other context that a compaction had just restored--resume showed the prompt unansweredCLAUDE_CODE_DISABLE_STRUCTURED_OUTPUTS to turn structured outputs offsonnet subagentCode element held a diff that does not parse; it now draws as plain code${user_config.*} and ${CLAUDE_PLUGIN_ROOT} placeholders in initializationOptions and settings instead of substituted values or manifest defaultstool.call hook making Bash fail and file searches read the wrong folder in subagents that run in a worktreegit-subdir plugin installs failing, or caching an incomplete plugin, on older git (before 2.39, e.g. Ubuntu 22.04's 2.34)--plugin-dir not showing "Configure options" in /pluginpython3 <<EOF) asking for approval on every run under sandbox auto-allow when the body holds only plain text and simple $VAR referencesBASHPID assignment whose value the shell would evaluate as arithmetic, instead of allowing it silentlyclaude_code.tool.blocked_on_user spans reporting unknown source or decision in -p and SDK sessions and for PreToolUse hook approvals-p or on an interrupted turn, emitting no tool_decision event/compact even though its history was still savedCLAUDE_CODE_RETRY_WATCHDOG) retrying for hours after a very long response stream failed; Claude Code now streams again, and gives up after three timeouts/login reporting "Login successful" when credentials could not be saved to secure storage; it now shows the failure, and offers a retry when the new login didn't take effect (anthropics/claude-code#73861)gcpAuthRefresh/awsAuthRefresh browser sign-in opening when a laptop wakes from sleep while another Claude Code process is signing in-p / SDK) sessions occasionally ignoring SIGTERM when a supervisor such as timeout or systemd sends SIGCONT alongside itmemorydisableAutoMode or an older model); typing, navigation and JavaScript still askclaude plugin install failing for GitHub-source plugins on macOS and Linux machines with no GitHub SSH key: the clone now falls back to HTTPS and prints a noticesandbox.credentials.files entries on git config files not taking effect while permissions.blockReadsOutsideWorkingDirectories is on/tui)tools: lists very many Agent(...) entriesclaude stub was installedowner/repo plugin marketplaces showing only the second attempt's error when both the SSH and HTTPS fetch fail; both errors are now shown, with the transport tried first on top.claude/rules and nested CLAUDE.md files not loading when Write or Edit creates or changes a file in their scope (previously only Read loaded them)rm (such as one on / or the home directory) inside a bash -c or sh -c script running without a prompt in bypassPermissions mode or under a shell allow rule (anthropics/claude-code#96300)…
What's changed Added Claude Mods: plugins may now modify deeper behavior Added You should know, a built-in mod where a side agent watches your back and flags things you or Claude might miss. Turn it on with /plugin enable cc-plugin-you-should-know@builtin (for…
/plugin enable cc-plugin-you-should-know@builtin (for first-party sessions with telemetry on)n:<text> filter to the agents view that matches session names and tasks; a filter now shows matches in collapsed sections and Enter opens the first matchprompt_text to the OpenTelemetry user_prompt event, a copy of prompt for backends that nest dotted keys; drop or mask it wherever you drop or mask prompt (anthropics/claude-code#70763)gh api (REST only) for sessions that use Anthropic-managed git on macOS and Linux machines where the GitHub CLI is not installedasyncRewake waking Claude over and over with "found issues" notifications when the hook's script file is missing; the broken hook is now reported onceavailableModels list, which could collapse /model to one Opus row/model on a claude.ai login saving the current version's id, so your saved default now follows the newest Fable like Opus and Sonnet do/model, opusplan) rewriting earlier MCP tool announcements, which could drop earlier extended thinkingrm (such as one on / or the home directory) losing its always-ask safeguard when the same command also redirected output to a ~ or wildcard pathclaude -p and SDK sessions repeating a model fallback on every later message after the model was switched while a reply was runningclaude agents after the agent exited and removed the worktree the session was started in/advisor pairing checks: Sonnet 5.5 can now advise Opus 4.7 and 4.8, and advisors the API would refuse are flagged up front instead of being silently dropped__proto__claude --teleport progress screen, and an MCP form field while it is being checked, to the screen reader again on every spinner frameCLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS not removing the structured-output format from session-title and prompt-hook requests, which Bedrock-backed gateways reject--include-partial-messages sending a cut-short reply's message_stop late or never, so apps could show the reply as still in progressclaude agents sometimes not showing the permission prompt a background session is waiting on/ultrareview giving advice about .git/info/attributes when the upload stops on a committed .gitattributes it cannot read, such as one saved as UTF-16claude remote-control failing to register behind an HTTP proxy with a misleading "Check your organization permissions" error (anthropics/claude-code#97352)claude agents changing every second in screen reader mode; they now change at most every 10 secondsAPI Error: 401 instead of "OAuth token revoked"; in -p mode the error now starts with "Failed to authenticate"/ultrareview upload refusals advising you to copy a variable named by a repository's settings file into your own user settings--output-format stream-json and the SDK not streaming the turns of a context: fork skill run by typing /<skill> as the prompt, as they do for the Skill tool's forkclaude plugin marketplace add --sparse and git-subdir plugin installs failing with "transport 'http' not allowed" when the repository is served over plain http--plugin-url download corrupting the session's cached copy of the plugin archive/desktop quoting partial output when opening Claude Desktop timed out or printed too much output; the error now names the cause…
What's changed Added a count such as "2 of 5" to the permission prompt when several permission requests stack up Added mouse support for the "N more" rows of lists in fullscreen mode: click one to jump to that end of the list, with hover and pressed states…
claude --resume and --continue sometimes losing every turn after a batch of parallel tool calls when the earlier session crashed or was killed/login succeeds in another Claude Code window when a leftover ~/.claude/.credentials.json existsclaude remote-control) staying connected after your organization's policy turns Remote Control off; they now disconnect with a notice--fallback-model retries failing when the fallback model can't run fast; they now run at standard speed, with a one-time notice in interactive sessionsclaude auth status reporting a Console sign-in's stored API key as claude.ai; it now reports api_key, and the VS Code extension treats that session as an API key session/status listing an Anthropic profile beside an API key as if both were in effect; the profile is now marked as not in use), quotes, ], & or a second @, or that runs past a / to a bracketed host such as [::1] in an ssh URL/feedback saves to disk containing invalid JSON lines after secret redaction/usage not crediting an MCP server for a tool call made while that server was still connecting or had only just connected, such as right after a restart/compact, /clear, and /rewind typed while viewing a background agent's or teammate's transcript silently acting on the main conversation: a dialog now names the target and asks first/plugin's Discover tab showing a marketplace name unquoted in its "Checking … for new plugins" line when its rows already show that name in quotesverify, Claude is now told to run it right before committing, except for docs-only and tests-only commits/hooks: the closing line of a hook's detail screen now says "this hook" instead of "it"-p sessions when a host re-sends an MCP server enable for a server that is already connected/protocol: it now says not to reject unknown input and matches what Claude Code sends today--bare to connect only the MCP servers named on the command line, send the model no system reminders, and start no background tasks; under --bare, a shell command that reaches its timeout now stops instead of moving to the background…
What's changed Added CLAUDE_CODE_DISABLE_WEB_FETCH environment variable to turn off the WebFetch tool Added claude --desktop to open the Claude desktop app on the current directory, or on a session with --continue / --resume <id> Added claude plugin configure…
CLAUDE_CODE_DISABLE_WEB_FETCH environment variable to turn off the WebFetch toolclaude --desktop to open the Claude desktop app on the current directory, or on a session with --continue / --resume <id>claude plugin configure <plugin> to show a plugin's options and which are unset, or save new values read from stdin with --values-stdin<server>.<key>=<value> to claude plugin install --config, so a bundled .mcpb MCP server's own settings can be set at install time and it starts without visiting /plugin → ConfigureallowedProviders managed setting to limit which API providers a machine may use (Anthropic API, a custom endpoint, Bedrock, Mantle, Vertex AI, Foundry, Claude Platform on AWS, or a Cloud gateway)CLAUDE_CODE_NONSTREAMING_TIMEOUT_RETRIES environment variable to cap re-sends of a non-streaming fallback request that timed outclaude -p with CLAUDE_CODE_FORK_SUBAGENT=1: a subagent's own Agent call now runs in the foreground, so the subagent gets the child's resultGIT_SSH or in your git config's core.sshCommandclaude plugin disable and enable with a full name@marketplace id changing a settings entry in another letter case instead of the installed plugin's ownset_model request (such as the Agent SDK's setModel) leaving the new model on the built-in output-token limit and auto-compact window until restart@, or all of it when the URL writes its @ as %40/teleport fetches taking over the terminal; these fetches now fail fast instead of asking-p sessions leaving its tools availableclaude -p --permission-prompt-tool: a background subagent's permission request now goes to the prompt tool instead of being auto-deniedclaude mcp list and claude mcp get, and the not-found error of claude mcp remove, login and logout, printing line breaks and terminal escape sequences from MCP server names and valuespython3 -c, node -e) just because they contain =dontAsk mode: a fork now runs under its parent's permission mode and cannot exit plan modeclaude remote-control --help saying --[no-]chrome defaults to the machine's /chrome setting; spawned sessions keep Claude in Chrome off unless --chrome is passed/remote-env reading only the newest 20 of an account's environmentsclaude plugin install or /plugin putting it into an installed plugin's cache or data folder when their ids differ only in ., -, @ or (macOS, Windows) capitals; the install is now refusedANTHROPIC_AUTH_TOKEN against the Anthropic API never loading the organization's policyagent(), parallel() or pipeline() call that a workflow script awaits later, or not at all, being treated as an unhandled promise rejection, which could end a background sessionsome-daemon &) kept its output open; the hook now finishes shortly after its own process exitsmodelTimeoutException and serviceUnavailableException errors showing a raw JSON body instead of the error message/autofix-pr and /schedule saying the Claude GitHub App is not installed on a repository whose install status had not been checked yet/artifacts unlinking its file from the artifact, so publishing the same file again created a new artifact instead of updating itArtifact allow rule ("don't ask again") letting the Artifact tool publish a file outside the working directories without asking; add the file's folder with --add-dir for the rule to cover it/cost and SDK modelUsage reporting a turn under the wrong model when the server answered a refusal with a different fallback model than the client expected/ultrareview when the project folder briefly could not be read/ultrareview on macOS and Linux failing to upload the working tree from a git worktree whose per-worktree config sets core.longpaths/ultrareview uploads including uncommitted changes to credential files whose name has a colon before the extension, such as server:8443.key/ultrareview uploads on macOS and Linux running slowly on some unusual file names, and their credential-file check missing file or folder names with many backup or editor marksx or r…
What's changed Added Claude Sonnet 5.5 (claude-sonnet-5-5), now the default Sonnet model on the Anthropic API — 1M context, $2/$10 per Mtok with $0.20/Mtok cache reads Added a "Yes, but ask again next time" answer to auto mode's prompt before a read outside…
claude-sonnet-5-5), now the default Sonnet model on the Anthropic API — 1M context, $2/$10 per Mtok with $0.20/Mtok cache reads/usage and the status line (for example "$271.40 / $500.00 spent this month") when the gateway runs this version or later; the status line's rate_limits.spend_limit also gains used_usd, limit_usd and periodeffortSlider:decreaseEffort, increaseEffort and toggleUltracode keybinding actions, so the /effort slider's arrow and Tab keys can be rebound in keybindings.json/rate-limit-options to /help and the command menu for claude.ai subscribers, so the usage-limit notices that mention it point to a command you can find/mcp reconnect all in the interactive terminal to retry every MCP server that failed to connect or needs authentication at onceavailableModels is empty, or leaves out the model Claude Code starts on without setting model or enforceAvailableModelsauth: { google: {} } for Claude apps gateway telemetry.forward_to destinations, so telemetry can be exported straight to Google Cloud's OTLP endpoint using the gateway's Google Cloud credentialsprivate_key_jwt) between the Claude apps gateway and its identity provider, for identity providers that issue certificate credentials instead of client secretssource, and failing on every later turn after a malformed document block; a malformed image is now replaced with an explanatory note/usage, /extra-usage and IDE usage views now back off instead of re-askingclaude mcp add reporting success when managed settings restrict MCP servers to plugins; it now refuses and says what to do, instead of saving a server that never loads/plugin configure screen: boolean options are now a true/false choice instead of free text, number options refuse invalid input, and ←/→ change an options field instead of switching tabsANTHROPIC_FOUNDRY_RESOURCE being interpolated into the Foundry endpoint host unvalidated; a value that is not a plain resource name is now refusedbin/ directories that don't exist are no longer added to PATH, and inherited entries aren't added twicesparsePaths plugin marketplaces cloning empty and replacing a working local copy on older git (before 2.39), which failed every refresh with "marketplace.json file is no longer present"[ in transcript mode writes the conversation to scrollback (macOS and Linux)/config and /plugin breaking the title and tab labels mid-word in a narrow terminal; a tab that doesn't fit now moves to the next line whole/model picker showing "+1 model" below the list after scrolling to the last model; the count now covers only the models below the visible rows/keybindings writing Backspace and Delete bindings for a footer action that does nothing into the generated keybindings.jsonfooter:close) typing "x" instead of itself on the row of the agent you're viewing. not repeating text typed very fast (for example over ssh or in tmux) or pasted without bracketed paste, and leaving the prompt in INSERT mode after repeating a change with nothing typed (such as cw then Esc)dd on the last line or yy at the end of the prompt, where r or x would break or delete the image.claude/rules from outside the project being skipped without ever showing the external-imports approval prompt; a .claude directory symlinked from outside the project now asks for the same approvalallowed-tools under managed allowManagedPermissionRulesOnly; only plugins from an official Anthropic source or a source that managed settings vouch for keep that pre-approvalclaude plugin install leaving the plugin enabled and recorded when a dependency's version range could not be met{"decision":"block"} returned by Elicitation and ElicitationResult hooks being ignored; it now declines the MCP elicitation, as exit code 2 doesSendMessage tool (such as by Claude Desktop) still being told to message other sessions with it/upgrade to users already on the highest Max plan; the warnings and /upgrade itself now point at /usage-credits when it is available/loop status updates in self-paced mode often not being shown because Claude wrote them only in its reasoning; Claude now writes each update, and the outcome when the loop stops, as visible text/ultrareview…
What's changed Added x-claude-code-prompt-id to the gateway hint headers so LLM gateways can group the requests that serve one user prompt; opt in with CLAUDE_CODE_GATEWAY_HINT_HEADERS=1 Added availableModelsMatch managed setting: with "exact", an…
x-claude-code-prompt-id to the gateway hint headers so LLM gateways can group the requests that serve one user prompt; opt in with CLAUDE_CODE_GATEWAY_HINT_HEADERS=1availableModelsMatch managed setting: with "exact", an availableModels entry allows only the model version it names, so new releases stay blocked until listeddeniedModels managed setting to block specific models, even when availableModels allows themtool.output OpenTelemetry span event when OTEL_LOG_TOOL_CONTENT=1/doctor prompt-audit (also /checkup prompt-audit) to audit your CLAUDE.md files, skills, agents and commands for prompting patterns written for older modelspath to --plugin-dir load-failure entries in the stream-json system/init plugin_errors, naming the directory that did not loadload_test_mode block to the Claude apps gateway config: requests are built and signed but not sent upstream, and clients get a canned reply, so a deployment can be load testedmantle upstream provider to the Claude apps gateway for Amazon Bedrock's Mantle endpointresult.usage/mcp no longer offers Authenticate for such servers/usage and the VS Code usage meters when telemetry is disabled/model accepting Sonnet 4.6 or Sonnet 5 with [1m] when the id carried a date or -v1:0 suffix, in the cases where the plain id was refused/model picker showing a hardcoded Haiku version and price when ANTHROPIC_DEFAULT_HAIKU_MODEL pins a different modelDISABLE_PROMPT_CACHING_HAIKU having no effect when Haiku is the session's main modelclaude plugin validate saying Claude Code accepts a plugin or marketplace name it cannot install; such names in marketplace.json now fail validationclaude plugin validate passing plugins whose outputStyles, themes, monitors, or lspServers paths are missing or point outside the plugin directoryclaude plugin details showing 0 MCP servers for plugins that declare their servers in plugin.jsonclaude plugin marketplace remove not saying which installed plugins it uninstalled with the marketplace; it now lists themclaude plugin uninstall removing the other of two installed plugins whose ids differ only in case, with its options and secrets, when the one named had no enabledPlugins entry at that scopeinstalled_plugins.json showing no plugins when it holds a record under an invalid plugin id; such a file loads againinstalled_plugins.json being rewritten, losing records, when it holds a record this version cannot read; claude plugin commands now name the record and say how to recover/context not counting MCP server instructions: they now appear as their own row and count toward the totalclaude mcp add, add-json, and remove reporting success when the user or local config file could not be written, for example inside a sandboxcmd an alias of meta, which could produce cmd+ shortcuts most terminals never sendkeybindings.json silently accepting a misspelled modifier such as ctl+k; it now warns in the debug log and suggests the fixfooter:openSelected was rebound or unbound in keybindings.jsonGIT_CONFIG_COUNT environment pairsgit asking credential helpers to store the sandbox proxy's login, which printed "failed to store"sandbox settings being ignored entirely when one nested value was invalid; the invalid value now fails closed and the rest of the block still appliesDISABLE_TELEMETRY or DO_NOT_TRACK/remote-control menu cutting its QR-code hint mid-word in narrow terminals. dropping a Shift+Enter newline, leaving the cursor inside an accented letter, and repeating an older change after 3J or Visual-mode J on the last lineV then p now lands on the first non-blankJ joining lines with different spacing than Vim (such as a space before ) or after a tab), and 3J or Visual-mode J on the last line not moving the cursor as Vim doescmd /c rd, rmdir, del or erase delete drive roots, the home folder and other folders that Remove-Item refuses/mcp tool list: it shows more tools at once, scrolls with the page keys and mouse, and marks tools your organization blocked with a warning icon/tasks: rows show a status icon, the name and whole facts, the title and key hints stay on screen with many tasks, and the list gains paging keys, the mouse wheel and clicks/help, /hooks, /copy, /chrome, /memory, /ide, /release-notes, /rewind, /diff, /remote-env, /plugin and other pickers with page keys, mouse wheel and clicks/skills and /artifacts…
What's changed Added a maxProseWidth setting that caps the width of Claude's prose in wide terminals while tables and code blocks keep the full width Added a startup notice, and /status and claude doctor entries, listing telemetry variables in a project's…
maxProseWidth setting that caps the width of Claude's prose in wide terminals while tables and code blocks keep the full width/status and claude doctor entries, listing telemetry variables in a project's settings files that were ignored or that turned telemetry offallowClaudeInChromeWithManagedMcp managed setting to let claude --chrome run alongside an exclusive managed-mcp.json; the error shown when Chrome is blocked now names itstore.readiness_grace_seconds to the Claude apps gateway so /readyz can stay ready through a short Postgres outage such as a database failover/feedback drafts list in fullscreen mode; it appears while the mouse is over the list--continue, --resume) re-sending earlier messages in a changed form, which could make the API drop Claude's earlier reasoning/model, /rename, /artifacts or another immediate slash command was used while Claude was working--tools list that leaves out a built-in tool offered earlier in the conversationdata in redacted_thinking block" API error; Claude Code now drops the conversation's thinking blocks and retries once/model with a full Fable model id stopping at an API error instead of opening the usage-credits prompt when the plan needs usage credits that aren't turned on yet/Network via .. or a /.vol-style kernel path, or a rules link to macOS's /home being listed:* being skipped in settings files while --allowedTools honored them; they now work from every source, with a startup warning on how they matchdisableClaudeAiConnectors or allowManagedPermissionRulesOnly; the lock now applies and startup names the keypermissions, autoMode, worktree and attribution settings being ignored entirely when one nested value was invalid; the rest of the block now still applies--add-dir skills, commands and skills-directory plugin manifests pre-approving their own tools via allowed-tools under managed allowManagedPermissionRulesOnlySessionStart hookclaude remote-control --debug failing with "Unknown argument: --debug", although Remote Control's own eligibility error says to run with --debug/install-github-app saying "cancelled" and then still pushing the branch and saving the API key secret; leaving now stops the remaining steps and reports what was already done/ in /skills moving the skill list instead of reaching the search box/skills search box to the skill list while typing, which could hide the caret and put IME input in the wrong place/skills and /mcp, being two columns narrower outside fullscreen mode, where the scrollbar can never appear· separator in the /tasks dialog footer when the stop-all-agents shortcut is unbound in keybindings.json>> indenting empty lines, r with a count longer than the line changing text, 2J joining one line too many, and a count on the last line (2dd, 2>>) shifting or deleting itdd, dj, dG or a whole-line p/P it lands on the first non-blank, yy no longer moves it, and Esc after an emoji no longer leaves it inside the emoji. when repeating x, s, p, d or c, and whole-line p/P, o, O, J, >> and << acting on the wrong line when a line above wraps…
What's changed Added Claude apps gateway support for newer Claude Desktop keys in desktop policy blocks, including blockReadsOutsideWorkingDirectories and disableBypassPermissionsMode Added assume_role on Claude apps gateway Bedrock upstreams: the gateway…
desktop policy blocks, including blockReadsOutsideWorkingDirectories and disableBypassPermissionsModeassume_role on Claude apps gateway Bedrock upstreams: the gateway calls Bedrock as an IAM role it assumes through STS, in another AWS account if needed, optionally one session per developerguardrail: {id, version} on Claude apps gateway Bedrock upstreams to apply an Amazon Bedrock guardrail to every request sent through them (set it on all Bedrock upstreams or none)telemetry.resource_attributes to the Claude apps gateway config, to put fixed labels on the telemetry of Claude Desktop and /login sessions"attribution": false in settings.json to hide all commit and PR attribution; older CLI versions skip a settings file that holds it, so keep the object form in files shared across versionsclaude plugin validate: it reports .mcp.json entries that would be silently dropped at load, undeclared ${user_config.*} references, and insecure URLs/insights that estimates how many permission prompts auto mode could have handled in your recent sessions/skills, /mcp and /plugin Installed lists in fullscreen mode, like the one /workflows now has: it appears while the mouse is over the list and can be clicked or dragged--max-turns, when the model alternated unparseable tool calls and output-limit truncationCLAUDE_CODE_RETRY_WATCHDOG sessions failing on the first 5xx or dropped connection after a run of 429/529 waits, and sleeping uncapped and silently on a long Retry-After from a 5xxRetry-After: 0--input-format stream-json sessions (Agent SDK, VS Code extension) and scheduled cloud sessions failing every turn with an error when an earlier assistant message had plain-string content-p, Agent SDK) failing on the next turn after the directory they were started in was deleted mid-session/.vol, /.nofollow or /.resolve (which can reach a network mount) before approvalrm whose target is only command-substitution output, such as rm -rf "$(pwd)", running unprompted in auto and --dangerously-skip-permissions mode; it now asks even with a Bash allow rule, unless run with CLAUDE_CODE_DISABLE_SUBSTITUTION_RM_PROMPT=1excludedCommands entries not matching git rev-parse --git-dir, programs named like shell builtins, and commit messages containing [WIP] or # lines$TMPDIR when CLAUDE_CODE_TMPDIR is setclaude --bg starting a background session, and running its project hooks, in a directory that had not passed the workspace trust prompt; it now asks for trust first, or exits when not run interactively--setting-sources (and SDK settingSources) not being forwarded to spawned sessions: teammates, /bg, claude agents sessions and --worktree --tmux now start with the parent's restriction--add-dir directory inside the working directory being sent to the model twice in headless and SDK sessions/loop wakeups being fired again every second when their delivery failed, which could make Claude Code exit at the end of a turnclaude remote-control starts for you to open from Claude Desktop, claude.ai or the mobile app…
What's changed Added Claude Opus 5.5 (claude-opus-5-5), now the default Opus model — 1M context, $4/$20 per Mtok with $0.20/Mtok cache reads Added mouse support to more lists in fullscreen mode: the wheel scrolls the /skills list, and a skill's state options…
claude-opus-5-5), now the default Opus model — 1M context, $4/$20 per Mtok with $0.20/Mtok cache reads/skills list, and a skill's state options in /plugin can be clickedCLAUDE_CODE_MAX_MCP_DESCRIPTION_LENGTH to change the 2,048-character cap on MCP tool descriptions and server instructions for every MCP server in the sessionhook_execution_complete OpenTelemetry eventacceptEdits, allow rules and auto mode no longer approve one landing outsidepath, file_text, file_content or a stray description instead of file_path and content/model, /effort, /config, /status, /usage, /plugin, /sandbox, /permissions, /artifacts, /mobile, /login, /upgrade, /usage-credits, /install-github-app, /setup-bedrock, /setup-vertex) quitting Claude Code instead of closing the dialogn closing dialogs and a stray y confirming them; Enter and Esc accept and cancel (bind y/n to confirm:yes/confirm:no in keybindings.json to restore)installed_plugins.json keeping the install-time commit after updating a plugin from a GitHub repository or git URL that tracks a branch or tag~/.claude/skills/ being moved to ~/.claude/skills/.trash/ when a manifest.json in that folder listed their names/workflows briefly showing a one-row list before opening the only run/model and /permissions) in fullscreen mode/plugin and /skills; off now shows a dim ◯/plugin, /skills and /mcp losing its right border in fullscreen mode/mcp showing △ in the server list but ⚠ in the detail view for the same server; the list, detail views and /plugin now all show ⚠/config settings list and in selection lists such as /model, /memory and permission prompts/skills menu wrapping past the first or last skill instead of stopping there/config list; it now does nothing there/compact when its saved history held a malformed notice about MCP tools that could not be loaded/config crashing and some on/off preferences being misread when a preference that has moved to settings.json still holds a value like null or "false" in ~/.claude.jsonclaude --bg) being unable to run git, hooks, plugins and other helper programs when an environment variable handed to the session contained a NUL character! shell-mode prompt stashed with Ctrl+S coming back as a plain prompt when restored, and / listing file paths right after stashing oneclaude agents showing a blank, unresponsive screen instead of an error when the temp directory is full, not writable or owned by another userclaude mcp remove still showing as needing authentication instead of reconnectingclaude plugin update clearing a plugin's recorded commit and moving it to version "unknown" when the official marketplace's snapshot file is a link or too large/ultrareview…
What's changed Changed auto mode for Claude API and Enterprise users, and on Bedrock, Vertex, Foundry and gateways, to default to the server-side classifier, which does not charge for classifier overhead (CLAUDE_CODE_AUTO_MODE_SERVER=0 opts out on Bedrock,…
CLAUDE_CODE_AUTO_MODE_SERVER=0 opts out on Bedrock, Vertex, Foundry and gateways); warns on billed fallback. See https://code.claude.com/docs/en/auto-mode-classifier-billingAuto mode server row to /status showing whether this session's auto mode classifier runs on the serverWhat's changed Added AGENTS.md support: in a project with no CLAUDE.md, Claude Code reads AGENTS.md instead; change it under "Project instructions" in /config (not yet on Bedrock, Vertex or Foundry) Added CLAUDE_GATEWAY_PROXY_IS_EGRESS_BOUNDARY=1 for Claude…
/config (not yet on Bedrock, Vertex or Foundry)CLAUDE_GATEWAY_PROXY_IS_EGRESS_BOUNDARY=1 for Claude apps gateways whose only egress is a forward proxy: every outbound request hands the proxy the hostname instead of resolving it locallyheaders: map on Claude apps gateway upstreams, to send static headers to a proxy you run in front of a provider/tasks is openclaude -p and Agent SDK sessions that could hang with no result after an internal error; they now report the error and exit with code 1--resumeANTHROPIC_API_KEY users when ~/.claude.json holds a malformed customApiKeyResponses valueclaude update hanging when a minimum or maximum version is set, if a proxy returns an invalid version; a malformed minimumVersion is now ignoredclaude update on winget- or apk-managed installs reporting "up to date" when the version lookup failedclaude plugin install sometimes failing and breaking the installed copy when reinstalling a plugin version that a session or another program was using; an unchanged copy is now left aloneuXXXX text as a \uXXXX escape, which could make an edit of a non-ASCII character rewrite an escaped backslash sequence instead\u0000 written as an escape sequence; escaped control characters now stay as literal textclaude --bg) exiting when a plugin's LSP server exited or closed its stdin/mcp or /plugin manage with a malformed claudeAiMcpEverConnected value in ~/.claude.json~/.claude.json holds a malformed theme value/clear (restart, --continue, --resume) missing part of their first message when a SessionStart hook printed output, causing a full prompt-cache miss/resume picker and other panels that cover the prompt area$TMPDIR expanding empty in Bash commands that run outside the sandbox while sandboxing is enabledNO_PROXY when a proxy is setstrictKnownMarketplaces or blockedMarketplaces entry silently disabling the whole enterprise marketplace policy~/.cache/claude/staging/plugin not stripping terminal control characters from messages on the Installed tab, such as the error of a failed plugin update/plugin → Installed and /skills crashing when a skill or legacy command is named like a built-in Object property such as constructor or toString/plugin closing with no message when every install in a multi-select failed/plugin Installed, and Remove not clearing such a rowinstalled_plugins.json, and installed_plugins.json keeping the old commit after updating a pinned-commit plugin--plugin-url archive a reload falls back to when its download fails~/.claude.json holds a malformed placeholder record/loginclaude agents dispatch input during key repeat or very fast inputkeybindings.json rebinds Enter in the Chat context, for example to chat:queueSubmitclaude -p --resume, the SDK, a VS Code extension window reload) starting the session's cost and usage totals at zero; headless sessions now save their totals at exit--worktree sessions when .claude/skills is untrackedsandbox.excludedCommands glob exempting an entire compound Bash command from the sandbox when only one part matched; every part must now match-p) use: the first turn no longer waits on the per-directory CLAUDE.md lookupCLAUDE_GATEWAY_ALLOW_LOOPBACK…
What's changed Fixed every request failing with 400 … Input tag 'advisor_20260301' when ANTHROPIC_BASE_URL points at a proxy or gateway (2.1.275 regression)
400 … Input tag 'advisor_20260301' when ANTHROPIC_BASE_URL points at a proxy or gateway (2.1.275 regression)What's changed Added the signed-in account to Claude apps gateway sign-in: when the gateway names it, you confirm it before the credential is saved, and /status shows it Added a send-now key (ctrl+enter, or ctrl+x ctrl+s) that interrupts the current turn and…
/status shows itotelHeadersHelper fails, so sessions that silently export no telemetry are noticedsyncClaudeAiSkills: false or syncClaudeAiPlugins: false/plugin install <plugin> --marketplace <source>, which offers to add the marketplace before installing the plugin--forward-subagent-text stream-json and SDK output dropping the messages of subagents spawned by a context: fork skill, and of forked skills invoked by a subagent or another forked skillfileSuggestion command or typing @./@./claude plugin marketplace update deleting a GitHub marketplace's local copy when the fetch failed and the marketplace was named after its repositoryclaude plugin marketplace list showing a password or token stored in a git, ssh or marketplace URL</ccmemory>-style closing tag occasionally appearing in responsesAPI Error: 400 on every turn for users behind a network gateway that rewrites API error responses when a beta request header is rejected--resume, the resume picker preview, resumed background agents and the transcript view failing on a session whose saved history contains a malformed task-reminder or @-file attachment entry/rewind in a forked or background session restoring a zero-filled or truncated file when the session's file-history backups could not be fully copied~/.claude.json holds a malformed mcpNeedsAuthNoticed value--resume and --continue dropping a conversation's earlier thinking when a built-in tool it started with has since been switched off by a server-side flagclaude --resume session picker never reaching the clipboard--plugin-dir or --plugin-url archive--drain-wait-sec losing the final result of a turn that finished during a SIGTERM drain; the runner now waits briefly for the turn to be reportedSubagentStop hooks with a specific matcher firing for every stopping subagent whose agent type was emptyhooks/ or config//update-config writing Write(path) permission rules, which file permission checks don't match, instead of Edit(path) rules--system-prompt that contains a __SYSTEM_PROMPT_DYNAMIC_BOUNDARY__ line: the text above it is now cached globally, as the SDK's array form already is/desktop error when Claude Desktop does not open: it now says why and what to do nextListPlugins tool description so Claude knows it lists plugins enabled on your claude.ai account, not plugins installed locally with /plugin/logout for Claude apps gateway sign-ins to also end the session on gateways that advertise token revocationbrowser_batch "Permission denied" after a redirectnpm pack --ignore-scripts and integrity-verified, so a package's install scripts no longer run…
What's changed Added a visible warning when memory usage is critical, with steps to free memory or restart safely Added CLAUDE_CODE_MCP_STARTUP_WAIT_MS to bound how long the first non-interactive turn waits for connecting MCP servers (0 = don't wait) Added…
CLAUDE_CODE_MCP_STARTUP_WAIT_MS to bound how long the first non-interactive turn waits for connecting MCP servers (0 = don't wait)effort attribute to the claude_code.llm_request OpenTelemetry trace span, matching the api_request eventclaude_code.managed_settings_resolved OTel event: managed-settings sources and policy helper state; redacted settings and digests with OTEL_LOG_MANAGED_SETTINGS=1store.connect_timeout_seconds to the Claude apps gateway config to lengthen the Postgres connect timeout (default 5 seconds), and improved the boot error when the database is unreachable to point to store.postgres_url and the configured timeoutenduser.sub, the IdP subject, to the telemetry Claude Desktop and Cowork send through a Claude apps gateway/rewind hint) ends the loophttp that only speak legacy HTTP+SSE failing to connect when they answer the first request with 422 or another 4xx errortimeout was setlistChanged/mcp re-authentication/goal) ending with "Prompt is too long" instead of compacting when the context overflowed again after a reactive compaction/goal being lost when resuming (--continue / --resume) a session that had compactedclaude agents losing --model, --effort, --permission-mode, --allow-dangerously-skip-permissions and --agent after an auto-update relaunchmodel: "opus" on Bedrock, Vertex or Foundry leaving the session's model when its id has no recognizable model family (unless ANTHROPIC_DEFAULT_OPUS_MODEL is set)file:// URIclaude -p --resume started with CLAUDE_CODE_RESUME_INTERRUPTED_TURN not reporting background tasks the previous process left unfinished/usage-credits instead of CLI flags that cannot be used there/schedule saving a routine's prompt without its message role when Claude writes the routine in the shape that listing routines returns/status not showing the apiKeyHelper failure that its own error banner told you to check/fast on in non-interactive sessions reporting on and then turning off under an organization's managed fast mode policy; it now says the organization has disabled it~/.claude--strict-mcp-config with an empty --mcp-config holding the first non-interactive turn for up to MCP_TIMEOUT on incidental MCP serversCLAUDE_GATEWAY_DRAIN_TIMEOUT_MS)installed_plugins.json being rewritten on nearly every start-up when plugin policy comes from remote managed settings, which made Claude Desktop reload every open session's pluginsbin/ directories changed$schema in hooks/hooks.json showing an "unknown key" notice${VAR} placeholders in MCP configs.zip being served from a stale extraction after several overlapping reloads--input-format stream-json sessions: the first turn no longer waits up to 2s for still-connecting MCP servers whose tools tool search defers; they arrive on a later turn…
What's changed Added x-claude-code-request-class, x-claude-code-agent-type, x-claude-code-prev-tool-durations, x-claude-code-compaction and x-claude-code-context-compacted request headers for LLM gateways; opt in with CLAUDE_CODE_GATEWAY_HINT_HEADERS=1 Added a…
x-claude-code-request-class, x-claude-code-agent-type, x-claude-code-prev-tool-durations, x-claude-code-compaction and x-claude-code-context-compacted request headers for LLM gateways; opt in with CLAUDE_CODE_GATEWAY_HINT_HEADERS=1/mcpclaude --remote-control or /remote-control from the Claude app; the fork runs as a background session on your computerpermissions.blockReadsOutsideWorkingDirectories, and a subshell hiding a dangerous rm in bypass modeallowManagedMcpServersOnly, deniedMcpServers and disableClaudeAiConnectors set via MDM or managed-settings.json being ignored when server-managed settings are also present/login; the message now names the credential to refresh or points to your gateway administrator/login, /upgrade, and /extra-usage discarding earlier thinking from the conversation, which forced a full prompt-cache rewrite on the next request.git/info/exclude after the repository's .git directory was removed or moved away! typed at the start while already in shell mode, so negated commands like ! grep … can be typedpermissions.blockReadsOutsideWorkingDirectories: a memory directory chosen by a repository's settings is no longer loaded into the prompt, recalled, indexed, or used by memory extraction/tui refusing to restart because of an agent-team teammate that had already finished its work and was no longer shown in the agents panel.claude/scheduled_tasks.json was copied into another folder, such as a new worktree--output-format stream-json output dropping a subagent's remaining messages and final report after it is moved to the background mid-run (e.g. by CLAUDE_AUTO_BACKGROUND_TASKS)/install-github-app reporting a SAML single sign-on block as "admin permissions required"eval, env -C); commands like time -p make build prompt again instead of being denied/autofix-pr: when gh pr view fails it now shows gh's own error (sign-in, SAML, rate limit) instead of a generic exit-code line/autofix-pr to say why GitHub webhook delivery couldn't be set up for the PR (for example, no linked GitHub account) instead of a generic warning/web-setup errors: a refused GitHub token now lists the likely reasons and the fix, and a connection failure names a configured proxy or TLS certificate problemNODE_EXTRA_CA_CERTS for an untrusted corporate CA/login/mcp)CLAUDE_CODE_AUTO_MODE_SERVER=1 to use the platform's server-side classifierOTEL_LOG_TOOL_DETAILS=1 to also include real agent, skill, plugin and MCP server names on cost and token metrics/bug and /feedback reports to include only model-behavior params (model, system prompt, tools) from the last API request, omitting request metadata and CLAUDE_CODE_EXTRA_BODY fields/bug / /feedback opening a report form, for organizations that have product feedback disabled--add-dir…
What's changed Bug fixes and reliability improvements
What's changed Added fast mode in Claude Code Remote sessions (cloud and self-hosted runners): the host's fast-mode setting or /fast typed in the session applies where your organization allows it Added mouse support to the /config panel in fullscreen mode: the…
/fast typed in the session applies where your organization allows it/config panel in fullscreen mode: the wheel scrolls the settings list, a click on a setting's value changes it, and the row under the pointer is highlightedclaude self-hosted-runner --drain-marker-file <path>: when that file exists at a SIGTERM drain, the runner reports its exit to the server as a host drain (telemetry only)allowed_domains to Bash, PowerShell and Monitor in auto mode with sandboxing: the hosts a command needs are reviewed with it and opened for it alone; other hosts are refusedomitClaudeMd to agent frontmatter and --agents JSON, letting custom and plugin subagents run without user, project and local CLAUDE.md files; managed policy files still load--accept-command <sha256> to claude plugin install and claude plugin update to accept exactly the command a previous --json run displayed, instead of -ymultiplier above 1, up to 10, in the modelPricing managed setting and the Claude apps gateway pricing block, for marked-up internal chargeback rates/desktop, which offers to download the appmanaged-mcp.json that can't be read or parsed being ignored: it now keeps exclusive MCP control (user, project and plugin servers don't load) and warns at startupANTHROPIC_UNIX_SOCKET; they are again treated like other custom gateways, including for Remote Control/fast off answering "Fast mode unavailable" instead of turning fast mode off when the organization has fast mode disabledCLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK re-sending fast requests every turn after the API rejected fast mode; the rejection now stands and its reason is shownCLAUDE_CODE_RETRY_WATCHDOG failing the turn on a usage-credits limit, or retrying an overload at fast speed, instead of falling back to standard speedfmt, column and similar commands read when it follows an option the checker doesn't recognizegrep -v dir/* file)cd+git chain skipping the prompt under permissions.blockReadsOutsideWorkingDirectories in bypass and auto mode.git/config.lock breaking git checkout -b, git push -u and git config for the rest of a session after a sandboxed command failed to start (Linux)claude -p sessions whose tools all come from MCP servers failing with "At least one tool must have defer_loading=false"text/plainlist_changed notifications in a tight loopmcp__server__tool name/mcp sent from Remote Control failing while the transcript view is openSendMessage results no longer imply it was read/model warning about losing the conversation cache when switching back to the model the conversation actually ran on/reload-skills reporting a skill count that disagreed with the slash menu after /cd/resume and /continue showing only 1-2 sessions in fullscreen mode on short terminals/resume and /teleport keeping the previous conversation's file-read tracking, so Claude could edit files the resumed conversation had never read--resume dropping the 1M context window ([1m]) when the resumed session's model family differs from the configured default model/artifacts disappearing from the session after --resumeclaude --bg, claude agents) not watching the artifacts they publish for republishes made elsewhere--host-config-snapshot disk|memorycleanupPeriodDays now move to the recoverable trash at the next launch/add-dir path input: the left and right arrow keys now move the cursor, and Enter adds only the typed path instead of also adding the highlighted completion! to the end of what you typed (!foo came out as foo!)/hooks menu crashing when a hook matcher is named after an inherited object property such as __proto__ or constructor^[[?1;2c) appearing at the shell prompt or in an editor when Claude Code exits, is suspended, or opens an editor right after starting…
What's changed Fixed read-only git commands in Bash unexpectedly asking for permission after a session had been running for a while (regression in 2.1.269)
What's changed Added claude plugin eval: run a plugin's eval suite against Claude Code and get scored, reproducible results (JSON + HTML report); see claude plugin eval --help Added /output-style [name] to list and switch output styles, including over Remote…
claude plugin eval: run a plugin's eval suite against Claude Code and get scored, reproducible results (JSON + HTML report); see claude plugin eval --help/output-style [name] to list and switch output styles, including over Remote Control and in cloud and other headless sessionsbashEditDiffEnabled)OTEL_METRICS_INCLUDE_REPOSITORY to tag OpenTelemetry metrics and events with vcs.* repository attributes; commit events get vcs.ref.head.* with OTEL_LOG_TOOL_DETAILSCLAUDE_CODE_GATEWAY_MODEL_DISCOVERY_TIMEOUT_MS to extend the LLM gateway /v1/models discovery timeout (default 3s)/focus for a view with just your prompt, a one-line work summary, and the responseCLAUDE_CODE_WORKFLOW_MAX_CONCURRENT_AGENTS (1–256) to raise the Workflow tool's per-run concurrent agent limit for inference-bound fan-outsCLAUDE_CODE_BG_TASKS_REPORT_RUNNING=0 to restore the old behavior)^[[?1;2c) appearing as stray text at startup in some terminals! applying beyond the settings source that wrote it; such a rule now applies only within its own source, and a bare ! negation is ignoredheadersHelper consent prompts showing a URL path that could be misread as a different host[redacted URL] in place of a relative Windows path with a folder name that starts with @/fork receipt, each under a second apart, never backgrounding the session right away while it waited for the current tool to finishshutdown params (e.g. rust-analyzer) being left running at session end; exit is now sent even if shutdown failspermission_denials in --output-format stream-json results omitting Read, Edit and Write calls blocked by a path-scoped deny rule/insights failing on Bedrock, Vertex, Foundry, and gateway deployments whose account can't reach the default Opus model by using the session model there instead/goal runs silently stalling after API errors, network drops, or token limits: the goal now retries with backoff, or pauses and says why, including until a usage limit resets/btw answers that contained made-up tool calls and output: the side question is now told not to write them, and any that appear are flagged as not executedCLAUDE_CODE_RESUME_INTERRUPTED_TURN re-running a turn that had failed with an API error over 6 hours earlier, or longer ago than CLAUDE_CODE_RESUME_INTERRUPTED_TURN_MAX_AGE_MS when setEdit() deny rules and the write-path check not applying to the file a Bash tee command writes; a Bash(tee:*) allow rule no longer covers destinations outside the working directories22c, or a terminal's color or version reply, being typed into the prompt at startup over slow connections (ssh, browser terminals)/diff panel to open fully rendered in one step instead of showing a loading state firstalwaysLoad MCP server that finishes connecting mid-conversation is usable on the next turn without a tool-search round trip/ultrareview --post…
What's changed Added to the Claude apps gateway: with pricing: set in gateway.yaml, signed-in Claude Code clients receive the same rates through managed settings, so /cost and telemetry match the spend meter Added a startup warning for gateways when…
pricing: set in gateway.yaml, signed-in Claude Code clients receive the same rates through managed settings, so /cost and telemetry match the spend meteraccess_control.allow_cidrs is empty, and a one-time warning the first time a request arrives from a public addressgatewayInternalNetworks managed setting, letting administrators allow /login to a Claude apps gateway on their organization's own public IPv4 blockclaude self-hosted-runner --remove-session-state (default off): delete each session's per-session directories under <base-dir>/_sessions/ when the session endsconfigDirectory to the output of claude auth status --json--json to claude plugin install, uninstall, update, enable and disable, and errorDetails/noteDetails to each row of claude plugin list --jsonANTHROPIC_BASE_URL) since 2.1.265: a regex in the Artifact tool's input schema that those endpoints rejectCLAUDE_CODE_WEBFETCH_DEADLINE_MS to override the deadline (0 turns it off)/etc, /tmp, /var on macOS; /bin on Linux) not applying when a path was given by its real location, and Bash commands ignoring deny rules written on a symlinked path spellingenv -C, eval or similar command the permission checker cannot analyze was on the same line/mcp and /plugin server details, claude mcp list/get, and MCP login errors showing secrets resolved from ${VAR} placeholders in MCP configsexcludeDynamicSections: the first message is no longer re-rendered each request401 … jti reused/compact and auto-compact mangling text that contained $ sequences/compact: its restored-file notes now load in the same order on every resume/rename sending the conversation from before a compaction@ file and / command suggestions not appearing after recalling a previous prompt with the up arrow and editing itclaude agents: pressing ← again at a natural pace to go back to the agent list no longer gets ignored until you pause for over a secondclaude agents session delete getting stuck when a worktree can't be removed: the message names the cause and next step, and for a git worktree ctrl+x again deletes the directory anyway/bug and /feedback description field showing no cursor when the terminal's native cursor is enabledclaude remote-control showing a generated name instead of their session title in ListAgentsclaude plugin validate rejecting plugin paths whose directory name begins with two dots, which the plugin loader accepts--print mode-p) runs/resume listing a /fork background session under its parent's name instead of its own ⑂ fork name/remote-control and other claude.ai-gated commands to suggest /login when signed out instead of showing a Claude for Enterprise migration messageCLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS not extending SessionEnd hooks that have no per-hook timeout (they were still cancelled after 1.5 seconds)/autofix-pr and other cloud-session commands saying to retry or install the Claude GitHub App when no GitHub account is connected; they now point to /web-setup or the web connect page/teleport and /remote-env to explain when an organization policy turns them off, instead of answering "Unknown command"--continue / --resume: the conversation appears immediately instead of waiting for SessionStart hooks, and the first message no longer re-reads the whole transcript.claude/workflows/ scripts: listing them no longer parses each script/diff selection now shows inside the prompt input, and fullscreen mode shows Remote Control status in the header instead of the footer…
What's changed Added maxEffortLevel setting (top-level or per model under modelSettings): caps the effort level on every provider, including Bedrock, Vertex and Foundry; users can still pick a lower level Added --system-prompt-snapshot off to render the system…
maxEffortLevel setting (top-level or per model under modelSettings): caps the effort level on every provider, including Bedrock, Vertex and Foundry; users can still pick a lower level--system-prompt-snapshot off to render the system prompt fresh on every request instead of reusing the conversation's recorded prompt (for iterating on prompt text)/context and other local command output rendering blank on mobile clientsagent() calls with large output schemas being refused in auto mode instead of being checked by the safety classifier/compact or another slash command ran via -p --resume: a spurious "Continue from where you left off." turn is no longer insertedallowedHttpHookUrls, httpHookAllowedEnvVars and allowedChannelPlugins to admit nothing, not everything, when unreadable/login on machines whose managed settings require Claude apps gateway sign-in: Esc now closes the dialog instead of doing nothingeffort: frontmatter on custom commands, skills, and subagents being ignored on models whose default effort is still pinned (Opus 4.7, Opus 4.8, Fable 5)claude agents @ directory menu not listing repositories created after the session startedclaude remote-control exiting and dropping every attached session when its server credential expires (about 30 days after start); the host now re-registers and keeps going-p) conversation is resumed interactively: the system prompt prefix no longer changes/diff panel: it no longer flashes "0 files changed" and a spinner before settling, and its empty state is centered in the panel/copy when clipboard commands such as pbcopy fail inside the sandbox--resume first-render time for sessions with many Bash tool calls--system-prompt or --append-system-prompt now record the system prompt and tool definitions once instead of re-rendering them--use-anthropic-git-proxy to be reported to the server at registration and to print a warning for each session that still clones through the legacy git proxyforward_user_identity upstreams to return a 429 as-is to a developer whose email was forwarded, instead of failing over to the next upstream, so the proxy's per-user limits holdgh and GitHub API calls failing in organizations without the Claude GitHub App; they now use your connected GitHub account and say so when none is connectedWhat's changed Fixed a 2.1.265 regression affecting LLM-gateway and proxy setups: the undocumented CLAUDE_CODE_USE_GATEWAY environment variable, previously ignored unless ANTHROPIC_BASE_URL and ANTHROPIC_AUTH_TOKEN were both set, began forcing Cloud-gateway…
CLAUDE_CODE_USE_GATEWAY environment variable, previously ignored unless ANTHROPIC_BASE_URL and ANTHROPIC_AUTH_TOKEN were both set, began forcing Cloud-gateway sign-in on its own in 2.1.265, so configurations that set it alongside an API key, apiKeyHelper, or custom auth headers failed every request with "Not signed in to the Cloud gateway". The variable on its own is ignored again; no configuration change is neededWhat's changed Added user.email and user.groups to the telemetry Claude Desktop and Cowork send through a Claude apps gateway, matching terminal sessions Added support for pointing --plugin-dir at a folder of plugins: each child folder with a manifest loads,…
user.email and user.groups to the telemetry Claude Desktop and Cowork send through a Claude apps gateway, matching terminal sessions--plugin-dir at a folder of plugins: each child folder with a manifest loads, and children added or removed while running are picked up/model opusplan[1m] being rejected with "Model not found"?, Erlang $, or Perl $ sigil--bg) sessions occasionally being retired mid-turn when a message arrived just before the idle timeout/add-dir <subdirectory> refusing to load a subdirectory's agents when managed settings lock only skills to plugins, and promising agents when only agents are lockedcontext: fork) not streaming their kickoff prompt and, with --forward-subagent-text, their text turns as progress events in stream-json/plugin with the error code/plugin Discover/Browse and claude plugin list --json --available showing no description or display name for marketplace plugins whose metadata lives only in their plugin.json/login showing "no gateway URL is configured" when re-run in a session that signed in to a Claude apps gateway set by managed settings/model claiming a model was "saved as your default" when the settings file couldn't be written; it now says the save failed and why/clear from Remote Control waiting on SessionStart hooks and on open terminal dialogs before completing/config dialog changing height when switching between its tabsclaude-api skill's error-code reference: model access failures return 404 and unavailable beta headers return 400, not 403-p with stream-json input, Agent SDK, cloud sessions) resetting the shell working directory at each new user message; a cd now persists across turnshttp that only speak the legacy HTTP+SSE transport never connecting; Claude Code now falls back to SSE as the MCP spec describes--worktree startup on large repositories: the new worktree is now checked out in parallel (git 2.32+)/workflows agent detail: tool calls are marked running, failed or done, the subagent's task list is shown when it has one, and Enter unfolds the listed calls with their inputs and results.claude folder permission option to say what it actually allows: editing files in the project's .claude folder (or ~/.claude) for the sessionforceLoginGatewayUrl in managed settings to be Claude apps gateway sessions from startup, like forceLoginMethod: "gateway"; a leftover claude.ai login or API key is not usedplugin.json on the Installed tab and claude plugin details, filling gaps from plugin.jsonOTEL_EXPORTER_OTLP_ENDPOINT, instead of through the gateway's relay; sessions without a named collector still use the relayWhat's changed Bug fixes and reliability improvements
What's changed Added an "Organization policy" line to /status and claude doctor that says why your organization's policy could not be loaded, such as a proxy not passing the endpoint through Added bashOutputMaxChars and taskOutputMaxChars settings to raise how…
/status and claude doctor that says why your organization's policy could not be loaded, such as a proxy not passing the endpoint throughbashOutputMaxChars and taskOutputMaxChars settings to raise how much command and background-task output Claude receives inline before it is saved to a file, up to 128K characters--append-subagent-system-prompt-file to read the subagent system prompt from a file, for prompts too large to pass on the command line/skill-doctor to show which loaded skills go unused and what they cost in context, so you can prune them/add-dir <subdirectory> printing a false "couldn't be resolved" error when the working directory is on a /net automountenabledPlugins, then falling back to a marketplace clone that could fail[Image #N] chip in the prompt input/clear/teleport into the connected session, which appeared appended to the original on phone and webgcpAuthRefresh opening a browser at startup when the Google credential check was slow, even though the credential was still valid/usage and the VS Code usage panel dropping a model-specific weekly limit row when the usage endpoint is rate limited or when opened right after startupclaude -p --resume <file> adopting a malformed session ID recorded in the transcript; it now resumes under a fresh session ID insteadX-Forwarded-For; with an access list set, an unreadable entry now gets 403file_upload failing with "paths: expected array, received undefined" in local Cowork sessions run from the Claude Desktop appSendMessage to an offline Remote Control session on another machine reading as delivered; the result now says delivery is queued until that machine reconnects<claude-code-hint> tag no longer leaks into the conversation/model picker and the VS Code model pill to show a model's name instead of its raw Bedrock, Vertex AI, or LLM gateway ID when Claude Code recognizes itGOOGLE_APPLICATION_CREDENTIALS is set: API client creation no longer re-runs Google Cloud project discovery or spawns extra gcloud processesrm safety prompt to also catch rm -rf on positional parameters and inside double-quoted sh -c scriptsAPI_TIMEOUT_MS (10 minutes by default) instead of another 3 minutes, and the messages say what to change/login) to say Claude Code may not be enabled for the organization, instead of advising a new sign-inforceLoginMethod: "gateway" to ignore a leftover API key or claude.ai login and ask for /login; Bedrock, Vertex AI, and Foundry sessions are unaffectedkeybindingFlavor no longer has any effect/context token counting to use a local estimate when the token-counting API is unavailable, instead of extra small-model requests…
What's changed Added a diff panel that opens beside the conversation in fullscreen mode and shows your uncommitted changes as Claude edits; toggle it with /diff Added a likely cause for prompt-cache misses (e.g. tool definitions or system prompt changed, idle…
/diff/cost and the status line's prompt_cache field/reload-plugins to headless sessions, so it appears in the Claude Code Desktop and SDK command lists/advisor (/advisor, /advisor <model>, /advisor off) for the desktop app, Remote Control, and other headless (-p/Agent SDK) sessionsoidc.scope_on_refresh to the Claude apps gateway for IdPs that return an id_token on refresh only when asked for openid againdesktop policy blocks, including userPluginMarketplacesEnabled and userPluginUploadsEnabledEdit/Write/Read permission rules whose path contains parentheses being dropped as invalid or ignored by the Bash sandbox, which left "read-only" folders writable[) making every file edit fail with Invalid regular expression; such a deny rule now guards the literal path it spellspermissions.blockReadsOutsideWorkingDirectories on macOS hiding the user's git config from sandboxed git and hiding a worktree-isolated sub-agent's own checkout/login/status listing a signed-in claude.ai account and a configured API key as if both were in effect; the credential not in use is now markedskillOverrides entries keyed on a bundled skill's alias (e.g. checkup for /doctor) not applying, and Skill(name) deny rules not covering a nested skill listed as <dir>:namemodel: fable agents ignoring the [1m] tag on an ANTHROPIC_DEFAULT_FABLE_MODEL pin and silently running with a 200K context window/model picker not showing Fable 5.1 for organizations that can use it, which was only accepted when typed as /model claude-fable-5-1…)/rewind and --rewind-files reporting success when checkpoint backup files were missing and nothing was actually restored/rewind leaving stale file-read tracking from the rewound-away turns, which caused "File unchanged since last read" stubs and full-file re-injection after external edits-p --resume/--continue (as used by the desktop app) failing on every retry once a session's worktree directory lost its git metadata; it now fails once, then resumes without the worktreeCLAUDE_CODE_RETRY_WATCHDOG) as retry notices evicted real messagesgitlab.com/group/subgroup/project)owner/repo#123 issue references in rendered output linking to github.com when working in a GitLab repository; they now link to the gitlab.com issueRead() deny rules to Bash arguments; it denied npm run build under a Read(./**/build/**) rule in every mode and made cd … && grep prompt even in auto modeagent({schema}) rejects a JSON Schema that can never be satisfied up front, and retry-cap errors now include the last validation failure-p / SDK) sessionsbedrock:CountTokens) instead of a one-token requestEdit(C:\dir\(name)\**), where \( is read as an escaped parenthesis rather than a path separator, to suggest an unambiguous spelling/ultrareview and claude ultrareview to wait up to 45 minutes (previously 30) for long-running cloud reviews/effort on Claude Fable 5.1 so changing effort mid-session no longer invalidates the prompt cacheclaude-api skill so its Go, Java, and C# samples use current-generation model IDs, and clarified that cheaper worker or sub-agent models should be current-generation tooctrl+l / cmd+k in fullscreen mode to clear the transcript view like a terminal clear; scroll up to see earlier messages…
What's changed Added managedMcpServers managed setting: organizations can provide HTTP/SSE MCP servers to every user (same entry shape as .mcp.json); entries that name a command to run are skipped Added --permission-prompts none for unattended headless hosts:…
managedMcpServers managed setting: organizations can provide HTTP/SSE MCP servers to every user (same entry shape as .mcp.json); entries that name a command to run are skipped--permission-prompts none for unattended headless hosts: anything that would prompt is denied automatically while the active permission mode (including auto mode) keeps decidingglab mr create/merge/close/reopen/note/update so GitLab merge requests show as MR !N in the collapsed tool summary and refresh the footer MR badge--json to claude plugin validate for a machine-readable validation report~/.claude.json changes — workspace trust no longer resets and MCP/project state is no longer lost when running many sessions at onceRead() deny rules not covering files given as option values (--ignore-revs-file=.env, -f.env, @file), git diff/git grep file operands, or cd DIR && cat FILE compounds; grep -r/cp -r over a directory holding a denied file now asksmodel: named one; the turn now keeps the session modelCLAUDE_CODE_MAX_CONTEXT_TOKENS being ignored for Vertex-style model IDs (@YYYYMMDD suffix) of model versions Claude Code doesn't recognize--resume failing (and --continue opening an empty conversation) when a saved session contains an attachment entry with no payloadmodel: on custom commands and skills being ignored in interactive sessionsnote" error in conversations continued from an older versionforceRemoteSettingsRefresh being ignored at startup when a policy helper configured by MDM or the managed settings file had already rungit rev-parse fails with a message other than "not a git repository"user.email, organization.id, and user.account_uuid attributes?/# producing an unusable .git clone URL/workflows agent detail: JSON outcomes are pretty-printed with syntax colors and real line breaks, and long outcomes fold behind an expand toggle/install-github-app to explain it is GitHub-only and point to the GitLab CI/CD docs when run inside a GitLab repositoryallowedMcpServers to govern only servers users add: a literal managed-mcp.json server your allowlist used to filter out now loads on upgrade; use deniedMcpServers to keep it off