Follow Discord
Sweep 22 Oct 2026 · 04:32Z Build v2.1.308 527 read Stable v2.1.308 Latest v2.1.308 Next v2.1.308 Feeds RSS JSON llms.txt llms-full.txt Unofficial

Claude Code v2.1.248 ·

Command and skill names are escaped everywhere they are echoed back

Command and skill names from plugins or MCP servers are escaped everywhere, always on.

You'll notice Improvements
JSON All of v2.1.248
You'll noticeTier: how much it should matter to you
4Useful: my rating, 1 to 5
3Signal: worth watching, 1 to 5
Slash CommandsArea: what it touches
ImprovementsKind: in v2.1.248,
What probably matters to youSection of the release
What

Slash command and skill names now go through a single escaping helper wherever they appear in text that reaches the model or your terminal, so a name supplied by a plugin or MCP server cannot inject markup, control characters or instructions. This is always on, with no flag or setting to disable it.

Details
  • Applies to unknown-command errors, the refusal "This skill can only be invoked by Claude, not directly by users.", and the coordinator-mode skill refusal along with the subcommand and allowed-tools lists it prints.
  • Warnings for a stacked slash command that is blocked or fails to load are escaped too, including the message "Stacked skill /${St(k.name)} blocked by UserPromptExpansion hook".
  • Failures in JSX-based local commands render their stderr through a formatter given the command name and session, instead of dumping the raw thrown value.
Evidence

Stacked skill /${St(k.name)} blocked by UserPromptExpansion hook, This skill can only be invoked by Claude, not directly by users. Ask Claude to use the "

Strings lifted out of the shipped bundle, so the claim above can be checked against them.

See this entry in the whole of v2.1.248 →

Feedback