# Claude Code 2.1.304: what's new

Canonical URL: https://zero2vibecode.com/blog/claude-code-2-1-304-whats-new
Date: 2026-10-20
Tags: claude-code
Source: https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md

Claude Code 2.1.304 brings new warnings for usage limits, changes to skill hooks and compaction, and removes the "(research preview)" label from `/fast` on Opus 5.5.

Version 2.1.304 covers changes from 2.1.292 to 2.1.304, focusing on usage warnings, skill hooks, and compaction improvements.

## Commands and interface
You now see the names of tools used earlier in the compaction summary when you view the transcript (`Ctrl+O`). The `/fast` dialog title on Opus 5.5 no longer has the "(research preview)" label, marking it as a stable feature. You can also use `/effort` and `/fast` in agent view to set what new sessions start with, and a bare `/model`, `/effort`, or `/fast` there opens a picker.

## Hooks and automation
Skill hooks have been changed: each source (a repo, your folder, or a plugin) can register at most 1,024 hooks and 16,384 matcher characters per session. Additionally, skills under a policy that allows hooks from plugins only no longer get their `allowed-tools` if their hooks are kept out. Prompt and agent hooks now run at most 12 of one event at a time, with the rest waiting their turn.

## Subagents and workflows
Fork subagents (`subagent_type: "fork"`) are now on by default in `claude -p`, the Agent SDK, the desktop app, and VS Code. The desktop app and VS Code always run the main conversation's subagents in the background, like the terminal does. You can also use `autoCompactWindow` in subagent frontmatter and `--agents` definitions to auto-compact earlier than the main conversation's window.

## Plugins and skills
Changes to plugins include adding `--disallow-tools` and a `disallowed_tools` case field to `claude plugin eval` to keep specific built-in tools, such as Agent, out of eval runs. A note in `/plugin` now appears if a plugin's hooks are left out because another enabled plugin has the same name. Additionally, `claude plugin validate` now advises when a plugin's README has no install line, printing the line to paste without changing the exit code, even with `--strict`.

## Models and cost
Claude Haiku 5.5 (`claude-haiku-5-5`) is now the default Haiku model on the Anthropic API, offering a 1M context at $0.10/$0.50 per Mtok ($0.50/$2.50 for prompts over 100K). You can also use `CLAUDE_CODE_AUTO_MODE_MODEL` to choose the model the client-side auto mode classifier uses, though it doesn't change the model for server-side auto mode.

## Settings
You can now turn idle compaction off or back on with the `Idle compaction` row in `/config`. Notices after an idle compaction now explain how to turn it off. Additionally, `CLAUDE_CODE_IDLE_COMPACT_MIN_TOKENS` allows you to change idle compaction's 200K-token minimum, and `"idleCompaction": false` in settings.json turns it off.

## Everything else, briefly
- Added a warning on Pro and Max plans when resuming an inactive conversation would use a noticeable share of your 5-hour usage limit.
- Added `CLAUDE_CODE_RETRY_WATCHDOG_MAX_USAGE_LIMIT_WAIT_MS` to end unattended retry mode at a usage limit that resets too far away.
- Added `CLAUDE_CODE_RETRY_WATCHDOG_MAX_WAIT_MS` to limit how long unattended retry mode waits out 429 and 529 errors.
- Added `CLAUDE_CODE_DISABLE_FILE_MENTIONS` to let Claude get the paths of `@` file mentions to read with its file tools, not the files' contents.
- Added `CLAUDE_CODE_OVERLOADED_RETRY_MAX_DELAY_MS` to set a longer maximum delay for the backoff when retrying an overloaded (529) request.
- Added `onFailure: "block"` for command and HTTP hooks to block actions if a hook can't start, times out, or exits with an unexpected code.
- Added Program Status Protocol (OSC 7501) support for terminals to show Claude Code's status.
- Added quoted text to the `/copy` picker to copy drafted messages without `>` markers.
- Added a warning to `claude plugin install`, `enable`, `disable`, and `marketplace add` when the settings file they write to does not load.
- Added a line on stderr to say what a `claude -p` run is waiting for when it stays open after its last turn.
- Added a "Backgrounding cancelled" message when stopping the turn while `←` waits for the current tool to finish.
- Added `agentType` to the `subagentStatusLine` payload for scripts to tell custom subagent types apart.

## Where the course covers this

- [Model, effort and the cost of an answer](https://zero2vibecode.com/learn/claude-code-pro/1-4-model-and-effort)
- [Models, effort and fast mode](https://zero2vibecode.com/learn/claude-code-pro/6-3-models-effort-fast-mode)
- [Workflows: a script for many agents](https://zero2vibecode.com/learn/claude-code-pro/4-3-dynamic-workflows)
- [/goal, /loop and Agent view: work that runs without you](https://zero2vibecode.com/learn/claude-code-pro/3-4-goal-loop-agent-view)
- [Plugins and marketplaces](https://zero2vibecode.com/learn/claude-code-pro/2-3-plugins)

## Read next

- [Claude Code in a dev container: three layers, and what they do not protect](https://zero2vibecode.com/blog/claude-code-dev-containers)
- [CLAUDE.md that scales: @imports, per-folder rules and what actually loads](https://zero2vibecode.com/blog/claude-md-imports-rules)

For the full list of changes, visit the [official CHANGELOG](https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md).
