Source Intelligence

DisclaimerUnofficial, and not affiliated with Anthropic. Nearly all of this is read straight out of what ships: npm bundles, captured prompts, published docs. Anthropic's own notes go in verbatim, marked as theirs. The rest is my reading, and every entry carries the strings behind it. If one looks wrong, vote it down and say why.

All releases Home olderv2.1.124 v2.1.128newer

Claude Code v2.1.126

6 entries read diff v2.1.124 → v2.1.126 Markdown

This is a small release that removes the model-specific malware-analysis system reminder previously injected into file reads, persists /effort selections to user settings so the choice survives across sessions, and extracts the streaming idle-timeout calculation into a small helper. Most of the diff is version-string churn (2.1.124 → 2.1.126); the user-visible changes are limited to those three areas.

Find
Pick an entry · j / k steps through
4 entries

Changesopen

/effort selections are now persisted to user settings#

What

Choosing an effort level with the /effort slash command now writes the value to your user settings file, so it persists across sessions and across Claude Code restarts. Previously, an /effort change only mutated in-memory session state — when you started a fresh session the selection reverted.

Usage
/effort high     # persisted to userSettings.effortLevel = "high"
/effort medium   # persisted
/effort auto     # clears the persisted effortLevel (writes undefined)
Details
  • The command now invokes the settings writer (I6("userSettings", { effortLevel: $ })) in addition to the existing in-session update.
  • If the write fails (read-only filesystem, permissions, etc.), the command returns a new error message: Failed to set effort level: <reason>.
  • The session-scoped guard for non-allowed values is unchanged: only low, medium, high, and xhigh propagate to remote sessions; other values still produce the existing "session-scoped and won't reach the remote process" warning.
  • /effort auto likewise clears the persisted effortLevel (writes undefined), so resetting works symmetrically.
Evidence

