← Блог

Глубокий анализ архитектуры Claude Code: что раскрывает утёкший исходный код

Утёкший исходный код Claude Code обнажил 512 тысяч строк производственного TypeScript. Полный разбор архитектуры — система инструментов, движок запросов, паттерны мульти-агентов и сжатие контекста.

9 min read
Глубокий анализ архитектуры Claude Code: что раскрывает утёкший исходный код

Всем привет, я Дора. В марте 2026 года я не искала никаких кроличьих нор. В мою ленту прилетело сообщение: «​Исходный код Claude Code утёк через map-файл в их реестре npm.​»

Я закрыла вкладку и не оглядывалась.

То, что последовало дальше, стало одним из по-настоящему интересных вечеров, проведённых мной за изучением того, как в действительности устроен производственный AI-инструмент. Не из-за драмы с утечкой — это быстро приедается, — а потому что код представляет собой редкую вещь: реальный, выпущенный, коммерчески доминирующий агентный CLI, изученный с точностью до 512 000 строк.

Вот что я заметила.

Почему утёкший исходник — редкая возможность для изучения архитектуры

После утечки Claude Code источник всплыл — обнажённый через неправильно настроенный .map-файл в собственном npm-пакете Anthropic — и разработчики быстро поняли, что это не обёртка вокруг chat API. По данным разбора инцидента на cybersecuritynews.com, утечка включала около 1900 файлов и более 512 000 строк строгого TypeScript, причём только основная точка входа весила 785 КБ.

Сам стек уже интересен: Bun в качестве среды выполнения (не Node.js), React с Ink для отрисовки терминального UI и Zod v4 для валидации схем повсюду. Использование паттернов React-компонентов в CLI означает управление состоянием, перерендеры и компонуемые UI-компоненты прямо в терминале. Это намеренный, смелый выбор.

Что делает это достойным изучения помимо мемов: паттерны архитектуры Claude Code здесь применимы к любой команде, создающей серьёзные агентные системы.

Система инструментов — 40+ самодостаточных модулей с разграничением прав доступа

Первое, что бросилось мне в глаза — насколько чисто изолирована система инструментов. Каждый инструмент определяет собственную входную схему, уровень прав и логику выполнения — независимо. Никакого общего изменяемого состояния, просачивающегося между инструментами.

BashTool и FileReadTool находятся в одном реестре, но имеют принципиально разные профили риска. Выполнение Bash может изменять состояние системы; чтение файлов — только чтение. Архитектура относится к ним соответственно, ограждая каждый собственным уровнем прав, а не применяя единую политику. Это разделение имеет огромное значение в производственных агентных системах, где модель прав, просачивающаяся между инструментами, — это проблема безопасности и надёжности, ждущая своего часа.

AgentTool — хитроумный. Он позволяет системе порождать субагентов просто как ещё один вызов инструмента — без специального слоя оркестрации, без отдельной модели процессов. Субагенты — полноправные граждане того же реестра инструментов. Это проектное решение делает архитектуру плоской и предсказуемой.

Одно только базовое определение инструмента охватывает около 29 000 строк TypeScript. Это не раздутость — именно так выглядит строгая валидация схем, применение прав доступа и обработка ошибок в таком масштабе. Официальная документация Anthropic по Claude Code подтверждает эту ориентированную на инструменты философию: именно инструменты делают систему агентной в принципе.

Движок запросов в 46 000 строк — настоящий мозг Claude Code

QueryEngine.ts — 46 000 строк. Дайте этому осесть на секунду.

Это модуль, обрабатывающий все вызовы LLM API, потоковую передачу, кеширование и оркестрацию. В одном файле. Это может звучать как тревожный сигнал — и в зависимости от соглашений вашей кодовой базы вы были бы правы, задавшись вопросом, — но логика последовательна: всё, что касается API модели, находится в одном месте, а значит, логика повторных попыток, обработка ограничений частоты запросов, управление бюджетом контекста и ошибки потоковой передачи осмысляются вместе.

Самовосстанавливающийся цикл запросов — это то, что застало меня врасплох. Когда бюджет контекста приближается к своему пределу, движок не падает и не просит помощи. Он автоматически запускает сжатие, вырезая буфер до потолка и генерируя структурированное резюме того, что обсуждалось. Это не костыль — это спроектированное поведение. Для всех, кто создаёт длительные сессии агентов, этот паттерн напрямую заслуживает изучения.

Мультиагентная оркестрация — координатор, воркеры и паттерн почтового ящика

Мультиагентная система использует то, что утёкший исходник называет паттерном почтового ящика для опасных операций. Вот что это означает на практике: воркер-агент, выполняющий задачу, не может самостоятельно одобрить высокорисковую операцию. Вместо этого он отправляет запрос в почтовый ящик координатора и ждёт. Координатор оценивает и либо одобряет, либо отклоняет.

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

Это существенное отступление от наивных мультиагентных конструкций, где каждый агент действует с полной автономией. Разделение координатор/воркер с воротами одобрения — вот как вы получаете параллелизм без хаоса. Командам, создающим слои оркестрации для собственных агентных систем, стоит изучить документацию Anthropic по агентным паттернам перед разработкой собственных.

Трёхуровневое сжатие контекста — проектирование для долгих сессий

Это, пожалуй, наиболее непосредственно полезный инженерный фрагмент во всей кодовой базе для всех, кто создаёт производственные AI-приложения.

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

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

AutoCompact срабатывает, когда разговор приближается к потолку контекстного окна. Он резервирует буфер в 13 000 токенов, затем генерирует структурированное резюме сессии объёмом до 20 000 токенов. Есть встроенный автоматический выключатель — после трёх последовательных сбоев сжатия он прекращает повторные попытки. Никаких бесконечных циклов.

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

