Внутри Claude Code нашли секретную PaaS Anthropic, Antspace

Команда, которая строит платформу ArcBox, полноценный стек «от десктопа до платформы» в духе Railway и E2B, заметила, что почти все конкурирующие площадки для веб-агентов кодинга работают поверх Firecracker, и из любопытства решила посмотреть, как устроена веб-версия Claude Code изнутри. Обычный strace -p 1 внутри собственной сессии Claude Code превратился в полноценный реверс-инжиниринг, который вскрыл неопубликованную инфраструктуру Anthropic, включая полностью недокументированную платформу для хостинга приложений. Авторы подчёркивают: всё найдено стандартными инструментами Linux (strace, strings, objdump, go tool objdump), без эксплойтов, повышения привилегий и сетевых атак, просто потому, что нужный бинарник лежал в системе незачищенным, с полными отладочными символами.

Первый слой, сама виртуальная машина. Таблицы ACPI внутри неё подписаны идентификатором OEM FIRECK и создателем FCAT, эти строки зашиты в исходный код Firecracker, той же технологии лёгких виртуальных машин (MicroVM), на которой работают AWS Lambda и Fargate. Сессии Claude Code Web получают 4 vCPU (Intel Xeon Cascade Lake, 2,80 ГГц), 16 ГБ RAM, 252 ГБ диска и ядро Linux 6.18.5; вложенная виртуализация недоступна, потому что Firecracker намеренно вырезает у гостя флаги vmx/svm. Внутри, почти пустое дерево процессов: ни systemd, ни sshd, ни cron, ни демона логирования. Место PID 1 занимает собственный бинарник process_api, одновременно init-система и шлюз WebSocket-API; он слушает порт 2024 (WebSocket API для управления процессами) и порт 2025 (HTTP API для управления контейнером в целом).

Сессии не поднимаются с нуля, а восстанавливаются из замороженного снимка виртуальной машины, в выводе dmesg авторы нашли разрыв в 48,5 часа между созданием такого шаблона и восстановлением конкретной сессии. Initramfs, это 3,1 МБ cpio-архива, в котором лежит только один файл, /process_api; настоящая корневая файловая система Ubuntu находится на отдельном ext4-диске, который подключается уже при восстановлении, и у него значится 11 монтирований, то есть один и тот же образ переиспользован в 11 сессиях. Восстановление устроено как отдельный сценарий: process_api сбрасывает страничный кеш (иначе вернётся кеш от шаблона), пересоздаёт devtmpfs, монтирует ext4 через pivot_root, накатывает поверх squashfs-слои claude-code и env-runner, переводит системные часы через clock_settime (иначе они застревают в моменте создания шаблона), сбрасывает capability CAP_SYS_RESOURCE и только после этого начинает принимать соединения.

process_api написан на Rust поверх tokio и на деле, полноценный удалённый супервизор процессов, а не просто init. По WebSocket (порт 2024) он принимает опциональный JWT-токен, затем JSON-структуру ProcessConnection и либо создаёт новый процесс, либо переподключается к уже идущему; ввод-вывод устроен как двухфазный бинарный протокол: сначала команда ExpectStdIn/ExpectStdOut/ExpectStdErr, затем бинарные фреймы с данными и маркеры конца потока. Причин завершения процесса шесть: обычный выход, сигнал, OOM конкретного процесса, OOM всего контейнера, таймаут и остановка сервера; внутри process_api ведёт cgroups отдельно на каждый процесс (пути и для v1, и для v2), умеет усыновлять осиротевшие процессы, переподключая их к PID 1, и крутит отдельный опрос на OOM. HTTP API на порту 2025 отвечает за жизненный цикл контейнера шестью конечными точками (GET /status, POST /fs_sync, POST /shutdown, POST /auth_public_key, POST /mount_root, POST /container_name), подробно из них разобрали только /mount_root: она принимает сетевые настройки (etc_hosts, resolv_conf), сертификаты, список squashfs- и FUSE-монтирований и текущее время, то есть всё, что нужно, чтобы поднять сессию с чистого снимка; во время монтирования корень «заморожен» вызовами FIFREEZE/FITHAW.

