MCP: Overflow Protection for Misbehaving Servers #
New
New safeguards automatically disconnect MCP servers that produce excessive non-protocol data, preventing unbounded memory growth:
HttpBodyOverflowError: An HTTP SSE transport disconnects when a response body exceeds the size limit without an SSE event boundary. The server is likely returning logs or non-protocol data in the response stream.StdoutOverflowError: A stdio transport disconnects when the server writes too much to stdout without a JSON-RPC message boundary. This catches servers writing debug logs to stdout instead of stderr.
Both errors produce a clear diagnostic message including the size at which disconnection occurred.
Evidence
New error classes (search for "without an SSE event boundary" and "without a JSON-RPC message boundary")
Synced Project Memory (Renamed from "Org Memory") #
New
"Org memory" is renamed to "Synced project memory" throughout the CLI interface. The /config panel now shows:
- "Synced project memory (this directory; applies next session)"
- "Synced project memory writes (enable reads first)"
- "Synced project memory writes (this directory; applies next session)"
File-write warning messages, notes in edited files, and error messages related to memory stores have all been updated to use the new name. Behavior is unchanged.
Evidence
UI label changes (search for "Synced project memory (this directory")
Pricing Records: canonicalModel and provider Fields #
New
Two new optional fields appear in per-model usage/pricing records:
canonicalModel: The canonical model ID used for the pricing lookup (e.g., claude-opus-4-7). May differ from the raw model string when provider-specific IDs or aliases are in use.provider: The API provider that served the model: 'firstParty', 'bedrock', 'vertex', 'foundry', 'anthropicAws', 'anthropicGoogleCloud', 'mantle', 'gateway'.
These fields are useful for hooks and third-party cost tracking tools that need to normalize model identifiers across providers.
Evidence
New schema fields (search for "Canonical model id used for the pricing lookup")
Backgrounded Session Messages Improved #
New
When a conversation is backgrounded, the terminal now shows more actionable messages:
- Backgrounded by the system:
"Your conversation moved to the background — enter opens it · esc returns to it · ctrl+c twice quits" - Backgrounded and detached from terminal:
"Your conversation was backgrounded — resume it with: claude --resume <sessionId>"
These replace the less informative prior messages.
Evidence
New message strings (search for "Your conversation moved to the background")
Permission Mode Race Condition Handling #
New
When auto-mode is active and a classifier call completes after the permission mode changes, Claude now falls back gracefully to manual approval with a clear message: "Permission mode changed while the auto-mode classifier call was queued — falling back to manual approval under the current mode".
Previously this edge case could lead to unexpected behavior.
Evidence
New warning string (search for "Permission mode changed while the auto-mode classifier call was queued")
Env Var Allowlist Greatly Expanded #
New
The internal list of "Claude-aware" environment variables has been expanded from a small set to over 80 named variables. This list is used by the hooks system to determine which env vars hooks may set or modify.
A new secondary set (Lvh) covers privacy-sensitive variables (DISABLE_TELEMETRY, DO_NOT_TRACK, DISABLE_ERROR_REPORTING, CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC) that hooks may only write when the caller has elevated trust.
This does not change how users configure Claude Code; it tightens the security boundary around which env vars hooks can inject.
Evidence
Expanded allowlist (search for "CLAUDE_CODE_DISABLE_BUNDLED_SKILLS" in env var set)
Observer Activity Digests: guidance-loaded and skills-discovered Events #
New
Observer activity digests now include two additional event types:
<guidance-loaded path="...">...</guidance-loaded>: emitted when Claude reads CLAUDE.md or similar guidance files<skills-discovered dir="..." names="..." />: emitted when skills are discovered in a directory
These give observer agents fuller context about what the observed agent has loaded, improving the quality of observer reports.
Evidence
New event types in digest builder (search for "guidance-loaded" in activity digest format)
Forked Skill Resume Security Hardened #
New
When a session resumes and picks up a forked-skill agent, the resumption path now validates:
- The scoping record file (
.forked-skill.json) must be present and parseable - The record must name the same skill as the agent's task record
- For cold restarts, a provenance-marker witness (
.forked-skill.marker.json) must also be present and corroborate the fork identity
If any check fails, the agent refuses to resume and logs a clear error rather than running without its intended permission scoping. This prevents forked-skill agents from running with wrong or missing permission boundaries after a restart.
Evidence
Resume validation guards (search for "refusing to resume it without the skill's permission scoping")
MCP XAA (Cross-Account Authentication) via JWT-Bearer #
New
New infrastructure for MCP servers that require enterprise cross-account OAuth authentication. The flow:
- Performs Protected Resource Metadata (PRM) discovery against the MCP server URL
- Exchanges an identity provider ID token for an intermediate JWT Authorization Grant (ID-JAG)
- Exchanges the ID-JAG for an access token at the authorization server via the
urn:ietf:params:oauth:grant-type:jwt-bearer grant type
ID tokens are cached in user config keyed by normalized IdP URL. This is infrastructure for enterprise MCP authentication scenarios; end users will see this flow when their MCP server requires cross-account auth.
Evidence
New XAA implementation (search for "XAA: PRM discovery failed")
Ink Tree Depth Cap (Crash Prevention) #
New
Extremely deeply nested React/Ink component trees no longer cause a stack overflow crash. Instead, Claude Code now logs a warning at MAX_TREE_DEPTH and continues rendering the subtree as empty rather than recursing further.
Evidence
New depth guard (search for "ink tree walk stopped at MAX_TREE_DEPTH")
Hook Timer: Stamps All Messages #
New
The hook timer description changed from "Stamp each assistant message with its arrival time" to "Stamp each message with its arrival time", reflecting that the stamp now applies to both user and assistant messages in the hook payload.
Evidence
Description update (search for "Stamp each message with its arrival time")
ultrareview Note Tracking #
New
When /ultrareview is launched with a note (e.g., /ultrareview focus on the auth changes), the note is now recorded at launch time and included in the review results presentation:
> "This review was launched with a note, recorded at launch time: "...". The cloud review did not see the note — it ran a standard review of the diff. When presenting these findings, prioritize and relate them to that note."
Previously the note was not tracked and findings were presented without relation to the user's original intent.
Evidence
Note tracking in ultrareview (search for "This review was launched with a note, recorded at launch time")