claudekit / updates / claude-code-2-1-289
[ PATCH · ]

Claude Code 2.1.289

Closes several ways deny and ask rules could be missed (compound shell commands, symlinks, environment variable prefixes) and fixes the terminal freezing on short code blocks. A plugin or mod component that fails while drawn no longer takes down the whole session.

Official announcement →

This article is a summary based on official documentation.

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.spawn for 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 status that 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.
  • Read deny 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 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.
  • Installed mods not loading in the first session after an upgrade.
  • claude plugin validate skipping the plugin when the folder also holds a marketplace manifest.
  • claude plugin validate failing an Anthropic marketplace’s own plugin and listing a clean plugin.json in --json.
  • A failed plugin component showing Error or 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.render hook wrote made a row throw while drawn; the engine now draws its own row instead.
  • A mod’s Client that fails while drawn taking down everything the mod drew around it; it now fails alone and raises ui.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 a file: 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 status change behind it has been reverted.
  • Developing a plugin from a local folder marketplace or --plugin-dir? plugin list and plugin update now show the current copy, and hot reload works for a symlinked --plugin-dir.
  • Plugin and mod authors can look at ui.fault for Client draw failures, plus agent.spawn for teammates and the new idle and waiting states in $.agent.list().