Bible Network Crypto DeFi Onchain RWA AI Agent Stablecoin Chain SAFU CryptoTax DeFAI AGI Claude Me Claude Skill Claude Design Claude Cowork
Independent Media
Not affiliated with any project
Learn Claude Skills. Do Everything Better.
claudeskill-me.com
LATEST
Check Before Upgrading to Claude Code 2.1.299: Stricter MCP Allow Rules, Skill Names With Odd Characters Rejected, UserPromptSubmit Hooks Now Run First  ·  Claude Code Adds Idle Compaction: Conversations Over 200K Tokens Are Compacted After About 54 Idle Minutes — It Saves Cache Cost and May Drop Detail  ·  Fork Subagents Inherit the Whole Conversation Instead of Starting Blank — and Since v2.1.302 They Are On by Default in VS Code, Desktop and Headless Runs  ·  claude plugin eval Explained: Using the With/Without Delta (Δ) to Judge Whether a Skill Helps — and Why Δ Never Fails Your CI  ·  Claude Code Hooks Fail Open by Default: A Missing Script, a Timeout or Exit 1 Lets the Action Through — Using onFailure: "block" from v2.1.295  ·  Claude Haiku 5.5 Becomes Claude Code's Default Haiku: Input Drops to $0.10, but Crossing 100K Tokens Makes the Whole Request Five Times Pricier
practice

Check Before Upgrading to Claude Code 2.1.299: Stricter MCP Allow Rules, Skill Names With Odd Characters Rejected, UserPromptSubmit Hooks Now Run First

30-Second Version · For the impatient
All three changes replace fuzzy matching with exact matching. The direction is safer, but the failure looks silent: a skill vanishes, a rule stops allowing, and no error appears.

Full Explanation +
01 · Why did this happen?

I only use a few MCP servers. Do I need to check?

Look at two conditions: whether your allow rules or an agent's tools: list contain shorthand like mcp__name without the __*, and whether any server name contains an underscore or happens to be the prefix of another server's name. If neither applies, this change does not affect you. Running the first check command in the article will tell you.

02 · What is the mechanism?

My Skill disappeared from the list after upgrading. What now?

Check its file or folder name, not the contents of SKILL.md. If the name contains hidden characters, direction-changing characters, blank-like characters (a full-width space, for example), or < or >, it is not offered until renamed, and the name: in the frontmatter is ignored. Rename the folder to something clean and reload. A common source is a name copied and pasted from a web page.

03 · How does it affect me?

I wrote a UserPromptSubmit hook that checks prompt content. Do I need to change it after upgrading?

At minimum, retest it. The hook now runs before a slash command or skill expands, so it sees the input before expansion, and matching rules that relied on the expanded text may stop matching. The upside is that when the hook blocks a prompt, the embedded shell commands no longer run, which used to be a gap. The fastest check is to try a custom slash command that expands and contains a shell command.

04 · What should I do?

I'm not an engineer. Why don't changes like these come with a warning?

They are behavior changes: the release notes mention them, but the program does not raise an error at runtime; the settings just stop taking effect. A practical approach is to have one team member run through a list of commonly used skills and MCP tools on the first day after upgrading, rather than waiting for colleagues to report "the skill is gone" or "it's asking for permission again." If the team shares configuration files, these items are worth adding to the upgrade checklist.

Full Content +

The release notes for Claude Code v2.1.299, published October 14, 2026, list about 131 fixes, and a few of them are behavior changes: nothing errors after you upgrade, but a setting that used to work can quietly stop working or start working differently. The three below are quoted from the official release notes, with the upgrade impact drawn partly from Classmethod's write-up.

1. MCP allow rules now reach only the server they name

The official wording: MCP allow rules now reach only the server they name, so mcp__a no longer allows a server named a__b or a_; write mcp__<server>__* with the server's whole normalized name. Classmethod's account of the earlier behavior is that mcp__a also allowed a__b and a_. Agent tools: lists changed the same way, taking only the named server's tools, and a server whose name contains __ must be listed as mcp__<whole name>__*.

This has effects in two directions. First, allow rules narrowed: anyone who relied on a loose prefix to allow a whole family of servers will see those servers start prompting for permission (or being refused in headless runs). Second, the v2.1.300 notes add a fix: deny and ask rules for an MCP server (mcp__<server>) did not apply when the server's normalized name contains a double underscore. Reading that sentence (this is my inference, not the notes' wording), before v2.1.300 a deny rule you set for such a server was not blocking anything. The notes do not explain the normalization rules; for a server whose name contains underscores, copy the full name from the permission prompt or the tool list.

2. Skills and commands with odd characters in their names are no longer offered