Примечательно то, что эта архитектура подразумевает для инструментов, полностью пропускающих сжатие. Агентные инструменты, не управляющие бюджетом контекста, просто потерпят неудачу в масштабе — тихо деградируя или натыкаясь на жёсткие ошибки. Трёхуровневый подход — редкий пример проектирования для долговечности сессий с самого начала, а не прикручивания этого позднее.

Флаги функций как архитектура — 108 модулей, которых нет в продакшене

Одна из менее обсуждаемых находок из утёкшего исходника: 108 модулей с флагами функций, вырезанных из внешних сборок через мёртвое устранение кода Bun во время компиляции.

KAIROS, VOICE_MODE, DAEMON — их не существует в версии, которую вы устанавливаете. Код присутствует в исходнике, но Bun устраняет его во время компиляции на основе конфигурации флагов функций. Производственный бандл поставляется чистым. Именно так вы итерируете над новыми возможностями, не трогая то, что уже в руках пользователей.

Ирония хорошо задокументирована: Undercover Mode — подсистема, специально разработанная для предотвращения появления внутренних кодовых имён в git-коммитах или выводах, — присутствовала в утёкшем исходнике. Система, созданная для предотвращения утечек, не смогла предотвратить саму утечку. Не катастрофический провал безопасности, но поучительный — о том, где риски действительно накапливаются в пайплайнах доставки программного обеспечения.

Телеметрия, встроенная в основной цикл

Два телеметрических сигнала из утёкшего исходника, о которых я продолжаю думать:

Метрика раздражения отслеживает частоту ругательств как UX-сигнал. Если пользователи ругаются на инструмент, что-то идёт не так — это опережающий индикатор, а не запаздывающий.

Счётчик «continue» отслеживает, как часто пользователи печатают слово «continue» в середине сессии. Для агентного CLI это косвенный показатель остановок — моментов, когда агент потерял импульс и человеку пришлось его подтолкнуть.

Ни один из них не является показателем тщеславия. Оба выявляют конкретные режимы сбоев, которые стандартная аналитика упустила бы. Если вы создаёте какой-либо AI-продукт с расширенными сессиями взаимодействия, инструментирование поведения агентов таким образом стоит инженерных затрат.

Что это говорит разработчикам о выборе стека

Честный вывод из изучения этой архитектуры claude code: создание производственного агентного CLI с нуля — это существенные инженерные обязательства. Система инструментов, движок запросов, мультиагентная оркестрация, сжатие контекста и телеметрия вместе представляют годы итераций, а не месяцы.

Это не аргумент против создания. Это аргумент в пользу ясного понимания того, за что вы беретёсь. Паттерны вроде системы одобрения через почтовый ящик и трёхуровневого сжатия экспортируемы — вам не нужно 512 000 строк для реализации основных идей.

Там, где меняется расчёт «создавать vs покупать» — в доступе к моделям и агрегации. Архитектура предполагает прямой доступ к единственному поставщику модели. Команды, работающие с несколькими поставщиками моделей или создающие продукты, которые должны оставаться независимыми от модели, сталкиваются с совершенно другим набором компромиссов.

Паттерны здесь стоит заимствовать. Сложность стоит понять, прежде чем брать на себя обязательство воспроизводить её.

FAQ

Чем система инструментов Claude Code отличается от стандартного вызова функций?

Стандартный вызов функций обращается с инструментами как с плоским списком. Claude Code добавляет ворота прав доступа для каждого инструмента, изолированные контексты выполнения и валидацию схем на каждой границе — предотвращая утечку состояния между инструментами и обеспечивая доступ с минимальными привилегиями, что важно, когда BashTool может изменять состояние системы.

Что такое паттерн почтового ящика и когда разработчикам следует его использовать?

Он направляет опасные операции от воркер-агентов к координатору для одобрения, а не выполняет их автономно. Используйте его всякий раз, когда у вас есть параллельное выполнение агентов и вам нужен человек в цикле или иерархический механизм одобрения для высокорисковых действий. Стоимость — пропускная способность, выгода — безопасность.

Как Claude Code справляется с ограничениями контекстного окна в масштабе?

Трёхуровневое сжатие: MicroCompact (локальные правки, без затрат на API), AutoCompact (срабатывает вблизи лимитов, генерирует структурированное резюме с зарезервированным буфером токенов) и Full Compact (полное сжатие разговора с выборочным повторным вводом файлов). Спроектировано для долгих сессий без ручного вмешательства.

Что такое флаги функций во время компиляции и почему производственные AI-инструменты их используют?

Они позволяют коду для невыпущенных функций существовать в исходнике, не появляясь в производственных сборках. Bun устраняет отключённый флагами код во время компиляции, поэтому внешние пользователи никогда не встречают функции, которые ещё не готовы — отделяя поставку от готовности.

Законно ли изучать и ссылаться на утёкший исходник для архитектурного вдохновения?

Стоит обращаться с этим осторожно. Утёкший исходник является интеллектуальной собственностью Anthropic. Изучение архитектурных паттернов в образовательных целях находится в иной плоскости, чем прямое копирование кода. Официальная документация Anthropic остаётся подходящим справочником для всего, что вы строите поверх их систем. В случае сомнений проконсультируйтесь с собственным юрисконсультом.

То, к чему я возвращаюсь снова и снова — насколько большая часть этой архитектуры посвящена изящному управлению сбоями. Автоматические выключатели при сжатии, паттерн почтового ящика для опасных операций, изоляция прав между инструментами — это не оптимистичные конструкции. Их создавали люди, которые видели, как всё идёт не так, и решили спроектировать систему с учётом этого.

Это иная зрелость, нежели скорость разработки функций.

Ладно, на сегодня всё. До следующего раза.

Предыдущие публикации:

Поделиться