Настоящая находка, второй слой: файл /usr/local/bin/environment-runner (он же environment-manager по симлинку). Это 27-мегабайтный Go-бинарник, собранный из закрытого монорепозитория Anthropic по пути github.com/anthropics/anthropic/api-go/environment-manager/, и, в отличие от типичной продакшен-сборки, он не зачищен: в нём остались полная отладочная информация и полная таблица символов. Именно это позволило через go tool objdump и strings восстановить структуру внутренних пакетов и список зависимостей: авторы приводят и полное дерево пакетов internal/, и таблицу зависимостей (anthropic/api-go, gorilla/websocket, mark3labs/mcp-go v0.37.0, DataDog/datadog-go v5, go.opentelemetry.io/otel v1.39.0, google.golang.org/grpc v1.79.0, spf13/cobra).

Внутри пакета tunnel/actions/deploy/ нашлись символы сразу двух клиентов развёртывания. Один, ожидаемый VercelClient: CreateDeployment шлёт POST на /v13/deployments, UploadFile, PUT на /v2/files с заголовком x-vercel-digest, а WaitForReady опрашивает статус, пока значение readyState не станет равно «READY». Второй, неожиданный AntspaceClient. Строки рядом с ним складываются в протокол развёртывания из трёх фаз: на первой, POST на адрес antspaceControlPlaneURL с телом application/json и Bearer-токеном авторизации, на второй, загрузка собранного артефакта dist.tar.gz через multipart/form-data, на третьей, стриминг статуса развёртывания в формате application/x-ndjson по шкале состояний от packaging до deployed; в отличие от Vercel, здесь сам адрес API задаётся переменной, а не фиксированным путём. Поиск слова «Antspace» по сайту, GitHub, блогу, документации, LinkedIn, вакансиям, докладам на конференциях и патентным заявкам Anthropic не дал ни одного результата: платформа никогда и нигде публично не упоминалась. Авторы предполагают, что имя происходит от «Ant» (по их словам, внутреннее прозвище сотрудников Anthropic) и «Space» (хостинговое пространство), по той же модели, что у Heroku или Vercel. По их прочтению, то, что Anthropic написала собственный протокол развёртывания с нуля вместо обёртки над API Vercel, говорит о стратегической ставке на свою платформу, а не о разовой интеграции.

«Baku», внутреннее кодовое имя конструктора веб-приложений на claude.ai: когда пользователь просит Claude в вебе собрать веб-приложение, поднимается именно среда Baku. Она разворачивает шаблон на Vite, React и TypeScript (из /opt/baku-templates/vite-template), dev-сервер которого управляется через supervisord и пишет лог в /tmp/vite-dev.log, и автоматически создаёт проект Supabase, открывая шесть MCP-инструментов: provision_database (создать проект Supabase), execute_query (выполнить SQL-запрос), apply_migration (версионированные миграции схемы с автогенерацией типов), list_migrations (список применённых миграций), generate_types (перегенерировать TypeScript-типы из схемы БД) и deploy_function (развернуть Supabase Edge Function). У Baku есть pre-stop-хук, который не даёт завершить сессию, если остались незакоммиченные или неотправленные git-изменения, если в логе dev-сервера Vite есть ошибки или если tsc --noEmit находит ошибки типов. Цель развёртывания по умолчанию снова Antspace, а не Vercel: Vercel остаётся лишь альтернативой. Черновики Baku хранятся в .baku/drafts/, наброски, в .baku/explorations/, а удалённый git-репозиторий не настроен вовсе: версионирование целиком локальное.

Пятый слой, BYOC, «принеси своё облако»: в пакете envtype/ есть две реализации среды, anthropic (виртуалки Firecracker на стороне Anthropic) и byoc. BYOC позволяет корпоративным клиентам гонять environment-runner на собственной инфраструктуре, пока оркестрацией сессий по-прежнему занимается API Anthropic. Режим сессии по умолчанию, resume-cached, самый быстрый перезапуск за счёт переиспользования уже готового состояния; авторизацию на уровне контейнера подставляет отдельный компонент, containProvideAuthRoundTripper; перед fetch система проверяет, не существует ли уже нужная ветка задачи на удалённом репозитории; у BYOC есть подтипы antspace (внутренний контур Anthropic) и baku (конструктор Vite-проектов), а управлением арендой (lease) в Kubernetes занимается отдельный пакет podmonitor. Всего в API-поверхности BYOC авторы насчитали 7 конечных точек и шесть из них описали по отдельности: /v1/environments/whoami (единственная с явно указанным путём), опрос и подтверждение задач, контекст сессии, подпись кода, WebSocket-канал воркера и прокси запросов к базе Supabase.

