Ultrareview Auto-Fetches Missing Branches #
New
When /code-review ultra or /review can't find the specified base branch, it now attempts to auto-fetch it from origin before failing. If fetch succeeds, the review proceeds without user intervention.
Details
- Uses
git ls-remote --heads origin <branch> to check existence, then git fetch ... refs/heads/<branch>:refs/remotes/origin/<branch>. - If the branch exists on origin but couldn't be fetched:
"<branch>" exists on origin but couldn't be fetched. Run \git fetch origin <branch>\ and try again. - If the branch name looks like a typo, Claude now suggests the closest branch:
"<name>" is not a branch in this repo. Did you mean \<suggestion>\? - Shallow clone detection: if fetch succeeds but no merge-base exists, suggests
git fetch --unshallow origin.
Evidence
"exists on origin but couldn't be fetched. Run \git fetch origin" (search for "JI_"`)
Worktree Symlink Security Check #
New
Worktree creation now rejects .claude, .claude/worktrees, and .claude/worktrees/<name> if any of them is a symbolic link, preventing path traversal outside the repository.
Error shown: Cannot create worktree: <path> is a symlink. A repository-committed symlink at .claude, .claude/worktrees, or .claude/worktrees/<name> could redirect worktree creation outside the repository. Remove the symlink and retry.
Evidence
"is a symlink. A repository-committed symlink at .claude, .claude/worktrees…" (search for "git_worktree_create_symlink_rejected")
Shell CWD Read-back Validation #
New
The shell's current working directory reported back after commands is now validated against several conditions before being trusted. Ignored cases are logged at warn level:
- Contains a dot-segment (
/./ or /../) - Is a network path (UNC path on Windows)
- Crosses a foreign automount host
- Resolves through a network symlink or junction
- Is not an absolute path
- Is not a directory (stat check)
- Is not readable
Evidence
"shell cwd read-back contains a dot-segment; ignoring" (search for "dwu")
Per-Turn Effort Control #
New
The API request builder now supports a per_turn_effort capability: when the server reports it supports per-turn effort, Claude sends an outputConfig.effort field on system-turn messages. If the server rejects this (400 with "effort parameter" and "not support"), the effort field is stripped and the model is added to a permanent blocklist for the session.
Evidence
"rejected output_config.effort; latching unsupported and retrying without it." (search for "per_turn_effort")
Cache Control Demotion on Mid-Conversation System #
New
When the API rejects cache_control on a mid-conversation system turn with an "additional properties", "unknown field", or similar error, Claude now detects this and demotes the cache breakpoint to the trailing message rather than the system block. Logged as: [mid-conv-system] proxy rejected cache_control on the api_system tail — demoting the breakpoint to the trailing message for this conversation.
Evidence
"retry:api-system-cache-demote" (search for "q9i")
Login Method Enforcement Improvements #
New
forceLoginMethod settings are now validated per-session with clearer error messages:
forceLoginMethod is 'claudeai' in <settings>; log in with a Claude.ai subscription account instead.forceLoginMethod is 'console' in <settings>; log in with an Anthropic Console account instead.forceLoginMethod is 'gateway' in managed settings; run /login from an interactive terminal to authenticate.- When
CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST is set, the login method is not enforced and a warning is logged.
Evidence
"forceLoginMethod is 'claudeai' in" (search for "_tt")
Subagent Mode Parameter Deprecated #
New
The mode parameter for the Agent tool in teammate/subagent contexts is now marked as deprecated: "Deprecated; ignored. Subagents inherit the parent session's permission mode; agent-definition frontmatter may override it." Previously this produced different error text referencing mode as unavailable.
Evidence
"Deprecated; ignored. Subagents inherit the parent session's permission mode" (search for the string directly)
MCP WebSocket Subprotocol Support #
New
MCP WebSocket connection errors now include the list of subprotocols offered by the server when relevant. The message format is (subprotocols: "proto1", "proto2") appended to connection error text.
Evidence
"(subprotocols:" (search for "Nxu")
Git Config Remote URL Parser #
New
A new native git config parser (W_s) replaces reliance on spawning git config to read remote URLs. It correctly handles quoted values, escape sequences, section headers with subsection names, and continuation lines.
Evidence
Internal function reading [remote "..."] sections (search for "W_s")
Fork Session Safety Checks #
New
/fork refuses in additional edge cases with clear messages:
- Session not yet saved:
"Couldn't fork — this conversation is still being saved. Try again in a moment." - No messages yet:
"Nothing to fork yet — send a message first." - Session started with incompatible launch flags: describes which flags prevent inheritance.
Evidence
"Cannot fork — session persistence is off, so the new session would have nothing to start from." (search for "Cannot fork")
Resume Session at Flag #
New
New CLI flag --resume-session-at=<message-uuid> for resuming a session starting at a specific point in the transcript.
Details
- Must be combined with
--resume; without it Claude Code exits immediately with Error: --resume-session-at requires --resume. - The value is the
uuid field of a specific message in the saved transcript — not a timestamp, ordinal index, or boundary marker. - When the UUID is found, the loaded transcript is sliced to include only messages up to and including that message (
messages.slice(0, index + 1)), so the resumed session behaves as if the conversation ended exactly at that point. - When the UUID is not found in the transcript, Claude Code exits with
No message found with message.uuid of: <value> and a non-zero exit code. - Available in the TypeScript SDK as the
resumeSessionAt option on the session options object; the SDK translates it to --resume-session-at=<value> in the subprocess argument list. - The flag is hidden from
--help output (.hideHelp()); the internal help string reads: "When resuming, only messages up to and including the assistant message with <message.id>".
Evidence
--resume-session-at <message id> CLI option definition and the c.messages.findIndex((d) => d.uuid === t.resumeSessionAt) slicing inside loadInitialMessages / dqf (search for "resume-session-at")
CLAUDE_CODE_TMPDIR Environment Variable #
New
New CLAUDE_CODE_TMPDIR environment variable lets you override the temporary directory used by Claude Code (defaults to os.tmpdir()).
Evidence
Z.CLAUDE_CODE_TMPDIR (search for "CLAUDE_CODE_TMPDIR")
CLAUDE_CODE_SIMPLE Environment Variable #
New
New CLAUDE_CODE_SIMPLE environment variable for enabling a simplified mode.
Details
- Activated by setting
CLAUDE_CODE_SIMPLE=1 in the environment or by passing the --bare CLI flag; both paths go through cf(), which returns true for either. - When active, the following subsystems are disabled: CLAUDE.md reading, skills discovery, plugins, syntax-highlight language packs (
hljsLanguages), hooks, MCP agent frontmatter, agent definitions, and LSP servers. - The following subsystems remain enabled in simple mode: workflows, themes, status line, file suggestions, auto-discovered MCP, Claude.ai MCP, output styles, and keybindings.
- Authentication is narrowed to the minimum: OAuth (Claude.ai login) is bypassed entirely; only
ANTHROPIC_API_KEY or an apiKeyHelper-sourced key is accepted. The normal managed-key and OAuth token paths return null. - Auto-memory (persistent write-after-turn memory) is unconditionally disabled regardless of other memory settings or the
CLAUDE_CODE_DISABLE_AUTO_MEMORY env var. - Several background startup jobs are skipped: plugin hook setup and hot-reload, session file access hooks, release-notes prefetch, and memory extraction after turns.
- In coordinator/multi-agent mode, worker tool guidance is abbreviated: workers are described as having access only to bash, computer-use, read/write tools, and connected MCP tools — the Skill and Workflow tools are omitted from the listing.
- Forking is refused:
/fork exits with "Cannot fork — this session was started with launch flags (safe or bare mode, a custom system prompt, a tool allowlist, or restricted settings) that the copy wouldn't inherit…"
Evidence
function cf() { return qt(process.env.CLAUDE_CODE_SIMPLE) || fsi("--bare"); } and the Ffg feature-disable map at ZT initialization (search for "CLAUDE_CODE_SIMPLE" and "Ffg")