Follow Discord
Sweep 22 Oct 2026 · 04:32Z Build v2.1.308 527 read Stable v2.1.308 Latest v2.1.308 Next v2.1.308 Feeds RSS JSON llms.txt llms-full.txt Unofficial
One capture · claude-code

One read of Claude Code CLIclaude-code-20261014T033701Z

7 pages moved out of 222 read.

Pages moved 7 significant first
Pages read 222 in this capture
Captured 03:37 UTC
Corpus hash d652274ea3aa corpus-hash

What this read moved

1-7 of 7

changelog Changed · +204 / -0 lines

This page is larger than the 256 KiB this site keeps, so one side of the diff below stops where the stored text does.

The two sides of this change are more than 400 edits apart, too far apart to line up, so this is the differ's own diff of it and the words inside a line are not marked.

from line 5
55This page is generated from the [CHANGELOG.md on GitHub](https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md). Longer releases are grouped by type of change, with long lists of improvements and bug fixes collapsed.
66 
77Run `claude --version` to check your installed version.
8 
9<Update label="2.1.299" description="October 14, 2026">
10 **Added**
11 
12 * 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
13 * Added idle compaction in the terminal: a 200K+ token conversation left idle for about 54 minutes is compacted before its one-hour prompt cache expires, so your next message doesn't reprocess it all
14 * Added `CLAUDE_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
15 * Added `$.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
16 * Added `$.session.identity()` for mods installed by managed settings: how the session is signed in, and its organization and email when managed `forceLoginOrgUUID` lists that organization
17 * Added `size`, `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`
18 * Added `--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 finish
19 * Added the skill's frontmatter, source, plugin name and file path to what a mod's `skill.prompt` hook receives
20 * Added `/effort` and `/fast` in agent view to set what new sessions start with; a bare `/model`, `/effort` or `/fast` there now opens a picker
21 * Added a "safe mode" line to the agents view peek panel for background sessions started with `--safe-mode`
22 * Added a one-time note when plan mode won't ask before most edits or commands because bypass permissions is available
23 * Added `--disallow-tools` and a `disallowed_tools` case field to `claude plugin eval` to keep specific built-in tools, such as Agent, out of eval runs
24 * Added support for turning off the attribution block in Claude Desktop's Code tab: set `CLAUDE_CODE_ATTRIBUTION_HEADER=0` in the `env` of a Claude apps gateway's `code` policy
25 * Added a field to the attribution block in Claude Code sessions behind a Claude apps gateway; remove the block with `CLAUDE_CODE_ATTRIBUTION_HEADER=0`
26 * Added a `queue` door to the `session.append` mod hook, so a mod can make the transcript's queue records differ from the prompt as sent
27 * Added a note in `/plugin` and `claude plugin validate` naming a mod's hooks that are skipped where an organization manages Claude Code
28 * Added `/usage` warnings for max effort, workflows, always-on context and large tool results
29 * \[Claude Tag] Added the ability for Claude in Slack to delete a canvas it created in a channel when someone asks it to
30 
31 **Changed**
32 
33 * Changed plugin hooks and workflow scripts to refuse values they hand back that nest deeper than 28,000 levels, with an error naming the limit (workflow scripts allowed 100,000)
34 * Changed actions a plugin hook can block to be refused, not let through, when the hook cannot be handed them or cannot hand back its answer; a tool that already ran has its result withheld
35 * Changed requests to claude.ai's connector proxy and to Anthropic-hosted MCP servers to no longer follow HTTP redirects; redirects by a connector's own server are unaffected
36 * Changed MCP requests in cloud and self-hosted runner sessions to no longer follow HTTP redirects from the session's MCP proxy
37 * Changed skill and command loading: one whose file or folder name has hidden, direction-changing or blank-like characters, `<` or `>` is no longer offered until renamed; such a `name:` is ignored
38 * Changed `ui.render` trees in `claude plugin test`: each mod's Box or Text root now carries `part: { plugin }` naming the mod, so exact-tree assertions must include it
39 * Changed WebFetch page reads to pick their effort as web searches do: the caller's level on the caller's own model, otherwise the level settings give the small model
40 * Changed `claude plugin test` to fail a call to a mod's served `$` method that has not answered within ten seconds, as a session does
41 * Changed MCP allow rules to reach only the server they name: `mcp__a` no longer allows a server named `a__b` or `a_`; write `mcp__<server>__*` with the server's whole normalized name
42 * Changed agent `tools:` lists to take only the named MCP server's tools; list a server whose name contains `__` as `mcp__<whole name>__*`
43 * Changed Claude in Chrome in Cowork cloud sessions outside auto mode: an approved-site action the safety classifier flags now asks you instead of being refused, unless managed settings apply
44 * Changed cloud session and Remote Control MCP connectors to negotiate MCP protocol version 2026-07-28 by default on installs that fetch no flags; `MCP_PROTOCOL_NEGOTIATION=legacy` opts out
45 * Changed MCP tool descriptions and server instructions from Anthropic's first-party MCP servers at `api.anthropic.com` to reach Claude in full instead of being cut at 4,096 characters
46 * Changed auto mode in Cowork cloud sessions: a `PermissionRequest` hook can no longer approve shell commands or subagents; those prompts wait or are denied
47 * Changed the resume command printed at exit: it names the session by its ID and no longer by its name, so that nothing in a session name can run when the line is pasted
48 * Changed the resume command printed at exit of a worktree session: it uses `-w` and `-r` if the long flags do not fit the terminal. If neither fits a kept worktree, rows above it say where to run it
49 * Changed `/btw` side questions in non-interactive sessions to return a timeout error when still unanswered after 11 minutes
50 * Changed `UserPromptSubmit` hooks to run before a skill or custom slash command expands, so a hook that blocks the prompt now also stops its embedded shell commands
51 * Changed a skill's own front-matter `UserPromptSubmit` hook to first run on the prompt after the one that invokes the skill
52 * Changed the `turn.start` mod hook to also hear subagents' and teammates' turns, not only the main loop's; tell them apart by `e.agentId` (absent on the main loop)
53 * Changed the errors shown when `/ultrareview` can't upload a repository to stop suggesting `git add .`, which could stage or commit untracked files such as `.env`
54 * Changed the cyber safeguard notice to no longer ask people to apply to the Cyber Verification Program
55 * \[Cloud sessions] Changed deleting a self-hosted environment to turn off its routines right away, with the reason shown on each routine, instead of leaving their runs to fail
56 * \[Claude Tag] Changed how Claude in Slack corrects a message it got wrong: it edits the message in place and adds a short "Edited" note instead of striking through the old text
57 * \[Claude Tag] Changed Claude in Slack to join channels with more than 100 members quietly, with no intro message
58 
59 <Expandable title="16 improvements">
60 - Self-hosted runner: Improved what `setup` and `doctor` say when the runner's machine has no git credentials
61 - Improved the error shown when a cloud session is refused because your claude.ai login was rejected or has expired: it now tells you to sign in again with `claude auth login`
62 - Improved enforcement of managed permission rules, managed hooks and organization MCP tool names against user-installed mods
63 - Improved memory and disk use when PDFs are @-mentioned: their bytes are no longer kept in the session transcript
64 - Improved sandboxed Bash on Linux: Esc and Ctrl-C now work while wildcard read rules are being expanded for a command
65 - Improved the startup warning for an unrecognized model ID: it is now one short line under the welcome banner with a docs link, instead of a long raw message
66 - Improved the plugin-authoring skill's steps for sharing a mod: Claude asks public or private and checks the files before creating a GitHub repository
67 - Improved the Skill tool's "Unknown skill" error to suggest a skill's listed name when Claude wrongly adds the `anthropic-skills:` prefix to it
68 - Improved `/reload-skills` to say it re-sends the full skill list to Claude, which is how to get skills back after compaction
69 - Improved the error shown when a worktree cannot be created because its base commit does not resolve: it now says how the lookup ended and the likely reasons, such as a repository without a commit
70 - Improved the error for creating a worktree at a bare-repository layout's root: it now explains the layout instead of an unrelated git error
71 - Improved artifact watching: a local session can now watch up to 25 published artifacts at once, up from 10
72 - Improved background agent notifications: they now say when an agent is only waiting on its own background work, got a message too late for its result, or was stopped by a usage limit
73 - \[VSCode] Improved startup time in workspaces without a Python environment by starting Claude while the Python extension loads
74 - \[VSCode] Improved startup: the model picker and slash command menu now fill in right away in a new window on a folder you've opened before
75 - \[Cloud sessions] Improved the deploy command shown when you create a self-hosted environment or environment key: it shows in full, wraps between arguments, and has a visible copy button
76 </Expandable>
77 
78 <Expandable title="131 bug fixes">
79 * Fixed the error for a denied cloud session, which could point to the wrong organization when a key from `apiKeyHelper` was in use
80 * Fixed sessions on a gateway-specific model name behind a custom `ANTHROPIC_BASE_URL` ending with "Prompt is too long · automatic compaction failed" near 200K tokens instead of sending the request
81 * Fixed a mod that submits a prompt at the end of every turn keeping a headless run going past `--max-turns`, `--max-budget-usd`, an interrupt, or the end of the host's conversation
82 * Fixed cloud sessions sometimes showing the model's follow-up text after a tool group's one-line label
83 * Fixed the Write and Edit tools creating a mod in a session's mods folder without asking in accept-edits mode when the config directory's path has no `.claude` in it
84 * Fixed installed mods that kept running in an open session after being turned off remotely; they now unload between turns
85 * Fixed Edit and Retry in Cowork and claude.ai cloud sessions failing on a message stopped while its `UserPromptSubmit` or mod `prompt.submit` hooks were still running (regression in 2.1.296)
86 * Fixed an agent teammate started without a description keeping part of a credential from its prompt in the task description shown for it
87 * Fixed the claude.ai view of a Remote Control or cloud session freezing when a large batch of events could not finish uploading over a slow connection
88 * Fixed a sandboxed shell command being able to write into a `--plugin-dir` folder, whose code Claude Code reloads and runs outside the sandbox
89 * Fixed memory growth under heavy debug logging (`--debug`, `--debug-file`), and a hang on exit when the debug log is on a disk or network mount that stops accepting writes
90 * Fixed memory growing without bound when debug output goes to stderr and the parent process stops reading it
91 * Fixed rm prompts on shell `-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=1`
92 * Fixed double-clicking a word in an expanded transcript row in fullscreen mode collapsing the row instead of selecting the word
93 * Fixed `claude mcp list`, `claude doctor` and `/status` reporting an empty `.mcp.json` as invalid
94 * Fixed `/btw` jumping the transcript to the bottom when asked while scrolled up in fullscreen
95 * Fixed sandboxed commands failing on WSL2 with `bwrap: Can't mkdir /mnt/c/Program Files/ClaudeCode` when the sandbox can write to the Windows drive
96 * Fixed scheduled wakeups (ScheduleWakeup) not firing while a background task was running in Agent SDK, IDE and `claude remote-control` sessions
97 * Fixed a mod's `prompt.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
98 * Fixed a Remote Control prompt being lost when another queued prompt in the same batch failed to deliver
99 * Fixed a Remote Control prompt that had passed its hooks being dropped from prompt history when Stop interrupted the next queued prompt's hook
100 * Fixed sign-in, MCP servers and project trust appearing lost on Linux after a sandboxed command left an empty `.config.json` in the config directory
101 * Fixed `/sandbox` reporting success when its setting could not be saved because the project folder is not writable; it now says nothing changed and why
102 * Fixed SDK and headless sessions staying in auto mode after the host switched to a model that doesn't support auto mode
103 * Fixed MCP servers named `constructor` or `prototype` in an MCP config never being connected
104 * Fixed tools of an MCP server named `constructor` or `toString` asking for permission in auto mode and bypass permissions mode
105 * Fixed a spurious "synced\[0] commands path not found" plugin error at startup when another Claude Code process had just updated a claude.ai-synced plugin
106 * Fixed the Artifact tool advising a retry when a publish that requests connectors or other access was refused by the server or a proxy (HTTP 403); it now says so and what to tell the user
107 * Fixed Cowork cloud sessions staying on an old account plugin after a plugin reload that timed out or a restart that reused a recent sync
108 * Fixed document blocks being dropped from your own message sent while Claude is working
109 * Fixed Claude in Chrome asking for permission while no browser is connected; it now says the extension is not connected
110 * Fixed the fullscreen "Update installed" notice being hidden behind the idle "/clear to save tokens" hint; it now shows beside the hint
111 * Fixed a mod hook, with or without a `.catch`, being run again without end when it waits on another mod's noun that does its work outside the call
112 * Fixed the Claude apps gateway serving models that a policy's `availableModelsMatch: exact` or `deniedModels` blocks; it now answers 400 and leaves them out of its model lists
113 * Fixed the server-managed settings request to Anthropic carrying a third-party gateway's API key when a managed settings file sets `ANTHROPIC_BASE_URL`
114 * Fixed streams through a custom `ANTHROPIC_BASE_URL` being aborted after 180 seconds with no data arriving; they now wait 300 seconds, whether or not feature flags are loaded
115 * Fixed a mod's `tool.describe` or `prompt.section` answer that changed after `$.ui.invalidate` never reaching Claude; the new answer is now sent on the next turn
116 * Fixed a settings file being ignored when `enabledMcpjsonServers` or `disabledMcpjsonServers` held a single server name (letters, digits, - or \_) as a plain string
117 * Fixed `claude plugin test` pausing a hook's time budget while a served `$` method it had called kept making `$` calls after answering
118 * Fixed high memory use after resuming a cloud or Remote Control session that had run many subagents
119 * Fixed plugin hooks being skipped when they pass a very deeply nested tool input or message on with next()
120 * Fixed a value a mod's hook passes to `next()`, returns, or sends to a `$` method being refused whole when one of its getters throws a `RangeError`; now only that key is refused
121 * Fixed `/usage`, the approaching-limit warning (terminal and VS Code) and the status line sometimes showing more than 100% used (anthropics/claude-code#92238)
122 * Fixed wrapped text mixing CJK or emoji with Latin words losing its last line or leaving a blank row at some terminal widths
123 * Fixed a cloud session sometimes ignoring the answer to a permission prompt or a question when the answer was given while the session's worker was being replaced
124 * Fixed bold, italic and other nested text styles running over table borders or being lost on wrapped rows
125 * Fixed Cowork cloud sessions running the old version of an account plugin changed, removed or disabled from another device until the session restarted
126 * Fixed deny and ask rules for an MCP server (`mcp__<server>`) not applying when the server's normalized name contains a double underscore
127 * Fixed long conversations losing newly attached images on every turn after one oversized image was refused by the API
128 * Fixed the `plugin_loaded` telemetry event reporting `has_hooks` as false for plugins whose hooks are a hooks module, built-in plugins included
129 * Fixed images attached while Claude is working (VS Code, desktop app, SDK) being sent at full size, which led to repeated image errors in long conversations
130 * Fixed the image coordinate hint being missing or slightly off for large near-square images on newer models
131 * Fixed feature flag, startup, fast mode, profile and feedback requests to Anthropic carrying the API key configured for a third-party gateway (`ANTHROPIC_BASE_URL`); Anthropic API keys are still sent
132 * Fixed a mod's hot reload ignoring a fix saved right after a failed reload; saving a mod file without changing it no longer reloads the mod
133 * Fixed mods loaded from source files being refused when a hook hands `$` to a function declaration imported from another file of the mod
134 * Fixed a regression in 2.1.296 where cloud and headless sessions could run an approved tool call twice if a new message arrived as the session resumed after a restart
135 * Fixed scheduled tasks being announced for the wrong minute: the scheduling tools now report each job's actual next run time
136 * Fixed mods' hooks being handed values with `__proto__` keys silently removed, which could skip a `tool.check` guard on a tool call another mod made
137 * Fixed `claude -p` saying nothing when a settings file fails validation: text-output runs now list the file and the invalid entry on stderr
138 * Fixed long pastes in terminals without bracketed paste losing all text after an invisible control character, such as a mis-decoded curly quote
139 * Fixed managed settings and organization policy not being fetched when the stored login's plan was changed locally on machines whose MDM or managed-settings file sets `forceLoginOrgUUID`
140 * Fixed MCP connections over HTTP hanging for 30 seconds and failing when a server never ends the body of its reply to a notification (anthropics/claude-code#99014)
141 * Fixed MCP servers added to a running headless or SDK session being connected before some policy checks ran; a blocked server is now reported as failed without being contacted
142 * Fixed `claude mcp list`, `claude mcp get` and subagent MCP servers starting a server that a policy check blocks; it is now reported as blocked without being started
143 * Fixed `/reload-plugins` not loading a plugin installed from another terminal a moment earlier
144 * Fixed blank rows appearing under CJK and emoji text squeezed into a one-cell column, as in a very narrow terminal
145 * Fixed text cut in the middle beside wide characters leaving a cell unused or being cut twice, and an emoji vanishing where a color changed inside it
146 * Fixed bare mode notices in background sessions telling you to restart without `--bare`, which keeps the mode; they now name `/stop` and `claude --resume`, as safe mode ones do
147 * Fixed `←` not saying why it stayed put over a queued message while Remote Control is on
148 * Fixed `$.http.fetch` in mods refusing a `304`, `204` or `205` response that declares a `Content-Length` over the 4 MiB body limit
149 * Fixed `/config` push notification toggles sending your account the previous setting instead of the one you just chose
150 * Fixed a cloud session leaving a reply unfinished when its worker was replaced just after the reply hit the output token limit
151 * Fixed Read failing on PDF page ranges in remote sessions on Linux that run without elevated privileges
152 * Fixed Enter answering a question or permission prompt that had been held back while you typed an unsent message
153 * Fixed a file attached to a message in a remote session being left out when its download stalled part way; the download is now tried again
154 * Fixed queued prompts sent as content blocks over `--input-format stream-json` running together without a line break when merged into one turn
155 * Fixed self-hosted runner sessions shutting down MCP servers added through an `--exec-path` wrapper's own `--mcp-config` when connectors change mid-session
156 * Fixed `claude plugin eval` passing runs that the API refused: a run that ends on an API error now scores 0 without grading and makes the suite exit 1
157 * Fixed permission prompts cutting off or wrapping too early when the reason text contains keycap or joined emoji
158 * Fixed `forceLoginOrgUUID` and `forceLoginMethod` from MDM or the managed-settings file being hidden or replaced by server-managed settings
159 * Fixed `--bare` sessions leaving out an MCP server named `constructor` or `prototype` that `--channels` asked for
160 * Fixed resuming a conversation from before `/clear` reattaching to the Remote Control session of the conversation after it
161 * Fixed a prompt starting with `/`, sent with the Agent SDK's `verbatimPrompts` option, running as a slash command when `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` re-ran it after a restart
162 * Fixed background sessions started with `--safe-mode` silently leaving safe mode when the session was woken or restarted
163 * Fixed scheduled tasks and loops firing again after every turn, or firing early, during the repeated hour when daylight saving time ends
164 * Fixed the diff view listing a new file whose name begins or ends with a space under the wrong name
165 * Fixed MCP tool calls in headless and SDK sessions sometimes failing or running twice when a background reconnect closed the connection they were running on
166 * Fixed `/btw` side questions in non-interactive sessions not being cancelled when the session ends, and running a second time when the same request arrived again mid-run
167 * Fixed sandboxed commands on macOS being able to read or write a denied path by its real location when the denied path passes through a symlink
168 * Fixed sandbox `denyRead` and `allowRead` globs with braces, parentheses or backslashes in a folder's name being read differently by Claude Code's settings checks than by the sandbox
169 * Fixed sandbox glob `allowRead` and `allowWrite` entries not being re-checked when the directory they start from is replaced by a symlink
170 * Fixed worktree-isolated sessions accepting some awk programs the isolation guard should refuse
171 * Fixed `claude mcp add <name> -- <command> --background` being started as a background session
172 * Fixed a prompt or reply of `--bg` or `--background` to a background session being taken for the flag, which could start new sessions over and over instead of delivering it
173 * Fixed a custom slash command's embedded shell line running twice when a newer message interrupted the command while its prompt was being checked
174 * Fixed `--worktree` sessions leaving a folder behind in `.git/worktrees` in repositories using git's reftable ref storage
175 * Fixed `claude self-hosted-runner` sessions using Anthropic-managed git showing tracked files as staged deletions when starting in a reused clone whose remote is still empty
176 * Fixed Ultracode not being announced to scheduled tasks and other delivered headless turns when `ultracode` is on in settings
177 * Fixed MCP OAuth sign-in, token refresh and sign-out not sending configured `headers`/`headersHelper` values, which broke servers behind an authenticating proxy
178 * Fixed the Artifact tool reporting a spurious one-line difference against the live page, and refusing the publish, when a large page with a line break after `<head>` is published again unchanged
179 * Fixed `$.ui.open` reporting a mod's pane as placed in sessions where no surface draws it, such as Claude Code for VS Code and `claude -p`
180 * Fixed the `agent.spawn` mod hook not running when a finished subagent or a killed teammate is resumed: the hook's event now carries `resume`, and a mod can refuse it
181 * Fixed `claude plugin validate` rejecting a mod's `$.state` references when `plugin.json` has no `types` key and the contract is at `./types/index.d.ts`
182 * Fixed a mod's `dimColor` text looking the same as plain text under the dark ANSI theme and on 16-color terminals
183 * Fixed plan mode running a write (an MCP tool's, a file's, a shell command's) that a `PreToolUse` hook or a mod's `tool.check` hook allowed
184 * Fixed background subagents in auto mode sometimes sending their final report twice, once as the result and once as a message
185 * Fixed `SendMessage` not finding a subagent by name after the CLI restarted and resumed the session (names given before the last compaction still need the agent ID)
186 * Fixed replies cut off at the output token limit ending the turn silently, with no retry or error, after a request fell back to non-streaming mode
187 * Fixed Read garbling UTF-16LE files with a byte-order mark, and Write dropping byte-order marks or silently converting Windows-1252, Shift-JIS, GBK or UTF-16BE files to UTF-8 (now refused)
188 * Fixed cloud sessions sometimes leaving a message unanswered when the worker was replaced right after a compaction
189 * Fixed cloud sessions and `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` sometimes answering a finished turn again after a restart, when a tool ended the turn and a skill loaded in the same step
190 * Fixed photos sent over Remote Control being dropped when their copy could not be saved on your computer; Claude now still sees the photo
191 * Fixed files sent over Remote Control sometimes not arriving in long-running sessions
192 * Fixed files of 30 to 35 MiB sent over Remote Control or to a cloud session not arriving
193 * Fixed a user-installed mod's `$.env.set` changing the environment or shell prefix that command hooks from managed settings start with
194 * Windows: Fixed the process-liveness check leaving orphaned PowerShell processes behind on busy machines until memory ran out
195 * Windows: Fixed PreToolUse and PermissionRequest hooks that set no shell failing open when Git for Windows isn't installed; a guard that fails now blocks the call
196 * Windows: Fixed Bash commands failing with "command not found" for a whole session when Git Bash did not report its PATH at startup
197 * Self-hosted runner: Fixed sessions that wrote output before their first turn being left with no release timer, ignoring `--retire-at` and delaying shutdown
198 * \[VSCode] Fixed an unsent prompt and its attachments being lost when switching to another session and back
199 * \[VSCode] Fixed unused blank chats keeping a background Claude process running after starting a new conversation
200 * \[VSCode] Fixed the mic button showing an internal error message when you are signed out of claude.ai; it now offers to sign you in
201 * \[Cloud sessions] Fixed a memory spike that could crash a session when many of its existing output files were re-sent to it at once
202 * \[Cloud sessions] Fixed saving an edited routine silently moving it to a different environment when its own had been deleted or wasn't in the list; the routine now keeps its environment
203 * \[Cloud sessions] Fixed Sessions search in a self-hosted environment's admin details finding nothing when you paste the session ID from a session's link
204 * \[Cloud sessions] Fixed the Sessions and Runners lists in a self-hosted environment's admin details saying the list is empty when a search just has no matches
205 * \[Remote Control] Fixed Remote Control sessions whose computer can't be reached still appearing to send your messages; your text now stays in the box and Send is off until it reconnects
206 * \[Claude Tag] Fixed Claude in Slack staying silent on untagged posts that a channel's own instructions tell it to answer, such as posts that tag someone else, in channels with guests
207 * \[Claude Tag] Fixed Claude in Slack reporting a reply to another channel's thread as posted when it isn't a member there; it now says the reply wasn't delivered and how to fix that
208 * \[Claude Tag] Fixed Claude in Slack sometimes ending a turn without posting its answer when a self-hosted runner's image has no python3
209 * \[Code Review] Fixed Code Review's monthly spend-limit comment and check-run card sending admins to Claude Code settings; they now link the Usage page, where that limit is set
210 </Expandable>
211</Update>
8212 
9213<Update label="2.1.296" description="October 9, 2026">
10214 **Added**
11215 

errors Changed · +31 / -0 lines

### Request rejected as unprocessable by the model

This page is larger than the 256 KiB this site keeps, so one side of the diff below stops where the stored text does.

from line 148
148148| `Request too large for the API's 32MB request limit` | [Request errors](#request-too-large) |
149149| `Image was too large` | [Request errors](#image-was-too-large) |
150150| `Unable to resize image` | [Request errors](#unable-to-resize-image) |
151| `Request rejected as unprocessable by the model` | [Request errors](#request-rejected-as-unprocessable-by-the-model) |
151152| `PDF too large` / `PDF is password protected` / `pdftoppm is not installed` | [Request errors](#pdf-errors) |
152153| `Extra inputs are not permitted` | [Request errors](#extra-inputs-are-not-permitted) |
153154| `API Error: 400 ... tools.N.custom.input_schema: JSON schema is invalid` / `Property keys should match pattern` | [Request errors](#tool-input-schema-is-invalid) |
from line 200
199200| `Couldn't verify your organization's policy for cloud sessions` | [Command-line errors](#couldnt-verify-your-organizations-policy-for-cloud-sessions) |
200201| `Cloud sessions aren't available:` followed by why your organization's policy couldn't be loaded | [Command-line errors](#couldnt-verify-your-organizations-policy-for-cloud-sessions) |
201202| `Cloud sessions need a claude.ai sign-in` | [Unable to get organization UUID](/docs/en/claude-code-on-the-web#unable-to-get-organization-uuid) |
203| `Nothing was stashed: "<path>" is now a folder in place of a tracked file or link` / `are now folders in place of tracked files or links` | [Command-line errors](#nothing-was-stashed-because-a-folder-replaced-a-tracked-file) |
202204| `Error: --json-schema is not a valid JSON Schema` | [Command-line errors](#the-json-schema-value-is-not-a-valid-json-schema) |
203205| `Error: Invalid --agents configuration:` | [Command-line errors](#invalid-agents-configuration) |
204206| `Error: --agents takes a JSON object, or a file path only with --print (-p)` | [Command-line errors](#invalid-agents-configuration) |
from line 260
258260| `Output styles are saved to local settings (.claude/settings.local.json), which this session doesn't load` | [Command-line errors](#output-styles-are-saved-to-local-settings-which-this-session-doesnt-load) |
259261| `/recap only runs when you ask for it yourself in this session` | [Command-line errors](#recap-only-runs-when-you-ask-for-it-yourself) |
260262| `` `plugin eval` is currently in early access `` / `` `plugin eval` is currently unavailable `` | [Plugin errors](#plugin-eval-is-currently-in-early-access) |
263| `cannot be evaluated where sessions load it` | [Test plugins with evals](/docs/en/plugin-evals#cannot-be-evaluated-where-sessions-load-it) |
261264| `Marketplace "<name>" is registered from an untrusted source` | [Plugin errors](#marketplace-is-registered-from-an-untrusted-source) |
262265| `Claude Code refuses the marketplace name "<name>"` | [Plugin errors](#claude-code-refuses-the-marketplace-name) |
263266| `Marketplace name impersonates an official Anthropic/Claude marketplace` | [Plugin errors](#claude-code-refuses-the-marketplace-name) |
from line 2229
22262229* If the message reports a dimension or size limit, resize or recompress the image below that limit before attaching.
22272230* If the message names a cause, such as a CMYK JPEG, an animated WebP, or a possibly damaged file, re-save the image in the format the message suggests and attach it again.
22282231 
2232### Request rejected as unprocessable by the model
2233 
2234The API refused the request as one the model can't process. The message is the API's own.
2235 
2236```text theme={null}
2237API Error: 400 Request rejected as unprocessable by the model (too many or oversized images, or unsupported parameters)
2238```
2239 
2240Claude Code can remove the oldest images and documents from a refused request and send it again. Before v2.1.290, Claude Code didn't remove images on this refusal, so a long session that accumulated hundreds of them could fail with this error on every turn.
2241 
2242**What to do:**
2243 
2244* If the message keeps appearing in a conversation with images or documents, remove them yourself. Press Esc twice to step back past the turns that added them, or run `/clear` to start fresh.
2245 
22292246### PDF errors
22302247 
22312248The PDF you attached couldn't be processed. The messages are shown here in their non-interactive form; in an interactive session they instead prompt you to double press esc and try again.
from line 2770
27532770On [Amazon Bedrock](/docs/en/amazon-bedrock), [Google Cloud's Agent Platform](/docs/en/google-vertex-ai), and [Microsoft Foundry](/docs/en/microsoft-foundry), a cybersecurity flag produces the [Usage Policy refusal](#usage-policy-refusal) message instead.
27542771 
27552772The safeguard itself is server-side and predates v2.1.203; client releases since then have changed only the message's wording.
2756From v2.1.203 through v2.1.218, the message read `<model> has safety measures that flagged this message for a cybersecurity topic. To learn about the Cyber Verification Program and apply for access, visit our help center:` followed by the same help-center link, and interactive sessions appended `If you were not engaging in a cybersecurity topic, please send feedback via /feedback.`
2757Before v2.1.203, it read `<model>'s safeguards flagged this message for a cybersecurity topic. If your work requires this access, you can apply for an exemption:` followed by an exemption form link.
2758 
2759**What to do:**
2760 
2761* If your work requires this content, apply for access through the [Cyber Verification Program](https://support.claude.com/en/articles/14604842-real-time-cyber-safeguards-on-claude)
2762* If your request wasn't about a cybersecurity topic, run `/feedback` to report the false positive
2763* To keep working in the same session, press Esc twice or run `/rewind` to step back to a checkpoint before the turn that triggered the flag, then take a different approach. See [Checkpointing](/docs/en/checkpointing).
2764 
2765<h3 id="safeguards-flagged-a-request-for-claudes-reasoning">
2766 Safeguards flagged a request for Claude's reasoning
2767</h3>
2768 
2769The API declined the request because safeguards flagged it as asking the model to reproduce its internal reasoning in the response. The API names this [refusal category](https://platform.claude.com/docs/en/build-wi
2773From v2.1.203 through v2.1.218, the message read `<model> has safety measures that flagged this message for a cybersecurity topic. To learn about the Cyber Verification Program and apply f

hooks Changed · +22 / -3 lines

#### Hooks that start a background process

This page is larger than the 256 KiB this site keeps, so one side of the diff below stops where the stored text does.

from line 777
777777 
778778Your hook's exit code tells Claude Code whether to continue with the action that triggered the hook, such as a tool call or a prompt. A run that finishes has one of three outcomes:
779779 
780* **Success**: your hook exits 0. Claude Code applies any [JSON output](#json-output) fields your hook printed, and the action goes ahead unless those fields block or deny it.
780* **Success**: your hook exits 0. Claude Code applies any [JSON output](#json-output) fields your hook printed, and the action goes ahead unless those fields block or deny it. [Hooks that start a background process](#hooks-that-start-a-background-process) covers the exception.
781781* **Blocking error**: your hook exits 2. On [events that can block](#exit-code-2-behavior-per-event), Claude Code stops the action.
782782* **Non-blocking error**: your hook exits with any other code, or fails in some other way, such as not starting or printing invalid JSON. The action goes ahead, and on events such as `PreToolUse` you see a `<hook name> hook error` notice in the transcript. If you want a failed hook to block the action, set [`onFailure: "block"`](#block-the-action-when-a-hook-fails).
783783 
from line 874
874874* A timed-out `command`, `http`, or `mcp_tool` hook doesn't block the tool call. The call continues through the normal [permission flow](/docs/en/permissions), so don't count on a stalled hook to act as a gate. To block the call when a `command` or `http` hook times out, set [`onFailure: "block"`](#block-the-action-when-a-hook-fails).
875875* An [Agent SDK callback hook](/docs/en/agent-sdk/hooks) that exceeds its timeout [blocks the tool call](#pretooluse).
876876 
877#### Hooks that start a background process
878 
879If your command hook makes its decision in a background process and exits, a deny that process prints after Claude Code has stopped reading doesn't block the tool call. For a hook that isn't [async](#run-hooks-in-the-background), Claude Code finishes reading the hook's output shortly after the hook's own process exits.
880 
881Print the decision before you start a background process, and redirect that process's stdout and stderr. If your script prints an allow, then starts a background process without redirecting that process's stdout and stderr, Claude Code blocks the tool call. The hook error includes `refusing to honor the suspect capture`.
882 
883This `PreToolUse` hook script prints the decision with `policy-check.sh`, then uploads metrics in the background:
884 
885```bash theme={null}
886#!/bin/bash
887"$CLAUDE_PROJECT_DIR"/.claude/hooks/policy-check.sh || exit $?
888"$CLAUDE_PROJECT_DIR"/.claude/hooks/upload-metrics.sh >/dev/null 2>&1 &
889```
890 
891The rest of the script does this:
892 
893* **`|| exit $?`**: makes the check's exit code the hook's own, so a check that exits 2 to deny still blocks. Otherwise the hook exits with the last line's code, which is 0.
894* **`>/dev/null 2>&1 &`**: runs `upload-metrics.sh` in the background with its output redirected, so it doesn't keep the hook's output open.
895 
896To test the script, make `policy-check.sh` exit 2, then trigger a tool call that the hook matches. The tool call is blocked.
897 
877898#### Block the action when a hook fails
878899 
879900On most events, when a hook fails or times out, Claude Code still carries out the action, so a policy hook with a wrong path or a crashing script lets everything through. To block the action instead, set `"onFailure": "block"` on a `command` or `http` hook. The default value is `"continue"`. Requires Claude Code v2.1.295 or later.
from line 1452
14311452 
14321453An [Agent SDK callback hook](/docs/en/agent-sdk/hooks) on `UserPromptSubmit` that reaches its timeout blocks the prompt with a message naming the hook and the timeout, because a callback there can be acting as a policy gate that must not fail open. The session continues. Before v2.1.208, a callback timeout on that event ended the turn with an execution error.
14331454 
1434If you press `Esc` in the terminal while `UserPromptSubmit` hooks are still checking a prompt, the text you typed goes back into the prompt box.
1435 
14361455#### UserPromptSubmit input
14371456 
14381457In addition to the [common input fields](#common-input-fields), UserPromptSubmit hooks receive the `prompt` field containing the submitted text. Pasted content that collapsed to a `[Pasted text #N]` placeholder arrives expanded in place. In sessions where Claude Code [marks pasted text for Claude](/docs/en/terminal-config#how-claude-treats-pasted-text), that expanded content sits between a `<pasted_content id="…">` line and a `</pasted_content id="…">` line, so account for those lines if your hook parses the prompt.
from line 4051
40324051 
40334052Print the JSON response alone on stdout or on one line of its own:
40344053 
4035* **Alone on stdout**: when the response is the only text on stdout, it can span several lines, such as pretty-printed `jq` output. Spanning several lines requires Claude Code v2.1.295 or later.
4036* **On one line of its own**: an async hook can print other text to stdout when the response fits on one line by itself, for example with `jq -c`.
4037 
4038Claude Code validates that JSON response against the same [output schema](#json-output) as synchronous hooks, and drops any field whose value has the wrong type, such as a `systemMessage` that isn't a string, instead of delivering it. Run with `--debug` to see a warning naming each dropped field.
4039 
4040Async hook completion notifications are suppressed by default. To see them, enable verbose mode with `Ctrl+O` or start Claude Code with `--verbose`.
4041 
4042### Run tests after file changes
4043 
4044This hook starts a test suite in the background whenever Claude writes a file, then reports the results back to Claude when the tests finish. Save this script to `.claude/hooks/run-tests-async.sh` in your project and make it executable with `chmod +x`:
4045 
4046```bash theme={null}
4047#!/bin/bash
4048# run-tests-async.sh
4049 
4050# Read hook input from stdin
4051INPUT=$(cat)
4052FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')
4053 
4054# Only run tests for source files
4055if [[ "$FILE_PATH" != *.ts && "$FILE_PATH" != *.js ]]; then
4056 exit 0
4057fi
4058 
4059# Run tests and report results to Claude via additionalContext
4060RESULT=$(npm test 2>&1)
4061EXIT_CODE=$?
4062 
4063if [ $EXIT_CODE -eq 0 ]; then
4064 MSG="Tests passed after editing $FILE_PATH"
4065else
4066 MSG="Tests failed after editing $FILE_PATH: $RESULT"
4067fi
4068jq -nc
4054* **Alone on stdout**: when the response is the only text on stdout, it can span several lines, such as pretty-printed `jq` output. Spanning several lines requires Claude Code v2.1.295 or

plugin-evals Changed · +14 / -0 lines

from line 666
666666 
667667Before v2.1.283, `claude plugin eval` didn't check the git version, and on an older git the suite ran with those programs left on.
668668 
669<h3 id="cannot-be-evaluated-where-sessions-load-it">
670 "cannot be evaluated where sessions load it"
671</h3>
672 
673You ran `claude plugin eval` in your shell with the name of a plugin installed from a marketplace you [added from a local path](/docs/en/plugins/loading#in-place-and-copied-plugins). No session could load the plugin from that marketplace now, so the command refuses with this message and exits with code 1.
674 
675```text theme={null}
676Error: formatter@my-marketplace cannot be evaluated where sessions load it: no session could load it now. Its marketplace is a folder whose catalog could not be read, or lists it no more. Check the marketplace with `claude plugin marketplace list`, or pass ./<dir> to evaluate a directory.
677```
678 
679The sentence after `no session could load it now.` names what failed.
680 
681Run `claude plugin marketplace list` in your shell and fix what the message names. For example, restore the marketplace directory or put the plugin's entry back in its catalog. To evaluate the plugin's source without the marketplace, pass its directory as the target, such as `claude plugin eval ./plugins/formatter`.
682 
669683### "No eval cases found"
670684 
671685No `<case>/prompt.md` or `<case>/case.yaml` exists beneath the eval directory in effect, or your `--case` and `--tag` filters matched no case. Run from the plugin root, or run `claude plugin eval init` to create a suite.

artifacts Changed · +1 / -1 lines

from line 162
162162 
163163Your [permission mode](/docs/en/permission-modes) decides what Claude does when a sent comment arrives:
164164 
165* **Claude replies on its own**: when your permission mode lets Claude post the reply without asking you, Claude reads the thread and replies, and edits the artifact when the comment asks for a change. You see `Auto-replied to comment thread on Artifact: <name>` or `Auto-edited Artifact: <name> in response to a comment thread`.
165* **Claude replies on its own**: if you're in a permission mode that lets Claude post the reply without asking you, Claude reads the thread and replies. You see `Auto-replied to comment thread on Artifact: <name>`.
166166* **Claude waits for you**: outside plan mode, when posting the reply would need your approval, you see `Comments are waiting on Artifact: <name>`. Claude then asks you for approval to read the thread, and again to post the reply.
167167* **Claude pauses in plan mode**: you see `Comments are waiting on Artifact: <name>`, and Claude doesn't reply until you leave plan mode and ask it to read and reply.
168168 

claude-tag Changed · +1 / -1 lines

This page is larger than the 256 KiB this site keeps, so one side of the diff below stops where the stored text does.

Nothing in the body moved in this read. What changed is above.

settings-reference Changed · +1 / -0 lines

This page is larger than the 256 KiB this site keeps, so one side of the diff below stops where the stored text does.

from line 2928
29282928 * Variables that change how Claude Code starts or syncs, such as `CLAUDE_CODE_PROCESS_WRAPPER`, `CLAUDE_CODE_SYNC_SKILLS`, `CLAUDE_CODE_SYNC_PLUGINS`, `CLAUDE_CODE_PLUGIN_CACHE_DIR`, and `CLAUDE_CODE_PLUGIN_SEED_DIR`.
29292929 * Variables that set the timers on an unanswered dialog: [`CLAUDE_CODE_USER_DIALOG_TIMEOUT_MS`, `CLAUDE_AFK_TIMEOUT_MS`, and `CLAUDE_AFK_COUNTDOWN_MS`](/docs/en/env-vars#variables).
29302930 * [`CLAUDE_CODE_DISABLE_ATTACHMENTS`](/docs/en/env-vars#variables), which turns off attachment processing.
2931 * [`CLAUDE_CODE_DISABLE_FILE_MENTIONS`](/docs/en/env-vars#variables), which stops Claude Code from expanding `@` mentions of files and directories.
29312932 
29322933 Before v2.1.251, project and local settings could also set the variables in this list that choose where Claude Code writes its files or that export session content, except `HOME` and `XDG_CONFIG_HOME`. Before v2.1.290, they could also set the dialog timer variables and `CLAUDE_CODE_DISABLE_ATTACHMENTS`.
29332934* Identity variables that Claude Code's hosting environments own, such as `CLAUDE_CODE_REMOTE` and `CLAUDE_CODE_ACCOUNT_UUID`, are ignored from every file.
from line 4063
40624063When you set it to `true`, Claude Code changes which hooks and hook-like commands load:
40634064 
40644065* **Managed and SDK hooks run**: hooks from managed settings and hooks the [Agent SDK](/docs/en/agent-sdk/overview) registers in process
4065* **Force-enabled plugin hooks run**: hooks from plugins your managed settings force-enable through [`enabledPlugins`](#enabledplugins). Claude Code matches on the full `plugin@marketplace` ID, so a plugin with the same name from a different marketplace stays blocked. This lets you distribute vetted hooks through an organization marketplace while blocking everything else. A [mod](/d
4066* **Force-enabled plugin hooks run**: hooks from plugins your managed settings force-enable through [`enabledPlugins`](#enabledplugins). Claude Code matches on the full `plugin@marketplace` ID, so a plugin with the same name from a dif
Feedback