bypassPermissions 是 Claude Code 的權限模式,在此模式下 agent 絕不會停下來詢問:編輯、指令、網路呼叫以及其他所有操作,只要模型決定執行就會立即運行。Anthropic 的官方建議是僅在沙盒化、可拋棄的環境中使用它。這項建議著眼於 agent 能接觸到什麼。但還有第二個問題它並未涵蓋:是誰在指揮它做事。
在你自己的沙盒中用於自己的 agent 時,bypass 是一項追求速度的設定。但對於其他人也能發送請求的 agent 來說,bypass 意味著在沒有任何人把關的情況下,把你的完整本地權限拱手讓給這些人。本文討論的正是這兩者之間的差異。
為什麼 bypass 如此吸引人
Prompt 是摩擦力的來源。在漫長的重構過程中,上百次「允許此編輯嗎?」的詢問會讓你養成不加思索就按同意的習慣。將它們關閉後,agent 感覺更像同事,而不是一張表單。許多人在有版本控制的儲存庫上執行 bypass,並且理所當然地認為:就算改壞了,一個 git checkout 就能還原。
只要滿足以下三個條件,這個推論就成立:請求是你寫的、你在看著它執行、而且沒有任何不可逆的操作在其觸及範圍內。
當換成別人提出請求時,情況有何不同
請求不是你寫的。 隊友說的「清理舊分支」對他們來說有其含意。但對 agent 來說,這代表 git branch -D。在 bypass 模式下,這兩者之間沒有任何暫停緩衝。
輸入並不可信。 請求可能附帶各種附件:螢幕截圖、記錄檔、貼上的 issue 內容。其中任何一項都可能包含看似指令的文字。透過共用輸入進行的 prompt injection 是真實存在的攻擊手法,而 bypass 移除了唯一能攔截它的檢查點。
你並沒有在看。 共用的目的本來就是讓 agent 在你不在時也能運作。原本你一秒就能回應的 prompt,變成了沒有任何人目睹的操作。
不可逆的操作觸手可及。 推送到 main、刪除、花費金額、讀取憑證。在你自己的電腦上,這些操作在一般 session 中很少出現,這也是為什麼 bypass 讓人覺得安全。然而,這些恰恰是其他人最容易意外觸發的操作。
這條界線
只有你自己會互動的 agent,且位於不存在任何不可逆操作的目錄中時,才使用 bypass。一旦 agent 與第二個人處於同一個房間中,問題就不再是「我有多信任這個模型」,而是「我有多信任能接觸到它的每個人以及每個附件」。
不越界也能維持速度
房間能讓你在該模式之上透過兩項增補功能,保有絕大部分的速度。
個別人員授權。 長期授權讓受信任的人無需逐次請求核准即可執行。agent 本身的模式在一般呼叫時依然可以維持寬鬆。請參閱 權限模式解析。
必定暫停的四項操作。 當請求來自他人時,推送到共用分支、刪除、花費金額以及碰觸憑證,即使在 bypass 模式下也會為主人停下來。上百次一般編輯無需 prompt 即可執行;唯獨那一次 git push origin main 會等待你確認。其背後邏輯請參閱 agent 執行前應一律詢問的四項操作。
實用建議
- 與他人共用的 agent:儲存庫使用
acceptEdits,探索性質的工作使用plan。對你信任的人授予權限。 - 僅供你在可拋棄沙盒中使用的 agent:使用 bypass 即可。
- 工作目錄中含有正式環境憑證的任何項目:使用
default,並為不需要憑證的部分另設獨立的 agent。 - 絕不要共用工作目錄中包含金鑰檔案的 agent。該搬移的是金鑰,而不是調整模式。
常見問題
房間會改變 bypass 在單次執行中的意義嗎? 不會。在單次執行中,bypass 依然代表沒有執行環境 prompt。房間增加的限制是誰可以啟動執行,以及無論如何都必定會暫停的四項操作。
那 Codex 的對應設定呢? 本質相同,建議也一樣:在沙盒中自己使用時可以寬鬆,但共用的 agent 則不行。
每次 push 都要 prompt 不會很煩嗎? 在一般 session 中,推送到共用分支的情況很少見。如果不罕見,那很可能是 agent 的工作目錄範圍設得太廣了。
對你快速,對其他人謹慎。這就是房間的用途。為你的 agent 建立一個房間。
發布於