--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 claude on 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 點才是重點。


工具從 42 變成 23

我用相同的問題,分別在一般模式與 --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 its default preset
(除非你在 --tools 裡逐一指定名稱,否則不能透過 default 預設組合加回來)

我實際用 echo hello 測試確認了。

條件執行結果--restricted不能--restricted --tools default不能--restricted --tools Bash Read可以(輸出 hello完全符合官方說法。** 用 default 不會恢復,但直接寫名稱就可以。

另外,指定 --tools Bash Read 時,可用的就只有這兩個。這比較像是直接點名要用哪些工具,而不是單純放寬限制。


測試方法出現的失誤

這裡是我自己的失誤。如果不寫出來,別人可能也會踩同樣的坑。

一開始我是這樣測工具清單的:

claude --restricted --tools default -p "請列出目前可用的工具。"

回傳的清單裡,竟然包含 BashWebFetch 我當下以為「這跟官方說明不一致」。

於是我直接改問:

Q: Bash 工具現在可以使用嗎。
A: 不可以  (3 次結果都一樣)

我還進一步讓它實際執行。

由於這個工作階段無法使用 shell 執行工具(Bash),因此實際上並沒有執行命令。

模型自己的說法,和實際能不能真的呼叫到工具,兩者是有落差的。 如果只是讓它列清單,它會把實際碰不到的東西也列進來。

我以前也用過同樣的方法寫過文章。 那次是因為環境變數切換後結果很明確,所以沒有出錯,但這種測法本身還是需要交叉驗證。 工具有沒有,最穩的方式還是直接實際呼叫確認


什麼時候用

用途就跟官方說的一樣,是在共享機器上自動執行。再加上我自己的判斷,就是這些情境:

適合的場景

  • 讓它讀取不可信程式碼。 因為不能執行命令,所以即使讀 repository 也不會發生額外動作
  • 在 CI 中執行。 不管機器上有什麼設定,行為都不會被影響
  • 想固定行為的驗證。 因為不讀設定,所以不會把本機 47 個技能混進結果裡

不適合的場景

  • 日常開發。 MCP、技能、子代理都會失效,等於退回純粹的 Claude Code
  • 以技能為前提的工作。 Skill 工具雖然還在,但沒有可呼叫的內容

總結

  • Claude Code 2.1.248 加入了 --restrictedCLAUDE_CODE_RESTRICTED=1 也一樣)
  • 工具從 42 降到 23(少了 45%);除了 Bash / PowerShell / WebFetch 之外,還有
    官方沒提到的 Workflow / Monitor / LSP / 8 個 MCP 工具也一起消失
  • Write / Edit / Agent / WebSearch 仍然存在。 它不是唯讀模式
  • 47 個自製技能會變成 0 個。 只要不讀使用者設定,~/.claude/ 底下的內容就全都不會被讀到。
    Skill 工具還在,但沒有可呼叫的對象
  • 可以用 --tools 把名字點名加回來,但 default 預設組合不行(與官方說法一致)
  • 工具到底有沒有,別只問模型,直接實際呼叫確認才準。 自述內容可能會不準

對於有很多技能或子代理的人來說,這個模式下幾乎什麼都不剩。 這正是它的用途,所以算是正常行為;但如果先理解成「這是安全模式」而不是「本機資產會先全數消失」,比較不容易出意外。


參考資料

※ 引用內容保留原文與日文翻譯並列。為了可讀性,翻譯略有調整,請以原文為準。

相關文章


JQIT 的工程師 95% 以上都是從無經驗錄用的。
如果有興趣,也歡迎來公司網站逛逛。

公司網站

我們也有工程師招募。若你有興趣,歡迎看看。

招募網站


原文出處:https://qiita.com/jqit_suwa/items/4183a8e97738ba45f435


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝14   💬4  
213
🥈
我愛JS
💬1  
6
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
📢 贊助商廣告 · 我要刊登