31 марта 2026 года Anthropic случайно включили source map в npm-пакет Claude Code. 59.8 МБ. Около 500 000 строк TypeScript. Полная кодовая база флагманского ИИ-инструмента оказалась открыта.
Про сам факт утечки и пасхалки уже писали все. Я разобрал то, что интересно мне как практику: внутреннюю архитектуру. Как Anthropic строит агента, который реально работает с кодом. Какие паттерны можно забрать в свои проекты.
Это не пересказ новостей. Это разбор инженерных решений.

Зачем разбирать чужую архитектуру
Claude Code -- один из немногих production-grade ИИ-агентов. Не демо, не прототип. Инструмент, которым ежедневно пользуются тысячи разработчиков. Он читает файлы, пишет код, запускает команды в терминале, работает с Git.
Когда такая система становится доступна для изучения, это редкий шанс. Обычно мы видим только API и документацию. Здесь видно всё: как устроен цикл агента, как обрабатываются ошибки, как система решает, какой инструмент использовать.
Я выделил пять архитектурных слоёв, которые формируют Claude Code. Каждый содержит конкретные решения, полезные для любого, кто строит ИИ-агентов.
Урок 1. Система инструментов -- модульность вместо монолита
Первое, что бросается в глаза в коде -- система инструментов (tools). Claude Code не делает всё сам. Он вызывает отдельные модули: чтение файлов, запись, поиск, выполнение команд в bash, работа с Git.
Каждый инструмент -- изолированный модуль со своей валидацией входных данных, обработкой ошибок и форматированием результата. Инструмент для чтения файлов ничего не знает про инструмент для запуска команд. Они не зависят друг от друга.
Внутри кода обнаружились 44 инструмента. Публично документированы из них далеко не все. Часть -- внутренние, часть -- экспериментальные.
Вот ключевые группы:
Файловая система -- Read, Write, Edit, Glob, Grep. Не один инструмент "работа с файлами", а пять специализированных. Read читает. Write создаёт новые файлы. Edit вносит точечные правки. Glob ищет по шаблонам имён. Grep ищет по содержимому.
Системные -- Bash, которая запускает произвольные команды. Но не просто exec. Внутри -- тайм-ауты, песочница, фильтрация опасных команд, парсинг вывода.
Агентные -- SubAgent для делегирования подзадач другим экземплярам Claude. Task для управления параллельными процессами.
MCP-инструменты -- динамически подключаемые через Model Context Protocol. Об этом отдельно ниже.
Урок для практики: не пытайтесь сделать один универсальный инструмент. Делайте много маленьких, специализированных. Каждый с чёткой ответственностью, входом и выходом. Агент сам разберётся, какой вызвать.

Урок 2. Агентный цикл -- думать, действовать, наблюдать
Ядро Claude Code -- это цикл "think-act-observe". Агент получает задачу, выбирает действие, выполняет его, анализирует результат и решает, что делать дальше.
В коде это реализовано через конечный автомат с несколькими состояниями:
- Планирование -- агент анализирует задачу, определяет, какие инструменты нужны.
- Выполнение -- вызов конкретного инструмента с конкретными параметрами.
- Наблюдение -- парсинг результата. Успех? Ошибка? Нужны дополнительные данные?
- Решение -- продолжить цикл или вернуть результат пользователю.
Каждая итерация цикла -- это один вызов API к модели Claude. Агент отправляет историю диалога, получает ответ с tool_use, выполняет инструмент, добавляет результат в историю и отправляет снова.
Важный паттерн: retry с экспоненциальным backoff. Если инструмент вернул ошибку, агент не падает. Он анализирует ошибку и пробует альтернативный подход. Файл не найден -- поищет в другом месте. Команда завершилась с ошибкой -- попробует другую команду.
В коде нашёлся механизм "самокоррекции" -- если агент делает несколько неудачных попыток подряд, он останавливается и переформулирует подход. Не бесконечный цикл, а осмысленный откат.
Урок для практики: агентный цикл должен быть устойчивым к ошибкам. Закладывайте retry, fallback-стратегии и лимиты итераций. Агент, который падает на первой ошибке, бесполезен в продакшене.
Урок 3. Модель разрешений -- безопасность без паранойи
Это, пожалуй, самая продуманная часть архитектуры. Claude Code работает в терминале с реальным доступом к файловой системе. Одна неверная команда -- и можно удалить проект или слить секреты.
Anthropic решили эту проблему через трёхуровневую модель разрешений:
Уровень 1: статические правила. Определённые действия запрещены всегда. Нельзя запускать rm -rf /. Нельзя читать .env файлы с секретами. Нельзя пушить в main без подтверждения. Эти правила зашиты в код и не зависят от пользователя.
Уровень 2: пользовательские разрешения. Через CLAUDE.md и настройки проекта пользователь определяет, что агент может делать в этом конкретном репозитории. Можно разрешить деструктивные Git-операции. Можно запретить выход за пределы проектной директории.
Уровень 3: runtime-подтверждения. Потенциально опасные действия требуют явного подтверждения пользователя. Перед выполнением bash-команды, перед записью в файл, перед деструктивной Git-операцией -- агент останавливается и спрашивает.
В коде видно, что каждый инструмент имеет атрибут "permission level". Чтение -- низкий уровень, почти никогда не требует подтверждения. Запись -- средний. Bash-команды -- высокий, почти всегда требуют подтверждения.
Отдельно стоит sandbox-режим. Агент может работать в изолированном окружении, где его действия не влияют на реальную файловую систему.
Урок для практики: безопасность ИИ-агента -- это не вопрос "запретить всё или разрешить всё". Это градиент. Разделяйте действия по уровням риска. Автоматизируйте безопасные, подтверждайте рискованные, запрещайте деструктивные.

