Claude Code 2.1.119

💡

`/config` changes now persist to `~/.claude/settings.json`, `--from-pr` supports GitLab/Bitbucket/GitHub Enterprise, custom `prUrlTemplate`, PowerShell auto-approval parity with Bash, and a large cleanup of bugs and one security fix.

🔗 Official announcement →

This article is a summary based on official documentation.

What changed

Claude Code 2.1.119 (April 24, 2026) — /config changes survive restarts by persisting to ~/.claude/settings.json, --from-pr accepts non-GitHub providers, PowerShell matches Bash for auto-approval, and owner/repo#N shorthand links follow your git remote. Mostly a polish + bug-fix release.

New features

  • Persistent /config settings

    Theme, editor mode, verbose, etc. used to reset on restart. They now persist to ~/.claude/settings.json and participate in project → local → policy override precedence.

  • prUrlTemplate for custom code-review URLs

    The footer PR badge always linked to github.com, which was wrong for teams on Phabricator, Gerrit, GitLab, etc. prUrlTemplate points the badge at a custom review system.

  • CLAUDE_CODE_HIDE_CWD for screen recordings

    The startup logo leaked the working directory path during screen sharing. Set this env var to hide cwd in the logo.

  • --from-pr accepts GitLab / Bitbucket / GitHub Enterprise

    Previously GitHub-only. Now accepts GitLab merge-request URLs, Bitbucket pull-request URLs, and GitHub Enterprise PR URLs.

  • --print honors agent frontmatter

    Non-interactive --print ignored an agent’s tools: and disallowedTools: frontmatter, diverging from interactive behavior. Both modes now match.

  • --agent <name> honors permissionMode

    Built-in agents’ permissionMode is now respected when launched via --agent.

  • PowerShell auto-approval parity

    PowerShell tool commands can be auto-approved in permission mode the same way Bash commands can.

Improvements

  • duration_ms on PostToolUse hooksPostToolUse and PostToolUseFailure hook inputs now include duration_ms (tool execution time, excluding permission prompts and PreToolUse hooks).
  • Parallel MCP reconfiguration — subagent and SDK MCP server reconfiguration connects servers in parallel instead of serially.
  • Pinned plugins auto-update — plugins pinned by another plugin’s version constraint now auto-update to the highest satisfying git tag.
  • Vim INSERT Esc — Esc in INSERT no longer pulls a queued message back into the input; press Esc again to interrupt.
  • Slash command picker — matched characters are highlighted in the picker, and long descriptions wrap instead of being truncated.
  • owner/repo#N uses git remote host — shorthand links now follow your git remote’s host instead of always pointing at github.com.
  • OpenTelemetry fieldstool_result and tool_decision events include tool_use_id; tool_result also includes tool_input_size_bytes.
  • Status line stdin JSON — now includes effort.level and thinking.enabled.
  • Vertex AI: tool search off by default — avoided an unsupported beta header error. Opt back in with ENABLE_TOOL_SEARCH.

Notable fixes

Input / paste

  • CRLF pastes adding blank lines — Windows clipboards and Xcode console pastes no longer insert an extra blank line between every line.
  • Kitty keyboard protocol + bracketed paste — multi-line pastes no longer lose newlines.
  • @-file Tab completion in slash commands — absolute paths no longer replace the entire prompt.
  • Stray p at startup prompt — fixed in macOS Terminal.app via Docker or SSH.

Tools / permissions

  • Glob and Grep disappearing when Bash is denied — fixed on native macOS/Linux builds.

UI / session

  • Scroll-snap-to-bottom on tool finish — fullscreen mode no longer snaps back every time a tool completes.
  • Rewind overlay “(no prompt)” — messages with image attachments show the actual prompt.
  • Auto mode overriding plan mode — conflicting “Execute immediately” instructions no longer bypass plan mode.
  • Verbose setting not persisting — fixed (paired with /config persistence).

MCP / OAuth

  • HTTP MCP OAuth discovery — non-JSON bodies no longer fail with “Invalid OAuth error response.”
  • ${ENV_VAR} in MCP headers — now substituted before requests for HTTP/SSE/WebSocket MCP servers.
  • --client-secret + client_secret_post — stored secret is now sent during token exchange for servers requiring it.
  • Plugin MCP servers on Windows — now spawn when the plugin cache is incomplete.
  • Disabled MCP servers labeled “failed” in /status — fixed.
  • Plugin MCP servers with optional ${user_config.*} left blank — no longer fail.

Hooks and slash commands

  • Async PostToolUse hooks with no response — no longer write empty transcript entries.
  • /skills Enter — now pre-fills /<skill-name> instead of closing the dialog.
  • /agents detail mislabels — built-in tools unavailable to subagents are no longer shown as “Unrecognized.”
  • /export model label — shows the model the conversation actually used, not the current default.
  • /usage progress bar overlap — no longer collides with “Resets …” labels.
  • /plan and /plan open — now act on the existing plan when entering plan mode.
  • /reload-plugins / /doctor errors for disabled plugins — no longer reported.

Agents / resume

  • Stale worktree reuseAgent tool with isolation: "worktree" no longer reuses worktrees from prior sessions.
  • Skills re-executing after auto-compaction — skills invoked before compaction no longer fire again against the next user message.
  • TaskList sort order — tasks now return sorted by ID instead of filesystem order.
  • Orphaned subagent notifications — no longer leave the spinner on.

Miscellaneous

  • False “rate limit exceeded” hints — fixed when gh output contained PR titles mentioning “rate limit.”
  • SDK/bridge read_file size cap — now enforced correctly on growing files.
  • Worktree PR linking — PRs are now linked to the session when working in a worktree.
  • /doctor MCP override warnings — fixed for entries overridden by a higher-precedence scope.
  • Windows cmd /c wrapper warning — false-positive removed.
  • [VS Code] voice dictation first recording — macOS microphone permission prompt no longer eats the first recording.

Security

  • blockedMarketplaces — now correctly enforces hostPattern and pathPattern entries.

Notes

  • /config changes now persist. If you deliberately used different settings per project, manage them via project-level settings.json.
  • prUrlTemplate is a template string with placeholders like {owner} / {repo} / {number} (see official docs). Set it once for your internal review system.
  • Vertex AI users: tool search is off by default starting 2.1.119. If you relied on it, set ENABLE_TOOL_SEARCH=1.
  • If you previously hit extra blank lines pasting CRLF text from Windows or Xcode, that’s fixed in this release.