本頁譯自英文文件。指令、識別名稱與範例保持原樣。執行環境 7.24.4 · SDK 2.6.7。 英文原文
沙盒模式
狀態:有效 範圍:目前狀態 上次審閱:2026-08-23 負責人:ax-code runtime
AX Code 內建執行沙盒,可以限制 AI agent 在你系統上的行為。預設情況下,AX Code 以完整存取啟動且沙盒關閉,因此檔案系統寫入與網路存取不受限。在處理不受信任的儲存庫或執行無人值守工作之前,請啟用 workspace-write 或 read-only。
安全性警告:
full-access不是安全邊界。agent 可以修改工作區以外的檔案、寫入.git/與.ax-code/、執行不受限的 shell 指令,以及存取網路。
快速開始
從 TUI 切換沙盒:
- 在提示中輸入
/sandbox,或 - 按
Ctrl+P並搜尋「sandbox」
狀態列顯示目前狀態:
- 沙盒開啟(綠色)— agent 限制在工作區內
- 沙盒關閉(紅色)— 沒有限制
此設定會跨工作階段保存在 ax-code.json。
有什麼改變
| 能力 | 沙盒關閉 | 沙盒開啟 |
|---|---|---|
| 工作區內的檔案寫入 | 允許 | 允許 |
| 工作區外的檔案寫入 | 允許 | 已阻擋 |
寫入 .git/ |
允許 | 已阻擋 |
寫入 .ax-code/ |
允許 | 已阻擋 |
| Bash 指令 | 不受限 | 僅限工作區 |
Bash 指向 .git/、.ax-code/ |
允許 | 已阻擋 |
| Bash 指向工作區外 | 允許 | 已阻擋 |
| 網路存取(webfetch、websearch) | 允許 | 已阻擋 |
| Bash 網路用戶端(curl、wget 等) | 允許 | 已阻擋 |
| 讀取操作(read、glob、grep) | 不受限 | 不受限 |
設定
權威來源
本頁摘要面向使用者的行為。行為改變時,請對照下列來源核對文件:
packages/ax-code/src/isolation/index.ts:模式解析、受保護路徑、網路檢查、寫入檢查、bash 檢查,以及IsolationDeniedError。packages/ax-code/src/config/schema.ts:設定形狀、預設值與說明。packages/ax-code/src/server/routes/isolation.ts:執行環境切換行為與持久性。packages/ax-code/test/isolation/isolation.test.ts與packages/ax-code/test/tool/bash.test.ts:預期的強制執行行為。
根目錄 README 中的重複宣稱保持簡短,並連回此處查看細節。
從 TUI 切換
使用 /sandbox 或命令選擇區(Ctrl+P →「開啟或關閉沙盒」)。變更立即生效,並儲存到專案的 ax-code.json。
CLI 旗標
ax-code --sandbox workspace-write # sandbox on
ax-code --sandbox full-access # sandbox off
ax-code --sandbox read-only # strictest: blocks all mutations
環境變數
AX_CODE_ISOLATION_MODE=workspace-write ax-code
設定檔
在 ax-code.json 中:
{
"isolation": {
"mode": "workspace-write",
"network": false
}
}
優先順序
CLI 旗標 > 環境變數 > 設定檔 > 預設(full-access)
當 CLI 或環境覆寫作用中時,TUI 會回報該有效模式。/sandbox 切換可以儲存專案偏好,但較高優先的覆寫會一直作用,直到移除為止(通常在重新啟動時)。
隔離模式
| 模式 | 說明 |
|---|---|
workspace-write |
寫入限制在工作區。網路停用。強制執行受保護路徑。顯示為「沙盒開啟」。 |
full-access |
沒有限制。顯示為「沙盒關閉」。 |
read-only |
阻擋所有變更。沒有 bash。沒有寫入。沒有網路。 |
受保護路徑
在 workspace-write 模式中,這些路徑一律受寫入保護:
.git/— 防止意外損毀 git 狀態.ax-code/— 防止竄改設定或外掛
在設定中加入自訂受保護路徑:
{
"isolation": {
"mode": "workspace-write",
"protected": ["secrets", "credentials"]
}
}
網路存取
在 workspace-write 與 read-only 模式中,網路預設停用。受影響的工具:
webfetch— 已阻擋websearch— 已阻擋codesearch— 已阻擋bash— 僅網路的用戶端(curl、wget、nc/ncat/netcat、telnet、ftp、tftp、scp、sftp、dig、nslookup、host)已阻擋
限制:
bash中的網路阻擋屬於應用程式層,涵蓋上方的專用網路用戶端。它不會攔截也能離線運作的兩用工具(git、npm/pnpm/yarn、pip、go,以及python/node這類語言解譯器),因為無法以靜態方式區分它們的離線呼叫,阻擋它們會破壞常見工作流程。真正、徹底的網路隔離需要作業系統層控制,而此沙盒並不提供。碰到被拒絕的用戶端時,agent 會提示一次升級。
若要在保留寫入限制的同時允許網路:
{
"isolation": {
"mode": "workspace-write",
"network": true
}
}
隔離後端(應用程式對作業系統)
| 後端 | 設定/環境 | 行為 |
|---|---|---|
app |
"backend": "app" |
只有可攜的工具層檢查 |
os |
"backend": "os"/AX_CODE_ISOLATION_BACKEND=os |
應用程式檢查加上 bash 的核心沙盒;若缺少作業系統工具則錯誤 |
auto(預設) |
"backend": "auto"、未設定,或 AX_CODE_ISOLATION_BACKEND=auto |
偏好作業系統的 bash 包裝;否則退回僅應用程式 |
**macOS:**透過 sandbox-exec 使用 Seatbelt 設定檔(寫入限於工作區/worktree,當 network: false 時拒絕網路)。
**Linux:**已安裝時使用 bubblewrap(bwrap)(網路停用時為 --unshare-net,工作區以讀寫繫結掛載)。
**Windows:**目前只有應用程式層。
{
"isolation": {
"mode": "workspace-write",
"network": false,
"backend": "auto"
}
}
威脅模型見 SECURITY.md。
儲存庫控制的權限與 hooks
專案檔預設不受信任。ax-code.json、.ax-code/policy.json 以及專案 agent 或模式定義中的權限規則,可以用 deny 收緊存取,但儲存庫控制的 allow/ask 授予會被忽略。專案指令不能啟用 shell 展開。.ax-code/hooks.json、.ax-code/plugin/ 以及專案設定的外掛不會被執行。
不受信任的專案設定也不能選擇自訂 shell、可執行的 LSP 或格式化工具、供應商套件或 API 端點、供應商憑證環境變數、外部技能來源,或 worktree 以外的指示路徑。安全的相對指示路徑與不可執行的內建覆寫仍然可用。MCP 伺服器使用另一套指紋核准流程,說明見 MCP 整合。
檢閱儲存庫控制的設定之後,使用者可以在儲存庫之外、針對目前行程選擇加入:
AX_CODE_TRUST_PROJECT_CONFIG=1 ax-code
僅環境的開關可防止某個檢出把自己宣告為受信任。
強制執行方式
沙盒強制執行始終在應用程式層,於每次工具呼叫時檢查。當 backend 為 os 或 auto 且平台支援時,bash 會額外包在核心沙盒中。
| 工具 | 檢查 |
|---|---|
bash |
工作目錄與所有已解析路徑都必須在工作區內;網路停用時阻擋僅網路的用戶端;可選的作業系統包裝 |
edit |
目標檔必須在工作區內且未受保護 |
write |
目標檔必須在工作區內且未受保護 |
apply_patch |
所有目標檔都必須在工作區內且未受保護 |
webfetch |
必須啟用網路存取 |
websearch |
必須啟用網路存取 |
codesearch |
必須啟用網路存取 |
工具違反隔離時,會擲出 IsolationDeniedError,並以清楚訊息說明阻擋了什麼以及原因。