Весь исходный код Claude Code утёк через sourcemap в npm. Давайте разберёмся.
Где найти?
Выкладывание закрытых проприетарных исходников может жёстко караться GitHub. Поэтому я их мгновенно переложил на GitVerse в свою организацию Anarchic, пока то репо не забанили на GitHub по DMCA.
Вопросы ко мне со стороны Anthropic тоже могут возникнуть, но на этот случай тоже есть несколько обходных манёвров. Если они всё-таки удосужатся приехать лично в Санкт-Петербург и написать на меня заявление участковому Василеостровского района, есть люди и площадки и в других странах тоже.
В общем, не буду томить.
Вот ссылка:https://gitverse.ru/anarchic/claude-code
Репозиторий снабжён подробным README, автор которого всё хорошо описал, а я здесь привожу краткий перевод на русский язык.
Кому интересен оригинал — могут сходить в оригинальный репозиторий и сами всё посмотреть. Автор также перепостилразбор в своём блоге.
Shameless plug. Если вам интересны подобные сливы, всякая инфа про джейлбрейки нейросетей и просто AI-новости — заходите ко мнев Телегуи наYouTube.
Что произошло
Сегодня (31 марта 2026 года) Chaofan Shou обнаружил в X (бывш. Twitter) нечто, что Anthropic явно не планировала показывать миру:весь исходный кодClaude Code, официального CLI-инструмента Anthropic для программирования с помощью Claude, лежал на виду в реестре npm — через файл sourcemap, попавший в опубликованный пакет.
Этот репозиторий — резервная копия утёкшего исходного кода, а данная статья — полный разбор содержимого: как произошла утечка и, что важнее всего, что именно мы теперь знаем из того, что не предназначалось для публики.
Как это вообще произошло?
Вот эта часть вызывает реакцию «…серьёзно?».
Когда вы публикуете JavaScript/TypeScript-пакет в npm, тулчейн сборки часто генерируетфайлы source map(.map-файлы). Эти файлы — мост между минифицированным/собранным продакшн-кодом и исходниками: когда что-то падает в продакшне, стек-трейс указывает нанастоящуюстроку воригинальномфайле, а не на какую-нибудь нечитаемую строку 1, колонку 48293 минифицированного блоба.
Но фишка в том, чтоsource map содержит оригинальный исходный код. Буквально, в сыром виде, встроенный как строки в JSON-файл.
Структура.map-файла выглядит примерно так:
МассивsourcesContent? Там всё. Каждый файл. Каждый комментарий. Каждая внутренняя константа. Каждый системный промпт. Всё это лежит в JSON-файле, который npm радостно отдаёт любому, кто запуститnpm packили просто откроет содержимое пакета в браузере.
Это не новый вектор атаки. Такое случалось раньше и, честно говоря, случится снова.
Ошибка почти всегда одна и та же: кто-то забывает добавить*.mapв.npmignoreили не настраивает бандлер на пропуск генерации source map для продакшн-сборок. В бандлере Bun (который использует Claude Code) source map генерируются по умолчанию, если явно не отключить.
Самое смешное — в коде есть целая система под названием«Режим прикрытия» (Undercover Mode), специально разработанная для предотвращения утечки внутренней информации Anthropic.
Они построили целую подсистему, чтобы их ИИ случайно не засветил внутренние кодовые имена в git-коммитах… а потом отгрузили весь исходный код в.map-файле. Вероятно, руками самого Claude.
Что у Claude под капотом?
Если вы жили в пещере: Claude Code — это официальный CLI-инструмент Anthropic для кодирования с Claude и самый популярный AI-агент для программирования.
Снаружи он выглядит как отполированный, но относительно простой CLI.
Изнутри это785-килобайтныйmain.tsx— входная точка, кастомный React-рендерер для терминала, 40+ инструментов, система мультиагентной оркестрации, фоновый движок консолидации памяти под названием «dream» (сон) и многое другое.
Хватит болтовни — вот действительно крутые вещи из исходного кода, которые автор репозитория нашёл за вечер глубокого погружения:
BUDDY — тамагочи прямо в терминале
Без шуток.
В Claude Code встроена полноценнаясистема компаньона в стиле тамагочипод названием «Buddy».Детерминистическая гача-системас редкостью видов, блестящими (shiny) вариантами, процедурно сгенерированными характеристиками и описанием души, которое Claude пишет при первом «вылуплении» — прямо как в OpenClaw.
Всё это живёт вbuddy/и доступно только за compile-time feature flagBUDDY.
Гача-система
Вид вашего компаньона определяетсяГПСЧ Mulberry32— быстрым 32-битным генератором псевдослучайных чисел, засеянным хешемuserIdс солью'friend-2026-401':
Один и тот же пользователь всегда получает одного и того же компаньона.
18 видов (обфусцированы в коде)
Названия видов скрыты через массивыString.fromCharCode()— Anthropic явно не хотела, чтобы они всплывали при поиске по строкам. В раскодированном виде полный список:
Обычные(60%)
Pebblecrab, Dustbunny, Mossfrog, Twigling, Dewdrop, Puddlefish
Необычные(25%)
Cloudferret, Gustowl, Bramblebear, Thornfox
Редкие(10%)
Crystaldrake, Deepstag, Lavapup
Эпические(4%)
Stormwyrm, Voidcat, Aetherling
Легендарные(1%)
Cosmoshale, Nebulynx
Сверх того, есть1% шанс на блестящий (shiny) вариант, полностью независимый от редкости. Так что шанс получить Shiny Legendary Nebulynx составляет0,01%.
Характеристики, глаза, шляпы и душа
Для каждого компаньона процедурно генерируются:
- 5 характеристик:DEBUGGING,PATIENCE,CHAOS,WISDOM,SNARK(от 0 до 100 каждая)
- 6 стилей глази8 вариантов шляп(часть заблокирована за редкостью)
- «Душа»— личность, которую Claude генерирует при первом вылуплении, написанная от лица персонажа
Спрайты отрисовываются какASCII-арт высотой в 5 строк и шириной в 12 символовс несколькими кадрами анимации. Есть анимации ожидания, анимации реакций, и компаньон сидит рядом с вашей строкой ввода.
В коде упоминается период 1–7 апреля 2026 какокно тизера(вероятно, к Пасхе?), а полный запуск запланирован на май 2026. У компаньона есть системный промпт, который сообщает Claude:
То есть это не просто косметика — у компаньона своя личность, и к нему можно обращаться по имени. Остаётся надеяться, что они это выпустят.
KAIROS — «Вечно включённый Claude»
Внутриassistant/есть целый режим под названиемKAIROS— постоянно работающий ассистент Claude, который не ждёт, пока вы что-то напечатаете. Он наблюдает, ведёт логи ипроактивнодействует на основании замеченного.
Режим доступен за compile-time feature flagsPROACTIVE/KAIROSи полностью отсутствует во внешних сборках.
Как это работает
KAIROS ведётappend-only дневные лог-файлы— записывает наблюдения, решения и действия на протяжении дня. С регулярным интервалом он получает-промпты, по которым решает, стоит ли действовать проактивно или лучше промолчать.
У системы естьбюджет блокировки в 15 секунд— любое проактивное действие, которое заблокировало бы рабочий процесс пользователя дольше 15 секунд, откладывается. Claude пытается быть полезным, не будучи назойливым.
Краткий режим (Brief Mode)
Когда KAIROS активен, есть специальный режим вывода —Brief: предельно лаконичные ответы, рассчитанные на постоянного ассистента, который не должен заваливать ваш терминал. Представьте разницу между болтливым приятелем и профессиональным помощником, который говорит только когда ему есть что сказать.
Эксклюзивные инструменты
KAIROS получает инструменты, недоступные обычному Claude Code:
Инструмент
Назначение
SendUserFile
Отправка файлов пользователю (уведомления, сводки)
PushNotification
Push-уведомления на устройство пользователя
SubscribePR
Подписка на активность пулл-реквестов и их мониторинг
ULTRAPLAN — 30-минутные удалённые сессии планирования
Дикая штука с инфраструктурной точки зрения.
ULTRAPLAN— режим, в котором Claude Code выгружает сложную задачу планирования вудалённую сессию Cloud Container Runtime (CCR), работающую наOpus 4.6, даёт ей до30 минутна размышление и позволяет вам одобрить результат из браузера.
Базовый flow:
- Claude Code определяет задачу, требующую глубокого планирования
- Поднимает удалённую CCR-сессию через конфигtengu_ultraplan_model
- Ваш терминал показывает состояние поллинга — проверка каждые3 секунды
- Тем временем в браузерном UI можно наблюдать за процессом планирования и одобрить/отклонить результат
- При одобрении используется специальное sentinel-значение__ULTRAPLAN_TELEPORT_LOCAL__, которое «телепортирует» результат обратно в ваш локальный терминал
Система «Dream» — Claude буквально видит сны
Это, пожалуй, одна из самых крутых вещей в утечке.
В Claude Code есть системаautoDream(services/autoDream/) — фоновый движок консолидации памяти, работающий какфоркнутый субагент. Название выбрано намеренно. Это Claude… видящий сны.
Забавное совпадение: у автора репозиториябыла точно такая же идея для LITMUS на прошлой неделе — субагенты OpenClaw, которые в свободное время творчески ищут интересные новые статьи.
Триггер с тремя вентилями
Сон не запускается когда вздумается. У негосистема триггеров с тремя вентилями:
- Временной вентиль: 24 часа с последнего сна
- Сессионный вентиль: минимум 5 сессий с последнего сна
- Блокировочный вентиль: захват блокировки консолидации (предотвращает параллельные сны)
Все три должны пройти. Это предотвращает как избыточные, так и недостаточные сны.
Четыре фазы
При запуске сон проходит четыре строгие фазы из промпта вconsolidationPrompt.ts:
Фаза 1 — Ориентация:lsдиректории памяти, чтениеMEMORY.md, просмотр существующих тематических файлов для улучшения.
Фаза 2 — Сбор свежих сигналов: поиск новой информации, достойной сохранения. Источники по приоритету: дневные логи → дрейфующие воспоминания → поиск по транскриптам.
Фаза 3 — Консолидация: запись или обновление файлов памяти. Перевод относительных дат в абсолютные. Удаление опровергнутых фактов.
Фаза 4 — Очистка и индексация:MEMORY.mdдолжен оставаться в пределах 200 строк и ~25 КБ. Удаление устаревших указателей. Разрешение противоречий.
В промпте буквально сказано:
«Вы выполняете сон — рефлексивный проход по вашим файлам памяти. Синтезируйте недавно изученное в устойчивые, хорошо организованные воспоминания, чтобы будущие сессии могли быстро сориентироваться.»
Субагент-сновидец получаетbash только для чтения— он может смотреть ваш проект, но не изменять его. Это чисто проход консолидации памяти.
Режим прикрытия — «Не раскрывай себя»
Пожалуй, самая интересная находка с точки зрения корпоративной стратегии.
Сотрудники Anthropic (определяемые поUSER_TYPE === 'ant') используют Claude Code в публичных/открытых репозиториях.Режим прикрытия(utils/undercover.ts) не даёт ИИ случайно раскрыть внутреннюю информацию в коммитах и пулл-реквестах.
При активации в системный промпт внедряется:
Логика активации:
- CLAUDE_CODE_UNDERCOVER=1принудительно ВКЛЮЧАЕТ (даже во внутренних репозиториях)
- В остальных случаях —автоматически: активен, ЕСЛИ удалённый адрес репозитория не совпадает с внутренним списком разрешённых
- Принудительного ВЫКЛЮЧЕНИЯнет—«если мы не уверены, что находимся во внутреннем репозитории, остаёмся под прикрытием»
Из этого следует:
- Сотрудники Anthropic активно используют Claude Code для контрибуций в open-source— и ИИ сказано скрывать, что он ИИ
- Внутренние кодовые имена моделей — это имена животных: Capybara, Tengu и т.д.
- «Tengu»встречается сотни раз как префикс для feature flags и аналитических событий — это почти навернякавнутреннее кодовое имя проекта Claude Code
Всё это удаляется dead code elimination из внешних сборок. Но source map’ам на dead code elimination плевать.
Остаётся вопрос: какой масштаб «тихих» контрибуций в open-source репозитории стоит за этим режимом?
Мультиагентная оркестрация — «Режим координатора»
В Claude Code есть полноценнаясистема мультиагентной оркестрациивcoordinator/, активируемая черезCLAUDE_CODE_COORDINATOR_MODE=1.
При включении Claude Code трансформируется из одиночного агента вкоординатора, который порождает, направляет и управляет несколькими рабочими агентами параллельно. Системный промпт координатора вcoordinatorMode.ts— образцовый пример мультиагентного дизайна:
Назначение
Исследование
Рабочие (параллельно)
Изучить кодовую базу, найти файлы, понять проблему
Координатор
Прочитать результаты, осмыслить проблему, составить спецификации
Реализация
Внести целевые изменения по спецификации, закоммитить
Верификация
Проверить, что изменения работают
Промптявнообучает параллелизму:
«Параллелизм — ваша суперсила. Рабочие асинхронны. Запускайте независимых рабочих одновременно, когда это возможно — не сериализуйте работу, которую можно выполнить параллельно.»
Рабочие общаются через XML-сообщения. Есть общаядиректория-черновик(scratchpad, за флагомtengu_scratch) для обмена устойчивыми знаниями между рабочими. В промпте также стоит замечательный запрет на ленивое делегирование:
НЕ говорите «на основе ваших результатов» — прочитайте реальные результаты и укажите точно, что делать.
Система также включает возможностикоманд агентов/роя(Agent Teams/Swarm, feature gatetengu_amber_flint): внутрипроцессные участники команды сAsyncLocalStorageдля изоляции контекста, процессные участники через панели tmux/iTerm2, синхронизация памяти команды и назначение цветов для визуального различения.
Fast Mode внутри называется «Режим пингвина»
Да, они реально так назвали. API-эндпоинт вutils/fastMode.tsбуквально:
Ключ конфигурации —penguinModeOrgEnabled. Kill-switch —tengu_penguins_off. Аналитическое событие при ошибке —tengu_org_penguin_mode_fetch_failed. Пингвины до самого дна.
Архитектура системного промпта
Системный промпт — это не единая строка, как в большинстве приложений. Он собирается измодульных кешируемых секций, компонуемых в рантайме вconstants/.
Архитектура использует маркерSYSTEM_PROMPT_DYNAMIC_BOUNDARY, который разделяет промпт на:
- Статические секции— кешируемые между организациями (то, что не меняется от пользователя к пользователю)
- Динамические секции— контент, специфичный для пользователя/сессии, который инвалидирует кеш при изменении
Есть функцияDANGEROUS_uncachedSystemPromptSection()для volatile-секций, которые вы явно хотите исключить из кеширования. Одно название говорит о том, что кто-то усвоил этот урок на собственном опыте.
Инструкция по кибер-рискам
Особенно интересный раздел —CYBER_RISK_INSTRUCTIONвconstants/cyberRiskInstruction.ts, с массивным предупреждением в шапке:
Теперь мы точно знаем, кто в Anthropic отвечает за решения по границам безопасности, и что это управляется конкретными людьми в конкретной команде. Сама инструкция проводит чёткие линии: авторизованное тестирование безопасности — ок, деструктивные техники и компрометация цепочки поставок — нет.
Полный реестр инструментов — 40+ штук
Система инструментов Claude Code живёт вtools/. Полный список:
Инструмент
Назначение
Порождение дочерних агентов/субагентов
BashTool/PowerShellTool
Выполнение команд оболочки (с опциональной песочницей)
FileReadTool/FileEditTool/FileWriteTool
Файловые операции
GlobTool/GrepTool
Поиск файлов (используют нативныеbfs/ugrepпри наличии)
WebFetchTool/WebSearchTool/WebBrowserTool
Веб-доступ
NotebookEditTool
Редактирование Jupyter-ноутбуков
Вызов пользовательских навыков
Интерактивная VM-оболочка (bare mode)
Общение по Language Server Protocol
AskUserQuestionTool
Запрос ввода у пользователя
EnterPlanModeTool/ExitPlanModeV2Tool
Управление режимом планирования
Загрузка/суммаризация файлов в claude.ai
SendMessageTool/TeamCreateTool/TeamDeleteTool
Управление роем агентов
TaskCreateTool/TaskGetTool/TaskListTool/TaskUpdateTool/TaskOutputTool/TaskStopTool
Управление фоновыми задачами
TodoWriteTool
Запись задач (устаревший)
ListMcpResourcesTool/ReadMcpResourceTool
Доступ к MCP-ресурсам
Асинхронные задержки
Извлечение фрагментов истории
ToolSearchTool
Обнаружение инструментов
ListPeersTool
Список peer-агентов (UDS inbox)
MonitorTool
Мониторинг MCP-серверов
EnterWorktreeTool/ExitWorktreeTool
Управление git worktree
ScheduleCronTool
Планирование cron-задач
RemoteTriggerTool
Запуск удалённых агентов
WorkflowTool
Выполнение скриптов воркфлоу
ConfigTool
Изменение настроек (только для внутреннего использования)
TungstenTool
Расширенные функции (только для внутреннего использования)
SendUserFile/PushNotification/SubscribePR
Эксклюзивные инструменты KAIROS
Инструменты регистрируются черезgetAllBaseTools()и фильтруются по feature gates, типу пользователя, переменным окружения и правилам запрета разрешений. Естькеш схем инструментов(toolSchemaCache.ts), который кеширует JSON-схемы для экономии промпт-токенов.
Система разрешений и безопасности
Система разрешений Claude Code вtools/permissions/значительно сложнее, чем «разрешить/запретить»:
Режимы разрешений:default(интерактивные запросы),auto(автоматическое одобрение на основе ML через классификатор транскриптов),bypass(пропуск проверок),yolo(запретить всё — ироничное название).
Классификация рисков: каждое действие инструмента классифицируется какLOW,MEDIUMилиHIGH. ЕстьYOLO-классификатор— быстрая ML-система принятия решений о разрешениях, работающая автоматически.
Защищённые файлы:.gitconfig,.bashrc,.zshrc,.mcp.json,.claude.jsonи другие защищены от автоматического редактирования.
Предотвращение path traversal: URL-кодированные обходы, атаки через Unicode-нормализацию, инъекции обратных слэшей, манипуляции с регистром путей — всё обрабатывается.
Объяснение разрешений: отдельный LLM-вызов объясняет пользователю риски инструмента перед одобрением. Когда Claude говорит «эта команда изменит ваш git config» — это объяснение само по себе сгенерировано Claude.
Скрытые бета-заголовки и невыпущенные API-функции
Файлconstants/betas.tsраскрывает все бета-фичи, которые Claude Code запрашивает у API:
redact-thinking,afk-modeиadvisor-toolтоже пока не выпущены.
Feature gating — внутренние и внешние сборки
Это одна из архитектурно самых интересных частей кодовой базы.
Claude Code используетcompile-time feature flagsчерез функциюfeature()изbun:bundle. Бандлерсвёртывает константыиэлиминирует мёртвый кодзагейтованных ветвей из внешних сборок. Полный список известных флагов:
Что он закрывает
PROACTIVE/KAIROS
Режим всегда включённого ассистента
KAIROS_BRIEF
Краткая команда
BRIDGE_MODE
Удалённое управление через claude.ai
Фоновый демон
VOICE_MODE
Голосовой ввод
WORKFLOW_SCRIPTS
Автоматизация воркфлоу
COORDINATOR_MODE
Мультиагентная оркестрация
TRANSCRIPT_CLASSIFIER
AFK-режим (ML-автоодобрение)
Система питомца-компаньона
NATIVE_CLIENT_ATTESTATION
Аттестация клиента
HISTORY_SNIP
Обрезка истории
EXPERIMENTAL_SKILL_SEARCH
Обнаружение навыков
ДополнительноUSER_TYPE === 'ant'закрывает функции для внутреннего использования Anthropic: доступ к staging API (claude-ai.staging.ant.dev), внутренние бета-заголовки, режим прикрытия, команду/security-review,ConfigTool,TungstenToolи дамп промптов в~/.config/claude/dump-prompts/.
Рантайм feature gating обслуживаетGrowthBookс агрессивно кешированными значениями. Feature flags с префиксомtengu_управляют всем — от быстрого режима до консолидации памяти. Многие проверки используютgetFeatureValue_CACHED_MAY_BE_STALE(), чтобы не блокировать основной цикл — устаревшие данные считаются допустимыми для feature gates.
Другие примечательные находки
Upstream-прокси
Директорияupstreamproxy/содержит контейнеро-ориентированное прокси-реле, которое используетprctl(PR_SET_DUMPABLE, 0)для предотвращения ptrace кучи от процессов с тем же UID. Оно читает сессионные токены из/run/ccr/session_tokenв CCR-контейнерах, загружает CA-сертификаты и запускает локальное CONNECT→WebSocket-реле. Anthropic API, GitHub, npmjs.org и pypi.org явно исключены из проксирования.
Bridge Mode
JWT-аутентифицированная bridge-система вbridge/для интеграции с claude.ai. Поддерживает рабочие режимы:'single-session'|'worktree'|'same-dir'. Включает токены доверенных устройств для повышенных уровней безопасности.
Кодовые имена моделей в миграциях
Директорияmigrations/раскрывает историю внутренних кодовых имён:
- migrateFennecToOpus—«Fennec»(лиса фенек) было кодовым именем Opus
- migrateSonnet1mToSonnet45— Sonnet с 1М контекстом стал Sonnet 4.5
- migrateSonnet45ToSonnet46— Sonnet 4.5 → Sonnet 4.6
- resetProToOpusDefault— Pro-пользователей в какой-то момент переключили на Opus по умолчанию
Заголовок атрибуции
Каждый API-запрос включает:
ФичаNATIVE_CLIENT_ATTESTATIONпозволяет HTTP-стеку Bun перезаписать плейсхолдерcch=00000вычисленным хешем — по сути, это проверка подлинности клиента, чтобы Anthropic мог убедиться, что запрос пришёл от настоящей установки Claude Code.
Computer Use — «Chicago»
Claude Code включает полноценную реализацию Computer Use, внутреннее кодовое имя«Chicago», построенную на@ant/computer-use-mcp. Предоставляет захват экрана, ввод кликов/клавиш и преобразование координат. Доступна только для подписок Max/Pro (с обходом для внутренних пользователей Anthropic).
Ценообразование
Для интересующихся — все цены вutils/modelCost.tsполностью совпадают спубличными ценами Anthropic. Ничего сенсационного.
Заключительные мысли
Это, без преувеличения, один из самых полных взглядов на внутреннее устройство продакшн AI-ассистента для кодирования. Через реальный исходный код.
Несколько вещей бросаются в глаза:
Инженерия впечатляет.Это не проект выходного дня, обёрнутый в CLI. Мультиагентная координация, система снов, архитектура триггеров с тремя вентилями, compile-time элиминация фич — это глубоко продуманные системы.
Впереди ещё очень много.KAIROS (всегда включённый Claude), ULTRAPLAN (30-минутное удалённое планирование), компаньон Buddy, режим координатора, рои агентов, скрипты воркфлоу — кодовая база значительно опережает публичный релиз. Большинство из этого спрятано за feature gates и невидимо во внешних сборках.
Внутренняя культура видна.Кодовые имена-животные (Tengu, Fennec, Capybara), игривые названия фич (Penguin Mode, Dream System), система тамагочи-питомца с гача-механикой. Кому-то в Anthropic определённо весело.
Если есть один вывод из всего этого — безопасность это сложно. А.npmignore, похоже, ещё сложнее.