Полный транскрипт
Раздел 1
# Разбор исходников Claude Code: 512 000 строк утёкшего кода
Введение: утечка исходников и концепция Harness
3 апреля 2026 года произошло событие, которое всколыхнуло всё AI-сообщество: исходный код Claude Code — флагманского агентного продукта Anthropic — утёк в открытый доступ. 512 тысяч строк кода. Как это случилось? Исследователь Chaofan Shou обнаружил забытый .map файл в npm-пакете Claude Code. Source map — это файл, который содержит маппинг между минифицированным и оригинальным кодом. Anthropic просто забыли его убрать перед публикацией. Chaofan нашёл и опубликовал всё за 23 минуты. Твит набрал 34.5 миллиона просмотров. За 24 часа появился clean-room rewrite с более чем 100 тысячами звёзд на GitHub.
Но самое интересное не в самой утечке, а в том, что она подтвердила. Центральный тезис, который я повторяю на каждом занятии: модель + harness побеждает модель в одиночку. Буквально за несколько дней до утечки, 30 марта 2026 года, вышла статья Стэнфорда — Meta-Harness paper — которая показала, что одна и та же модель с правильным harness тратит в 4 раза меньше токенов и при этом даёт лучшие результаты. Не другая модель. Та же самая. Просто в правильной обвязке.
Для объяснения этой идеи я люблю использовать метафору стула из пивоварни в Mountain View. Представьте: вы сидите на барном стуле. Если стул без спинки — сколько бы вы ни выпили, в какой-то момент вы упадёте назад. Спинка стула — это harness. Она не делает вас трезвее, не улучшает ваши способности. Она просто не даёт вам упасть. Модель — это человек на стуле. Harness — это спинка. Без неё даже самая мощная модель рано или поздно «падает».
Какие основные ошибки совершают агенты без harness? Их три:
- Дрейф от цели — по мере роста контекста модель постепенно забывает, зачем она начала работу, и уходит в сторону.
- Деструктивные действия без разрешения — модель может удалить файл, перезаписать данные, запустить опасную команду.
- Неспособность учиться на ошибках — модель повторяет одни и те же ошибки, потому что у неё нет механизма извлечения уроков.
Harness решает все три проблемы. И все 512 тысяч строк кода Claude Code — это, по сути, один большой harness вокруг API вызова к Claude.
Забавная деталь из исходников: в Claude Code есть Frustration Regex — регулярное выражение, которое детектирует фрустрацию пользователя. Слова вроде «wtf», «fuck», «this is broken» попадают под этот паттерн. Пока это используется только для аналитики — Anthropic отслеживают, когда пользователи злятся, чтобы улучшать продукт. Но работает regex только на английском языке. Разработчики из других стран уже отправляют pull request-ы для своих языков — чтобы и их фрустрация учитывалась.
Agentic Loop: цикл работы Claude Code
Сердце любого AI-агента — это цикл TAOR: Think-Act-Observe-Repeat. Модель получает контекст, думает, что нужно сделать, формирует инструкцию для вызова инструмента (tool call), клиент (Claude Code) выполняет этот вызов, результат возвращается модели — и цикл повторяется. Повторяется до тех пор, пока задача не выполнена или не закончился бюджет токенов.
Сам по себе этот цикл — примерно 100 строк кода. Простой while(true) с условиями выхода. Но вот здесь начинается магия harness: внутри этого цикла работают 9 переменных состояния. Они отслеживают, нужна ли компактификация контекста, произошла ли ошибка и нужен ли recovery, сколько токенов потрачено, на какой итерации мы находимся, какие инструменты уже вызывались. Именно эти переменные превращают игрушечный прототип в продакшн-систему.
Ключевой harness для скорости — это стриминг tool calls. Claude Code не ждёт, пока модель полностью сформирует ответ. Как только в потоке данных появляется полностью завершённый блок tool call — выполнение начинается немедленно, параллельно с тем, как модель продолжает генерировать остальной ответ.
Для объяснения этого я использую ресторанную аналогию. Представьте, что вы пришли в ресторан. Вы ещё выбираете десерт, а кухня уже готовит вашу закуску. Официант не ждёт, пока вы определитесь со всем заказом — он отправляет то, что уже готово. Точно так же Claude Code «отправляет на кухню» каждый tool call, как только он готов, не дожидаясь остальных.
Если развить ресторанную метафору дальше — в американских ресторанах есть свой harness для увеличения среднего чека. Официант сначала спрашивает только про напитки. Потом возвращается за заказом еды. Это не просто вежливость — это harness: на голодный желудок вы закажете больше напитков. Параллельно-последовательная работа ресторана — это та же самая идея, что и в Claude Code: оптимизация через правильную оркестрацию параллельных и последовательных операций.
Tool Contracts и батчинг операций
Большинство людей думают, что инструмент (tool) для AI-агента — это просто имя, JSON-схема параметров и функция выполнения. Но в Claude Code каждый инструмент имеет примерно 20 дополнительных атрибутов: деструктивный или нет, только для чтения, можно ли выполнять параллельно с другими, максимальный размер результата, требует ли подтверждения пользователя, к какой категории относится. И вот что важно: модель не видит эти атрибуты. Они существуют только для harness, который использует их при планировании, обеспечении безопасности и оптимизации UX.
Батчинг — одна из ключевых оптимизаций, построенная на этих атрибутах. Правило простое: операции чтения выполняются параллельно, операции записи — последовательно. Почему? Потому что параллельная запись в один и тот же файл — это классическая race condition. Если два инструмента одновременно пытаются изменить файл, результат непредсказуем. Читать же можно сколько угодно одновременно — данные не меняются.
Хорошая аналогия — это атрибуты сотрудника. У каждого сотрудника есть навыки, уровень доступа, специализация. Когда менеджер распределяет задачи, он учитывает не только «что сотрудник умеет делать», но и «можно ли ему доверить этот тип работы», «может ли он работать параллельно с другими». Harness делает то же самое с инструментами.
В коде Claude Code есть partitioner — компонент, который группирует tool calls в батчи. Он анализирует атрибуты каждого инструмента и решает, что можно выполнить одновременно. Но у него есть важное ограничение: он группирует только последовательные операции чтения.
Практический совет: когда просите Claude Code работать с несколькими файлами, формулируйте запрос так: «сначала изучи все файлы, потом внеси изменения». Это позволит partitioner-у собрать все операции чтения в один параллельный батч, а затем выполнить операции записи последовательно.
Prompt Caching и Cache-Safe Forks
Prompt caching — это самый критичный harness для скорости и стоимости. На каждом шаге агентного цикла Claude Code отправляет модели полный контекст: системный промпт (~27 тысяч токенов), список инструментов, историю сообщений. Без кэширования каждый такой запрос был бы медленным и дорогим. Ключевой принцип: константная часть промпта идёт первой, переменная — в конце.
В коде Claude Code есть структура CacheSafeParams — она определяет, какие части промпта должны быть побайтово идентичными для работы кэша: системный промпт, список инструментов, модель, сообщения контекста. Любое изменение в этих параметрах «ломает» кэш.
На этом механизме построена элегантная фича — «by the way» (BTW) запросы, или cache-safe forks. Когда вы задаёте побочный вопрос, Claude Code создаёт fork-агента с теми же CacheSafeParams. Один API-вызов, без инструментов, не прерывает основной поток. И этот вызов переиспользует кэш основного агента — поэтому обходится практически бесплатно.
Тот же механизм используется в AutoDream — фоновой консолидации памяти. AutoDream работает через fork, который переиспользует prompt cache родительского агента. Фоновый процесс перечитывает то, что агент узнал за сессию, и записывает ключевые факты в долговременную память.
Метафора из «Ста лет одиночества» Маркеса: жители Макондо заболели бессонницей и постепенно забывали всё. Сон нужен мозгу для консолидации результатов дня в долговременную память. AutoDream реализует этот же принцип: агент «засыпает» и переносит важное из оперативного контекста в постоянное хранилище.
Speculation Engine
Одна из самых впечатляющих систем в исходниках — Speculation Engine. Аналогия с Instagram: когда вы загружаете фото и начинаете выбирать фильтры — фото уже загружается на сервер в фоне. Claude Code делает то же самое: пока вы читаете текущий ответ, система предвычисляет до 20 шагов вашего следующего запроса.
Технически это работает через Ghost Filesystem — оверлейную файловую систему. Все предвычисленные изменения сохраняются во временной директории (.clot/speculation/). Если предсказание совпадает — файлы копируются из оверлея в основную систему через copyOverlayToMain. Если не совпало — оверлей удаляется. Реальные файлы остаются нетронутыми до подтверждения.
На данный момент Speculation Engine доступен только сотрудникам Anthropic — включается через USER_TYPE === 'ant'. Но архитектура полностью готова.
Связь с системой скиллов: если speculation engine часто угадывает для определённого паттерна, это кандидат для автоматического создания скилла. В будущем скиллы будут создаваться динамически через AutoDream + подтверждение speculation.
Аналогия с AlphaZero: предвычисление возможных путей, как в шахматах. Система заранее просчитывает, что произойдёт при каждом ходе. Когда пользователь выбирает путь — результат уже готов.
Permission Pipeline: многоуровневая система проверок
Безопасность в Claude Code построена как аэропорт. Чтобы попасть в самолёт, вы проходите несколько уровней проверки. Каждый уровень закрывает бреши предыдущего. Это модель швейцарского сыра: в каждом слое есть дырки, но слои расположены так, что дырки не совпадают.
6 уровней проверок, от дешёвых к дорогим:
- Статические правила — проверка read-only. Бесплатно, мгновенно.
- Атрибуты инструмента — 20 атрибутов из tool contract. Бесплатно.
- Глобальные правила конфигурации — политики из settings.
- Трансформации режима — plan/acceptEdits/dontAsk.
- AI Classifier — вызов к Haiku для классификации опасности.
- User Prompt — финальная блокировка на пользователе.
AI Classifier использует Haiku, а не Opus — осознанный выбор: классификация не требует глубоких рассуждений. Но Haiku может пропустить деструктивные операции. Поэтому нужна вся «сэндвич-система».
Реальный пример: через GitHub Issues была проведена prompt injection атака. Кто-то вставил инструкцию для AI-агента в текст issue. Когда агент читал issue — он выполнял эту инструкцию, что привело к утечке токенов. Нельзя полагаться только на промпты для безопасности.
Практический совет: настройте правила в .claude/settings.json с regex-паттернами. Например, разрешите все SELECT-запросы без подтверждений, но требуйте подтверждение для DELETE и DROP.
Контекст-менеджмент: три уровня управления
Управление контекстом организовано в три уровня по стоимости:
Tier 1 — бесплатные операции:
- Micro-compact — замена результатов tool call на плейсхолдер
- Budgeting — слишком большой MCP-ответ сохраняется в файл, а в контекст попадает ссылка
- Snipping — удаление старого нерелевантного контента
Tier 2 — вызов API:
- Auto-compact при ~93% заполненности контекста (AUTOCOMPACT_BUFFER_TOKENS = 13,000)
- Ручная компактификация через /compact с инструкциями фокусировки
Tier 3 — тяжёлые операции:
- AutoDream — фоновая консолидация памяти
- Emergency recovery при переполнении
- Rewind — откат на несколько шагов с разделением отката промптов и кода
CLAUDE.md пересылается на каждом шаге из-за recency bias — модель уделяет больше внимания началу и концу промпта. Критическая информация повторяется, чтобы модель не забывала структуру БД и правила проекта.
Memory retrieval = grep + LLM. Поиск по файлам памяти — сначала grep, потом уточнение моделью. Не векторная база данных, а файловый поиск.
Совет для /compact: давайте инструкции на чём фокусироваться. Если контекст раздут, но важна только последняя задача — скажите «focus on [задача]».
KAIROS: проактивный агент
Самая амбициозная система в исходниках — KAIROS. 254 упоминания в 71 файле. Распределённая по всей кодовой базе система, превращающая реактивного агента в проактивного.
Два прорыва из OpenClaw: проактивность (агент сам инициирует действия) и каналы коммуникации (Telegram, Discord, WhatsApp). KAIROS — реализация этих идей внутри Claude Code.
Heartbeat + Cron Scheduler: агент по расписанию проверяет состояние системы — новые PR, ошибки, breaking changes. Если состояние изменилось — агент сам решает предпринять действие, эмулируя пользовательский промпт.
Каналы для уведомлений — те же каналы Telegram и Discord используются для доставки проактивных сообщений. BriefTool / SendUserMessage реализует два режима: обычный (ответ на запрос) и проактивный (инициатива агента).
Buddy — персонализированный компаньон — возможно, подключится к KAIROS для визуализации проактивных действий. Сейчас генерируется случайно, но архитектура для персонализации заложена.
Dispatch в Claude Desktop — первые шаги реализации KAIROS. Система закрыта за feature('KAIROS') с dead code elimination во внешних билдах.
Рекомендации и выводы
Читайте промпты из исходников — для компактификации, side question, buddy, speculation. Попросите Claude Code извлечь интересные промпты для ваших задач.
CC Unpacked (ccunpacked.dev) — визуальный гид по архитектуре Claude Code. Позволяет пройтись по всем компонентам.
Stanford Meta-Harness paper — доказательство, что harness важнее модели. Одна и та же модель с harness работает в 4 раза эффективнее.
Теория Кристенсена: на заре технологии интегрированный подход (Apple) побеждает модульный (IBM + Microsoft). AI-агенты на ранней стадии — интегрированный подход (Claude + Claude Code) имеет преимущество.
Главный вывод: premature optimization is the root of all evil. Не все паттерны harness нужны каждому агенту. Если средняя длина сессии — 2 шага, не стройте 7-уровневую компактификацию. Адаптируйте harness к своим метрикам.
Канал: t.me/products_n_startups