Свой вывод авторы формулируют жёстко: перед ними не просто ИИ-ассистент для кода, а архитектура вертикально интегрированной ИИ-платформы полного цикла, в которой путь пользователя от идеи до продакшена целиком проходит внутри инфраструктуры Anthropic. Это одновременно конкурирует с Vercel и Netlify в хостинге и развёртывании, с Replit, Lovable и Bolt в генерации ИИ-приложений и с Supabase и Firebase в управляемом бэкенде за счёт тесной интеграции; структурное преимущество Anthropic, по мнению авторов, в том, что ей принадлежит весь стек целиком, от модели, понимающей запрос пользователя, до среды выполнения, которая пишет код, и платформы, которая размещает готовое приложение.

Авторы ещё раз подчёркивают, что все находки получены стандартными утилитами Linux внутри собственной сессии: гипервизор определила команда dmesg | grep FIRECK, PID 1, cat /proc/1/cmdline с флагом --firecracker-init, метаданные Go-сборки (модуль, отметка монорепозитория (devel), список зависимостей), go version -m, структуру пакетов, objdump -t по незачищенному бинарнику, а протоколы Vercel и Antspace конкретно, та же команда objdump -t с фильтром по deploy; поведение в рантайме подтвердил strace -p 1. Главный вывод об этом методе: главная причина, по которой всё стало возможно без Ghidra и часов декомпиляции, то, что бинарник попал в продакшен незачищенным, с полной отладочной информацией. При этом строка версии Antspace несёт префикс staging-, то есть платформа ещё на раннем, внутреннем этапе, хотя сам протокол развёртывания, по оценке авторов, уже зрелый и годный для продакшена. Выпустит ли Anthropic Antspace как публичный продукт или оставит его внутренней инфраструктурой Claude Code Web, авторы называют пока неизвестным и завершают материал тем, что амбиции Anthropic шире, чем просто LLM и ИИ-агент: компания хочет владеть каждым слоем стека, на котором приложения создаются по устной команде.

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

  • Веб-версия Claude Code работает внутри виртуальных машин Firecracker (4 vCPU Intel Xeon Cascade Lake, 2,80 ГГц; 16 ГБ RAM; 252 ГБ диска; Linux 6.18.5); сессии не грузятся с нуля, а восстанавливаются из снимков VM, а образ файловой системы переиспользуется, счётчик монтирований в разобранном случае дошёл до 11.
  • Внутри 27-мегабайтного незачищенного Go-бинарника environment-runner из приватного монорепозитория Anthropic нашли код клиента для недокументированной платформы развёртывания Antspace, упоминаний о ней нет ни на сайте, ни в блоге, ни в вакансиях, ни в патентах Anthropic.
  • «Baku», внутреннее название конструктора веб-приложений на claude.ai: поднимает шаблон на Vite, React и TypeScript, автоматически создаёт проект Supabase через шесть MCP-инструментов и по умолчанию деплоит именно в Antspace, а не в Vercel.
  • Режим BYOC («принеси своё облако») позволяет корпоративным клиентам запускать среду выполнения на своей инфраструктуре, пока сессиями по-прежнему управляет API Anthropic; в бинарнике нашли семь конечных точек его API.
  • Все находки получены без эксплойтов, повышения привилегий и сетевых атак, стандартными Linux-утилитами (strace, objdump, go tool objdump) внутри собственной сессии Claude Code; главная причина успеха в том, что бинарник поставили без strip, с полной отладочной информацией.

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