Урок 4. Управление контекстом -- как не потерять нить в 200 000 токенов
Контекстное окно Claude -- 200 000 токенов. Звучит много. Но когда агент читает файлы, запускает команды, получает вывод -- контекст заканчивается быстрее, чем кажется.
В утёкшем коде видно несколько стратегий управления контекстом:
Сжатие истории. Когда контекст приближается к лимиту, Claude Code сжимает историю. Старые сообщения суммаризируются. Промежуточные результаты инструментов заменяются на краткие выводы. Важные факты сохраняются, детали убираются.
Приоритизация. Не вся информация одинаково важна. Системный промпт, текущая задача, последние несколько сообщений -- приоритет высокий. Ранние диалоги -- низкий.
Ленивая загрузка. Агент не читает файл целиком, если не надо. Read принимает параметры offset и limit -- можно прочитать конкретный фрагмент. Grep возвращает только совпадения, а не весь файл. Glob возвращает пути, а не содержимое.
Многоуровневая память. CLAUDE.md -- постоянная память проекта. Session Bridge -- передача контекста между сессиями. Memory Bank -- автоматическое сохранение важных фактов.
Это пожалуй самый недооценённый аспект агентной архитектуры. Большинство самодельных агентов просто набивают контекст до упора и удивляются, что качество падает к концу диалога.
Урок для практики: управление контекстом -- это не "запихать побольше". Это фильтрация, приоритизация и умная загрузка. Читайте только то, что нужно. Сжимайте то, что уже использовали. Храните постоянные знания за пределами контекстного окна.
Урок 5. MCP -- расширяемость через протокол
Model Context Protocol -- это, возможно, самое важное архитектурное решение во всём Claude Code. Вместо того чтобы встраивать каждую интеграцию в код, Anthropic создали протокол для подключения внешних инструментов.
MCP-сервер -- это отдельный процесс, который предоставляет инструменты через стандартный интерфейс. Хотите подключить Notion? Запускаете MCP-сервер для Notion. Нужен доступ к базе данных? MCP-сервер для PostgreSQL. Браузер? Playwright через MCP.
В коде Claude Code видно, как это работает изнутри:
- При запуске агент читает конфиг (mcp-config.json) и поднимает MCP-серверы.
- Каждый сервер регистрирует свои инструменты -- с именами, описаниями и JSON Schema для параметров.
- Агент видит эти инструменты наравне со встроенными. Для модели нет разницы между Read (встроенный) и notion-create-page (MCP).
- При вызове MCP-инструмента агент отправляет запрос серверу и получает результат.
Ключевое: MCP-инструменты подключаются декларативно. Никакого кода. JSON-конфиг с командой запуска и переменными окружения. Добавить новую интеграцию -- дело одной минуты.
В утёкшем коде обнаружилась система "deferred tools" -- инструменты, которые не загружаются сразу. Агент узнаёт об их существовании, но получает полную схему только при необходимости. Это экономит контекст: вместо описаний 50 MCP-инструментов в каждом запросе, агент загружает только те, которые нужны прямо сейчас.
Урок для практики: не встраивайте интеграции в код агента. Создайте протокол для подключения внешних инструментов. MCP -- готовый стандарт, который можно использовать. Если строите свою систему, принцип тот же: агент не должен знать о деталях реализации инструмента.

Что это значит для тех, кто строит агентов
Пять уроков из архитектуры Claude Code -- это не теория. Это инженерные решения, проверенные миллионами пользователей.
- Модульные инструменты -- вместо монолитного "агент умеет всё" делайте отдельные компоненты.
- Устойчивый цикл -- агент должен переживать ошибки. Retry, fallback, лимиты.
- Градиентная безопасность -- не "можно всё" и не "нельзя ничего". Три уровня.
- Умный контекст -- не забивайте окно до отказа. Фильтруйте, сжимайте, приоритизируйте.
- Расширяемость через протокол -- MCP или свой аналог. Агент + протокол + внешние инструменты масштабируется лучше, чем агент-монолит.
Эти паттерны работают независимо от того, на чём вы строите агента. Claude, GPT, открытые модели -- архитектурные принципы те же.
Итого
Утечка кода Claude Code -- это не про скандал и не про пасхалки. Это про то, как выглядит production-ready архитектура ИИ-агента от компании, которая буквально изобретает этот рынок.
500 000 строк кода. Пять архитектурных уроков. Каждый можно применить в своём проекте уже сегодня.
Исходный код Anthropic уже убрали. Но архитектурные паттерны никуда не денутся. Они теперь публичные знания.

