Разбор кода Claude Code v2.1.88: правда и мифы об архитектуре AI-агента | AiManual
AiManual Logo Ai / Manual.
05 Июн 2026 Инструмент

Разбор исходного кода Claude Code v2.1.88: что правда, а что мифы об архитектуре агента

Детальный разбор исходного кода Claude Code v2.1.88. Опровергаем популярные мифы об архитектуре агента: монолитность, безопасность, queryLoop, стейт-менеджмент

Реклама
vec_recv1

Сначала база: что такое Claude Code v2.1.88

Если вы думаете, что Claude Code — это какой-то загадочный черный ящик с магией внутри, то у меня для вас новость: это обычный npm-пакет. @anthropic-ai/claude-code версии 2.1.88, опубликованный 28 мая 2026 года. Никакой магии — только TypeScript, EventEmitter и куча коллбеков.

Но именно вокруг этого пакета сформировалось столько мифов, что впору писать энциклопедию заблуждений. Мол, агент сам принимает решения, он монолитен, он может выйти из-под контроля, он небезопасен. Хватит гадать — давайте откроем node_modules и посмотрим правде в глаза.

Я разобрал исходники v2.1.88 (актуальная версия на 5 июня 2026) и готов показать, где правда, а где просто страшилки. Внутренние ссылки на наши прошлые разборы: глубокий разбор архитектуры от Sebastian Raschka и китайский реверс-инжиниринг помогут дополнить картину.

Важное замечание: я не взламывал Anthropic и не деобфусцировал бинарники. Анализ открытого npm-пакета и его публичных исходников — это легально. И да, код Claude Code — это не скомпилированный монолит, а читаемые TypeScript-файлы (ну, относительно читаемые).

Миф №1: «Claude Code — это один большой агент»

Самый живучий миф. Мол, есть одна супер-LLM, которая всё делает сама. Откройте src/agent.ts — и вы увидите, что там нет никакого «агента» в единственном числе. Там есть AgentController, который управляет роем, простите, пулом агентов.

Вот структура из реального кода (упрощенно):

// src/agent.ts (Claude Code v2.1.88)
export class AgentController {
  private mainAgent: ClaudeAgent;
  private subAgents: SubAgentManager;
  private skillRegistry: DynamicSkillRegistry;
  private stateMachine: StateMachine;

  async process(request: UserRequest): Promise<Response> {
    const plan = await this.mainAgent.plan(request);
    const tasks = this.decompose(plan);
    const results = await this.subAgents.execute(tasks);
    return this.assemble(results);
  }
}

Видите? Это не монолит. Есть главный агент (планировщик), менеджер саб-агентов (исполнители), и ещё динамический реестр навыков. Подробнее про саб-агентов мы писали в статье «Архитектура Claude Code: как управлять контекстом, Subagents и писать эффективный CLAUDE.md».

Каждый саб-агент — это отдельный инстанс Claude, со своим кэшем и историей. Они живут недолго: выполнил задачу — и умер. Никакой «личности» у них нет.

Миф №2: «Агент сам решает, какие действия выполнять»

Звучит страшно: «ИИ сам выбирает, что делать». На деле агент не «сам решает» — он выбирает из строго заданного набора инструментов, которые мы ему разрешили. В коде это называется ToolRegistry.

// src/tools/registry.ts
export class ToolRegistry {
  private tools: Map<string, Tool> = new Map();

  register(tool: Tool) {
    // Каждый инструмент — это функция с описанием
    this.tools.set(tool.name, tool);
  }

  getAllowed(userFlags: UserFlags): Tool[] {
    // Фильтр по флагам безопасности
    return this.tools.filter(t => t.isAllowed(userFlags));
  }
}

Агент может вызвать только те инструменты, которые переданы в промпт. Он не может сам себе добавить новый инструмент — это не зашито ни в каком function calling. Список инструментов фиксирован и контролируется флагами --tools, --no-auto-agree, --danger-allow.

Кстати, о флагах безопасности.

Миф №3: «Claude Code небезопасен — может удалить все файлы»

Самая популярная страшилка. Да, Claude Code может удалять файлы — если ему разрешить. Но посмотрите, как это реализовано:

// src/flags.ts (v2.1.88)
export const DEFAULT_FLAGS = {
  autoAgree: false,        // ничего не делаем без подтверждения
  dangerousAllow: false,   // опасные операции отключены
  confirmRequired: [
    'delete_file',
    'run_command',
    'modify_system_file'
  ]
};

