Skip to main content

Claude Code v2.1.301: Usage-Limit Wait Cap for Unattended Retries, Vim % Motion, and Classifier Telemetry

Claude Code v2.1.301 lets unattended retry mode stop at distant usage-limit resets, adds the vim % motion and auto mode classifier fields in OpenTelemetry, and fixes worktree, sign-in, search and VS Code issues.

Claude Code v2.1.301 is a large release with 51 changelog entries. It adds a cap on how long unattended retry mode waits at a usage limit, a % motion for vim mode, and OpenTelemetry fields that separate auto mode classifier decisions from permission rules. It also changes how switching to a model with a smaller context window works, adds LaTeX math rendering in VS Code, and fixes issues across worktrees, sign-in, search, workflows, and terminals.

What’s New

Usage-Limit Wait Cap for Unattended Retries

The new CLAUDE_CODE_RETRY_WATCHDOG_MAX_USAGE_LIMIT_WAIT_MS variable lets unattended retry mode (CLAUDE_CODE_RETRY_WATCHDOG) end a request at a usage limit that resets too far away, instead of waiting for the reset.

Vim Mode: % Motion and Escape Fixes

Vim mode gains the % motion, which jumps to the matching bracket on its own or together with d/c/y. Vim mode also no longer sometimes stays in INSERT after Escape on a slow or busy machine, and the AskUserQuestion free-text field now supports vim NORMAL mode, so Esc cancels only from NORMAL instead of discarding a typed answer.

Auto Mode Classifier Details in OpenTelemetry

OpenTelemetry tool_decision events now include classifier_verdict and permission_mode, so auto mode classifier decisions can be told apart from permission rules. When OTEL_LOG_TOOL_DETAILS=1 is set, they also include classifier_category, naming the built-in rule a classifier block matched.

Switching to a Model with a Smaller Context Window

When you switch to a model with a smaller context window, a conversation too long for the new model is now summarized by the previous model first. A related fix closes a case where such a switch could spend usage credits on that summary without asking first.

fable and best Alias Fallback

When the newest Fable model is not available to your organization, the fable (and best) model alias no longer errors on the Anthropic API; Claude Code now retries once on the previous Fable model.

Mod API Changes

  • A mod’s Input accepts rows for a multi-line text field in the terminal, where Enter submits and Shift+Enter or a backslash before Enter starts a new line.
  • A mod hook’s .catch handler now runs only when the hook throws or times out; events raised beneath the hook’s own calls skip that hook without asking its .catch.
  • $.env.set now resolves with {} once the variable is set or unset, or with { deny } saying why when the write is not made.
  • In VS Code and the desktop and mobile apps, a tree drawn above the question dialog can now hold Markdown and up to 48 rows; the terminal keeps 12 plain rows.

Claude’s responses in VS Code now render LaTeX math, including $$ and multi-line \[ … \] blocks and inline $…$ and \(…\) math. Pro and Max plans also get a “Get more usage” link on the usage-limit banner in the VS Code and JetBrains panels.

Fixes and Improvements

  • Worktrees: Quitting no longer removes a worktree made by a WorktreeCreate hook without asking when it may hold unpushed commits.
  • Search and Read: Grep and Glob now return an error saying the search failed, instead of reporting no matches, when the search program fails unexpectedly. The Read tool no longer reads binary files such as .xlsm, .parquet, .epub and .heic as text.
  • Sign-in: A full disk that keeps the login from being refreshed now produces an error that names the disk and says to delete files, instead of a misleading “Please run /login”. Short commands such as claude auth status or claude plugin list that exit in the middle of a token refresh no longer cause refresh timeouts and unexpected sign-outs.
  • Workflows: Workflow agents no longer sometimes skip their step, with the run still reporting success, after reading the harness note that their task text carries no user authority. Workflow scripts no longer ask for permission or get refused when read, edited or re-run after a Bash cd in the same session.
  • Skills and commands: Skills and commands with very many or very long argument names no longer stall for seconds when invoked; only the first 64 names, each up to 64 characters, are now filled in. Skills are also listed to the model again after using /rewind.
  • Compaction: Conversations behind an LLM gateway whose responses name a different model than the one requested are no longer compacted over and over on a model you didn’t pick.
  • Permissions: A tool call cut off by a message sent mid-turn during its permission check is no longer reported to the model as rejected by the user, and the permission prompt for a plugin or skill hook’s ask decision now shows which plugin or skill the hook comes from.
  • Model switching: Switching to a model whose name contains application-inference-profile no longer runs your awsAuthRefresh command and delays model-switch hooks when the provider is not Bedrock.
  • Terminals: Stray characters such as >0q and >4m no longer appear in terminals built on VTE older than 0.53, such as MATE Terminal on RHEL 8, and stray GOK text no longer appears at startup in some versions of iTerm2.
  • Performance: While a long-running subagent works, its progress trail now updates incrementally instead of being reprocessed in full on every render.
  • claude-api skill: The skill now includes OpenTelemetry tracing guidance, including setting up trace destinations with the ant CLI.
  • Self-hosted runner: Sessions started from Slack can now find and attach a repository when managed settings restrict MCP servers.
  • Windows: Stopped background PowerShell commands no longer miss the closing [killed] line in their output file.
  • VS Code: A conversation that crashes or freezes the panel is no longer reopened on every reload, and the chat panel no longer slows down during long thinking.

The release contains 51 changes in total; see the full changelog for every item.

How to Update

  1. Check your installed version: claude --version
  2. Update in place: claude update
  3. If you run the self-hosted runner with managed settings that restrict MCP servers, sessions started from Slack can now find and attach repositories; use deniedMcpServers to keep those tools off.