Clawk: 为 AI 编程智能体提供的即用即弃 Linux 虚拟机
Clawk: 为 AI 编程智能体提供的即用即弃 Linux 虚拟机
Clawk 是一个旨在为 AI 编程智能体提供专属即用即弃 Linux 虚拟机 (VM) 的工具,消除了直接在宿主笔记本电脑上运行自主智能体的风险。通过将智能体隔离在具有独立内核的单独机器中,Clawk 确保智能体无法访问宿主的系统文件、钥匙串或敏感系统文件,除非经过显式共享。
核心功能与能力
Clawk 允许编程智能体在受控环境中实现完全的自主性——安装软件包、运行服务器以及执行构建。
隔离与安全
- Hypervisor 级边界:与进程级沙箱不同,Clawk 使用独立的 Linux 内核。宿主文件系统不是通过拒绝规则来隐藏的;它只是根本没有挂载。
- 网络白名单:默认情况下,所有出站流量都会被拒绝。每个沙箱都有其独立的、感知 DNS 的白名单,确保智能体只能访问经过批准的服务器(例如,GitHub、npm、PyPI)。
- 密钥保护:SSH 密钥和其他敏感凭据保留在宿主上。Clawk 使用 ssh-agent 转发,允许智能体执行
git push操作,而无需将实际密钥引入虚拟机。 - 即用即弃的生命周期:如果智能体破坏或搞砸了虚拟机,可以使用
clawk destroy && clawk立即将其销毁并重建,而项目仓库和智能体对话历史在宿主上保持完好。
工作流集成
- 一键式设置:在项目目录中运行
clawk会自动启动一个沙箱并附加一个智能体(例如 Claude Code 或 Codex)。 - OCI 镜像支持:任何 OCI 镜像都可以作为 rootfs,允许用户通过
clawk.mod配置文件定义项目所需的精确工具链。 - 工单模式 (Ticket Mode):对于跨多个仓库的任务,Clawk 可以创建一个包含每个仓库对应 git worktree 的单一沙箱,从而协调多个项目之间的更改并开启跨链接的 PR。
- 状态持久化:智能体对话和记忆通过宿主挂载,这意味着在使用
--resume标志时,重建的虚拟机可以从上次会话中断的地方精确地继续。
技术架构
Clawk 通过创建一个管理虚拟机生命周期和网络的每个沙箱专属守护进程来运行。
- Hypervisor:在 macOS 上,它利用 Apple 的
Virtualization.framework;在 Linux 上,它使用firecracker(目前处于实验阶段)。 - Networking:守护进程实现了一个用户空间 TCP/IP 协议栈 (
gvproxy)。这允许网络过滤器在客户机操作系统之下运行,这意味着即使是虚拟机内的 root 用户也无法重新配置防火墙。 - 磁盘管理:OCI 镜像被拉取并扁平化为 ext4 磁盘。为了节省空间,Clawk 使用写时复制 (copy-on-write) 克隆(在 macOS 上使用 APFS
clonefile),因此来自同一镜像的多个沙箱仅在虚拟机客户机写入时才会消耗额外空间。 - Access:客户机内部没有
sshd或cloud-init。访问是通过一个指向客户机内 pty-agent 的 vsock 桥接提供的。
与其他沙箱化方法的比较
| 方法 | 隔离级别 | 设置开销 | 宿主风险 |
|---|---|---|---|
| Local Process | 无 | 低 | 高 |
| Containers/Devcontainers | 共享内核 | 低 | 中 (内核漏洞/socket 挂载) |
| C-level Sandboxes | 进程级 | 低 | 中 (策略错误) |
| Clawk (VMs) | 独立内核 | 中 | 低 |
社区洞察与替代方案
开发者之间的讨论突出了“智能体化”基础设施日益增长的趋势。虽然一些用户建议单独的 OS 用户或 Podman 容器对于基础隔离已经足够,但其他人强调,对于需要原生依赖项或嵌套虚拟化(例如在沙箱内运行 Docker)的工作负载,完整的虚拟机是必要的。
社区讨论中提到了几个替代项目,包括:
- yoloai:一种类似的沙箱方法,支持多种后端(Docker、gVisor、Firecracker)。
- flar:一种基于命名空间的方法,通过 bubblewraps 智能体,其启动速度比虚拟机更快。
- katsuobushi:一种基于 Nix 的沙箱,利用
microvm.nix进行声明式配置。 - AgentCage:一个提供容器与虚拟机之间选择的工具,并带有用于监控的 MITM 代理。
系统要求与限制
- 平台支持:完整支持需要 Apple silicon 上的 macOS 14+\n- Linux 支持通过 Firecracker 是实验性的。
- 硬件限制:嵌套虚拟化(在虚拟机内运行 Docker/Kubernetes)是一个可选功能,需要特定的硬件和客户机内核覆盖。
- 安全限制:Clawk 不保护智能体提交到仓库中的恶意代码,也不保护防止 hypervisor 逃逸。建议用户审查所有智能体生成的 commit,就像审查陌生人的 PR 一样。