Разработчик вскрыл устройство VM Claude Code и Instinct

Автор материала получил доступ к консоли внутри облачных песочниц, где выполняются сессии двух мобильных ИИ-агентов, Claude Code и стартапа Instinct, и по системным артефактам (командная строка ядра, разбивка дисков, процесс с PID 1, сетевые настройки, устройство памяти) восстановил, как устроена инфраструктура каждого.

Виртуалка Claude Code, это отдельная microVM на Firecracker (гостевая система под KVM, со своим ядром), которая загружается сразу в самописный init на Rust: процесс process_api с PID 1 монтирует диски и слушает vsock-порт 2024, через который хост управляет сессией снаружи. Диски разделены на пользовательский (vda, 256 ГБ, доступен на запись, переживает переиспользование VM) и служебные, доступные только на чтение: vdc (341 МБ), сам харнесс claude, скомпилированный на Bun бинарник размером 324 МБ; vdd (45,6 МБ), лаунчер задач; ещё пара дисков, со скиллами. Модель работает не внутри VM: запросы на инференс уходят наружу как Server-Sent Events по HTTP/2 на /v1/messages через egress-шлюз, который слушает только 443-й порт и сам подменяет TLS-сертификат (MITM, CN сертификата, «Egress Gateway ... (production)»), а адрес api.anthropic.com прописан в /etc/hosts. Входящих соединений в VM нет вовсе, единственный виденный адрес, 192.0.2.2, тестовый по RFC 5737. Авторизация, одноразовый OAuth-токен, который минтит хост, хранит его в кеше только под root и меняет при каждой загрузке. По внутренним замерам инициализация занимает около 430 мс, до запуска харнесса, около 6,4 с; когда хост забирает VM по простою (idle reclaim), процессы гибнут, но диск vda отсоединяется целым и переприсоединяется при следующей холодной загрузке, поэтому диалог выглядит непрерывным, хотя вычислительные ресурсы были уничтожены.

Instinct, молодой стартап, недавно запустившийся; автор отмечает, что за счёт устройства памяти агент ощущается скорее как настоящий ассистент, чем как чат-бот. Собственного парка виртуалок у Instinct нет: он арендует песочницы E2B ("sandbox-as-a-service"), одноразовые Ubuntu-боксы, которые отдаются агенту как временный компьютер. Конкретный экземпляр, который изучил автор: Ubuntu 22.04.5, 2 виртуальных ядра, 1,9 ГБ RAM, 29 ГБ диска. По сигнатуре (pci=off, сеть через virtio-MMIO, пустая таблица DMI, интерфейс tap0) это тоже Firecracker, но в отличие от Claude Code внутри загружается полноценная Ubuntu с systemd и графическим окружением XFCE: холодная загрузка до рабочего стола занимает около 1,26 с (265 мс ядро + 992 мс пользовательское пространство). Роль внутреннего оператора здесь играет обычный systemd-сервис envd от E2B, а не изолированный процесс с PID 1, как у Claude Code; сами песочницы E2B настраиваемые (число ядер, объём RAM и диска, тайм-аут простоя, возможность паузы со снапшотом в память вместо холодной перезагрузки), но Instinct использует скромный шаблон в 2 ядра и 1,9 ГБ.

Память агента Instinct живёт не в самой одноразовой песочнице, а в каталоге /memory, git-репозитории Markdown-файлов со связями в стиле [[wiki-links]], по которому агент ищет grep'ом. Раздел timeline/ со временем укрупняется (сырые записи → почасовые → дневные → недельные), а сам агент выступает автором коммитов в этот репозиторий, не через отдельный API памяти, а буквально пишет Markdown и коммитит его от своего имени (git-автор, «Instinct Agent agent@instinct.com»). Постоянное хранилище, тот же репозиторий, запушенный в S3 под персональным ключом пользователя, причём хранится не как отдельные файлы, а как единый git-бандл (после синхронизации ls в каталоге выглядит пустым). Авторизация push, короткоживущие STS-креды, а не постоянные ключи, поэтому утечка данных из песочницы теряет силу сама, как только истекает токен. При поиске по строкам в бинарниках tools и agent-exec-server автор не нашёл упоминаний anthropic, openai, /v1/messages, ключей API или названий моделей, судя по этому, инференс внутри самой песочницы вообще не выполняется: agent-exec-server лишь исполняет присланный с бэкенда bash, а каждый вызов инструмента (почта, облачный браузер, оплата) уходит на сервер как GraphQL-запрос к api.instinct.com, причём адрес бэкенда передаётся как аргумент запуска, а не зашит в бинарник. Инструменты Instinct устроены не как MCP, а как отдельный CLI tools с десятками команд-неймспейсов.

