clawk: одноразовые VM для безопасной работы AI-агентов
📂 Исходный код на GitHubDisposable, network-restricted Linux VMs for AI coding agents. Запускает Claude Code, Codex или shell внутри изолированной VM с allow-list сетью и root-доступом в гостевой системе.
clawk — это инструмент, который даёт AI-кодинг-агенту (Claude Code, Codex, shell) собственную одноразовую Linux-виртуальную машину вместо вашей рабочей системы. Вы заходите в директорию проекта, запускаете clawk — и агент работает внутри изолированной VM: ваш код примонтирован, root-доступ есть в гостевой системе, а ваши файлы, связка ключей и остальная машина остаются вне досягаемости. Проект написан на Go, лицензия Apache-2.0, работает на macOS (Apple silicon) и экспериментально на Linux.
Зачем нужна VM
Кодинг-агент полезен, когда ему разрешают реально действовать: ставить пакеты, запускать написанный код, поднимать серверы, ходить в сеть. На вашей машине это оставляет два плохих варианта — одобрять каждую команду вручную или запустить с --dangerously-skip-permissions и надеяться, что ничего важного не пострадает от rm -rf или утёкшего токена.
clawk предлагает третий путь. Граница изоляции — это не правило в промпте, которое агент может обойти уговорами. Это отдельная машина с собственным ядром Linux. Единственные отверстия в неё — то, что вы явно примонтировали и разрешили.
Ключевые возможности
- Полная автономия агента. VM одноразовая, сеть ограничена —
rm -rf, установка пакетов и недоверенный код не могут достичь хоста. - Запуск одной командой.
cdв репозиторий иclawk. Никаких Dockerfile, devcontainer или setup-файлов. Первая загрузка строит rootfs из образа, последующие — секунды. - Поломка без потерь. Уничтожайте и пересоздавайте свободно: код и истории разговоров агента хранятся на хосте. Теряется только диск VM.
- Настоящий Linux. Любой OCI-образ становится rootfs — полноценная ОС с нужными инструментами. Демон Docker не требуется.
- Секреты остаются у вас. Исходящий трафик фильтруется по allow-list, ssh-agent проксируется —
git pushработает без попадания ключей в VM. - Песочница на проект или тикет. Несколько параллельно; простаивающие VM автоматически освобождают память и засыпают на диск.
Установка
Требуется macOS 14+ на Apple silicon (Linux экспериментально через firecracker).
brew install clawkwork/tap/clawk
Из исходников (Go 1.26+):
git clone https://github.com/clawkwork/clawk && cd clawk
make install
Дополнительного хост-инструментария не нужно: ни Docker, ни qemu, ни sudo. Гипервизор — Apple Virtualization.framework, встроенный в бинарник.
Быстрый старт
cd ~/code/my-project
clawk # boot a sandbox + attach claude
clawk run shell # shell in the same sandbox
clawk run codex # or codex, opencode
clawk down # stop VM (state persists)
clawk attach # resume — boots if stopped
clawk destroy # remove VM (conversation history kept)
Дополнительные опции:
clawk run claude -- --resume # pass args to the agent
clawk forward add my-project 3000 # expose guest dev server on localhost:3000
clawk network allow my-project api.example.com
Сетевая модель
Исходящий трафик запрещён по умолчанию; у каждой песочницы свой allow-list. DNS резолвит всё, но TCP/UDP/ICMP к неуказанным хостам отсекаются. Популярные реестры (npm, PyPI, crates.io, GitHub, Anthropic) разрешены заранее, фильтр DNS-aware.
clawk network allow my-project api.stripe.com '*.internal.mycorp.com' 10.0.0.5
clawk network denials my-project # log of blocked attempts
clawk forward add my-project 3000 # localhost:3000 → guest dev server
Записи об отклонённых подключениях сохраняются по имени хоста, которое резолвил гостевой агент, — фактически лог того, куда агент пытался дотянуться.
Автономия по умолчанию
Агенты запускаются в режимах полного обхода подтверждений: Claude получает --dangerously-skip-permissions, Codex — --dangerously-bypass-approvals-and-sandbox. На вашей машине такие флаги безрассудны, но здесь граница VM и сетевой allow-list обеспечивают изоляцию — агент работает на полной скорости без запросов на каждое действие. Флаг --safe отключает обход для конкретной сессии.
Конфигурация: clawk.mod
Файл конфигурации не обязателен, но при необходимости используется синтаксис в стиле go.mod:
sandbox my-project (
vm (
cpu 4
memory 8GiB
image golang:1.25 # any OCI image is the rootfs
)
network ( allow api.example.com )
forwards ( 3000 )
env ( DATABASE_URL ) # names only; values come from your shell
on create ( "go mod download" )
agent (
instructions "Ask before running destructive commands."
)
)
Блок — шаблон: фиксируется при создании песочницы, чтобы запущенная VM не менялась неожиданно.
Что переживает что
clawk down |
clawk destroy |
|
|---|---|---|
| Репозиторий (коммиты, ветки) | да | да |
| Состояние агента (история, память) | да | да |
Диск VM (apt-установки, кэш, $HOME) |
нет (пересоздаётся) | нет |
Состояние агента хранится на хосте: ~/.claude/projects/ и ~/.codex/ гостевой системы лежат под ~/.clawk/namespaces/default/state/<name>/ на хосте, поэтому пересозданная песочница подхватывает старые разговоры через --resume.
Как это работает
you ──▶ clawk CLI ──▶ per-sandbox daemon (detached; owns the VM)
├─ gvproxy: in-process userspace TCP/IP stack —
│ DNS-aware outbound filter, guest can't reconfigure
├─ vsock bridge to in-guest pty-agent (no sshd)
├─ ssh-agent proxy, macOS (signing stays on host)
└─ VM: Virtualization.framework (macOS) / firecracker (Linux)
├─ clawk-init, PID 1 (no systemd, no cloud-init)
├─ your repo, live-mounted over virtio-fs
└─ claude / codex / shell on a PTY
Ключевые архитектурные решения:
- Rootfs — обычный OCI-образ. clawk pulls-ит его без демона Docker, сглаживает слои и пишет ext4-диск напрямую. Каждая песочница из того же образа — copy-on-write клон (APFS
clonefile/FICLONE). - Сеть фильтруется ниже гостя. Весь L3-стек VM (gateway, DHCP, DNS, NAT) — userspace-стек внутри процесса-демона. Даже root в госте не может изменить allow-list. Никаких iptables на хосте, никакого sudo.
- Один путь внутрь. Нет sshd, нет cloud-init: единственный контрольный канал — vsock-агент, каждый attach — свежий процесс, уничтожаемый при отключении.
Сравнение с альтернативами
- Контейнеры и devcontainers. Делят ваше ядро и видят файловую систему минус deny-правила; баг ядра или ошибочный mount раскрывают хост. clawk переносит Docker внутрь VM, а не наоборот, и не требует писать
Dockerfile. - OS-level песочницы. Инструменты вроде Anthropic sandbox-runtime накладывают ограничения на процесс на вашей реальной машине. Одна ошибка в политике раскрывает всё. clawk уносит всю нагрузку на другую машину.
- Облачные песочницы. clawk local-first: код не покидает машину, оплата не идёт по часам. Облачные подходят для флотов; clawk — для компьютера на вашем столе.
Модель безопасности
Две границы: VM (файловая система хоста невидима кроме того, что вы монтируете) и outbound allow-list (применяется в userspace ниже гостя). Ограничения: всё примонтированное и разрешённое доступно агенту — worktree доступен на запись, агент может закоммитить плохой код или запушить в любой репозиторий, достижимый через forwarded ssh-agent. Ревьюйте результат как PR от незнакомца.
Статус
Проект pre-1.0 и активно развивается: ожидайте breaking changes между релизами. CLI меняется меньше всего, внутренности — больше всего. Ничего не зафиксировано до 1.0.
- Репозиторий: https://github.com/clawkwork/clawk
- Лицензия: Apache-2.0
- Язык: Go 1.26+
- Платформы: macOS 14+ (Apple silicon), Linux (экспериментально)
Источник: https://github.com/clawkwork/clawk