claude-code

Исходники Claude Code уехали в npm внутри source maps

Promtime

claude-code

Взлома не было: чтобы прочитать исходники Claude Code, хватило скачать пакет из npm. Вместе с ним приезжали файлы .js.map, а в них поле sourcesContent с оригинальным TypeScript, и авторы Claude-code-from-source разобрали почти две тысячи файлов в книгу на 18 глав.

Коротко

  • Книгу писали не люди: 36 ИИ-агентов в четыре этапа прочитали исходное дерево, собрали 494 КБ черновой документации, переписали её главами и внесли правки рецензентов примерно за шесть часов.
  • Главная находка про деньги: параллельные форк-агенты стартуют с побайтно одинаковым префиксом промпта, попадают в кэш и экономят около 95% входных токенов, а сам CLI поднимается за 240 мс.
  • Кода Claude Code в книге нет: финальный аудит переписал каждый блок в псевдокод с другими именами переменных, так что сверить описание с оригиналом по тексту книги не выйдет.

Если вы не следили: source map нужен для отладки минифицированного кода, и поле sourcesContent хранит исходные файлы дословно, так что достаточно JSON.parse. По данным BSWEN, 31 марта 2026 года исходники Claude Code оказались доступны через один файл cli.js.map на 57 МБ, из которого восстановили 1906 файлов TypeScript и TSX и больше 512 000 строк с системными промптами и внутренними API. По сообщениям DEV Community, похожее уже было в начале 2025 года с CLI другой известной ИИ-компании.

Книгу собрали 36 ИИ-агентов примерно за шесть часов

Работу разбили на четыре этапа. Сначала шесть агентов параллельно прочитали всё дерево файлов. Потом двенадцать написали 494 КБ черновой технической документации, пятнадцать переписали её с нуля как связные главы, трое рецензентов выдали 900 строк замечаний, и ещё трое агентов внесли все правки.

Получилось 18 глав в семи частях, от запуска процесса до сетевой части и оптимизаций. Каждая глава заканчивается блоком «Apply This» с пятью переносимыми паттернами и советами по адаптации. Авторы адресуют книгу инженерам агентных систем и техлидам, которым хватит повествования без кода; Claude Code, напоминают они, пользуются сотни тысяч разработчиков.

Цикл агента живёт в асинхронном генераторе, а инструмент проходит 14 шагов

В основе всей системы один асинхронный генератор. Он отдаёт сообщения по мере стриминга модели, запускает инструменты, восстанавливается после ошибок и возвращает типизированный терминальный результат, а заодно из этой конструкции бесплатно получаются backpressure и отмена. Сжатие контекста устроено в четыре слоя: snip, microcompact, collapse и autocompact.

Путь от запроса модели до результата инструмента разложен на 14 шагов с разрешением прав, спекулятивным запуском и батчингом. Инструменты только на чтение стартуют ещё во время стриминга, не дожидаясь конца ответа, а партия делится по классу безопасности: чтения идут параллельно, записи строго по очереди.

Память сделана без базы данных, на файлах, с четырьмя типами записей и предупреждениями об устаревании. Что именно вспомнить, решает боковой запрос к Sonnet, и авторы считают такой отбор сильнее поиска по эмбеддингам.

Старт за 240 мс и лимит вывода 8K с эскалацией до 64K

Запуск укладывается в 240 мс за счёт параллельного ввода-вывода на уровне модулей. Резервирование слота держит потолок вывода на 8K токенов и поднимает его до 64K только тогда, когда в потолок упёрлись; по подсчётам книги, контекст экономится в 99% запросов. Нечёткий поиск ускоряют битмап-префильтры.

Скиллы грузятся в два приёма: на старте только метаданные из frontmatter, содержимое подтягивается в момент вызова. 27 хуков жизненного цикла работают со снимком конфигурации, замороженным на старте, чтобы её нельзя было подменить на лету. За стабильность кэша отвечают sticky latches: если бета-заголовок уже ушёл, посреди сессии его не снимают.

Почему одинаковый префикс промпта режет счёт примерно на 95%

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

По данным DeepWiki, у Sonnet 4.5 чтение из кэша стоит 0,30 доллара за миллион токенов против 3,00 доллара обычного входа, а запись в кэш 3,75 доллара, то есть приём окупается примерно после 1,3 запроса. Там же сказано, что кэшируется блок от 1024 токенов у Sonnet 4.5 и от 4096 у Opus 4.5 и Haiku 4.5, а живёт он пять минут с обнулением таймера на каждом чтении или час за доплату.

Проверить книгу по ней самой нельзя: весь код в ней переписан в псевдокод, а какую версию Claude Code читали агенты, сайт не называет. Странно, что на 18 глав, написанных пятнадцатью агентами, пришлось трое рецензентов и один проход правок, и весь цикл при этом уложился в шесть часов.

Останутся ли .map в пакете

Лежат ли source maps в npm-пакете сейчас и будут ли лежать дальше, на сайте книги не сказано. Способы закрыть такую дыру известны и дёшевы: отключить генерацию карт в продакшен-сборке, использовать hidden source maps без комментария sourceMappingURL, собирать карты без sourcesContent и вести в package.json белый список files вместе с .npmignore, который для публикации перекрывает .gitignore. Планов обновлять книгу вслед за изменениями архитектуры авторы тоже не обозначили.

Комментарии

Пока никто не написал. Будьте первым.

Присоединяйтесь к разговору

Войдите через Google, чтобы оставить комментарий. Имя и аватар подставятся из вашего профиля Google, а комментарий появится после модерации.

Из Google мы используем только имя и аватар. Почту не сохраняем.