Часть VI · Глубокие разборы · Глава 14
14

Память агента, harness, SDK vs CLI

Заглянем под капот. Что именно харнесс собирает в системный промпт, почему один и тот же запрос не даёт один и тот же ответ, и как окончательно развести три примитива из Главы 01.

~14 минут источник: reports/claude-agent-sdk-vs-cli-system-prompts · claude-agent-command-skill Claude Code v2.1.179
§1 · Модульный промпт

110+ фрагментов, собранных под фичи

В Главе 00 мы говорили, что харнесс собирает (б) — то, что видит модель. Вот как именно. CLI использует модульную архитектуру: базовый промпт всего ~269 токенов, а сверху условно подгружаются десятки фрагментов: инструкции инструментов, гайдлайны кода, правила безопасности, окружение, CLAUDE.md. Всего 110+ строк, от 18 до 2610 токенов каждая.

SDK по умолчанию даёт минимальный промпт: только инструменты, что ты явно передал. Чтобы получить поведение CLI, нужен пресет claude_code — но даже он не подтянет CLAUDE.md без явного settingSources.

Схема: как различаются системные промпты Claude Agent SDK и Claude CLI для одного и того же запроса.
Плашка 1.1 · SDK (минимум) против CLI (модульная сборка). Из репозитория.
Что под капотом · один запрос
АспектCLISDK (дефолт)SDK (пресет)
Системный промптмодульный (~269+)минимумкак CLI
Инструменты18+ встроенныхтолько переданные18+
CLAUDE.md автоданетнет (нужен конфиг)
Гайдлайны кодаданетда
§2 · Детерминизма нет

Один вход, разные ответы

Важный и неудобный факт: идентичный вывод не гарантирован, даже при совпадающих промптах и temperature=0. В Messages API нет параметра seed. Поверх этого — недетерминизм инфраструктуры.

Что мешает повторяемости
ФакторКонтролируешь?
Разные системные промпты (CLI vs SDK)да, конфигом
Float-арифметика на параллельном железенет
MoE-роутинг (какие эксперты активны)нет
Батчинг и планирование в облакенет
Снапшоты моделинет
Вывод для дизайна

Не закладывайся на бит-в-бит повторяемость. Строй системы устойчивыми к вариациям: структурированные выводы с JSON-схемой, валидация, кэш результатов, при необходимости консенсус из нескольких генераций. Это прямое продолжение петли проверки из Глав 00 и 12.

§3 · Три примитива, окончательно

Кто срабатывает и в каком порядке

Сведём Главы 01 и 06 в одну таблицу различий и одно правило разрешения конфликтов.

Агент / Команда / Скилл
АгентКомандаСкилл
Свой контекстда, изолированнетнет (если не fork)
В меню /нетдада (если не скрыт)
Авто-вызов модельюда (description)нет, только вручнуюда (description)
Памятьда (memory)
Предзагрузка скилловда (skills)
Порядок разрешения

Когда под один интент подходят несколько, Claude берёт самый лёгкий: 1) Скилл (inline, без накладных) → 2) Агент (свой контекст, если задача сложнее) → 3) Команда (никогда сама, только по явному /). На вопрос «который час» сработает скилл, а не агент: зачем отдельное окно ради однострочника.

Шпаргалка главы

Пять тезисов на вынос

  1. CLI = модульный промпт (~269 база + 110+ условных фрагментов). SDK = минимум, пресет claude_code приближает к CLI.
  2. SDK не грузит CLAUDE.md без settingSources. CLI грузит автоматически.
  3. Детерминизма нет: нет seed, temp=0 не спасает, MoE/float/инфра. Строй устойчиво к вариациям.
  4. Различие примитивов сводится к: свой контекст (агент), память (агент), авто-вызов (агент/скилл), меню (команда/скилл).
  5. Порядок: Скилл → Агент → Команда. Claude берёт самый лёгкий вариант под интент.