Plugins can read the user's selected text through ui_read_selection#
A new ui_read_selection request lets a plugin's $.ui.selection read text the user has selected in an attached client
You can now let plugins read the text you have selected in a connected app, in sessions without a terminal. The first non-empty answer that arrives within 5 seconds is used. Plugin agent-launch hooks now also apply when you start a named teammate. Such a hook can block, rewrite or retype the teammate. Running claude plugin eval on a plugin from a folder marketplace now runs it from that folder. When a plugin's view drawn by the desktop app fails, the plugin is told and can draw another view.
A plugin interface that crashes no longer breaks the screen. Claude Code shows its own interface instead and keeps your session running. Plugins now get a teammate's real id and model when they launch agents. The claude auth status command now exits right away with code 0 or 1 after printing your login status. Stale or overdrawn content in scrolled boxes is fixed. A plugin view that crashed while drawing is no longer applied again.
Written by our agent from the shipped bundle, not by Anthropic.
find commands are allowed without askingPermissions & safetyPermission decisions gain an optional hook field, which plugin tool.check hooks can set, and rules inside nested commands are now found
claude plugin eval tests folder marketplace plugins from where sessions load themEvaluating an installed plugin from a folder marketplace now runs it from that folder, or stops with an error if the folder no longer lists it
ExtensionsWant the reasoning? Read walks the 8 entries that probably matter to you, each one opening to what changed and why.
Read this release → Every row →Anything you can use today, anything that visibly changes, and anything worth poking at. One line each, open for detail.
A new ui_read_selection request lets a plugin's $.ui.selection read text the user has selected in an attached client
When a plugin's on-screen UI throws an error, Claude Code now catches it, draws its own UI instead and lets the plugin recover
Unclear It is not clear whether ui.fault handlers are behind a rollout switch or reachable only when the desktop app is the host.
Claude Code lists a new drawing slot for plugin function hooks and a new interface event for reporting faults
Unclear It is not clear what switches the new drawing slot on, or whether users can reach it at all.
A plugin function-hook capability called plugin_function_hooks_selection_read now exists, along with a new internal control message
Unclear What this capability allows and what the new control message does are both unclear.
Permission decisions gain an optional hook field, which plugin tool.check hooks can set, and rules inside nested commands are now found
Unclear How the hook name is used after it is accepted, and whether plugin hooks of this kind are on by default, is not clear.
Claude Code can detect plugin folders changed since they were last read and show a notice that the plugin was re-read from its folder
Unclear When and from where this check runs is not shown.
claude plugin eval tests folder marketplace plugins from where sessions load them#Evaluating an installed plugin from a folder marketplace now runs it from that folder, or stops with an error if the folder no longer lists it
Unclear Whether the same error also appears elsewhere, such as when updating plugins, is not known.
Plugin-supplied text lines such as the pinned line are now described as up to 10000 characters followed by an ellipsis, not at most 4096
Unclear Whether the 10000 character limit is enforced or only described is not known.
What would fix it?
Smaller changes and internals, grouped as the pipeline found them. Nothing is dropped, it is only further down.
3 more of these are in What probably matters to you, above.
Spawned teammates record how they were started, carry a teammateId, and keep their original background and cwd even when a tool call asks otherwise
Unclear It is not clear which tools' inputs these resets apply to.
How long startup waits for plugin hook modules now depends on an extra check, and a rollout answer that arrives late is logged and handled
Unclear The name of the rollout switch and what the new checks test are not known.
Starting a named teammate now goes through a plugin's agent-launch hook, which can block, rewrite or retype it
In the terminal interface, a pane's header now has two separately sized mouse grab areas, one at the left edge and one just past the close mark
Unclear It is not clear what the two grips are meant to do differently, or why the header was split this way.
Folder-based plugins now get a note on update, extra lines in /reload-plugins output, and file watching that follows the real path
Unclear The exact conditions under which the note appears are not settled.
A pane's tab strip, body and close button are now laid out in separate boxes, with scrolling handled differently and a spacer row in some cases
Unclear What a reader would actually see differently is not known.
tool.check hooks get an extra input when a PreToolUse hook asks for permission#When a PreToolUse hook has asked for permission, plugin tool checks are now built with that hook's ask passed in as an extra input
Unclear What the plugin check does with the hook's ask is not clear.
claude plugin list shows which folder a plugin was read from#claude plugin list now shows a "Read from:" line and folder version for plugins loaded from a folder, with matching fields in JSON output
@-mentioned files are now re-checked before being read; ones that can't be safely opened are passed as references and the model is told why
Unclear It is not clear what makes Claude Code mark mentions as ones that could not be examined.
Plugin UI boxes with an unknown borderStyle now get a diagnostic and no border, and diff highlighting stops retrying after an error
A referenced file that was not read now shows "not read: could not be examined" when it could not be examined, and "not read" otherwise
Unclear It is not clear what makes Claude Code mark a file as one that could not be examined.
The list of choices shown after "Dismissed." now always ends with a "Dismiss" option bound to key 0
Unclear It is not clear which prompt or dialog shows this row.
Updating a plugin from the command line can now print an extra note about its folder before the result
Unclear When the folder note is set and what it says is not shown.
find commands are allowed without asking#Claude Code now asks before running some find, test, jobs and set commands that it used to treat as safe to run automatically
Unclear Exactly which find options are treated as read differently by different versions is not stated.
Code highlighting now has a work limit based on text length, nesting and embedded languages, and stops highlighting a block that goes over it
Unclear How the block is shown once highlighting is abandoned is not stated.
The two-choice feedback prompt ("That was helpful" / "Didn’t understand") is now given a dismiss action, so it can be closed without answering
Unclear It is not clear what the dismiss action does on screen, which key or click triggers it, or whether this prompt is shown to everyone.
Commands like FOO=1 cmd now get a suggested permission rule even when the command itself matches the original
Claude Code now treats find ... -rm like find ... -delete: it is not auto-allowed as read-only and is flagged as destructive
Unclear It is not clear whether the server-side setting affects the read-only pattern itself, which has -rm built in, or only the separate list of blocked options.
Claude Code now checks a shell command part by part when it splits into several commands, or when its one parsed command differs from what was written
Unclear It is not clear which commands end up as a single command with different text.
Error text from a plugin client now has its leading labels removed, and a standard message is shown when nothing is left
Unclear The exact old wording could not be read cleanly, so the precise before and after behaviour is unclear.
A link in a plugin's UI with a bad address, or on a screen that does not support links, is drawn as plain text with a diagnostic
Unclear The exact length limit and which display surfaces lack link support are not stated.
Plugin agent launches now say when required MCP servers have no tools yet, and list the available agents when the named one does not exist
Unclear What turns on the plugin hooks involved is not clear.
One of Claude Code's URL checks dropped its length limit and empty-text check and now uses shorter error messages
Unclear Which URLs go through this check is not stated, though it may be the one used for plugin URLs.
A plugin hook that was not applied now gets a warning reading "<event> hook: <reason>" instead of "<event> hook skipped: <reason>"
Unclear When a hook counts as not applied rather than skipped is not stated.
Plugin agent launches now return a teammate's real id and model, and plugin messaging and task lists find teammates more reliably
Unclear What reads the updated task list beyond plugins is not clear.
Claude Code now skips applying a plugin view whose drawing failed, and fits pane contents to the space left by the pane frame
Unclear The visible effect of the pane row calculation is not settled.
Claude Code's terminal display now tracks clipped areas while scrolling, fixing stale or overdrawn content in scrolled boxes
Unclear It is not known which specific visible glitch this fixes.
claude auth status now exits straight away after printing its result#After showing your login status, claude auth status now ends at once with exit code 0 or 1 instead of first waiting on an internal step
Unclear It is unclear what the old exit routine did besides ending the program, so other small differences on exit cannot be ruled out.
When an agent was not started by a hook, Claude Code now deletes any old record saying it was, so a reused id is not misattributed
Several small internal changes: teammate fields in the task list, a dismiss handler, a client fault pass-through and a corrected newline check
Unclear Where each of these is used, and what a reader would notice, is not known.
When a plugin hook was not applied, the notice now gives the reason directly instead of saying the hook was skipped
Unclear When a hook counts as not applied is not known.
Claude Code now expands tabs and respects the wrapping mode when measuring text width, so layout matches what appears on screen
Unclear The exact effect on how text is laid out on screen is not established.
Tab characters in output are now expanded one line at a time without breaking terminal escape codes, with the column count carried between lines
Unclear Which visible misalignment this fixes is not stated.
Plugin hook values leaving the plugin's sandbox are now copied, frozen and checked as plain data, unless isLeavingUncopied is set
Unclear It is not clear what sets the option that lets values leave the sandbox uncopied.
Claude Code has a new remotely controlled switch that counts as on when the server sends no value, and nothing yet shows what it controls
Unclear What this switch controls is not known.
Checking whether a deny rule blocks reading an attached file now uses a shared helper that also tests whether any read-deny rules exist
Unclear It is not clear whether attachments are blocked any differently than before.
Claude Code now passes clipping areas when drawing nested elements and uses one shared check to decide which text wraps
Unclear Whether a new wrap mode was added or the check was only reorganised is not known.
Plugin hook setup now registers hooks again if they were not applied and the setup is still current, and plugin source checks changed
Unclear When the re-registration happens, and how the plugin source check differs, is not known.
The code that marks in-progress work as failed when a plugin hook fails was moved into a shared helper; runaway-plugin shutdown is unchanged
Unclear It is not known whether the new helper changes what happens when a hook fails.
When Claude Code asks an interface host a question, a failure now comes back with a reason instead of an empty result
Unclear What uses these failure reasons is not shown.
The description of plugin pop-up notifications now tells apps to expect them at no fixed rate, instead of 2 seconds apart
Unclear It is not known whether the 2 second spacing itself was removed or only dropped from the description.
Teammate records gain a field for how they were spawned, and the agent.spawn hook gains an entry for an argument that was not applied
Unclear Nothing shown here reads either new field, so whether they change any behaviour is unknown.
Teammates running inside Claude Code now carry a spawnedWith record of how they were started
Unclear It is not shown what reads this field, or whether it is used to restore or resume teammates.
Anthropic has not published official notes for v2.1.289 yet. This section updates automatically when the entry appears in the upstream changelog. Everything else on this page came out of the bundle instead, which is why the two lists don't match.
No change to the system prompt since v2.1.288.
Claude Code, interactive mode
103 documentation changes were recorded within 24 hours either side of this release, nearest first. The closest 12 are below. They're here because they happened near this release in time. That's not a claim that this release caused the edit, or that the page documents anything in it.
The 11 literal strings found in the bundle, with the number of entries that name each one. Picking one searches for it. A name is here because this build's code mentions it, which is not the same as it working or being finished.
What's wrong with this entry?