--restricted 是在 Claude Code 2.1.248 中新增 的(實際測試使用的是 2.1.250)。
官方的說法是「移除命令執行類工具與 WebFetch,並將檔案操作限制在工作目錄內」。文中把它寫成是為了安全使用的模式。
但我實際測了一下,不只如此。
工具 : 42 → 23(消失 45%)
自訂技能 : 47 個 → 0 個
對於已經累積很多技能的人來說,這是一個影響特別大的模式。
驗證環境:Windows 10 / Claude Code 2.1.250 / 測量時間點:2026-08-28
官方的 CLI 參考文件這樣寫:
Use it when an evaluation harness drives
claudeon a shared machine and Claude Code must not run commands or read that machine's user and project settings.
(當評測框架在共享機器上驅動claude時使用。Claude Code 不得執行命令,也不得讀取該機器的使用者設定與專案設定。)
這是針對在共享機器上自動執行的情境。很接近 CI 或沙箱用途。
限制共有 4 項。
WebFetch--settings,不讀取使用者設定與專案設定bypassPermissions第 3 點才是重點。
我用相同的問題,分別在一般模式與 --restricted 下詢問。
claude -p "請列出我現在能使用的所有工具名稱,以逗號分隔。"
claude --restricted -p "(同樣的問題)"
少了 19 個。
消失的項目與官方說明的對應關係如下:工具名稱官方說明 Bash / PowerShell如說明所示(命令執行類)WebFetch如說明所示Workflow / Monitor / LSP / RemoteTrigger / CronCreate說明中沒有提到MCP 工具全部 8 個說明中沒有提到(整個伺服器一起消失)MCP 整體消失這件事,官方並沒有寫。 依賴 MCP 伺服器設計的人,會在這裡被卡住。
我原本以為「限制模式」會是唯讀,但並不是。
留下來的項目Write / Edit可以寫檔Agent可以啟動子代理WebSearch消失的只有 WebFetchSkill作為工具仍然存在(但後面會說明)這不是唯讀模式。 這個模式的目的,是「不要讓它執行外部命令」以及「不要讓它讀取設定」。
這裡最有感。
claude -p "請列出目前可用的技能名稱,以逗號分隔。"
在一般模式下,放在 ~/.claude/skills/ 的 47 個技能會全部出現。
ai-news-radar, cloudflare-deploy, decompose, demo-qa, demo-recorder,
fastapi-async-patterns, find-skills, gemini-api, jqit-estimate, ...
在 --restricted 下,變成這樣:
design, dataviz, artifact-design, artifact-diagramming, artifact-capabilities,
update-config, keybindings-help, code-review, simplify, fewer-permission-prompts,
loop, schedule, claude-api, workflow-authoring, run, init, security-review
總共有 17 個,但沒有任何一個是自製的。 留下來的只有內建於 Claude Code 的技能。
原因完全符合規格。不讀取使用者設定,就代表不會讀取 ~/.claude/ 底下的內容。技能和子代理都放在這裡。
以我手上的規模來說,結果如下:
~/.claude/skills/ : 47 個 → 0 個
~/.claude/agents/ : 286 個 → 不會被參照
Skill 工具本身還在。 只是沒有可呼叫的對象而已。也就是說,不是「技能不能用」,而是「技能根本不會存在」 的狀態。
--tools 可以把東西加回來,但有固定寫法官方這樣寫:
unless you name them individually in
--tools, not through itsdefaultpreset
(除非你在--tools裡逐一指定名稱,否則不能透過default預設組合加回來)
我實際用 echo hello 測試確認了。
條件執行結果--restricted不能--restricted --tools default不能--restricted --tools Bash Read可以(輸出 hello)完全符合官方說法。** 用 default 不會恢復,但直接寫名稱就可以。
另外,指定 --tools Bash Read 時,可用的就只有這兩個。這比較像是直接點名要用哪些工具,而不是單純放寬限制。
這裡是我自己的失誤。如果不寫出來,別人可能也會踩同樣的坑。
一開始我是這樣測工具清單的:
claude --restricted --tools default -p "請列出目前可用的工具。"
回傳的清單裡,竟然包含 Bash 和 WebFetch。 我當下以為「這跟官方說明不一致」。
於是我直接改問:
Q: Bash 工具現在可以使用嗎。
A: 不可以 (3 次結果都一樣)
我還進一步讓它實際執行。
由於這個工作階段無法使用 shell 執行工具(Bash),因此實際上並沒有執行命令。
模型自己的說法,和實際能不能真的呼叫到工具,兩者是有落差的。 如果只是讓它列清單,它會把實際碰不到的東西也列進來。
我以前也用過同樣的方法寫過文章。 那次是因為環境變數切換後結果很明確,所以沒有出錯,但這種測法本身還是需要交叉驗證。 工具有沒有,最穩的方式還是直接實際呼叫確認。
用途就跟官方說的一樣,是在共享機器上自動執行。再加上我自己的判斷,就是這些情境:
適合的場景
不適合的場景
Skill 工具雖然還在,但沒有可呼叫的內容--restricted(CLAUDE_CODE_RESTRICTED=1 也一樣)Bash / PowerShell / WebFetch 之外,還有Workflow / Monitor / LSP / 8 個 MCP 工具也一起消失Write / Edit / Agent / WebSearch 仍然存在。 它不是唯讀模式~/.claude/ 底下的內容就全都不會被讀到。Skill 工具還在,但沒有可呼叫的對象--tools 把名字點名加回來,但 default 預設組合不行(與官方說法一致)對於有很多技能或子代理的人來說,這個模式下幾乎什麼都不剩。 這正是它的用途,所以算是正常行為;但如果先理解成「這是安全模式」而不是「本機資產會先全數消失」,比較不容易出意外。
參考資料
--restricted 項目※ 引用內容保留原文與日文翻譯並列。為了可讀性,翻譯略有調整,請以原文為準。
JQIT 的工程師 95% 以上都是從無經驗錄用的。
如果有興趣,也歡迎來公司網站逛逛。
▶ 公司網站
我們也有工程師招募。若你有興趣,歡迎看看。
▶ 招募網站