clawk: одноразовые VM для безопасной работы AI-агентов

· 2 мин чтения
ai-agents sandbox virtualization security tools
📂 Исходный код на GitHub

Disposable, network-restricted Linux VMs for AI coding agents. Запускает Claude Code, Codex или shell внутри изолированной VM с allow-list сетью и root-доступом в гостевой системе.

clawk: одноразовые VM для безопасной работы AI-агентов

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