管理核准與權限
Visual Studio Code 中的代理程式可以執行工具與終端機命令來完成工作。為了讓您掌握主動權,VS Code 會在代理程式執行修改檔案、執行命令或存取外部資源的操作之前,先徵求您的核准。
本文說明如何設定代理程式的權限層級、管理工具與網址核准、自動核准終端機命令,以及將代理程式命令放入沙箱。如需有關在對話中使用工具的資訊,請參閱在對話中使用工具。如需這些控制項存在原因的背景資訊,請參閱信任與安全性。
VS Code 提供了數個控制項來管理代理程式可以執行的動作。權限層級是工作階段的高階調整旋鈕,而其他機制則可讓您對特定動作進行精細控制。
| 機制 | 控制項目 | 關鍵設定 |
|---|---|---|
| 權限層級 | 工作階段的代理程式整體自主性 | chat.permissions.default |
| 工具核准 | 個別工具何時可以執行 | chat.tools.eligibleForAutoApproval 此設定可由您的組織管理。請聯絡您的管理員以進行變更。 |
| 網址核准 | 存取特定網址與網域 | chat.tools.urls.autoApprove |
| 終端機命令核准 | 哪些終端機命令會自動執行 | chat.tools.terminal.autoApprove |
| 沙箱化 | 代理程式命令的檔案系統與網路存取 | chat.agent.sandbox.enabled 此設定可由您的組織管理。請聯絡您的管理員以進行變更。 |
權限層級
權限層級是用來控制代理程式在工作階段期間擁有多少自主權的高階控制項。它們凌駕於本文其餘部分所述的更精細核准設定之上,例如工具核准、網址核准和終端機命令自動核准。
從對話輸入區域中的權限下拉式方塊選取權限層級,以選擇如何處理工具呼叫與核准。
權限層級適用於目前的對話工作階段,且可以隨時變更。新的工作階段會以預設權限層級開始,您可以透過 chat.permissions.default 設定進行設定。
輔助權限為實驗性功能,僅適用於在代理程式主機上執行的代理程式。若要在權限選擇器中顯示此選項,請啟用 chat.assistedPermissions.enabled 。
| 權限層級 | 說明 |
|---|---|
| 預設核准 (預設) | 使用您所設定的核准設定。需要核准的工具會在執行前顯示確認對話方塊。如有疑問,代理程式會提出釐清問題。 |
| 輔助權限 (實驗性) | 使用 LLM 評估工具來評估每個工具呼叫的風險。經評估核准的呼叫會自動執行。其他呼叫則會顯示確認對話方塊供您審查。 |
| 略過核准 (Bypass Approvals) | 自動核准所有工具呼叫,而不顯示確認對話方塊。如有疑問,代理程式會提出釐清問題。 |
| 自動駕駛 | 自動核准所有工具呼叫,而不顯示確認對話方塊。當出現問題時,代理程式會自動回覆釐清問題。 |
權限層級決定是否套用您較為精細的設定。預設核准會遵循您在下列章節中所設定的個別工具、網址、終端機和沙箱設定。輔助權限會將個別的核准決策委派給 LLM 評估工具。略過核准與自動駕駛則會覆寫這些設定並自動核准所有項目。
輔助權限層級可減少核准中斷,但無法取代您的判斷。基於模型的風險評估可能會出錯。第一次選取此層級時,系統會顯示警告對話方塊請您確認。請使用代理程式沙箱化來限制檔案系統與網路存取,並審查任何仍需您核准的工具呼叫。
略過核准與自動駕駛會略過手動核准提示,包括檔案編輯、終端機命令和外部工具呼叫等潛在破壞性動作。第一次啟用任一層級時,系統會顯示警告對話方塊請您確認。唯有在您了解安全性含意的情況下,才使用這些層級。如需詳細資訊,請參閱安全性考量。
自動駕駛的運作方式
當您選取自動駕駛權限層級時,代理程式的運作方式會與標準代理程式工作階段不同:
- 持續迭代:代理程式會持續自主運作,直到判定工作完成為止。
- 自動核准所有工具:所有工具呼叫都會自動核准,類似於略過核准層級。
- 發生錯誤時自動重試:代理程式在遇到錯誤時會自動重試。
- 自動回覆問題:通常會封鎖並要求您輸入的工具(例如釐清問題)會自動回覆,使代理程式不會因等待回覆而停滯。此行為是自動駕駛所特有,不適用於略過核准。
在自動駕駛模式下,代理程式會持續迭代,直到認為工作完成為止。您可以啟用進階自動駕駛(預覽版),將此決策改為委派給獨立的模型。在每個自動駕駛回合之後,一個小巧且快速的模型會評估您的原始要求是否已完成。如果尚未完成,自動駕駛會繼續運作,並將該評估結果作為下一個回合的指引。
若要使用進階自動駕駛(預覽版)功能,請將 chat.autopilot.advanced.enabled 設定為 true。
自動駕駛消耗 AI 點數的方式與以互動方式使用對話相同。深入了解用量計費。
工具核准
某些工具在執行前需要您的核准。這是一項安全措施,因為工具可以修改檔案或變更您的環境。此外,工具傳回的資料可能包含試圖操縱代理程式的提示詞注入嘗試。
當工具需要核准時,會出現一個包含工具名稱及其輸入參數的確認對話方塊。請仔細審查此資訊,然後選擇您的核准範圍:單次使用、目前的工作階段、目前的專案工作區,或所有未來的叫用。