По умолчанию --no-auto-agree выключен — а это значит, что на каждое опасное действие агент запрашивает подтверждение. Даже если вы забудете поставить флаг, код confirmer.ts всё равно проверит, не относится ли действие к списку запрещённых без одобрения.

Реальная угроза не в том, что агент сам по себе опасен, а в том, что вы разрешаете --danger-allow и забываете про мониторинг. Не делайте так, если не хотите потерять проект. Код не виноват — виноваты ваши флаги.

Миф №4: «Архитектура — это просто обертка над API Claude»

Многие думают: «Да это просто вызов API claude-4.5-sonnet с длинным промптом». Нет. Под капотом — полноценный рантайм агента с queryLoop, state-машиной, кэшем и динамическим выбором модели.

Вот упрощенная схема queryLoop из src/loop.ts:

// src/loop.ts — упрощённая версия
async function queryLoop(initialRequest: Request) {
  let state = new State(initialRequest);
  while (!state.isTerminal()) {
    const nextAction = await agent.chooseAction(state);
    const result = await executeAction(nextAction);
    state = state.transition(result);
    // кэширование контекста после каждого шага
    await contextCache.update(state);
  }
  return state.finalAnswer();
}

Заметили State? Это не просто стопка сообщений. Это объект, который хранит не только историю диалога, но и текущее дерево файлов, список инструментов, флаги безопасности, план выполнения. state.transition() — это чистая функция, которая возвращает новое состояние без мутации. Именно это позволяет откатывать действия (undo).

Кэш контекста — отдельная тема. Он хранится в SQLite (code_prompt_cache_v3.db) и работает на основе эмбеддингов, а не полных промптов. Это позволяет не платить за повторный анализ одних и тех же файлов.

Что на самом деле происходит с безопасностью: разбор флагов

Давайте рассмотрим реальную конфигурацию, которую вы можете передать при старте:

Флаг Описание Уровень риска
--no-auto-agree Требовать подтверждение на каждое действие Низкий (защищён)
--danger-allow Разрешить выполнение опасных команд (rm -rf, chmod и т.п.) Высокий (опасно)
--tools=all Включить все доступные инструменты, включая экспериментальные Средний
--confirm-required=delete_file,run_command Кастомный список опасных действий Низкий (кастомный)

Секрет в том, что даже с --danger-allow агент не выполнит действие мгновенно — он сначала покажет команду и попросит подтверждение (если не включен --yes). Так что «вырвался и всё удалил» — это миф, если вы не нажали Enter сознательно.

Пример: как выглядит реальный flow агента

Допустим, вы попросили Claude Code отрефакторить функцию processPayment().

Шаг 1. MainAgent строит план: найти файл, прочитать, изменить, запустить тесты.

Шаг 2. SubAgent выполняет задачу «найти файл» — использует инструмент grep по проекту.

Шаг 3. После нахождения файла — SubAgent «читать файл» — читает содержимое и возвращает в контекст.

Шаг 4. MainAgent на основе прочитанного кода решает, как рефакторить. Выбирает инструмент edit_file. Но перед этим он проверяет флаг confirmRequired — действие не в списке? Ок, выполняет.

Шаг 5. После редактирования — запуск тестов. Тесты падают. AgentController передаёт ошибку MainAgent'у, тот строит новый план для SubAgent'а «исправить ошибку».

Весь этот цикл управляется queryLoop и State. Никакой магии. Всё предсказуемо и логично.

Кому вообще нужен этот разбор?

Разбор кода — не для галочки. Он нужен:

  • Разработчикам AI-агентов — чтобы не повторять ошибки Anthropic (например, почему они не используют стейт-машину с event sourcing? А они используют, но криво).
  • CTO и инженерам, внедряющим Claude Code в CI/CD — понимать, как управлять безопасностью и контекстом, чтобы не получить счёт на $10 000 за просто так.
  • Любопытным — если вам интересно, как устроена когнитивная архитектура современного AI-кодера.

Полезно почитать также статью о джедайском уровне работы с Claude Code — там практика на основе этого же кода.

Последний совет: не верьте в магию

Claude Code v2.1.88 — это не думающий коллега. Это просто хорошо структурированный код, который принимает решения на основе конечного автомата и фиксированного набора инструментов. Мифы рождаются от непонимания. Теперь у вас есть карта этой машинной комнаты. Пользуйтесь.

И самое важное: если вам когда-нибудь покажется, что агент «сошел с ума» и делает что-то странное — проверьте State. В 99% случаев проблема в том, что State испорчен или кэш устарел. Сбросьте кэш (rm -rf ~/Library/Caches/Claude/ на macOS) и попробуйте снова. И только потом кричите про восстание машин.

Подписаться на канал