Clawk 实战:给 AI 编码 Agent 一台专属的 Linux 虚拟机,隔离你的开发环境
你的 Claude Code 或 Codex 正在运行——它在安装包、启动服务器、执行未信任的构建脚本。你面临两个选择:每几秒审批一次命令(然后抱怨效率太低),或者加上 --dangerously-skip-permissions 祈祷不会出事。
Clawk(198 pts / 360⭐ / Apache-2.0)给出了第三个选项:给你的代码仓库配一台独立的一次性 Linux 虚拟机,让 Agent 在里面自由操作,而你的文件、密钥链和整个宿主机完全不受影响。本文将带你从安装到实战,完整体验这个用 Go 编写的 Agent 沙箱工具。
为什么需要一台 VM?
安全提示(--dangerously-skip-permissions)的本质是用文字规则约束 Agent——它们可以绕过,而且一旦放过就会造成真正的破坏。容器虽然提供了文件系统隔离,但仍然共享宿主机的内核,一个 mount 配置失误就可能暴露整个主机。
Clawk 的做法完全不同:
- 独立内核:Guest 运行自己的 Linux 内核,宿主机的文件系统从未被挂载过,不存在”隐藏得不够好”的问题
- Guest 内 root 权限:Agent 可以安装系统包、编辑
/etc、加载内核模块、绑定特权端口——它拥有整台机器的控制权 - 一次性生命周期:
clawk destroy && clawk一秒钟恢复干净环境,仓库和历史对话完好无损 - 网络白名单机制:出站流量默认全部拒绝,只有白名单内的域名可以访问,且过滤在 Guest 之下的用户空间执行——Guest 内的 root 也无法绕过
结果是:Agent 可以在 --dangerously-skip-permissions 模式下全速工作,但造成的任何破坏都局限在一台可以随手销毁的 VM 内。
安装 Clawk
macOS(Apple Silicon)
brew install clawkwork/tap/clawk
安装完成后没有额外的宿主机依赖:不需要 Docker、不需要 QEMU、不需要 sudo。Hypervisor 是 Apple 的 Virtualization.framework,直接链接在二进制中。
从源码安装
需要 Go 1.26+:
git clone https://github.com/clawkwork/clawk cd clawk make install
首个运行:第一次启动会检测缺失的组件并提供修复。
卸载
clawk destroy rm -rf ~/.clawk brew uninstall clawk
没有留下任何 launchd 任务或系统级残留。
实战场景:给项目配一台沙箱
一、快速启动
进入你的仓库目录,一条命令启动沙箱并挂载 Claude Code:
cd ~/code/my-project clawk
这行命令做了几件事:
- 拉取默认的 OCI 镜像并构建根文件系统(首次需拉取镜像,后续秒级启动)
- 启动一个独立的 Linux VM
- 将当前目录通过 virtio-fs 实时挂载到 Guest
- 在 Guest 内启动 Claude Code,自动传入
--dangerously-skip-permissions标志
二、日常操作命令
clawk run shell # 进入同一个沙箱的 shell clawk run codex # 在同一沙箱中运行 Codex clawk down # 停止 VM(仓库和 Agent 状态持久化) clawk attach # 重新连接——如果 VM 已停止会自动启动 clawk destroy # 删除 VM 磁盘(历史对话保留在宿主机)
三、多仓库工单模式
当工单跨多个仓库时,创建一个包含所有子仓库的沙箱:
cd ~/code/my-workspace clawk work PROJ-123 # 每个子仓库创建一个 git worktree clawk pr PROJ-123 # 推送分支并打开跨仓库 PR
四、配置 clawk.mod
不需要配置文件也能工作,但需要自定义时,只需在项目根目录创建 clawk.mod:
sandbox my-project (
vm (
cpu 4
memory 8GiB
image golang:1.25
)
network ( allow api.example.com )
forwards ( 3000 )
env ( DATABASE_URL )
on create ( "go mod download" )
agent (
instructions "Ask before running destructive commands."
)
)
配置块是模板——创建时快照,运行时不会意外变化。
安全体系全解析
VM 边界
| 层面 | Clawk 的做法 | 相比容器的优势 |
|---|---|---|
| 内核 | 独立 Linux 内核 | 内核漏洞不影响宿主机 |
| 文件系统 | virtio-fs 只挂载指定目录 | 密钥链和 SSH 密钥从不可见 |
| 网络 | 用户空间 TCP/IP 栈 + DNS 白名单 | Guest 内 root 无法绕过 |
网络白名单
默认拒绝所有出站流量。npm、PyPI、crates.io、GitHub、Anthropic 等常用注册表已预置在白名单中。
clawk network allow my-project api.stripe.com *.internal.mycorp.com clawk network denials my-project clawk forward add my-project 3000
网络过滤在 VM daemon 进程内部执行(基于 gvisor-tap-vsock),Guest 内的 root 无法修改这些规则。
持久化规则
| 数据 | clawk down 后 | clawk destroy 后 |
|---|---|---|
| 仓库代码(worktree) | ✅ 保留 | ✅ 保留 |
| Agent 对话历史 | ✅ 保留 | ✅ 保留 |
| VM 磁盘(安装的包、缓存) | ❌ 磁盘重建 | ❌ 完全删除 |
Agent 的状态(~/.claude/projects/、~/.claude/memory/、~/.codex/)通过宿主机挂载持久化,即使 destroy 后重建也能通过 --resume 恢复对话。
真实场景:破解你的第一个沙箱
试试在一个 Clawk 沙箱中运行潜在危险操作:
$ curl https://tracker.evil.example curl: (7) Failed to connect to tracker.evil.example port 443 after 2 ms: Connection refused $ cat ~/.ssh/id_rsa cat: /home/agent/.ssh/id_rsa: No such file or directory $ sudo rm -rf / --no-preserve-root $ git push # SSH agent 转发使推送正常工作 Enumerating objects: 5, done.
对比其他方案
- Docker / Devcontainer:共享宿主机内核,挂载 Docker socket 即可控制整个宿主机 daemon。Clawk 独立内核 + 无 daemon socket。
- OS 级 Agent 沙箱(如 Anthropic sandbox-runtime):进程级限制,策略配置错误可直接暴露密钥链。Clawk 的 VM 边界更坚固。
- 通用 VM 管理器(如 Lima):给你一个 Linux VM,但不提供 Agent 集成、网络白名单、会话持久化、工单管理等工作流。Clawk 在这些之上的工作流是它真正的差异化。
- 云端沙箱:代码离开宿主机,按小时计费。Clawk 完全本地,无计费,编辑器里的 worktree 就是 Agent 在编辑的目录。
总结
Clawk 解决了一个真实的两难困境:让 AI 编码 Agent 高效工作 vs 保护宿主机安全。它的核心思路是把信任从代码和提示词层面转移到虚拟化边界——不是”Agent 应该怎么做”,而是”Agent 能做什么有物理限制”。
对于日常使用 Claude Code、Codex 或 OpenCode 的开发者,Clawk 提供了一个一旦用上就很难回去的体验:Agent 全速运行,而你不用担心 rm -rf /、API 密钥泄露或恶意包安装。加上 Apache-2.0 许可证和 360+ GitHub Stars,项目成熟度和社区活跃度都值得信赖。
相关链接