The wording: a skill or command whose file or folder name has hidden, direction-changing or blank-like characters, or < or >, is no longer offered until renamed, and such a name: is ignored. So the skill does not error; it simply disappears from the list. The notes give no reason; my guess is that such characters let a name look like A while actually being B, which is a spoofing risk.

Chinese and Japanese users should take extra care: the notes do not list the specific "blank-like" characters, and a full-width space could fall among them, so check for those too. Plain Chinese or Japanese names are not among the restrictions the notes list, but the check command below prints every non-ASCII name, so you have to judge which ones are invisible characters.

3. UserPromptSubmit hooks now run first

Previously a custom slash command was expanded and its embedded shell command ran first, and only then did the UserPromptSubmit hook run, so a hook that blocked the prompt could not stop that shell command. v2.1.299 runs the hook first: if it blocks the prompt, neither the expansion nor the embedded shell commands run. Separately, a UserPromptSubmit hook defined in a skill's own frontmatter now first runs on the prompt after the one that invokes the skill.

Two practical effects (the first is my inference): a hook that inspects prompt content now sees the input before expansion, so matching rules that relied on the expanded text need retesting; and a hook inside a skill that was meant to intercept the very prompt that triggers it will no longer catch it.

Other changes in the same release worth a look

  • Non-UTF-8 files: Classmethod's test confirmed that Write now rejects files in Windows-1252, Shift-JIS, GBK and UTF-16BE instead of silently converting them to UTF-8. Chinese and Japanese projects that handle legacy-encoded files will hit this.
  • Plugin hooks that cannot receive input now deny: if an action cannot be handed to a plugin hook, or the hook cannot return a decision, it is now refused rather than allowed through. That is the same direction as the onFailure: "block" change discussed earlier.
  • Nesting depth: plugin hooks and workflow scripts refuse values nested deeper than 28,000 levels (Classmethod records the previous limit as 100,000).

A five-minute checklist before upgrading

  1. Find every shorthand MCP rule and write mcp__a as mcp__a__*, using the full name for servers with a double underscore:
grep -rn "mcp__" ~/.claude/settings.json .claude/settings.json .claude/settings.local.json ~/.claude/agents .claude/agents 2>/dev/null
  1. List skills and commands whose names contain non-ASCII characters or <, >, check each for invisible or direction characters, and rename the folder if so:
find ~/.claude/skills ~/.claude/commands .claude/skills .claude/commands -print 2>/dev/null | LC_ALL=C grep -nP '[^\x20-\x7E]|[<>]'
  1. If you wrote a UserPromptSubmit hook, test it once with a slash command that expands, and confirm it catches the prompt before expansion.
  2. On the first day after upgrading, run your commonly used skills and MCP tools in a real session and confirm they are still there and still allowed.
Sources: Claude Code changelog - Claude Code Docs, Claude Code v2.1.297 to v2.1.299 Major Updates - Classmethod, Claude Code Changelog (October 2026) - gradually.ai
Diagram
2.1.299 三項變嚴的匹配規則MCP allow 規則從前綴式匹配變成只對指名 server 生效;名稱含怪字元的 Skill 不再被提供;UserPromptSubmit hook 改成先於展開執行Claude Code 2.1.299: Three Matching Rules Got StricterMCP rule mcp__a, before 2.1.299server a: allowedserver a__b: allowedserver a_: allowedprefix-style matchingMCP rule mcp__a, 2.1.299 and laterserver a: allowedserver a__b: not coveredserver a_: not covereduse mcp__SERVER__* with the whole nameSkill and command nameshidden, direction-changing or blank-likecharacters, or < > in the file/folder namenot offered until renamedname: in frontmatter is ignoredno error, the skill just disappearsUserPromptSubmit hook timingbefore: expand slash command, runembedded shell, then run the hooknow: hook runs firstif it blocks, expansion and shell never runskill-level hook starts one prompt laterClaude Skill Me · claudeskill-me.com
Feel free to share. Please credit the source.
Ask a Question
Please enter at least 10 characters
Related Articles
Claude Code Hooks Fail Open by Default: A Missing Script, a Timeout or Exit 1 Lets the Action Through — Using onFailure: "block" from v2.1.295
practice · Oct 19
Your Hook Says "Blocking Error" But the File Still Changed? PostToolUse and PreToolUse Don't Actually Block the Same Way
practice · Sep 28
Why Your Claude Code Skill Silently Stops Triggering: The 15,000-Character Description Budget No One Warns You About
practice · Sep 02
What Is MCP? Understanding "USB-C for AI" and Connecting Claude to Your First External Tool
practice · Aug 29
Related News
More Related Topics