Bible Network Crypto DeFi Onchain RWA AI Agent Stablecoin Chain SAFU CryptoTax DeFAI AGI Claude Me Claude Skill Claude Design Claude Cowork
獨立知識媒體
與任何項目無關聯
學會用 Claude,每件事都做得更好
claudeskill-me.com
最新
升級 Claude Code 2.1.299 前先檢查:MCP allow 規則變嚴、Skill 名稱字元被拒、UserPromptSubmit hook 改成先跑  ·  Claude Code 新增閒置壓縮:200K tokens 以上的對話閒置約 54 分鐘就自動壓縮——省的是快取費用,丟的可能是細節  ·  Fork 子代理不再從空白開始、直接繼承整段對話——v2.1.302 起在 VS Code、桌面版與 headless 預設開啟  ·  claude plugin eval 解析:用「有裝/沒裝」的差值 Δ 判斷 Skill 到底有沒有用,以及為什麼 Δ 不會讓 CI 失敗  ·  Claude Code 的 hook 預設是 fail-open:腳本不存在、逾時、exit 1,守門員都會放行——v2.1.295 的 onFailure: "block" 怎麼用  ·  Claude Haiku 5.5 成為 Claude Code 預設 Haiku:輸入價降到 $0.10,但跨過 100K 門檻整筆請求貴五倍
practice

升級 Claude Code 2.1.299 前先檢查:MCP allow 規則變嚴、Skill 名稱字元被拒、UserPromptSubmit hook 改成先跑

30 秒速讀
三項變更都是把模糊匹配換成精確匹配,方向是安全的,但失敗的樣子是沉默的:Skill 不見了、規則不再放行,沒有任何錯誤訊息。

完整解析 +
01 · 為什麼發生?

我只用少數幾個 MCP server,需要檢查嗎?

先看兩個條件:你的 allow 規則或 agent 的 tools: 清單裡,有沒有寫成 mcp__名稱 而沒有加 __* 的簡寫;以及你的 server 名稱是否含底線,或剛好是另一個 server 名稱的前綴。兩個條件都沒有的話,這項變更對你沒有影響。用文中第一個檢查指令跑一次就知道。

02 · 運作原理是什麼?

我的 Skill 在升級後從清單裡消失了,怎麼辦?

先檢查它的檔案或資料夾名稱,而不是 SKILL.md 裡的內容。如果名稱含有隱形字元、改變文字方向的字元、看起來像空白的字元(例如全形空白),或 <、>,它在改名前不會被提供,frontmatter 裡的 name: 也會被忽略。把資料夾改成乾淨的名稱後重新載入即可。常見來源是從網頁複製貼上的名稱。

03 · 如何應用

我寫過檢查 prompt 內容的 UserPromptSubmit hook,升級後要改嗎?

至少要重測。hook 現在在斜線指令或 skill 展開之前執行,看到的是展開前的輸入,原本依賴展開後文字做比對的規則可能對不上。好處是:hook 擋下 prompt 時,內嵌的 shell 指令也不會再跑,以前這是個漏洞。用一個會展開並帶有 shell 指令的自訂斜線指令實測一次最快。

04 · 我該怎麼做?

我不是工程師,為什麼這類變更不會有警告?

它們屬於行為改變:更新說明有寫,但程式在執行時不會報錯,只會讓設定不再生效。比較實際的做法是,升級後的第一天,請一位成員拿一份常用的 skill 與 MCP 工具清單實際跑一遍,不要等同事回報「skill 不見了」或「又開始問權限了」才處理。團隊如果有統一的設定檔,更新說明的這幾項值得貼進升級檢查表。

完整內容 +

2026 年 10 月 14 日發布的 Claude Code v2.1.299 更新說明有約 131 項修正,其中幾項是「行為改變」:升級後不會報錯,只會讓原本能用的設定悄悄失效,或換了一種運作方式。下面三項引自官方更新說明,並參考 Classmethod 整理的升級影響。

一、MCP allow 規則只對指名的 server 生效

官方更新說明的原文是:MCP allow 規則改為只涵蓋它指名的 server,mcp__a 不再允許名為 a__b 或 a_ 的 server;請寫成 mcp__<server>__*,並使用 server 完整的正規化名稱。Classmethod 整理的升級前行為是:mcp__a 會連 a__b、a_ 一起放行。agent 的 tools: 清單同樣改成只取指名 server 的工具,名稱含 __ 的 server 要寫成 mcp__<完整名稱>__*。

