Skip to main content

Claude Code v2.1.289: Permission Rule Fixes, agent.spawn for Teammates, and Plugin Rendering Stability

Claude Code v2.1.289 fixes cases where deny and ask rules did not apply, adds agent.spawn for teammates and idle and waiting states in $.agent.list(), and fixes many plugin and mod rendering failures.

Claude Code v2.1.289 is a fix-focused release with 27 changelog entries, most of them about plugins and mods. It closes several gaps where deny and ask rules did not apply, adds agent.spawn for teammates, and stops a number of plugin and mod drawing failures from freezing or ending sessions.

What’s New

Deny and Ask Rules Apply in More Cases

Several gaps in permission rules are closed in this release:

  • A deny or ask rule on a nested part of a compound shell command now holds over a user-installed mod’s approval on managed machines.
  • Read deny rules now apply to files @-mentioned, changed, or selected in the IDE through a symlink.
  • When the sandbox auto-allows commands, Bash deny and ask rules no longer miss a command behind an environment variable prefix with an expanded value (e.g. TZ="$HOME" rm -rf build), and are no longer skipped when a bare variable assignment comes before the command.
  • A user-installed plugin can no longer rewrite the descriptions of an organization-managed MCP server’s sign-in tools.

agent.spawn for Teammates and New Agent States

This release adds agent.spawn for teammates, uses one agent id across plugin hook events, and adds idle and waiting states to $.agent.list().

VS Code: claude auth status Change Reverted

In VS Code, a 2.1.288 change to claude auth status that may have made sign-outs more frequent has been reverted.

Fixes and Improvements

  • Freezes: The terminal no longer freezes on short code blocks with many unclosed <script> tags or deeply nested ${ substitutions, and published artifact pages no longer freeze or crash the reader’s browser tab on short code blocks with many unclosed <script> tags.
  • Launch: A plugin that draws a Box with a border style the terminal does not know no longer causes a freeze or forced quit at launch.
  • Session stability: Supervised and background sessions no longer end when a plugin’s on-screen handler throws asynchronously, and sessions no longer end with an interface error when a plugin region with no height keeps growing.
  • Mod rendering: When a value written by a mod’s ui.render hook makes a row throw while drawn, the engine now draws its own row instead of ending the session with “unrecoverable interface error”. A mod’s Client that fails while drawn now fails alone and raises ui.fault instead of taking down everything the mod drew around it, and its region no longer stays failed for the whole session after the terminal threw while drawing it.
  • Mod layout: Right-aligned content in a mod’s pane or band no longer draws under the close mark or [-], which now also keep one column in from the terminal’s edge, and a band that fails to draw no longer briefly tells the cards under it to step aside.
  • Mod errors: When a mod’s band or pane fails to draw, the line its author sees now names the mod and says nothing was drawn.
  • Mod loading: Installed mods now load in the first session after an upgrade.
  • Plugin panes: Plugin panes now draw when a link uses a localhost address, an @ in its path, an uppercase host or a file: path; large files open faster in a plugin code pane because the highlighted view is laid out once at its final width; and a plugin’s rows above the prompt no longer show a stale row while the Background tasks dialog is open in fullscreen.
  • Plugin commands: plugin list, plugin eval and plugin update no longer show a stale copy of a plugin installed from a local folder marketplace, and hot reload works for a symlinked --plugin-dir.
  • Plugin validation: claude plugin validate no longer skips the plugin when the folder also holds a marketplace manifest, no longer fails an Anthropic marketplace’s own plugin, and no longer lists a clean plugin.json in --json. A failed plugin component no longer shows Error or nothing as its reason when the failure carried no message.
  • Text rendering: Text with a tab, a stray escape and a C1 control, or a short text with a tab and CRLF line endings, no longer draws over the rows below it.

This release contains 27 changes in total; see the full changelog for the complete list.

How to Update

  1. Check your installed version: claude --version
  2. Update in place: claude update