История показывает не сбой, а стратегию: Anthropic строит не только модель и чат-агента, а полный конвейер от идеи до работающего в интернете приложения, свою среду выполнения кода (Firecracker и process_api), свой конструктор веб-приложений (Baku) и свою платформу хостинга и развёртывания (Antspace) вместо того, чтобы просто подключить чужой Vercel. То, что протокол развёртывания написан с нуля, а не обёрнут вокруг API Vercel, авторы читают как сигнал: для Anthropic это не второстепенная интеграция, а стратегическая ставка на собственную инфраструктуру, компания хочет владеть каждым звеном цепочки, а не отдавать хостинг партнёрам.

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

Тем, кто строит похожие площадки для ИИ-агентов кодинга: Railway, E2B, Replit, Lovable, Bolt и сам ArcBox авторов статьи, Antspace и Baku оказываются их прямыми, ранее неизвестными конкурентами. Корпоративным заказчикам Claude Code Web, которые рассматривают режим BYOC для запуска на собственном облаке из соображений резидентности данных или комплаенса. И инженерам эксплуатации: то, что Anthropic отправила в продакшен 27-мегабайтный Go-бинарник без strip и с полной таблицей символов, предметный урок о том, как небрежная сборка раскрывает внутренние кодовые имена и структуру API конкурентам и исследователям.

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

Внедрить у себя здесь нечего, это чужая закрытая инфраструктура, а не открытый инструмент. Но методика воспроизводима как чек-лист аудита чужого рантайма: dmesg | grep FIRECK и ACPI-таблицы, чтобы определить гипервизор, cat /proc/1/cmdline, чтобы найти PID 1, go version -m, чтобы вытащить метаданные Go-сборки, objdump -t по незачищенному бинарнику, чтобы восстановить структуру пакетов и список методов, точечный strings по известным байтовым последовательностям и JSON-тегам структур, чтобы понять протокол передачи данных, strace -p 1, чтобы увидеть поведение в рантайме. А тем, кто сам собирает бинарники для продакшена, урок обратный: strip и урезание отладочной информации, не формальность, а главное, что стоит между посторонним и полной картой внутренней архитектуры.

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

Материал, не заявление Anthropic, а вывод стороннего наблюдателя: авторы прямо пишут, что строят конкурирующую платформу ArcBox и позиционируют её рядом с Railway и E2B, то есть смотрели на Claude Code Web отчасти как конкуренты, изучающие чужую архитектуру. Автор материала, AprilNEA, публикация датирована 18 марта 2026 года; в тексте по большей части речь идёт от «мы». Ник пользователя, который принёс ссылку на Hacker News, не автор материала. Метод при этом прозрачен и проверяем: авторы прямо указывают, что не использовали эксплойты, повышение привилегий и сетевые атаки, а каждый вывод подкреплён конкретной командой и строкой из бинарника. Стратегическое толкование, зачем это Anthropic, откуда взялось имя «Antspace», личная интерпретация авторов, не подтверждённая компанией; версия Antspace помечена префиксом staging-, то есть проект ещё внутренний и может измениться до любого публичного анонса или вообще остаться незапущенным; сами авторы честно завершают материал тем, что дальнейшая судьба Antspace, публичный запуск или внутренняя инфраструктура, им самим пока не известна.

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

Главный риск, принять реконструкцию по бинарнику за официальную дорожную карту Anthropic: ни один вывод о планах компании (выпустит ли она Antspace публично, откуда взялось название «Ant») не подтверждён самой Anthropic и подан авторами как их собственная догадка. Часть протокола описана не до конца: у HTTP Control API все шесть конечных точек названы, но подробно разобран только /mount_root; у BYOC API из семи явный путь указан только у /v1/environments/whoami; а для Antspace, в отличие от Vercel, восстановлены метод, формат и авторизация каждой фазы, но не сам адрес, он задаётся переменной antspaceControlPlaneURL, а не фиксированным путём. И сам разбор дался настолько легко в первую очередь потому, что бинарник Anthropic оказался незачищенным именно в этот момент (со strip потребовались бы Ghidra и часы декомпиляции, но разбор остался бы возможным): это могли уже поправить к моменту публикации, а сам Antspace остаётся недокументированным внутренним продуктом, а не тем, что можно опробовать самостоятельно.