Clawk:一次性 Linux 虛擬機,供 AI 程式碼代理使用
Clawk 是一個本機環境管理器,為 AI 程式碼代理提供一次性 Linux 虛擬機(VM),而不是直接存取使用者的主機。透過將代理隔離在擁有自有核心且受限制的網路允許清單的獨立 VM 中,Clawk 讓開發者能以完整自主性執行代理——使用如 --dangerously-skip-permissions 之旗標——而不會危及主機的檔案系統、金鑰串或網路安全。
為何為 AI 代理使用虛擬機
Clawk 使用完整的虛擬機,而非程序層級的沙箱或容器,以確保更強的安全邊界與更傳統的 Linux 環境。
- 核心隔離:客體執行自己的 Linux 核心,意味著主機檔案系統永不掛載,且無法透過核心漏洞或錯誤設定的拒絕規則存取。
- 客體內的 root 存取:代理可以安裝系統套件、編輯
/etc,以及綁定特權埠,而不會影響主機。 - 傳統工具:因為它是真實的 Linux 主機,工具的行為如文件所述,不會出現受限程序沙箱中常見的系統呼叫過濾意外。
- 一次性生命週期:受損或被入侵的 VM 可立即使用
clawk destroy && clawk取代,而專案倉庫與代理對話歷史則安全保留在主機上。 - 嵌套虛擬化:在支援的硬體上使用啟用 KVM 的客體核心,開發者可在沙箱內執行 Docker 或 Kubernetes(例如 Kind)。
核心功能與工作流程
Clawk 為「一條指令」設定而設計,免除基本使用情境下對 Dockerfile 或複雜設定檔的需求。
快速開始與生命週期
開發者可透過執行 clawk 為當前目錄啟動沙箱。常見的生命週期指令包括:
clawk run shell:將使用者帶入活動沙箱內的 shell。clawk down:停止 VM,同時保留倉庫與代理狀態。clawk attach:重新啟動並重新附加 AI 代理(例如 Claude Code)至會話。clawk destroy:徹底移除 VM 磁碟。clawk snapshot:使 VM 休眠,保存 RAM 與磁碟狀態,以便背景程序幾乎即時恢復。
網路與安全
Clawk 實作「預設拒絕」的外部網路政策,於客體 VM 之下的使用者空間執行,意味著即使是客體內的 root 使用者也無法繞過過濾。
- 允許清單:常見註冊表(npm、PyPI、GitHub、Anthropic)已預先允許。使用者可透過
clawk network allow新增特定網域。 - 流量記錄:
clawk network denials提供被過濾阻擋的每個主機名稱的日誌。 - 機密管理:為避免將私鑰放入 VM,Clawk 轉發主機的
ssh-agent,讓代理執行git push時,金鑰永不離開主機。
透過 clawk.mod 進行設定
對於複雜專案,clawk.mod 檔案允許宣告式的環境定義,包括 CPU/記憶體限制、根檔系統的特定 OCI 映像、環境變數,以及自訂代理指示。
技術架構
Clawk 透過拉取 OCI 映像並直接展平成 ext4 磁碟,避免依賴主機的 Docker daemon。在 macOS 上,它利用 Apple 的 Virtualization.framework;在 Linux 上,則使用 Firecracker(目前仍為實驗性)。
資料流結構如下:
User CLI $
ightarrow$ Per-sandbox Daemon $
ightarrow$ gvproxy (用於過濾的使用者空間 TCP/IP 堆疊) $
ightarrow$ vsock bridge (連接至客體的控制路徑) $
ightarrow$ VM (客體核心 + OCI 根檔系統)。
與其他沙箱方法的比較
| 方法 | 主機安全性 | 工具相容性 | 設定負擔 |
|---|---|---|---|
| 容器 | 共用核心;透過系統呼叫逃逸的風險 | 高 | 需要 Docker/Podman |
| 程序沙箱 | 基於政策;設定錯誤的風險 | 中 | 低 |
| Clawk(VM) | 虛擬機監控程式邊界;獨立核心 | 非常高 | 低(不需要 Docker daemon) |
| 雲端沙箱 | 高 | 高 | 高(延遲、計費、資料外流) |
社群觀點與替代方案
關於 Clawk 的討論凸顯了「代理專屬」沙箱的成長趨勢。雖然部分使用者認為簡單的獨立 OS 使用者或 Firejail、bubblewrap 等工具已足夠隔離,其他人則主張對於需要安裝系統層級相依或執行背景服務的代理,虛擬機監控程式的邊界是必要的。
其他提及的替代方案包括:
- yoloAI:類似的開源專案,支援多種沙箱後端(gVisor、Kata、Firecracker)。
- katsuobushi:基於 Nix-flake 的沙箱,使用
microvm.nix。 - flar:輕量級的基於命名空間的代理包裝器。
- Agentjail:使用作業系統原生沙箱(macOS 的 sbpl)並搭配 Open Policy Agent(OPA)防護。
Sources
相關
- 專案
- Dispatch
- Dispatch
- Dispatch
- Dispatch