這項有兩個方向的影響。第一,allow 變窄:以前靠「寬鬆前綴」一次放行一整組 server 的人,升級後那些 server 會開始跳權限提示(headless 下則可能被拒)。第二,v2.1.300 的更新說明另外寫了一項修正:名稱正規化後含雙底線的 server,原本的 mcp__<server> deny 與 ask 規則沒有生效。依這句話推論(這是我的推論,不是更新說明的原話),在 v2.1.300 之前,你對這類 server 設的 deny 規則其實沒有擋住任何東西。更新說明沒有解釋「正規化名稱」的規則,遇到名稱含底線的 server,直接從權限提示或工具清單裡看到的完整名稱複製。

二、名稱含奇怪字元的 Skill 與指令不再被提供

原文是:檔案或資料夾名稱含有隱形字元、改變文字方向的字元、看起來像空白的字元,或 <、> 的 skill 或指令,在改名之前不再被提供,其 name: 值也會被忽略。也就是說這個 skill 不會報錯,只是從清單裡消失。更新說明沒有說明原因;我的推測是這類字元可以讓名稱看起來是 A、實際是 B,屬於偽裝風險。

對中文與日文使用者要特別留意:更新說明沒有列出「看起來像空白」的具體字元,全形空白這類字元可能落在其中,建議一併檢查。純粹的中文或日文名稱不在更新說明列出的限制內,但下面的檢查指令會把所有非 ASCII 的名稱都列出來,需要你自己判斷哪些是隱形字元。

三、UserPromptSubmit hook 改成先跑

以前,自訂斜線指令會先展開、內嵌的 shell 指令先執行,然後才輪到 UserPromptSubmit hook,所以 hook 即使擋下 prompt,也擋不住那段 shell。v2.1.299 改成 hook 先執行:如果它擋下 prompt,展開和內嵌的 shell 指令都不會跑。另外,寫在 skill 自己 frontmatter 裡的 UserPromptSubmit hook,改成從「呼叫這個 skill 的下一則 prompt」才開始執行。

兩個實際影響(第一個是我的推論):用來檢查 prompt 內容的 hook,現在看到的會是展開前的輸入,原本依賴展開後文字做比對的規則要重測;以及,寫在 skill 裡、想攔截「觸發它的那一則 prompt」的 hook,不會再攔到。

同一個版本裡其他值得看一眼的變更

  • 非 UTF-8 檔案:Classmethod 測試確認,Write 對 Windows-1252、Shift-JIS、GBK、UTF-16BE 的檔案改為拒絕,而不是靜默轉成 UTF-8。處理舊編碼檔案的中日文專案會碰到。
  • plugin hook 取不到輸入時改為拒絕:如果動作無法交給 plugin hook,或 hook 無法回傳決定,現在會被拒絕,而不是放行。方向和前面談過的 onFailure: "block" 一致。
  • 巢狀深度:plugin hook 與 workflow script 拒絕深於 28,000 層的值(Classmethod 記載先前的上限是 100,000)。

升級前五分鐘的檢查清單

  1. 找出所有簡寫的 MCP 規則,把 mcp__a 寫成 mcp__a__*,名稱含雙底線的 server 用完整名稱:
grep -rn "mcp__" ~/.claude/settings.json .claude/settings.json .claude/settings.local.json ~/.claude/agents .claude/agents 2>/dev/null
  1. 列出名稱含非 ASCII 字元或 <、> 的 skill 與指令,逐一確認是不是隱形或方向字元,是的話改資料夾名稱:
find ~/.claude/skills ~/.claude/commands .claude/skills .claude/commands -print 2>/dev/null | LC_ALL=C grep -nP '[^\x20-\x7E]|[<>]'
  1. 有寫 UserPromptSubmit hook 的,用一個會展開的斜線指令實測一次,確認它在展開前就攔得到。
  2. 升級後的第一天,找一個 session 實際跑一次常用的 skill 與 MCP 工具,確認它們都還在、還有被放行。
資料來源: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
圖解
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
歡迎截圖分享,轉載請註明來源
提問
請至少輸入 10 個字
相關文章
Claude Code 的 hook 預設是 fail-open:腳本不存在、逾時、exit 1,守門員都會放行——v2.1.295 的 onFailure: "block" 怎麼用
practice · 10/19
Hook 明明顯示「blocking error」,檔案卻還是被改了?PostToolUse 跟 PreToolUse 的「阻擋」根本不是同一件事
practice · 09/28
為什麼裝了 Skill 卻不會觸發?15,000 字元預算爆了,Claude Code 會悄悄丟棄描述且不警告
practice · 09/02
MCP 是什麼?一次搞懂「AI 界的 USB-C」,還有怎麼幫 Claude 接上你的第一個外部工具
practice · 08/29
相關新聞
更多相關主題