/effort command handler now persists to settings (search for the new error string "Failed to set effort level: " and the call I6("userSettings", { effortLevel"). The prior version's handler had no I6("userSettings", ...) call at all.

Strings lifted out of the shipped bundle, so the claim above can be checked against them.

Read-tool no longer injects a model-specific malware-analysis system reminder#

What

When the Read tool returned the contents of a file, prior versions appended a <system-reminder> instructing the assistant to treat any file content as potentially malware and to refuse to "improve or augment" the code while still allowing analysis. That reminder has been removed entirely, along with the per-file model tracking that decided when to inject it.

User impact:

  • File reads now produce cleaner output without an extra trailing system reminder block.
  • Models that previously received the reminder (Claude 3 Opus/Sonnet/Haiku, 3.5 Sonnet/Haiku, 3.7 Sonnet, Sonnet 4.0/4.5, Opus 4.0/4.1/4.5, Haiku 4.5) will no longer be auto-instructed to refuse to "improve or augment" code in the file. In practice this means Claude Code can edit code in files it has read without that hardcoded refusal cue in its context.
  • The model-tracking WeakMap that recorded which model read which file (qB7) is gone, as is the hardcoded model allowlist (oB_) used to gate the reminder.

For users who relied on Claude pushing back on suspicious-looking code in read files, you may notice it doing so less aggressively; behavior now derives only from the model's own training and your project instructions, not from a hardcoded reminder.

Evidence
  • The system-reminder string "Whenever you read a file, you should consider whether it would be considered malware..." was removed (search for it in v2.1.124 — present; v2.1.126 — absent).
  • The model allowlist Set(["claude-3-opus", "claude-3-sonnet", ..., "claude-haiku-4-5"]) was removed.
  • File-read formatter simplified from q = sB_(H) + iB_(H.file) + (aB_(K) ? rB_ : "") (with conditional reminder) to q = rB_(H) + iB_(H.file) (no reminder).
  • The line qB7.set(Z, M.options.mainLoopModel) that recorded the reading model per text block was removed.

Streaming idle-timeout calculation extracted into a helper#

What

The logic that decides how long the SSE/streaming HTTP layer waits before declaring an idle stream dead has been pulled into its own function. Behavior is effectively unchanged — both before and after, the timeout is the maximum of the user's CLAUDE_STREAM_IDLE_TIMEOUT_MS env var and a 300000 ms (5 minute) floor.

Details
  • Previous inline expression: Math.max(parseInt(process.env.CLAUDE_STREAM_IDLE_TIMEOUT_MS || "", 10) || 90000, 300000).
  • New helper: Math.max(Number(process.env.CLAUDE_STREAM_IDLE_TIMEOUT_MS) || 0, 300000).
  • The 90000 fallback in the old version was always dominated by the 300000 floor, so the 5-minute minimum is preserved.
  • The env var continues to behave the same: setting CLAUDE_STREAM_IDLE_TIMEOUT_MS above 300000 raises the timeout; values at or below 300000 are clamped to the 5-minute floor.

This is mostly an internal cleanup, but documented here because CLAUDE_STREAM_IDLE_TIMEOUT_MS is a user-configurable env var — its semantics are unchanged in this release.

Evidence

New function returning the timeout (search for "CLAUDE_STREAM_IDLE_TIMEOUT_MS"); call site previously had the inline Math.max(...) expression and now invokes the helper.

Strings lifted out of the shipped bundle, so the claim above can be checked against them.

Re-running an initialization step on a code path#

A second invocation of an internal initialization function was added to a top-level setup block (effectively OF(); OF(); instead of a single call). This pattern usually indicates a "the second call ensures X is reset/applied after some intervening side effect" fix. There is no user-facing string change associated with it, but it is included here for completeness because it is one of only a handful of non-version-bump structural diffs in this release.

Evidence

structural diff in the Wh6 initializer adds a duplicate OF() call after the existing OF() call.

Strings lifted out of the shipped bundle, so the claim above can be checked against them.

1 entry

Notesopen

#

  • The release notes / onboarding-version comparators were rewritten as new functions (OK5, N55, MI5) replacing the old (wK5, h55, jI5). This is a pure version-string churn artifact: each function compares the user's last-seen version to the constant 2.1.126 instead of 2.1.124. No behavior change.
  • This release does not bump any models, change any commands or flags, add any settings, or alter permission rules. If you only care about user-facing surface area, the two notable changes are persistent /effort and the removal of the Read-tool malware reminder.
Verbatim
Official · Anthropic

Anthropic’s official release notes

Published verbatim by Anthropic for v2.1.126. Text is unmodified from the upstream changelog. Everything else on this page came out of the bundle instead, which is why the two lists don't match.

  • The /model picker now lists models from your gateway's /v1/models endpoint when ANTHROPIC_BASE_URL points at an Anthropic-compatible gateway
  • - Added claude project purge [path] to delete all Claude Code state for a project (transcripts, tasks, file history, config entry) — supports --dry-run, -y/--yes, -i/--interactive, and --all
  • --dangerously-skip-permissions now bypasses prompts for writes to .claude/, .git/, .vscode/, shell config files, and other previously-protected paths (catastrophic removal commands still prompt as a safety net)
  • claude auth login now accepts the OAuth code pasted into the terminal when the browser callback can't reach localhost (WSL2, SSH, containers)
  • claude_code.skill_activated OpenTelemetry event now fires for user-typed slash commands and carries a new invocation_trigger attribute ("user-slash", "claude-proactive", or "nested-skill")
  • Auto mode: the spinner now turns red when a permission check stalls, instead of looking like the tool is running
  • Host-managed deployments (CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST) no longer auto-disable analytics on Bedrock/Vertex/Foundry
  • Windows: PowerShell 7 installed via the Microsoft Store, MSI without PATH, or .NET global tool is now detected
  • Windows: when the PowerShell tool is enabled, Claude now treats PowerShell as the primary shell instead of defaulting to Bash
  • Read tool: removed the per-file malware-assessment reminder that could cause spurious refusals and "this is not malware" commentary on legacy models
  • Security: Fixed allowManagedDomainsOnly / allowManagedReadPathsOnly being ignored when a higher-priority managed-settings source lacked a sandbox block
  • Fixed pasting an image larger than 2000px breaking the session — images are now downscaled on paste, and oversized images in history are automatically removed and the request retried
  • Fixed showing the login screen for "OAuth not allowed for organization" errors — now shows guidance to contact your admin
  • Fixed OAuth login failing with timeout on slow or proxied connections, in IPv6-only devcontainers, and when the browser callback can't reach localhost
  • Fixed a rare race where a concurrent credential write could clear a valid OAuth refresh token
  • Fixed API retry countdown sticking at "0s" instead of counting down between attempts
  • Fixed "Stream idle timeout" error after waking Mac from sleep mid-request
  • Fixed background and remote sessions falsely aborting with "Stream idle timeout" during long model thinking pauses
  • Fixed a hang where the assistant could finish thinking but show no output after a run of empty turns
  • Fixed overly fast trackpad scrolling in Cursor and VS Code 1.92–1.104 integrated terminals
  • Fixed claude.ai MCP connectors being suppressed by manual servers stuck in needs-auth state
  • Fixed Japanese/Korean/Chinese text rendering as garbled characters on Windows in no-flicker mode
  • Fixed Ctrl+L clearing the prompt input — it now only forces a screen redraw, matching readline behavior
  • Fixed deferred tools (WebSearch, WebFetch, etc.) not being available to skills with context: fork and other subagents on their first turn
  • Fixed plan-mode tools being unavailable in interactive sessions launched with --channels
  • Fixed /plugin Uninstall reporting "Enabled" instead of "Uninstalled"
  • Bounded total size of file-modified reminders when a linter touches many files at once
  • Fixed /remote-control retries appearing stuck on "connecting…" — each retry now shows its result
  • Fixed Remote Control failure notification not showing the error reason for initial connection failures
  • Windows: clipboard writes no longer expose copied content in process command-line arguments visible to EDR/SIEM telemetry; also fixes >22KB selections not reaching the clipboard
  • PowerShell tool: bare -- (e.g. git diff -- file) is no longer mis-flagged as the --% stop-parsing token
  • Fixed Agent SDK hang when the model emits a malformed tool name in a parallel tool call batch
System prompt

No change to the system prompt since v2.1.124.

Claude Code, interactive mode