Claude Code v2.1.288: Ctrl+C Draft Recovery, /code-review --max-findings, and Agents View Search
Claude Code v2.1.288 recovers prompts cleared with Ctrl+C, adds --max-findings to /code-review and name search to the agents view, and fixes resume, auto mode, plugin, MCP and permission issues.
Claude Code v2.1.288 is a large release with 89 changelog entries. It lets you bring back a prompt cleared with Ctrl+C, adds a --max-findings option to /code-review, and adds name search and group navigation to the agents view. Most of the remaining entries fix resume, auto mode, plugins, MCP, hooks and Bash permission checks, and the release also changes where the background command time limit applies.
What’s New
Recover a Prompt Cleared with Ctrl+C
If you clear a prompt with Ctrl+C, pressing Up on the empty prompt now brings the draft back, including any pasted text and images.
--max-findings for /code-review
/code-review now accepts --max-findings <n>|all to report more or fewer findings than the usual limit. Your choice is reused on later reviews until you pass --max-findings default.
Agents View Search and Group Navigation
In the agents view, Ctrl+F finds a session by name and Alt+↑/↓ jumps between groups. Both shortcuts, and rename, can be rebound in keybindings.json. Pressing Enter in the n: filter or in Ctrl+F search now opens the session whose name matches best instead of the top row.
Background Command Time Limit Only in Unattended Sessions
The background command time limit now applies only in unattended sessions (-p, Agent SDK, CI, cloud). Terminal, desktop app and VS Code sessions have no limit.
claude purge and Per-Model /autocompact
claude project purge has been renamed to claude purge; the old name still works and prints a notice. /autocompact now saves the auto-compact window per model, so each model keeps its own setting when you switch.
Auto Mode Classifier Changes
When a conversation grows too long for the client-side safety classifier to review, auto mode now compacts it instead of prompting for, or failing, every tool call. The client-side auto mode classifier also ignores an ANTHROPIC_DEFAULT_SONNET_MODEL pin that names Claude Sonnet 5.5 or Opus 5.5 and uses Claude Sonnet 5 instead.
MCP OAuth Scope and URL Prompts
Claude Code now shows a re-authenticate prompt when an MCP server asks for more OAuth scope during a tool call. URL prompts from MCP servers that can’t report when you’re done now wait for “I’m done, continue” before the tool call continues, so you can finish in the browser first.
New CLAUDE_CODE_DISABLE_STRUCTURED_OUTPUTS Variable
Session titles, memory recall and prompt hooks no longer fail on Mantle or behind gateways that reject structured outputs. The new CLAUDE_CODE_DISABLE_STRUCTURED_OUTPUTS environment variable turns structured outputs off.
Mods and Cloud Sessions
Mods can call $.ui.selection() to get the text you last selected in fullscreen mode and, when the selection lies within one transcript row, that row. Cloud sessions whose image has no GitHub CLI now get a built-in gh api, which also no longer sends control characters from file names, jq filters or GitHub errors to the terminal.
Fixes and Improvements
- Interrupted responses: Mid-response API timeouts no longer fail the turn — non-interactive sessions and subagents continue from the partial response, and thinking-only responses are retried. Unattended sessions using
CLAUDE_CODE_RETRY_WATCHDOGno longer retry for hours after a very long response stream fails; Claude Code streams again and gives up after three timeouts. - Compaction: Long conversations no longer fail with “Prompt is too long” instead of auto-compacting when the last reply reported zero token usage.
- Resume:
--resumeno longer drops files and other context that a compaction had just restored, resumed sessions save the last response of a turn, transcripts are no longer loaded cut short when the session rewrites the file during the load, and resuming a conversation started on 2.1.286 or earlier keeps the model’s earlier thinking. - Permissions: A dangerous
rm(such as one on/or the home directory) inside abash -corsh -cscript no longer runs without a prompt in bypassPermissions mode or under a shell allow rule, and aBASHPIDassignment whose value the shell would evaluate as arithmetic now prompts. Bash permission prompts also give a shorter reason when part of a command can’t be checked before it runs. - Hooks: PreToolUse and PermissionRequest hooks are no longer skipped when matching them fails or the tool’s input can’t be serialized to JSON — the call is now blocked.
idle_promptnotification hooks no longer fire while background agents are still running. - Rules and CLAUDE.md: Path-scoped
.claude/rulesand nested CLAUDE.md files now load when Write or Edit creates or changes a file in their scope, not only on Read. - LSP: LSP tool calls no longer hang indefinitely when a language server uses dynamic capability registration or stops responding; requests now time out after 60s (per-server
requestTimeout). - Plugins:
git-subdirinstalls work on git older than 2.39,claude plugin installfalls back to HTTPS for GitHub-source plugins on machines with no GitHub SSH key, plugin LSP servers receive substituted values instead of literal${user_config.*}and${CLAUDE_PLUGIN_ROOT}placeholders, and plugins loaded with--plugin-dirshow “Configure options” in/plugin. - MCP: MCP tool calls no longer sometimes run twice when a remote server’s result was over 16 MB or could not be parsed, and the Agent tool in
claude mcp serveno longer rejects every subagent_type. - Agent teams: A plugin-defined agent spawned by name now runs with its own prompt, tools, disallowedTools and effort instead of the defaults.
- Login:
/loginno longer reports “Login successful” when credentials could not be saved to secure storage; it shows the failure and offers a retry when the new login didn’t take effect. - Sandbox: Sandboxed heredocs with an unquoted delimiter (
python3 <<EOF) no longer ask for approval on every run under sandbox auto-allow when the body holds only plain text and simple$VARreferences. - Claude in Chrome: On a site you allowed, Claude in Chrome no longer asks before every screenshot and page read when auto mode is unavailable; typing, navigation and JavaScript still ask.
- Windows: The keyboard works again after Claude Code restarts itself, such as on first sign-in to a Claude apps gateway, provider setup or
/tui. - Screen reader mode: Approving a plan, including with Shift+Tab, announces the new permission mode; short announcements stay on screen until your next key press or until something above them changes; and answered questions in question dialogs say “answered”.
- VS Code: A claude.ai connector stuck on “Needs authentication” can be rechecked with Check connection in the MCP servers dialog, the opt-in New Conversation shortcut (Cmd/Ctrl+N) only starts a conversation in the view you are in, and archiving the session a chat view shows now starts a new conversation instead of resuming the next saved one.
- Self-hosted runner: A refused gh command now prints its
gh apiequivalent,--paginatefollows every page of a repository’s lists, and a nestedclaudeno longer removes the built-ingh api. - Claude Tag: Claude also follows a related Slack thread in another channel that it only read, so updates there reach the conversation that depends on them.
This release contains 89 changes in total; see the full changelog for the complete list.
How to Update
- Check your installed version:
claude --version - Update in place:
claude update - If any scripts call
claude project purge, switch them toclaude purge; the old name still works but prints a notice.