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

Claude Code 2.1.295

Adds `onFailure: "block"` for command and HTTP hooks, so a hook that can't start or times out blocks the action, and Program Status Protocol (OSC 7501) support. Fixes every request failing on a `[1m]` model when a gateway, Bedrock, Vertex or Foundry refuses the context-1m beta, `claude -p` text output dropping earlier responses, and the terminal freezing on very long responses.

Official announcement →

This article is a summary based on official documentation.

What changed

Claude Code 2.1.295 shipped on October 8, 2026. It is a large release with more than 140 entries. It adds a way for hooks to block an action when they fail, Program Status Protocol support, and several Claude apps gateway settings. The fixes center on [1m] model requests, claude -p output, remote MCP reconnects, terminal freezes, and background sessions and /loop. The items below are a selection of the changes with the most user impact.

New features

  • onFailure: "block" for command and HTTP hooks

    A hook that couldn’t start, timed out, or exited with an unexpected code used to let the action through. With onFailure: "block", it blocks the action instead.

  • Program Status Protocol (OSC 7501) support

    Terminals that implement it can show whether Claude Code is working, waiting on you, or done.

  • Quoted text in the /copy picker

    A drafted message now copies without its > markers.

  • A stderr line for a claude -p run that stays open

    When stderr is a terminal, a line says what a claude -p run is waiting for when it stays open after its last turn.

  • CLAUDE_CODE_RETRY_WATCHDOG_MAX_WAIT_MS

    Limits how long unattended retry mode (CLAUDE_CODE_RETRY_WATCHDOG) waits out 429 and 529 errors.

  • Claude apps gateway settings

    • An optional models list on every upstream: only the listed models are sent there, on failover too, and one * in an entry is a wildcard.
    • timeouts.upstream_ttfb_ms on Bedrock, Vertex, Foundry and other cloud upstreams: a value you set now limits how long a stream may take to start there, after which it fails over or gets a 502.
    • forceLoginMethod: "gateway" and forceLoginGatewayUrl in your own user settings on machines with no managed settings, so /login opens on that Claude apps gateway.
    • upstream_request_id on the inference audit event: the request ID from Amazon Bedrock, the Anthropic API or another upstream, for support cases.
    • A request-id header on successful inference responses, so request_id in Claude Code telemetry matches the gateway’s audit log.
  • Plugin command warnings and advice

    claude plugin install, enable, disable and marketplace add now warn when the settings file they write to does not load. claude plugin validate gives advice when a plugin’s README has no install line: it prints the line to paste and never changes the exit code, even with --strict.

  • $.ui.notify and Button children for mods

    $.ui.notify raises a native notification through your own notification setting and says which channel sent it. A mod’s Button now takes children, strings and Text, so a row of a list is one pressable with a chip or a dim detail inside.

  • [VSCode] A chat row for files Claude sends you

    Click a file’s name to open it in the editor. Claude’s caption shows underneath, and the row stays visible in Focus view.

Key improvements

  • Token counts behind a Claude apps gateway on Amazon Bedrock

    /context and large file reads use these counts. The gateway now gets them from AWS’s CountTokens API instead of a one-token model request. Grant bedrock:CountTokens to use it.

  • Background requests behind a Claude apps gateway

    They now use Haiku 4.5 instead of the session’s model, falling back to the session’s model where the gateway does not serve Haiku 4.5.

  • Grep input handling

    A search sent with grep’s -l, -c or -r flag now runs instead of failing the call.

  • Status for a session waiting on a permission prompt

    Remote Control, claude.ai and the desktop app now name an MCP tool by its server and readable name instead of its mcp__server__tool identifier.

  • Failed large file uploads

    When a large file Claude sends fails to upload with no reason given, Claude is now told so that it reports the failure instead of shrinking the file.

  • Headless usage-limit warnings

    rate_limit_event usage-limit warnings now say whether the account has extra usage turned on.

  • [Cloud sessions] Catching up after a dropped connection

    Activity you missed now appears all at once instead of row by row. The setup script box in the cloud environment form also starts taller, grows with your script, and can be resized by dragging.

Changed behavior

  • MCP tool descriptions loaded through tool search

    Cut at 16,384 characters instead of 2,048.

  • Skills preloaded by subagents

    Subagents preload at most 32 skills from the skills field, each once. A subagent with the Skill tool can still invoke the rest.

  • Ctrl+C at the idle prompt of an attached background session

    It now leaves a pending /loop wakeup alone, so pressing it twice detaches and the loop keeps running. Press Esc to stop it.

  • claude agents stopped with its background service

    On macOS, or Linux without the service installed, running sessions now stop in about a minute unless it is run again, and a notice says so.

  • MCP protocol version for claude.ai connectors

    Connectors negotiate MCP protocol version 2026-07-28 by default on installs that fetch no flags. MCP_PROTOCOL_NEGOTIATION=legacy opts out.

  • WebSocket (ws) MCP servers

    A message over 16 MiB is no longer parsed and closes the connection, the limit the other transports already have.

  • Tab stops

    Tab stops count from where a text starts instead of from the screen’s left edge: an answer indented by 2 has its first stop 8 cells in, where it was 6.

  • Artifact permission prompts with telemetry disabled

    These installs now get the same five questions other installs get, instead of being asked before each read of someone else’s artifact and each data edit. Scheduled and Run now routine runs also publish new private artifacts, and update your own, without asking, as in other installs.

  • A mod denying a tool call after the tool ran

    What Claude and you read now says the tool ran and a plugin withheld its result.

