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

Claude Code 2.1.234

Claude Code now continues your session automatically when a claude.ai usage limit resets, and you can turn it off in /config. Repos with a GitLab remote and an authenticated glab CLI get an MR !N badge in the footer and statusline, a new selection:clear keybinding action clears an in-app text selection, and CLAUDE_CODE_PROJECT_DIR_NAME lets hosts pick a short name for the per-project transcript directory. Loading the built-in claude-api skill drops from ~200k+ tokens to ~25k, and /permissions and /add-dir can now be opened while Claude is working. Over 30 fixes land across permission previews and credential masking, Remote Control sync, and queued ! shell commands.

Official announcement →

This article is a summary based on official documentation.

What changed

Claude Code 2.1.234 shipped on August 17, 2026. Sessions stopped by a claude.ai usage limit now pick themselves back up when the limit resets, and GitLab support extends into the footer and statusline. The rest is convenience work on opening dialogs mid-turn, a large cut to the built-in claude-api skill’s context cost, and more than 30 fixes clustered around permissions, Remote Control sync, and terminal rendering.

New features

  • Sessions continue automatically when a usage limit resets

    Hitting a claude.ai usage limit stopped the session where it stood, and someone had to come back and restart it after the limit cleared. Claude Code now continues your session automatically when the limit resets; turn it off in /config (“Continue automatically at usage limit”).

  • GitLab merge request badge in the footer and statusline

    2.1.233 taught the --worktree flag and the claude agents view to take GitLab merge request URLs, but the state of the MR you were working on was never visible. Repos with a GitLab remote and an authenticated glab CLI now show MR !N in the footer and statusline, with draft/pending/green states.

  • selection:clear keybinding action

    Clearing a mouse text selection meant pressing Esc, which also interrupted or dismissed whatever was in progress. A key can now be bound to the selection:clear action, which clears an in-app text selection and nothing else; it also works in the agents view.

  • CLAUDE_CODE_PROJECT_DIR_NAME environment variable

    Hosts that give each session its own config directory ended up with long, unreadable per-project transcript directory names. The new optional environment variable lets them choose a short name. It applies only when set.

Key improvements

  • Built-in claude-api skill costs far less context

    Loading the built-in claude-api skill pulled in its reference docs wholesale, taking ~200k+ tokens. Reference docs are now loaded on demand, bringing it down to ~25k.

  • /permissions and /add-dir work while Claude is working

    Changing a permission rule or adding a working directory meant waiting for the current turn to finish. /permissions can now be opened while Claude is working, and rule changes apply to the rest of the current turn. /add-dir <path> can be used mid-turn too, and in the fullscreen TUI the /add-dir, /autocompact, /theme, /help, /config and /advisor dialogs open mid-turn.

  • Your own prompts render markdown in the transcript

    Only replies were rendered as markdown; the prompts you typed stayed unformatted. Your own prompts now render highlighted code blocks, inline code and lists the same way replies do.

  • /goal no longer stays armed or waits forever

    A /goal stayed armed after a turn died on an unrecoverable error (revoked auth, an exhausted credit balance, a context overflow). It now clears itself with a notice. And when background tasks keep a goal waiting for 30+ minutes, Claude checks in on them instead of waiting indefinitely — set CLAUDE_CODE_GOAL_CHECKIN_MINUTES=0 to opt out.

  • Better “API returned an empty or malformed response” error

    The error said nothing about what actually came back, leaving nothing to debug from. It now reports the content type, body kind, size and request ID, plus why the original streaming request failed.

  • Sharper auto-generated session titles

    Auto-generated titles restated the request as a sentence (“Fix the login button on mobile”), which made session lists hard to scan. They now read as short, specific names (“Login button bug”).

  • Esc in fullscreen no longer clears a mouse text selection

    In fullscreen mode, Esc dropped your mouse text selection along with interrupting or dismissing. Esc now interrupts or dismisses as usual and the selection stays highlighted.

  • Account email is for identifying you only

    Claude is now told to use your account email only to identify you, and not to send it to unrelated services unless you ask.

  • NT-namespace path rejection extended to the remaining pre-approval file accesses

    2.1.233 closed off \??\ Windows paths slipping past UNC path validation, but some file accesses that happen before approval were still open. Remote file reads, session restore, CLAUDE.md includes, workflow scripts and file uploads now reject Windows NT-namespace (\??\) paths too, hardening the rest of that NTLM credential-leak vector.

  • “Default teammate model” removed from /config

    The separate default-model setting for agent-team teammates diverged from actual behavior. It has been removed; teammates now use the leader’s model unless the spawn names one.

  • claude setup-token rejects unexpected arguments

    Extra arguments were silently ignored, so a mistyped invocation looked like it had run as intended. claude setup-token now rejects unexpected extra arguments.

  • Less noise under running tools

    Auto mode printed a redundant “Allowed by auto mode classifier” line under every Agent tool call; that line is gone. The elapsed-time counter on the running tool header is also dimmed so it no longer competes with the bold counts.