您工作區中的某些檔案(例如 .env 檔案或設定檔)可能包含機密或敏感設定。了解如何針對編輯敏感檔案要求明確核准。
在核准之前,務必仔細審查工具參數,特別是用於修改檔案、執行命令或存取外部服務的工具。請參閱在 VS Code 中使用 AI 的安全性考量。
管理工具核准
使用命令選擇區 (⇧⌘P (Windows, Linux Ctrl+Shift+P)) 中的 Chat: Manage Tool Approval 命令來集中審查和設定工具核准。「快速挑選」會顯示依其來源(例如 MCP 伺服器或擴充功能)分組的所有工具。
對於每個工具,您可以設定兩種類型的核准:
- 預先核准 (「無需核准」):在工具執行前略過確認對話方塊。
- 事後核准 (「不審查結果」):在工具的輸出被加入對話內容之前,略過審查該輸出的步驟。這適用於傳回外部資料的工具,其內容可能包含提示詞注入嘗試。
展開來源以設定個別工具的核准,或選取最上層的核准方塊以一次信任來自特定 MCP 伺服器或擴充功能的所有工具。
防止工具被自動核准
當工具要求核准時,您可以選擇對所有未來的叫用進行核准,從而從該時刻起自動核准它。對於敏感工具,您可能會想要移除該選項,以便該工具一律需要手動核准,而不會被意外自動核准。
使用 chat.tools.eligibleForAutoApproval 此設定可由您的組織管理。請聯絡您的管理員以進行變更。 設定來控制哪些工具符合自動核准的資格。將工具設為 false 以一律需要手動核准該工具。
組織也可以使用裝置管理原則來強制對特定工具進行手動核准。深入了解請參閱企業版文件。
重設工具確認
若要清除所有儲存的工具核准,請使用命令選擇區 (⇧⌘P (Windows, Linux Ctrl+Shift+P)) 中的 Chat: Reset Tool Confirmations 命令。
若要審查並選擇性地變更個別工具核准,而不是全部清除,請使用 Chat: Manage Tool Approval 命令。
網址核准
當工具嘗試存取網址時(例如 #web/fetch 工具),VS Code 會使用兩步驟核准程序來保護您免受惡意或非預期內容的侵害。每個步驟都會在對話檢視中顯示確認對話方塊供您審查。
-
預先核准:核准對該網址的要求
此步驟確認您信任正在連絡的網域,並防止將敏感資料傳送至不受信任的網站。

您可以核准該要求一次,或自動核准對特定網址或網域的未來要求。核准要求並不代表核准回應:您仍需在下一個步驟中審查擷取的內容。若要同時設定要求與回應核准,請選取允許對以下單位的要求。
注意預先核准會遵循「信任的網域」功能。如果網域列於其中,對該網域的要求將會自動核准,且回應審查步驟將會延後。
-
事後核准:核准從該網址擷取的回應內容
此步驟讓您在擷取的內容被加入對話或傳遞給其他工具之前進行審查,這有助於防止提示詞注入攻擊。
例如,您可能會核准從 GitHub.com 等知名網站擷取內容的要求。但由於問題描述或評論等內容是由使用者產生的,因此可能包含會操縱代理程式的有害內容。
您可以核准該回應一次,或自動核准來自特定網址或網域的未來回應。
重要事後核准步驟與「信任的網域」功能無關,且一律需要您的審查。這是一項安全措施,旨在防止您原本信任的網域上出現不受信任內容的問題。
chat.tools.urls.autoApprove 設定會儲存您的自動核准網址模式。其值可以是啟用或停用要求與回應自動核准的布林值,或者是具有 approveRequest 和 approveResponse 屬性的物件,以便進行精細控制。您可以使用確切的網址、通用字元模式 (glob patterns) 或萬用字元。
網址自動核准範例
{
"chat.tools.urls.autoApprove": {
"https://www.example.com": false,
"https://*.contoso.com/*": true,
"https://example.com/api/*": {
"approveRequest": true,
"approveResponse": false
}
}
自動核准終端機命令
代理程式使用單一終端機工具來執行終端機命令,但該工具可以執行任何命令。只核准一次終端機工具範圍會太廣,因此終端機命令是按命令進行核准,而不是按工具核准。
根據預設,VS Code 已經自動核准了一組安全的命令,並封鎖了諸如 rm 和 del 等一律需要手動核准的具風險命令。使用 chat.tools.terminal.autoApprove 設定來透過您自己的允許與封鎖清單擴充或覆寫這些預設值:
- 將命令設為
true以自動核准它們 - 將命令設為
false以一律需要核准 - 透過將模式包在
/字元中來使用正規表示式
例如
{
// Allow the `mkdir` command
"mkdir": true,
// Allow `git status` and commands starting with `git show`
"/^git (status|show\\b.*)$/": true,
// Block the `del` command
"del": false,
// Block any command containing "dangerous"
"/dangerous/": false
}
根據預設,模式會與個別子命令進行比對。若要讓命令自動核准,所有子命令都必須符合 true 項目,且不得符合 false 項目。
針對進階情境,請使用具有 matchCommandLine 屬性的物件語法,來與完整的命令列進行比對,而不是個別子命令。
相關設定
- chat.tools.terminal.enableAutoApprove 此設定可由您的組織管理。請聯絡您的管理員以進行變更。:完全關閉終端機命令自動核准,讓每個命令都需要手動核准
- chat.tools.terminal.blockDetectedFileWrites (實驗性):當設為
outsideWorkspace(預設) 時,要求對寫入工作區外部檔案的終端機命令進行核准。當工作階段層級的命令核准作用中時,寫入作業系統暫存資料夾(macOS 和 Linux 上的/tmp,Windows 上的%TEMP%)則可豁免。 - chat.tools.terminal.ignoreDefaultAutoApproveRules (實驗性):忽略內建的預設允許與封鎖規則,因此僅套用您在 chat.tools.terminal.autoApprove 中定義的規則。
自動核准終端機命令提供的是盡力而為 (best effort) 的保護,並假設代理程式並非蓄意為之。當您啟用終端機自動核准時,保護自己免受提示詞注入攻擊非常重要,因為某些命令可能會漏網。以下是偵測可能會失效的一些範例:
- VS Code 使用 PowerShell 和 bash tree sitter 文法來擷取子命令,因此如果這些文法未偵測到模式,則不會偵測到它們。
- VS Code 使用 bash 文法,因為沒有 zsh 或 fish 文法,所以某些子命令無法被偵測到。
- 目前對檔案寫入的偵測相當有限,因此有可能透過終端機寫入檔案,而這在使用檔案編輯代理程式工具時是不可能的。
- 可以透過引號串接等各種技術來規避自動核准。例如,
find -exec通常會被封鎖,但find -e"x"ec則不會,儘管它們做的是相同的事情。
如果有可能發生提示詞注入,或您身處高風險環境,請考慮啟用代理程式沙箱化或在容器內執行 VS Code。
沙箱化代理程式命令
代理程式沙箱化目前處於預覽階段,未來可能會繼續演進。
如需沙箱化運作方式、防範項目以及作業系統層級實作細節的概述,請參閱代理程式沙箱化。
代理程式沙箱化會限制代理程式所執行命令的檔案系統與網路存取,包括使用 VS Code 代理程式終端機整合的 Copilot CLI 代理程式主機工作階段。當啟用沙箱化時,在沙箱內執行的終端機命令會自動核准而不需使用者確認,因為它們是在受控制的環境中執行。
代理程式終端機沙箱化適用於 macOS 與 Linux,包含 WSL2 環境。
沙箱啟用與不受限制的網路存取是獨立設定的:
-
沙箱啟用控制代理程式終端機命令是否在沙箱中執行。在 macOS 和 Linux 上,請使用 chat.agent.sandbox.enabled 此設定可由您的組織管理。請聯絡您的管理員以進行變更。,它接受下列值:
值 說明 off(預設)停用沙箱化。 on啟用具備檔案系統與網路隔離功能的沙箱化。除非明確允許網域,否則會封鎖所有對外網路存取。 權限選擇器中的終端機沙箱化核取方塊會將其勾選狀態對應到這些值並更新設定。
-
不受限制的網路存取控制沙箱化命令是否能存取任何網路網域。將 chat.agent.sandbox.allowNetwork 此設定可由您的組織管理。請聯絡您的管理員以進行變更。 設為
true即可允許所有對外網路流量,同時維持檔案系統限制的效力。此設定僅在啟用沙箱化時適用,預設為false。
當檔案系統存取受限制時,下列規則適用於代理程式命令:
- 命令對工作區資料夾、沙箱執行階段暫存資料夾,以及 VS Code 自動新增的任何個別命令路徑(例如
git、node、npm、dotnet所需的路徑)具有讀取權限。預設會拒絕讀取您的主目錄 ($HOME)。 - 命令僅對目前的工作目錄及其子目錄具有寫入權限
- 執行命令時不會出現使用者確認提示
當網路存取受限制時,下列規則適用於代理程式命令:
- 除非明確允許網域,否則會封鎖所有對外網路存取。
- 您可以使用 chat.agent.allowedNetworkDomains 此設定可由您的組織管理。請聯絡您的管理員以進行變更。 與 chat.agent.deniedNetworkDomains 此設定可由您的組織管理。請聯絡您的管理員以進行變更。 來設定網域層級的例外狀況。被封鎖的網域優先於允許的網域。
- 當啟用 chat.agent.sandbox.allowNetwork 此設定可由您的組織管理。請聯絡您的管理員以進行變更。 時,會允許所有對外網路流量,並忽略網域設定。
如果未安裝沙箱化所需的作業系統相依性,VS Code 會提供安裝必要元件的選項。如果您選擇不安裝,則不會啟用沙箱化。
在提升權限之前先在沙箱中嘗試命令
根據預設,當沙箱化命令失敗或沙箱限制將其封鎖時,代理程式會要求確認是否在沙箱外部執行該命令。此行為由 chat.agent.sandbox.allowUnsandboxedCommands 此設定可由您的組織管理。請聯絡您的管理員以進行變更。 設定控制,該設定僅在啟用沙箱化時適用。
由於代理程式會先在沙箱內嘗試該命令,且僅在沙箱內嘗試失敗時才會顯示在沙箱外執行的確認,因此您可以避免針對在沙箱內成功的命令出現權限提升提示。如果您停用此設定,則沙箱封鎖的命令將不會提供權限提升選項。
設定檔案系統存取
使用平台特定的檔案系統沙箱設定來控制檔案系統存取:在 macOS 上使用 chat.agent.sandbox.fileSystem.mac ,在 Linux 與 WSL2 上使用 chat.agent.sandbox.fileSystem.linux 。
您可以指定讀取與寫入存取的允許規則,以及讀取和寫入存取的封鎖規則。這些規則不支援通用字元模式 (glob patterns)。denyWrite 與 denyRead 規則優先於 allowWrite 與 allowRead 規則。
工作區資料夾、沙箱執行階段暫存資料夾以及個別命令讀取路徑會自動允許,因此您通常只需要 allowRead 來授權存取工作區外部的工具設定或資料。
{
"chat.agent.sandbox.fileSystem.mac": {
// Allow writes to the working directory
"allowWrite": ["."],
// Allow reads from an additional path outside the workspace
"allowRead": ["/Users/me/.config/myapp"],
// Block writes to specific subdirectories
"denyWrite": ["./secrets/"],
// Block reads from specific paths
"denyRead": ["/etc/passwd"]
}
}
設定網路存取
您可以透過啟用 chat.agent.networkFilter 此設定可由您的組織管理。請聯絡您的管理員以進行變更。 設定來限制代理程式工具(fetch 工具、內建瀏覽器)可以存取的網域。啟用後,網路存取由 chat.agent.allowedNetworkDomains 此設定可由您的組織管理。請聯絡您的管理員以進行變更。 與 chat.agent.deniedNetworkDomains 此設定可由您的組織管理。請聯絡您的管理員以進行變更。 設定控制。當兩個清單都為空時,所有網域都會被封鎖。
當啟用沙箱化且 chat.agent.sandbox.allowNetwork 此設定可由您的組織管理。請聯絡您的管理員以進行變更。 關閉時,這些網路規則也會額外套用於代理程式執行的終端機命令。當 chat.agent.sandbox.allowNetwork 此設定可由您的組織管理。請聯絡您的管理員以進行變更。 開啟時,沙箱化終端機命令可以存取任何網域,同時檔案系統限制仍保持有效。
被封鎖的網域永遠優先於允許的網域。這兩項設定都支援諸如 *.example.com 的萬用字元。
當沙箱化命令遭到網路限制封鎖且啟用 chat.agent.sandbox.retryWithAllowNetworkRequests (預設) 時,代理程式會要求確認是否要在具備不受限制網路存取的沙箱內重試該命令。檔案系統限制仍會套用於重試的命令。如果您停用此設定,代理程式將會改為要求確認在沙箱外部執行命令,該確認由 chat.agent.sandbox.allowUnsandboxedCommands 此設定可由您的組織管理。請聯絡您的管理員以進行變更。 控制。
{
"chat.agent.networkFilter": true,
"chat.agent.allowedNetworkDomains": [
"api.github.com"
],
"chat.agent.deniedNetworkDomains": [
"example.com"
]
}
常見問題
我可以自動核准所有工具與終端機命令嗎?
您有幾個自動核准工具呼叫的選項:
- 權限層級:從權限選擇器中選取略過核准或自動駕駛權限層級,以自動核准目前工作階段的所有工具。
- 全域設定:啟用 chat.tools.global.autoApprove 此設定可由您的組織管理。請聯絡您的管理員以進行變更。 設定以在所有工作區中自動核准所有工具。您也可以直接從對話中使用
/yolo或/autoApprove斜線命令來啟用它,或使用/disableYolo或/disableAutoApprove來停用它。第一次啟用全域自動核准時,會出現警告對話方塊請您確認。