Bug fixes

Models & requests

  • Every request failing on a [1m] model when a gateway, Bedrock, Vertex or Foundry refuses the context-1m beta; Claude Code now resends without it.
  • Web searches and agent hook evaluations taking much longer at xhigh and max effort.
  • Claude 3 Opus and Claude 3.x Sonnet sessions being offered tool search, which those models reject, where feature flags are unavailable.

claude -p & headless

  • claude -p text output dropping earlier responses when background work started another turn; each turn’s response now prints when the turn ends.
  • A skill’s allowed-tools and effort being dropped when the Skill tool finished before the response stream ended, which denied the skill’s Bash commands in -p runs.
  • Non-interactive sessions telling you about MCP servers that need authentication when your request doesn’t use them.

MCP

  • Remote MCP servers in headless and SDK sessions staying disconnected after an outage longer than 15 seconds, or reconnecting in a tight loop to a server that drops each connection right after it connects; repeated drops now back off, up to 30s.
  • Remote MCP connections being dropped when a server’s error reply happened to contain a network error name.
  • MCP servers that repeat a pagination cursor being asked for the same page up to 20 times at every connect.
  • CSS, JavaScript and XML files returned by MCP tools being saved as .bin, which the Read tool refuses; font and icon files now get their own extension too.
  • An interrupt not ending the turn until a timeout while Claude waited for an MCP server’s resource list.
  • Claude not being told when you stop a long-running MCP tool call from the tasks panel or a connected client.

Permissions & tools

  • Bash tool calls failing when the model passes command_description instead of description.
  • Bash permission checks for for-loops over glob patterns, improving permission-check accuracy.
  • --tools and --restricted not applying to built-in tools that register after launch, and deprecated tool names reaching tools outside the caller’s tool set.
  • A file being treated as already read after a Bash command such as cat ran without printing it.
  • Edit treating a file as fully read when its contents changed without its modification time advancing.
  • The Read tool rejecting calls with an empty pages parameter instead of treating it as omitted.
  • Claude in Chrome not applying a site deny rule written with port 80 (host:80) to plain http:// pages on that host.

Background sessions, /loop & subagents

  • CLAUDE_AUTO_BACKGROUND_TASKS moving a subagent to the background while an edit or shell command waited behind it, which started that call before the subagent finished.
  • Claude stopping at the end of the current tool when text typed in the prompt cancelled backgrounding with ←; Claude now keeps working in the foreground. A “Backgrounding cancelled” message also shows when you stop the turn while ← is waiting for the current tool to finish.
  • Esc not stopping a self-paced /loop that was moved to the background with ←; cancelling a pending wakeup now shows a notice.
  • A background session’s /loop stopping without notice when its next wakeup came due while the session’s process was down; the session now says so and Claude is told.
  • Commands and hooks in background sessions inheriting FORCE_COLOR=3, which put color escape codes into the output Claude reads.
  • A queued message being lost when pulled back into the prompt with ↑ or Esc just after ←; prompt history now keeps it.
  • Subagents in their own linked worktree being shown the parent session’s git branch, status and recent commits.
  • The prompt sent after a /rewind being lost, and the removed turns coming back, when the session was moved to the background or resumed after being killed.
  • A stopped scheduled task coming back on resume after a rewind, and a scheduled task being lost on resume after Esc or a rewind following a compaction.

Terminal display & input

  • The terminal freezing, with ctrl+c ignored, when a response ran to tens of thousands of lines.
  • The terminal freezing for seconds or minutes while syntax highlighting code with very long lines, long runs of blank lines, or unclosed strings and heredocs.
  • Replies whose quotes nest deeper every few lines freezing the terminal for seconds and using gigabytes of memory.
  • Short command output with Windows line endings (CRLF) being drawn on a single line.
  • Raw terminal hyperlink bytes in a reply or a teammate’s message being drawn as a clickable link with a hidden address.
  • Text with tabs or bidirectional control characters losing its end at the edge of the screen or drawing over nearby rows.
  • Vim mode’s ~ moving the cursor past the last character of a line, so x after it did nothing, and 3~ running on into the next line.
  • The cursor landing one character too far after pasting accented text copied from macOS (such as a file name) into the middle of the prompt.
  • /model saying a Max effort pick was saved as your default for new sessions; Max applies to the current session only.

