What changed
Claude Code 2.1.289 shipped on October 3, 2026. Fixes center on two areas. First, deny and ask rules now hold in cases where a command’s shape or a symlink let them slip. Second, a plugin or mod component that fails while drawn no longer ends the session with an “unrecoverable interface error”; the failure stays with that component. In VS Code, a 2.1.288 change to claude auth status has been reverted.
New features
-
Agent APIs
Adds
agent.spawnfor teammates, one agent id across plugin hook events, and idle and waiting states in$.agent.list().
Key improvements
-
Faster large files in a plugin code pane
Large files open more quickly in a plugin code pane, because the highlighted view is laid out once at its final width.
-
Clearer draw-failure line for mod authors
When a mod’s band or pane fails to draw, the line its author sees now names the mod and says nothing was drawn.
Changed behavior
-
[VSCode]
claude auth status(reverted)A 2.1.288 change to
claude auth statusthat may have made sign-outs more frequent has been reverted.
Bug fixes
Permissions & security
- 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.
Readdeny rules not applying to files @-mentioned, changed, or selected in the IDE through a symlink.- Bash deny and ask rules missing a command behind an environment variable prefix with an expanded value (e.g.
TZ="$HOME" rm -rf build) when the sandbox auto-allows commands. - A Bash deny or ask rule being skipped under sandbox auto-allow when a bare variable assignment came before the command.
- A user-installed plugin being able to rewrite the descriptions of an organization-managed MCP server’s sign-in tools.
Terminal rendering
- The terminal freezing on short code blocks with many unclosed
<script>tags or deeply nested${substitutions. - Published artifact pages freezing or crashing the reader’s browser tab on short code blocks with many unclosed
<script>tags. - Text with a tab, a stray escape and a C1 control, or a short text with a tab and CRLF line endings, drawing over the rows below it.
Plugin install & management
plugin list,plugin evalandplugin updateshowing a stale copy of a plugin installed from a local folder marketplace, and hot reload for a symlinked--plugin-dir.- Installed mods not loading in the first session after an upgrade.
claude plugin validateskipping the plugin when the folder also holds a marketplace manifest.claude plugin validatefailing an Anthropic marketplace’s own plugin and listing a cleanplugin.jsonin--json.- A failed plugin component showing
Erroror nothing as its reason when the failure carried no message.
Plugin & mod rendering
- Sessions ending with “unrecoverable interface error” when a value a mod’s
ui.renderhook wrote made a row throw while drawn; the engine now draws its own row instead. - A mod’s
Clientthat fails while drawn taking down everything the mod drew around it; it now fails alone and raisesui.fault. - A mod’s Client region staying failed for the whole session after the terminal threw while drawing it.
- Sessions ending with an interface error when a plugin region with no height kept growing.
- Supervised and background sessions ending when a plugin’s on-screen handler threw asynchronously.
- A freeze or forced quit at launch when a plugin drew a Box with a border style the terminal does not know.
- Plugin panes drawing nothing when a link used a localhost address, an
@in its path, an uppercase host or afile:path. - A plugin’s rows above the prompt showing a stale row while the Background tasks dialog was open in fullscreen.
- Right-aligned content in a mod’s pane or band drawing under the close mark or
[-], which now also keep one column in from the terminal’s edge. - A mod’s band that fails to draw briefly telling the cards under it to step aside.
Notes
- If you manage permission rules on managed machines, this release is worth taking: deny and ask rules now hold across compound shell commands, symlinks, environment variable prefixes and bare variable assignments.
- If VS Code signed you out more often after 2.1.288, the
claude auth statuschange behind it has been reverted. - Developing a plugin from a local folder marketplace or
--plugin-dir?plugin listandplugin updatenow show the current copy, and hot reload works for a symlinked--plugin-dir. - Plugin and mod authors can look at
ui.faultforClientdraw failures, plusagent.spawnfor teammates and the new idle and waiting states in$.agent.list().