Ключевые факты

  • Виртуалка Claude Code, своя microVM на Firecracker с самописным Rust-init (process_api, PID 1); харнесс claude, 324 МБ Bun-бинарник на read-only диске, инференс уходит наружу через MITM-шлюз к api.anthropic.com, входящих соединений нет вовсе
  • Пользовательский диск Claude Code (vda, 256 ГБ) переживает переиспользование VM, поэтому диалог кажется непрерывным, хотя сами вычислительные процессы каждый раз уничтожаются заново
  • Instinct не держит своего парка VM, а арендует одноразовые песочницы E2B (Ubuntu 22.04.5, 2 vCPU, 1,9 ГБ RAM, 29 ГБ диска), которые по сигнатуре тоже оказались Firecracker-микровиртуалками, только с полноценным systemd и XFCE внутри
  • Память агента Instinct, git-репозиторий Markdown-файлов со wiki-ссылками в каталоге /memory, где сам агент коммитит изменения от своего имени и который пушится в S3 единым git-бандлом под короткоживущие STS-креды
  • В бинарниках Instinct не нашлось строк, указывающих на прямые вызовы моделей, судя по этому, весь инференс и вызовы инструментов идут через серверный GraphQL-API, а песочница только исполняет присланный bash

Почему это важно

Материал показывает две разные философии инфраструктуры мобильных ИИ-агентов на живом примере, а не по документации. Claude Code запечатывает «мозг» и оператора внутри изолированной microVM пользователя и максимально ограничивает её сеть и доступ к самой себе. Instinct, наоборот, держит арендованную одноразовую песочницу как чистую исполняющую среду без какого-либо инференса внутри, а всю логику и вызовы инструментов выносит на свой сервер. Это разные ответы на один и тот же вопрос, где физически находится опасная часть агента, и они по-разному распределяют риски и требования к инфраструктуре.

Кому это важно

Инженерам, которые проектируют инфраструктуру для агентов с доступом к shell и инструментам: конкретные паттерны изоляции (Firecracker, недоступный root процесс PID 1, MITM-шлюз с белым списком хостов, короткоживущие токены) и паттерн памяти (git-репозиторий Markdown-файлов, синхронизируемый в S3), это готовые решения, которые можно оценивать и заимствовать. Также интересно тем, кто разбирается в устройстве Claude Code как продукта, и тем, кто присматривается к Instinct как к новому игроку на рынке персональных ассистентов.

Как это применить

Из материала не следует ничего, что можно «включить» напрямую, это заметки постороннего наблюдателя, а не инструкция. Но два архитектурных решения годятся как образец для собственных агентных систем: разделение диска на пользовательский (persist) и служебные read-only тома с версией харнесса, и хранение долгоживущей памяти агента как git-репозитория с человекочитаемыми Markdown-файлами вместо непрозрачной базы, такое хранилище проще инспектировать и переносить.

Можно ли доверять

Сам автор называет текст неформальными заметками по результатам «осматривания» через инструмент ws-term, а не официальной документацией, ни Anthropic, ни Instinct эти детали не подтверждали. Все выводы получены пробингом изнутри гостевой системы (командная строка ядра, список дисков, поиск строк в бинарниках), а не из первоисточника, поэтому отдельные интерпретации (например, вывод об отсутствии инференса в песочнице Instinct, по отсутствию нужных строк в бинарниках) могут не отражать полную картину.

Риски и подводные камни

У обеих платформ операторская логика в том или ином виде живёт внутри пользовательской песочницы, и об этом стоит помнить тем, кто передаёт агенту чувствительные данные или доступы. Для Claude Code это компенсируется жёсткой изоляцией PID 1 и MITM-шлюзом с одним разрешённым хостом; для Instinct, тем, что инференс и вызовы инструментов вообще вынесены на сервер, а креды в песочнице короткоживущие. Но раз всё это выводы стороннего наблюдателя по артефактам одного момента, а не официальные гарантии, полагаться на них как на точное описание защиты не стоит.

«Похоже, обращений к модели изнутри самой песочницы вообще нет.»

— автор материала, по итогам поиска строк в бинарниках Instinct