Hooks & settings

  • An async SessionStart hook’s unchanged context being added to the conversation again on every resume.
  • Variables a SessionStart hook writes to CLAUDE_ENV_FILE not reaching the Bash tool after an in-app /resume or /branch.
  • An async hook’s JSON output being ignored when it is printed over several lines.
  • A rare failure to load managed settings at startup right after a login refresh.
  • Desktop and SDK sessions refusing to switch back to auto mode until restart after disableAutoMode was removed from settings.
  • macOS: a file count at session start that could reach other apps’ data and raise the “access data from other apps” prompt when a session starts in the home folder or above it.

Plugins & mods

  • /plugin’s Errors tab removing a marketplace that failed to load, and uninstalling its plugins, on Enter without asking first.
  • claude plugin marketplace add reporting success for a marketplace whose name no plugin can be installed under; such an add is now refused.
  • Plugin marketplaces whose repository has large git submodules failing to add or refresh; only the submodules that hold plugin files are now fetched.
  • Windows: project-scope plugins not loading in VS Code due to drive-letter casing (#74612), and plugin install and uninstall at project or local scope missing the install record, or adding a second one, when only the drive letter’s case differs.
  • claude.ai-synced plugin hooks failing with “Plugin directory does not exist” in long-running sessions after another session synced a plugin update.
  • A mod’s hook being handed a deeply nested tool input cut short with no error, so a guard could pass content it never saw.
  • /model, /fast and /output-style saving their setting without asking a plugin’s config.set hook, and changing the auto-update channel in /config saving before the hook was asked.

Claude apps gateway

  • Fable models listed in availableModels not appearing in the /model picker for sessions signed in to a Claude apps gateway.
  • CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC hiding the Claude apps gateway spend limit in /usage and the status line. The spend limit request goes to the gateway the session is signed in to.
  • The claude_code.auth OpenTelemetry login event not being emitted on Claude apps gateway sign-in.
  • The admin spend view showing a developer’s old groups and group cap after their session stopped carrying groups.

Remote Control, cloud & VSCode

  • PushNotification saying a push was not sent in claude remote-control sessions right after a phone message, without the /config toggle, or when started from inside Claude Code.
  • Files sent from remote sessions being refused as “could not be vouched for” when more than 256 were sent at once.
  • [VSCode] “Fork conversation from here” and Rewind’s conversation restore failing with “Message not found in session” after a background agent’s activity or one of the panel’s own status lines.
  • [VSCode] Ctrl+Shift+Tab, Cmd+Shift+Tab and Alt+Shift+Tab in the chat input also switching the permission mode, and Ctrl+Tab accepting the suggested prompt.
  • [VSCode] Keyboard focus bouncing between two Claude views visible at once, which could send typed text to the wrong conversation.
  • [Cloud sessions] A message sent right after unarchiving a cloud session sometimes getting no reply because no container could start for it.
  • [Cloud sessions] Some older routines starting their runs without ever giving Claude their saved prompt; those routines now run their prompt again.
  • Self-hosted runner: git fetches being cut off while the git server was still reporting progress on a large repository; CLAUDE_RUNNER_FETCH_SERVER_PROGRESS_CAP_MS tunes or turns off the wait.

Claude Tag & Code Review

  • [Claude Tag] Another app’s or bot’s @claude going unanswered in a busy channel where Claude had stopped reading untagged messages.
  • [Claude Tag] Slack’s Working status spinning on under a thread after @Claude !restart had already confirmed the restart.
  • [Claude Tag] Channel links and @-mentions in a forked thread’s “Continued from” card showing as raw Slack codes.
  • [Claude Tag] Changes and additions: the settings confirmation cards Claude posts in a Slack channel stay open for 30 minutes instead of 10; Claude Tag admin settings ask for confirmation before adding a channel manager moves that member to Custom roles, which can remove their other access.
  • [Code Review] Re-reviews saying no issues were found while earlier findings were still open; the comment now says how many remain open.
  • [Code Review] Code Review still skipping a large CLAUDE.md’s rules when the pull request edits that file.

Notes

  • If you use hooks as guards, set onFailure: "block" so a hook that can’t start, times out, or exits with an unexpected code blocks the action instead of letting it through.
  • If you run a Claude apps gateway on Amazon Bedrock, grant bedrock:CountTokens to use the new token counts.
  • If you use /loop in background sessions, Ctrl+C at the idle prompt no longer stops the loop. Press Esc to stop it.
  • If claude.ai connectors have trouble negotiating MCP protocol version 2026-07-28, MCP_PROTOCOL_NEGOTIATION=legacy opts out.
  • If you run a self-hosted runner, it no longer passes CCR_AUTO_MODE_ALLOW, CCR_AUTO_MODE_ENVIRONMENT and CCR_AUTO_MODE_SOFT_DENY into a session’s environment.
  • Max effort applies to the current session only. Picking it in /model does not save it as your default for new sessions.