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 使用者或 Firejailbubblewrap 等工具已足夠隔離,其他人則主張對於需要安裝系統層級相依或執行背景服務的代理,虛擬機監控程式的邊界是必要的。

其他提及的替代方案包括:

  • yoloAI:類似的開源專案,支援多種沙箱後端(gVisor、Kata、Firecracker)。
  • katsuobushi:基於 Nix-flake 的沙箱,使用 microvm.nix
  • flar:輕量級的基於命名空間的代理包裝器。
  • Agentjail:使用作業系統原生沙箱(macOS 的 sbpl)並搭配 Open Policy Agent(OPA)防護。

Sources

相關