Release notes
Claude Code v2.1.323
What's changed
- Added Code Mode, an experimental opt-in in which Claude writes JavaScript to call its tools; see https://code.claude.com/docs/en/code-mode to turn it on, or to turn it off for an organization
- Added
engines["claude-code"]toplugin.json: plugins outside their stated Claude Code version range are not installed, updated or loaded, and install and update pick the newest version that fits - Added type checking of a plugin's TypeScript hooks module to
claude plugin validate; each finding is a warning, and--strictfails on it - Added to
claude plugin validatethe$nouns a mod'sengine.createhook adds, withholds or replaces - Added support for
CLAUDE_CODE_AUTO_MODE_MODELin managed settings for Claude Desktop sessions on third-party providers (takes effect once Claude Desktop includes this version) - Added an options menu (stop, switch to usage credits, upgrade) when a model needs usage credits that are turned off or used up
- Added a progress heartbeat every 30 seconds while hooks run long in
claude -pand SDK sessions, so a host such as Claude Desktop won't end the turn as hung (once it includes this version) - Added
.docxsupport to Artifact tool asset uploads - Added a
/diff to closehint to the diff panel, and the keys that focus and close a panel to the?shortcut guide - Added a start-up warning for Bash allow rules with a
*in a variable's value, such asBash(PORT=* npm run dev) - Added a warning when a plugin's language server can't start, naming the server and what to check
- Added a one-time startup notice naming
CLAUDE_CODE_PERFORCE_MODEwhen Perforce settings are found and the mode is off - Added
CLAUDE_CODE_DISABLE_AGENT_PROGRESS_SUMMARIES(available since 2.1.318): set it to1to turn off subagent progress summaries and the requests that write them (anthropics/claude-code#86879) - Added
CLAUDE_CODE_RESUME_HINT_COMMAND, which a program that starts Claude Code can set to have the exit hint name its own resume command - Added
unsetOptionCountto theclaude plugin install --jsonresult: how manyuserConfigoptions are not yet set - Added
isPromptCoveredto the props a mod's pane is drawn with, telling it when a dialog or a field above the prompt covers the prompt - Fixed running
/compactagain, or after a command such as/context, summarizing away a message that Claude had not answered yet - Fixed a resumed session joining your next message to an old interrupted message that was not resumed
- Fixed a memory spike at the next prompt after Claude changed a very large file
- Fixed a setting saved in a running session undoing a hand edit made to
settings.jsonmoments earlier; a settings file you delete during a session now stays deleted - Fixed
claude plugincommands andclaude mcp listsigning you out of a Console profile when they ended while the token was being renewed - Fixed Edit and Bash running out of memory on certain
/procfiles, and Edit hanging or running out of memory on devices and named pipes - Fixed Claude Code failing to start, or to clear stored credentials at sign-out, when saving its configuration file failed with "Out of memory"
- Fixed requests sent without streaming failing on errors that streamed requests recover from, such as a rejected image, thinking block or beta header
- Fixed
ExitWorktree, the worktree exit dialog and/resumeleaving the session in the wrong folder when the folder the shell was in before entering the worktree had been deleted - Fixed accents and other combining marks sometimes landing left of the text, leaving stale copies on screen, or silently disappearing when text wraps
- Fixed the last key of a key chord, such as Enter in ctrl+x enter, acting on a dialog's text field when the chord's own action isn't available there
- Fixed
psprocesses piling up when the process listing Claude Code runs before stopping a command takes too long - Fixed subagent transcripts and large tool results being saved apart from the session's transcript after entering a worktree created by a
WorktreeCreatehook or belonging to a nested repository - Fixed a session on a named Anthropic profile moving to another sign-in when
/fork, the Left arrow or--bgcontinued it in the background; reopen any session that was open during the update - Fixed a background session sending a conversation under another sign-in when its named Anthropic profile is missing, changed or overridden; it now stops and says so
- Fixed a session on an API key, auth token or workload identity from its shell (not a setup token) moving to another sign-in in the background; it now stops and says so
- Fixed MCP tool calls ending in the sign-in server's error, such as
TOKEN_EXPIRED, instead of asking you to sign in again - Fixed an expired claude.ai login showing "Credit balance too low" when a saved Console key or
ant auth loginprofile without credit was used instead - Fixed a session on a named Anthropic profile being handed to an older background service that could not keep its sign-in; it now says to restart the service
- Fixed a background session's sign-in leaving the previous account's login or other credentials in place; it now clears them for every session on the computer, and a refused sign-in can leave no login
- Fixed background sessions moving between a profile and the stored login when an update restarted them
- Fixed sessions opened before a sign-in keeping signed-out feature flags after the sign-in
- Fixed sessions that kept failing after a Claude apps gateway sign-in expired: once you sign in again with
/loginin another terminal, they carry on at the next message - Fixed the billing notice naming your
ant auth loginorganization when a customX-Api-Keyheader is set - macOS: Fixed "Not logged in · Please run /login" coming back right after a successful
/loginor a token refresh when the keychain was slow to answer - Fixed turns failing in Claude Desktop when an organization's gateway answers an expired token with 403: Claude Code now asks Desktop for a fresh token and retries
- Fixed the error shown when Amazon Bedrock refuses your account a model: it no longer says to refresh your AWS credentials, it says to enable the model
- Fixed the
awsAuthRefreshorgcpAuthRefreshcommand sometimes running twice for one request when three or more sessions needed a fresh sign-in at once - Fixed the
claude -pwarning about an ended claude.ai login to say thatclaude auth logoutalso removes saved MCP server logins and plugin secrets - Fixed Bash permission prompts offering "don't ask again" for commands that write to sensitive paths such as
.gitor.claude, where the saved rule did not stop the next prompt - Fixed a case where some
lsofcommands ran without a permission prompt - Fixed Bash commands that write a file with
cat > file <<EOFbeing shown as "Read 1 file" - Fixed a case where Bash permission checks judged an
rmfrom the wrong folder and skipped the dangerous-removal prompt under bypass permissions or a Bash allow rule - Fixed
--permission-mode autoor a settingsdefaultMode: autostarting in a mode that could allow more when auto mode was unavailable. It now starts in Manual mode, which asks first - Fixed plan files sometimes being written outside the project when
plansDirectoryis set; a write that can't be shown to stay inside the project is now refused - Fixed a permission prompt when Claude read the output of its own background command or agent after entering a worktree
- Fixed a case where Bash permission checks missed part of a command
- Fixed a case where the Bash sandbox could switch off during a session
- Fixed Bash allow rules with an attached wildcard, such as
Bash(ls*), skipping the permission prompt in some cases; a rule that names a variable, such asBash(NODE_ENV*), now asks - Fixed auto mode running behind a gateway at
ANTHROPIC_BASE_URL
…