Bug fixes

Permissions & security

  • Auto mode in very long sessions repeatedly re-checking and denying sandboxed commands’ network access after the conversation had been compacted — fixed.
  • Session-scoped permission answers (including denies) being dropped when answering background subagent tool permission prompts — fixed.
  • Permission previews relaying to channel servers not admitted by the inbound trust gate — fixed; a server’s explicit permission-capability opt-out is now honored too.
  • Credential masking on relayed permission previews hiding commands, paths or destinations from the approver — fixed; oversized private-key blocks now redact under full-strength redaction.
  • Provider API tokens that mask on permission previews not masking when directly followed by shell delimiters — fixed.
  • MCP diagnostics printing resolved secrets — fixed; scope-conflict warnings now show the configured ${VAR} form, and connection-failure details show only the server origin.
  • strictKnownMarketplaces allowlists accepting SCP-style git marketplace sources whose host differs from the one git would actually connect to — fixed.
  • Trust prompts omitting the repository-wide scope warning when the directory was first seen before the repository existed there — fixed.

Rendering & input

  • Markdown rendering becoming extremely slow for some messages containing unusual Unicode sequences — fixed.
  • A --- horizontal rule in rendered markdown running into the line after it — fixed.
  • Modal text such as the /login OAuth URL losing characters when copied in fullscreen — fixed.
  • Accepting the “Try the new fullscreen renderer?” prompt restarting the session without its permission mode (e.g. --dangerously-skip-permissions), tool allow/deny rules, model or effort flags — fixed.
  • /tui dropping launch --allowed-tools/--disallowed-tools rules when it restarts — fixed; it now declines to switch, with the reason, when the session has restrictions a restart can’t carry over.
  • A cluster of queued ! shell command issues — fixed: a queued ! command being sent to the model as plain text after pressing up-arrow to edit the queued input, queued messages reappearing in the prompt history while still queued, Esc while selecting a queued message interrupting the turn, and ! mode sticking after a mid-turn submit.
  • Dialogs like /permissions opened while a ! shell command was running being dismissed when the command finished — fixed.
  • Consecutive shell commands splitting into multiple “Ran 1 shell command” rows when todo/task updates were interleaved between them — fixed.
  • An IDE diff tab closing during a permission re-prompt answering the new prompt with the previous input — fixed.

Remote Control & session connectivity

  • Files sent to the user during Remote Control sessions hosted by Claude Code Desktop or VS Code not uploading — fixed; they now open on phone and web instead of showing an empty card.
  • Signing this computer in to a different claude.ai account or organization surfacing as a misleading HTTP 404 hours later — fixed; the running session now stops within seconds and says why.
  • Remote Control sessions drifting out of sync on permission mode, model and effort — fixed; sessions started from Claude Code Desktop or VS Code keep phones and claude.ai/code updated on permission mode (and claude.ai/code on the model) as they change, and effort picks made on a phone or on claude.ai/code now apply to terminal- and Desktop/VS Code-hosted sessions.
  • The stale-token reminder leaking into Claude’s automatically resumed turn after /login while CLAUDE_CODE_OAUTH_TOKEN is set — fixed; it now appears only to you.
  • Claude Desktop inter-session messages being silently dropped by the recipient session when cross-session messaging read as disabled — fixed; this left the sender’s query “thinking” for many minutes.
  • SendMessage and ListAgents treating unseen sessions as absent — fixed; they now say when your account’s session list was too long to check completely.
  • SendMessage rejecting a recipient copied from ListAgents when the session name is at the 200-character cap or emoji-heavy — fixed.

Other fixes

  • A crash when an API response on the non-streaming fallback path (typically via third-party gateways) contained a thinking block missing its thinking field or a text block missing its text field — fixed.
  • Repository detection mis-reading the host of git remotes with unusual userinfo, producing links and repo-specific behavior for the wrong host — fixed.
  • Expired Anthropic profile credential — now points you at /login when a claude.ai login would take precedence.
  • [Windows] Startup stalling on repeated rename retries when ~/.claude.json is read-only — fixed.

Notes

  • Automatic continuation is on by default — sessions resume when a claude.ai usage limit resets. If you want a session to stay parked where it stopped, turn off “Continue automatically at usage limit” in /config.
  • Esc behaves differently in fullscreen — it no longer clears a mouse text selection. Bind a key to the selection:clear action if you want a one-key way to clear it.
  • The “Default teammate model” setting is gone — if a setup depended on it, agent-team teammates now use the leader’s model unless the spawn names one.
  • The /goal 30-minute check-in can be opted out — set CLAUDE_CODE_GOAL_CHECKIN_MINUTES=0 when long-running background tasks are expected.
  • The GitLab MR badge needs an authenticated glab CLI — a GitLab remote alone is not enough; the badge only appears when glab is authenticated.
  • CLAUDE_CODE_PROJECT_DIR_NAME is opt-in — leave it unset and per-project transcript directory names stay as they were.