Архитектура

Как устроен Claude Code изнутри: разбор утечки 512 000 строк исходного кода

31 марта 2026 года из npm-пакета Claude Code утёк полный исходный код — 512 000 строк TypeScript. Разбираю архитектурные решения, которые делают этот агентный CLI быстрее конкурентов, и скрытые фичи, которые намекают на будущее Anthropic.

3 апреля 2026 г.
8 мин чтения
Claude CodeAnthropicагентные системыутечка кодаархитектураKAIROSprompt cachingмультиагентные системы

31 марта 2026 года исследователь Chaofan Shou обнаружил, что npm-пакет Claude Code версии 2.1.88 содержит файл main.js.map — source map, из которого восстанавливается полный исходный код. Не эксплойт, не взлом — просто .npmignore не исключил служебный файл. Anthropic закрыли дыру за часы, но зеркала на GitHub разошлись мгновенно.

Результат: 512 000 строк строго типизированного TypeScript, ~1 900 файлов, главный компонент main.tsx на 785 КБ. Это не обёртка над чат-API. Это полноценная агентная система с собственным рендерером, оркестратором и системой управления памятью.

Разберу ключевые архитектурные решения — почему они работают и что из этого можно вынести для собственных агентных систем.

Потоковый агентный цикл: streaming + parallel tools

Центральный модуль — QueryEngine.ts, 46 000 строк. Один файл управляет всеми вызовами LLM API, стримингом, кэшированием и оркестрацией инструментов.

Ключевое решение: инструменты запускаются параллельно с генерацией текста, а не после неё. В классическом агентном цикле модель генерирует ответ → парсит tool calls → выполняет → получает результат → генерирует снова. Последовательный цикл. В Claude Code поток токенов и исполнение инструментов идут одновременно.

Почему это быстрее: латентность определяется самым длинным параллельным путём, а не суммой всех шагов. Если модель вызывает три инструмента, они стартуют одновременно. Пока один читает файл, другой выполняет bash-команду, третий проверяет git-статус — модель уже получает первые результаты и продолжает генерацию.

Это не тривиально в реализации. Нужен механизм, который корректно обрабатывает частичные результаты, отменяет зависимые инструменты при ошибке, и управляет контекстным бюджетом в реальном времени.

40+ инструментов с изолированными правами

Система инструментов — не плоский список функций. Каждый инструмент — самостоятельный модуль с собственной input-схемой (Zod v4), уровнем привилегий и логикой исполнения.

BashTool может менять состояние системы — у него одни права. FileReadTool только читает — другие права. Нет глобального переключателя «разрешить всё» или «запретить всё». Каждый инструмент проходит собственную проверку перед выполнением.

Базовое определение инструмента — ~29 000 строк TypeScript. Кажется много, но это цена строгой валидации, изоляции и обработки ошибок на каждой границе.

Самый интересный инструмент — AgentTool. Он позволяет системе порождать суб-агентов как обычный вызов инструмента. Никакого отдельного оркестрационного слоя: суб-агент — такой же первоклассный элемент реестра, как чтение файла или запуск bash.

3-уровневая оркестрация: workers → coordinators → teams

Многоагентная система работает по паттерну «mailbox»:

  1. Worker — агент, выполняющий конкретную задачу в изолированном Git worktree
  2. Coordinator — управляющий агент, раздающий задачи workers и контролирующий результаты
  3. Team — группа координаторов для масштабных задач

Критический элемент: worker не может самостоятельно одобрить опасную операцию. Он отправляет запрос в «почтовый ящик» координатора и ждёт. Координатор оценивает и решает. Атомарный механизм claim не позволяет двум workers обработать один и тот же запрос одновременно.

Изоляция через Git worktrees — элегантное решение. Каждый worker получает собственную рабочую копию репозитория. Параллельные агенты не затирают файлы друг друга, а результаты мёржатся через стандартный git.

Prompt caching: static/dynamic граница

Claude Code использует двухслойное кэширование промптов, оптимизированное под особенности API Anthropic.

Статическая часть — системный промпт, описания инструментов, базовые инструкции. Эта часть одинакова между запросами и кэшируется на стороне API. При повторных вызовах эти токены не пересчитываются.

Динамическая часть — текущий контекст диалога, результаты инструментов, пользовательские файлы. Она меняется с каждым запросом.

Граница между ними тщательно выверена. Чем больше попадает в статическую часть — тем выше процент cache hit и тем дешевле каждый запрос. Потому системный промпт и описания инструментов структурированы так, чтобы оставаться стабильными максимально долго.

3 стратегии сжатия контекста

Для длинных сессий критична работа с контекстным окном. Claude Code использует три стратегии:

MicroCompact — локальное редактирование кэшированного контента без API-вызовов. Старые выводы инструментов обрезаются прямо в памяти. Быстро, бесплатно, прозрачно.

AutoCompact — срабатывает при приближении к потолку контекстного окна. Резервирует буфер в 13 000 токенов, генерирует структурированное саммари до 20 000 токенов. Встроенный circuit breaker: после трёх неудачных попыток сжатия — остановка. Никаких бесконечных циклов.

