Claude Code v2.1.238: Plugin Marketplaces Can Mint Their Own Auth Headers#
Published by Alex Sorokoletov
Part of the Claude Code Version Tracker series. | Official Env Vars | Official Changelog
Coming from v2.1.237, a v2.1.238 user can install plugins from a private marketplace that sits behind short-lived auth. A headersHelper command on a URL marketplace or a catalog entry mints HTTP headers (for example a token good for a few minutes) that Claude Code attaches to catalog reads and same-origin archive downloads.[1]
The helper runs only when you install or update that plugin, after its command is shown to you, and claude plugin install/update prompt [y/N] (or take -y). The rest of the release is a long list of fixes, with a large Remote Control reliability pass and a memory-growth fix for long sessions.
How the headers helper is wired#
Claude Code runs the helper through the same guarded path used for other config-resident commands, and it hands the helper a small, fixed environment. A marketplace helper receives CLAUDE_CODE_MARKETPLACE_URL (and CLAUDE_CODE_MARKETPLACE_NAME when the marketplace is named); a plugin helper receives CLAUDE_CODE_PLUGIN_NAME and CLAUDE_CODE_PLUGIN_ARCHIVE_URL. When the source is not operator-authored (a project .mcp.json, a plugin, or an agent file rather than managed settings), inherited credential env vars are scrubbed before the helper runs, so a repo-checked-in helper cannot read your tokens. Headers it emits are filtered too: request-routing and client-identity header names are dropped from non-operator sources, and malformed names or values are rejected. The helper string itself must be printable ASCII with no long runs of spaces and short enough for the install-consent UI to display in full.
| Variable | What It Does |
|---|---|
CLAUDE_CODE_MARKETPLACE_URL | Set in the environment of a marketplace headersHelper command when Claude Code fetches that marketplace's catalog, alongside CLAUDE_CODE_MARKETPLACE_NAME. The helper reads it to mint headers scoped to that URL; results are memoized with an expiry so the command is not re-run on every fetch. New in v2.1.238. |
CLAUDE_CODE_PLUGIN_ARCHIVE_URL | Set in the environment of a plugin's headersHelper command at install or update time, together with CLAUDE_CODE_PLUGIN_NAME, so the helper can mint headers for the archive download. Runs only when you install or update that plugin, never during catalog browsing. New in v2.1.238. |
MCP_DISCOVERY_CACHE_STRIKES | Overrides the strike count that governs the MCP discovery cache (used with MCP_DISCOVERY_CACHE_TTL_S and MCP_DISCOVERY_CACHE_MAX_STALE_S). When set above zero it replaces the built-in default; otherwise the default applies. Paired with a reworked gate, tengu_mcp_discovery_cache_enable. |
CLAUDE_CODE_ADOPT_UNDERIVABLE_PARKED_PERMISSION | In print/SDK mode, when a host reconnects and a permission prompt was left parked with no persisted answer that can be rederived, adopt that prompt and retire the interrupted turn's tool-use IDs instead of re-running the tool call. Works with the hold/retire parked-permission flags. |
CLAUDE_CODE_SILENT_TURN_REMINDER_TEXT | Overrides the text of the silent-turn reminder (the nudge injected after turns that produce no output). Falls back to the tengu_hushed_lark_text gate value, then a built-in default. Companion to the existing enable/turns knobs. |
Fixes that change day-to-day behavior#
Two fixes stand out for long-running use. Interactive sessions no longer grow memory without bound: a subagent's tool results are released once they scroll past the recent display window. And custom, project, and plugin output styles stop drifting back to the default voice partway through a session. A smaller one restores CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION=true when your account is near, but not over, its usage limit.
Remote Control got the heaviest attention. A session whose process crashed can be reused the next time you message it instead of staying dead until restart; brief HTTP 403 refusals from a VPN or proxy are tolerated for up to three minutes before the blocker is named; model picks made on a phone or the web now update the terminal; messages sent mid-turn from web or Desktop no longer vanish after the turn ends; and ListAgents/SendMessage now work from claude remote-control and Desktop/IDE hosts, while hiding the pre-warmed idle worker until a task claims it. On the MCP side, stdio servers no longer get a server/discover before initialize, so lazy servers stop booting their backend on every session open.
Editing keys, readline style#
A new keybindingFlavor setting under /config chooses how the prompt's editing keys behave. Set it to "readline" and Ctrl+W deletes back to the previous whitespace, matching Bash and other readline programs; the default "classic" keeps deleting the previous word. Separately, Ctrl+L and Cmd+K in fullscreen now always just repaint, and the old double-press /clear shortcut is gone, so 1-row terminals no longer trigger runaway /clear loops.
What these tell us#
The marketplace work makes private plugin distribution practical without baking secrets into config: the helper mints credentials on demand, the environment it sees is minimal and scrubbed for untrusted sources, and the headers it can set are filtered so a repo cannot rewrite request-routing or identity. That is a distribution-security posture, built around per-install consent.
The artifact collaboration surface first seen (unannounced) in v2.1.221 keeps growing, and again with no changelog mention. A new CLAUDE_CODE_ARTIFACT_ROOM variable and an tengu_artifact_verify gate both first appear in v2.1.238, next to new prompt strings that tell the model to check its own published output: "After publishing, never claim the page works without observing it," and that an empty viewer result "can mean no viewer has loaded the version yet, which is NOT evidence of a clean render." The feature is gated and absent from the release notes, the same quiet-then-announce pattern the comment threads followed.
This analysis is conducted for educational and research purposes under fair use principles. All trademarks and software referenced belong to their respective owners.
Sources#
- Claude Code Official Changelog, v2.1.238 release notes
Related Versions#
- Claude Code v2.1.221: Sandbox Credential Masking, a Bash Permission-Bypass Fix, and Silent Artifact Comment Threads. Masked credential reads, zsh
[[ ]]bypass fix, artifact comment threads. - Claude Code v2.1.219: Opus 5 Becomes the Default Opus Model. New flagship, native 1M context, per-machine dispatch switch.
- Claude Code v2.1.218: Quieter Reviews, a Guard on Team Memory, and Two Knobs the Notes Skip. Review noise controls, memory write guard.
- CLAUDE_CODE_EXPERIMENTAL_OBSERVER_AGENTS: The Undocumented Observer Agents Flag. Background observer paired to an agent, shipped silently in v2.1.200.
Previous Claude Code analysis: v2.1.237 (August 20, 2026)
Next Claude Code analysis: v2.1.241 (August 24, 2026)
All 63 Claude Code analyses: Claude Code Version Tracker · Official Claude Code changelog