Strands Box:把作業系統隔離與“語義策略”合在一起的開源智慧體沙箱,並按先前動作決定後續許可權
strands-agents/box 是 Strands Agents 團隊用 Rust 寫的開源智慧體沙箱引擎,採用 Apache-2.0 許可。它把作業系統級隔離和用 Dogwood 語言寫的 permit/forbid 策略結合起來,策略引擎在智慧體程序之外執行,預設拒絕。目前是預覽版,只支援 Apple 晶片的 macOS;截至發稿約 393 個星標,安全性沒有看到獨立審計。
strands-agents/box 是 Strands Agents 團隊釋出的一個開源專案,自稱“面向 AI 智慧體的開源沙箱引擎”。倉庫用 Rust 編寫,採用 Apache-2.0 許可,建立於 2026 年 10 月 2 日,最近一次推送是 10 月 12 日,截至發稿約有 393 個星標和 19 個分叉。它要回答的問題很實際:當一個智慧體可以執行命令、讀寫檔案、訪問網路、呼叫外部工具時,怎樣把“它能做什麼”從一句寫在提示詞裡的囑咐,變成一道真正由程式強制執行的邊界。專案不繫結具體的智慧體,你可以選擇要執行的程式或二進位制,在 box.toml 裡配置它的訪問範圍,在 policy.dw 裡寫策略。 它的設計分成兩層。第一層是作業系統隔離:box.toml 裡的直接訪問授權,比如哪些目錄可讀寫、哪些程式可啟動,由宿主作業系統強制執行。第二層是“語義策略”,用的是 Dogwood 這門策略語言,規則只有 permit 和 forbid 兩種:被策略引擎檢查的操作預設拒絕,必須有匹配的 permit 才放行,而匹配的 forbid 會覆蓋放行。真正有意思的是引擎和執行點的佈局。Strands Shell、用於 Python 的 Monty、出站閘道器和 MCP 代理,這四個元件會把各自處理的操作交給內嵌的 Dogwood 本地引擎判斷,而引擎執行在 Box 自己的程序裡,位於智慧體的沙箱之外。智慧體可以向 Box 的直譯器發請求,但外部程式和本地 MCP 伺服器不能;外部程式的網路流量預設也要經過 Box 的閘道器。
這套架構帶來了幾個具體的能力。其一,直譯器和閘道器共享同一份事件歷史,所以規則可以依據此前的動作和經過的時間。README 舉的例子是,智慧體透過 Shell 或 Python 讀過某個檔案,閘道器就可以拒絕它之後發出的一次外聯 HTTP 請求,這比單純“某個地址能不能訪問”更接近真實的資料外洩場景。其二,出站閘道器能檢查連線和 HTTP 請求,包括方法和路徑;MCP 代理能檢查已配置的工具呼叫及其引數。其三,閘道器可以用配置好的 API 憑證或 AWS SigV4 簽名為放行的請求做認證,智慧體自己拿不到底層金鑰。其四,所有策略決策以 OTLP JSON 格式記錄,預設寫入 box 目錄下的 private/telemetry/records.jsonl,便於事後審計。
使用之前,需要看清專案標出的邊界。首先它是預覽版,目前只支援 Apple 晶片的 macOS 本地執行;入門指南要求 macOS 15 或更新、透過 Homebrew 安裝的 Node.js 22.21 或更新,並要用 Amazon Bedrock us-west-2 上的 Claude Opus 5。下載指令碼會校驗釋出包的校驗和,把二進位制解壓到當前目錄的 box-core,不修改 PATH 或系統目錄。其次,README 明確說,box.toml 裡的直接檔案系統授權由作業系統強制,不會產生單獨的 Dogwood 決策;想讓策略管到檔案操作,需要透過 Box 的直譯器訪問檔案,並把這些檔案排除在智慧體的直接授權之外。最後,這些介紹都來自專案自述,我們沒有執行它,也沒有看到獨立的安全審計或滲透測試。
怎麼評價它?對做智慧體的團隊來說,它給出了一個清晰的分工:讓作業系統管“能不能碰”,讓策略引擎管“在什麼條件下可以做”,並且讓兩者都在智慧體之外。這比在提示詞裡寫“請不要洩露密碼”要可靠得多,也比只做網路白名單的沙箱更細。代價是需要學習一門新的策略語言,並且要把檔案、網路、工具呼叫都改成經過 Box 的路徑;在 Linux 和 Windows 上目前也用不了。如果你的智慧體會接觸敏感資料,可以先用示例裡的 Strands Python SDK 小智慧體試一試,觀察決策記錄,再決定是否值得為它調整整個執行方式。 如果要把它放進真實的工作流,可以按下面的順序評估。第一步,先列清楚智慧體需要的最小許可權:能讀哪些目錄、能啟動哪些程式、能訪問哪些域名、能呼叫哪些 MCP 工具,把這些寫進 box.toml 和 policy.dw,寧可先緊後松。第二步,把最敏感的動作寫成帶歷史條件的規則,比如讀過含金鑰的檔案之後,禁止任何對外請求,再用決策記錄檢查規則有沒有按預期觸發。第三步,確認自己的憑證確實由閘道器注入,智慧體的環境變數裡沒有殘留的真實金鑰。最後別忘了,目前它只在蘋果晶片的 Mac 上預覽,團隊裡用其他系統的同事暫時無法復現同樣的環境。
Sources
FAQ
Strands Box 想解決什麼問題,它是怎麼做的?
它給執行智慧體的程序套上兩層限制。第一層是作業系統沙箱:在 box.toml 裡配置智慧體可直接訪問的檔案、程式和網路,由宿主系統強制執行。第二層是語義策略:在 policy.dw 裡用 Dogwood 寫 permit 和 forbid 規則,由程序外的 Dogwood 本地引擎判斷。被引擎檢查的操作預設拒絕,只有匹配的 permit 才放行,匹配的 forbid 會推翻放行。Box 本身不繫結具體的智慧體,你可以自選要執行的程式或二進位制。
“歷史相關的策略”是什麼意思?
Box 的直譯器和閘道器共享同一份事件歷史,所以規則可以引用此前的動作和經過的時間。README 的例子是:智慧體透過 Shell 或 Python 讀了一個檔案,之後閘道器可以據此拒絕它發出的一次外聯 HTTP 請求。閘道器還能檢查連線和 HTTP 請求的方法與路徑,MCP 代理檢查已配置的工具呼叫及其引數,並可以在閘道器裡注入 API 憑證或 AWS SigV4 簽名,讓智慧體拿不到底層金鑰。所有決策以 OTLP JSON 記錄,預設寫到 box 目錄下的遙測檔案。
現在可以用於生產嗎,有哪些限制?
專案自己標明是預覽版:目前只支援 Apple 晶片的 macOS,示例指南要求 macOS 15 或更新、Homebrew 安裝的 Node.js 22.21 或更新,並使用 Amazon Bedrock 上的 Claude Opus 5。另一個限制是:box.toml 裡的直接檔案系統授權由作業系統執行,不會產生單獨的 Dogwood 決策;想讓策略管到檔案操作,就要透過 Box 的直譯器訪問,並把這些檔案排除在直接授權之外。我們沒有看到獨立的安全審計,所以不建議在沒有自行評估的情況下依賴它保護高價值資料。