Full Compact — полное сжатие диалога с повторной инъекцией недавно использованных файлов (до 5 000 токенов на файл), активных планов и схем навыков. После сжатия рабочий бюджет сбрасывается до 50 000 токенов.

Это проектирование «от отказа»: система заранее готова к тому, что контекст закончится, и знает, что с этим делать.

Полноценный Vim и кастомный React-рендерер

Два неожиданных компонента:

Vim-режим реализован как конечный автомат (FSM) с 11 состояниями. Не эмуляция пяти команд — полноценная поддержка модального редактирования с visual mode, операторами и motion-командами. Для CLI-инструмента, целевая аудитория которого — разработчики, это попадание в потребность.

React 19 рендерер с double-buffered rendering для терминального UI. Claude Code использует React + Ink (библиотека для CLI-интерфейсов на React-компонентах). Double buffering устраняет мерцание при быстром обновлении экрана — критично, когда streaming-вывод обновляет терминал десятки раз в секунду.

Стек: Bun вместо Node.js (быстрый старт, нативная компиляция), React + Ink для UI, Zod v4 для валидации. Нестандартный, но внутренне согласованный выбор.

Скрытые фичи: KAIROS, autoDream, ULTRAPLAN, Buddy

108 модулей скрыты за feature flags и удалены из production-сборки через compile-time dead code elimination в Bun. Самые интересные:

KAIROS — фоновый daemon

KAIROS (от греческого «подходящий момент») — персистентный ассистент, работающий в фоне даже при закрытом терминале. Отправляет периодические «tick»-запросы, ведёт append-only логи наблюдений, может проактивно поднимать вопросы через флаг PROACTIVE.

Упоминается в коде больше 150 раз. Это не заглушка — это архитектура будущего продукта.

autoDream — консолидация памяти

Когда пользователь уходит в idle или вызывает SleepTool, запускается autoDream — «рефлексивный проход по файлам памяти». Промпт инструктирует Claude Code: сканировать транскрипты дня, извлекать новую информацию, консолидировать её без дубликатов и противоречий, удалять устаревшие воспоминания. Цель — «синтезировать то, что узнал за день, в устойчивые организованные воспоминания, чтобы будущие сессии ориентировались быстро».

ULTRAPLAN — 30-минутное планирование на Opus

Выносит фазу планирования на облачный Cloud Container Runtime с моделью Opus 4.6. До 30 минут на разработку плана. Результат можно утвердить через браузер или телефон до начала выполнения. Для сложных задач, где ошибка в плане стоит дорого — осмысленная архитектура.

Buddy — Tamagotchi-пет

Виртуальный компаньон: 18 видов (утка, дракон, аксолотль, капибара, гриб, призрак...), уровни редкости от Common до Legendary (1% шанс), 5 характеристик (DEBUGGING, PATIENCE, CHAOS, WISDOM, SNARK), косметические шляпы. Вид определяется детерминированно из хэша userId — один пользователь всегда получает одного и того же питомца.

По внутренним комментариям (неподтверждённым), тизер планировался на 1–7 апреля, полный запуск — май 2026.

Undercover Mode и этический контекст

Отдельно стоит упомянуть: код содержит проверку USER_TYPE === "ant", идентифицирующую сотрудников Anthropic. При работе в публичном репозитории автоматически включается Undercover Mode: инъекция промпта «не раскрывать, что ты ИИ», удаление Co-Authored-By из git-метаданных, скрытие внутренних кодовых имён.

Ирония: система Undercover Mode, созданная для предотвращения утечек внутренних кодовых имён, сама утекла в .map-файле.

90% кода написано самим Claude Code

По данным анализа коммитов и метаданных, ~90% кодовой базы написано при помощи Claude Code. Инструмент буквально создал сам себя. Это и доказательство зрелости агентного подхода к разработке, и интересный философский кейс — автореферентная система, где продукт и инструмент его создания совпадают.

Что это значит для индустрии

Для архитекторов агентных систем: паттерны из Claude Code — mailbox-координация, трёхуровневое сжатие контекста, изоляция инструментов — экспортируемы. Необязательно воспроизводить 512 000 строк, чтобы использовать ключевые идеи.

Для рынка AI-инструментов: KAIROS + autoDream намекают на переход от реактивных ассистентов к проактивным. Anthropic строит не просто кодинг-агента, а persistent agent — систему, которая понимает контекст работы пользователя без повторных объяснений.

Для вопросов безопасности: утечка произошла из-за одного пропущенного правила в .npmignore. Ни одна система подготовки к утечкам (включая Undercover Mode) не спасла от банальной ошибки в конфигурации пайплайна. Это урок для любой команды, которая публикует npm-пакеты.

Claude Code — не просто CLI-обёртка над API. Это полноценная операционная система для агентной разработки, спроектированная от отказоустойчивости, а не от фич. И самое интересное — то, что скрыто за feature flags, говорит о будущем больше, чем то, что доступно сегодня.

Автор: Алик Завалишев

Эксперт по ИИ и автоматизации процессов

Больше статей