Основную сессию Claude Code хочется держать на Opus 5 и с высоким effort. Но гонять на той же модели переводы или массовую проверку файлов жалко — нельзя ли запускать на Sonnet или Haiku только субагентов?

Если коротко — можно. Модель субагента выбирается отдельно от основной сессии, и её можно поменять через указание при вызове, через model в файле определения или через переменную окружения. Effort тоже можно задать для каждого субагента свой.

В этой статье я разбираю то, что написано в официальной документации на 15 сентября 2026 года, а затем показываю, что получилось, когда я действительно запустил субагентов на других моделях и проверил логи диалогов. Один и тот же перевод я поручил Opus 5, Sonnet 5 и Haiku 4.5 по два раза и сравнил время, стоимость и качество.

Модель субагента определяет первое подходящее правило сверху вниз

Если не подходит ни одно, субагент работает на модели основной сессии (основного диалога)

1
Указание при вызовеmodel, который Claude передаёт, запуская субагента
2
model в файле определения — при inherit та же, что у основной сессии
3
Переменная окружения CLAUDE_CODE_SUBAGENT_MODEL — значение по умолчанию, если модель не определилась иначе
4
Модель основной сессии

Источник: официальная документация Claude Code, «Create custom subagents» (Choose a model). До v2.1.251 пункт 3 стоял на первом месте

1. Что можно: другая модель и другой effort, чем у основной сессии

Субагент — это исполнитель со своим отдельным контекстом, которого Claude Code запускает, чтобы поручить ему часть работы. С основной сессией он не делит историю диалога и по завершении возвращает ей только результат (чем субагенты отличаются от Agent Teams, я разбирал в статье Claude Code: Subagents против Agent Teams).

По официальной документации, у субагента отдельно от основной сессии можно задать две вещи.

Модель (model)

sonnet, opus, haiku, fable, полный ID модели, inherit

Полный ID модели выглядит как claude-opus-5. inherit — та же модель, что у основной сессии. Если ничего не указать, модель выбирается в порядке, показанном выше.

Effort (effort)

low, medium, high, xhigh, max

Если не указать, наследуется effort основной сессии. Доступные уровни зависят от модели, а Haiku 4.5 effort не поддерживает. Если задана переменная окружения CLAUDE_CODE_EFFORT_LEVEL, приоритет у неё.

Иначе говоря, связку «основная сессия на Opus 5 с effort high, переводчик на Sonnet 5 с effort medium» можно собрать, не выходя за рамки официальной спецификации. Что вообще означает effort, объясняется в статье Настройка effort в Claude Code: 5 уровней и Ultracode.

Источник: официальная документация Claude Code, «Create custom subagents» (Supported frontmatter fields), там же, «Model configuration» (приоритет настроек effort)

2. В каком порядке выбирается модель

Как показано на схеме в начале, модель субагента определяется первым подходящим вариантом в порядке «указание при вызове» → «model в файле определения» → «переменная окружения CLAUDE_CODE_SUBAGENT_MODEL» → «модель основной сессии». Здесь стоит учесть три момента.

Первое: порядок зависит от версии. До v2.1.251 переменная окружения стояла на первом месте и перекрывала даже указание при вызове и model в файле определения (включая inherit). Если «в определении написано model: sonnet, а не действует», первым делом проверьте версию и переменные окружения.

Второе: чтобы привести всех к одной модели, нужна отдельная настройка. Одной переменной окружения недостаточно: субагенты, у которых model прописан в файле определения, ей не подчиняются. Чтобы навязать модель всем, помимо CLAUDE_CODE_SUBAGENT_MODEL установите CLAUDE_CODE_SUBAGENT_MODEL_FORCE в 1 (v2.1.257 и новее).

{
  "env": {
    "CLAUDE_CODE_SUBAGENT_MODEL": "haiku",
    "CLAUDE_CODE_SUBAGENT_MODEL_FORCE": "1"
  }
}

В принудительном режиме model из файлов определения игнорируется — в том числе у встроенных Explore и Plan, — а Claude больше не может указывать модель при вызове. Исключений два: fork, который целиком наследует диалог, и навык с model: inherit, запущенный в субагенте, — они остаются на модели основной сессии.

Третье: куда ведут sonnet и opus, зависит от провайдера. Одно и то же sonnet превращается в разные модели.

Провайдерopussonnet
Anthropic APIOpus 5Sonnet 5
Claude Platform on AWSOpus 5Sonnet 4.6
Amazon Bedrock, Agent Platform в Google CloudOpus 5Sonnet 4.5
Microsoft FoundryOpus 4.6Sonnet 4.5

Источник: официальная документация Claude Code, «Model configuration» (таблица на 15 сентября 2026 года). Чтобы закрепить конкретную версию, указывайте не псевдоним, а полный ID модели

Если управляемые настройки организации ограничивают доступные модели (availableModels), это ограничение распространяется и на model субагентов, и на переменную окружения.

3. Как настроить (5 способов)

1) Прописать в файле определения (для ролей, которые всегда работают на одной модели)

Удобнее всего завести файл определения для каждой роли. Если положить его в .claude/agents/ проекта, им можно делиться через git, а для всех своих проектов — положить в ~/.claude/agents/.

---
name: translator
description: Переводит статьи с японского на английский. Используй, когда просят перевод
model: sonnet
effort: medium
tools: Read, Write, Grep
---
Ты переводчик технических статей. Не меняй HTML-теги и атрибуты,
переводи на естественный английский только видимый текст.

Если определений с одним именем несколько, приоритет такой: управляемые настройки организации, --agents при запуске, проект, пользователь, плагин. Начиная с v2.1.198 команда /agents больше не открывает экран создания, поэтому либо попросите Claude создать определение, либо напишите файл вручную.

2) Указать при вызове (поменять только здесь и сейчас)

Даже без определения Claude может передать модель при запуске субагента. Если в диалоге попросить «поручи эту проверку субагенту на Haiku», Claude запустит его с указанной моделью. Такое указание приоритетнее файла определения. Действительно ли модель была передана, проверьте способом из раздела 5.

3) Задать значение по умолчанию переменной окружения (сменить разом у всех, где модель не указана)

{
  "env": {
    "CLAUDE_CODE_SUBAGENT_MODEL": "sonnet"
  }
}

Если записать это в env файла settings.json, настройка подействует на субагентов, модель которых не определилась иначе. По официальной документации, под неё попадают и участники Agent Teams, и агенты рабочих процессов (workflows). Но одной этой настройкой модель встроенных Explore и Plan не поменять (раздел 4).

4) Передать через --agents при запуске (только на эту сессию)

claude --agents '{
  "translator": {
    "description": "Translates Japanese articles into English.",
    "prompt": "You are a technical translator. Keep all HTML tags.",
    "model": "sonnet",
    "effort": "medium"
  }
}'

В файл ничего не сохраняется: определение действует только в течение этой сессии.

5) Определить в Claude Agent SDK

from claude_agent_sdk import ClaudeAgentOptions, AgentDefinition

options = ClaudeAgentOptions(
    agents={
        "translator": AgentDefinition(
            description="Translates Japanese articles into English.",
            prompt="You are a technical translator. Keep all HTML tags.",
            tools=["Read", "Write"],
            model="sonnet",
            effort="medium",
        ),
    }
)

В AgentDefinition из SDK в model тоже можно указать псевдоним, inherit или полный ID модели. Если не указать, модель выбирается в порядке, описанном выше. Кстати, официальная документация отмечает, что Opus 5 охотнее предыдущих моделей раздаёт работу субагентам, и рекомендует настройки, ограничивающие число одновременно работающих субагентов (по умолчанию 20) и расходуемую сумму.

Источник: официальная документация Claude Code, «Create custom subagents» (расположение файлов и приоритет, --agents, изменение /agents, переменная окружения), там же, «Model configuration» (на что действует CLAUDE_CODE_SUBAGENT_MODEL), там же, «Subagents in the SDK» (AgentDefinition, настройки ограничений)

4. На какой модели работают встроенные субагенты

Даже если ничего не определять самому, в Claude Code изначально есть несколько субагентов. Модели у них такие.

ИмяМодельПримечание
ExploreНаследует модель основной сессии. В Claude API — не выше OpusТолько чтение. Не читает CLAUDE.md и состояние git
PlanНаследует модель основной сессииИспользуется в режиме планирования. Только чтение. Не читает CLAUDE.md и состояние git
general-purposeЕсли модель не указана при вызове — модель из переменной окружения, а если нет и её — модель основной сессииИ исследует, и вносит правки
claude-code-guideHaikuКогда вы спрашиваете о возможностях Claude Code
claudeСвоей модели нет — определяется в порядке из раздела 2Универсальный исполнитель, когда не подходит ни одна другая роль
statusline-setupSonnetКогда вы запускаете /statusline

Источник: официальная документация Claude Code, «Create custom subagents» (Built-in subagents, на 15 сентября 2026 года)

С v2.1.198 Explore больше не работает всегда на Haiku. Он наследует модель основной сессии, а в Claude API поднимается не выше Opus. Если основная сессия на более старшей модели вроде Fable, Explore работает на Opus; если на Sonnet или Haiku — на той же модели. Чтобы вернуть его на Haiku, официальная документация предлагает создать файл определения с именем Explore и прописать в нём model: haiku (собственное определение приоритетнее встроенного с тем же именем).

Чтобы менять модель Explore и Plan через переменную окружения, нужно дополнительно задать CLAUDE_CODE_SUBAGENT_MODEL_FORCE из раздела 2.

5. Замер 1: действительно ли работала указанная модель

Работает ли всё по спецификации, я проверил в своём окружении (основная сессия на Opus 5, effort high). Встроенному general-purpose я поручал одну и ту же небольшую задачу — «прочитать README и изложить в трёх строках» — в трёх вариантах: с моделью sonnet, с моделью haiku и без указания модели.

Проверить можно двумя способами. Пока субагент работает, его модель видна в списке /tasks (это указано в официальной документации). После завершения смотрите message.model в каждом ответе в файлах agent-*.jsonl из папки subagents/ в локальных логах диалогов. Где лежат логи и как их читать, подробно разобрано в статье Claude Code: расход по сессиям — как его измерить.

Что указано при вызовеМодель, записанная в логе
sonnetclaude-sonnet-5
haikuclaude-haiku-4-5-20251001
Не указаноclaude-opus-5 (как у основной сессии)

Источник: мои замеры (15 сентября 2026 года, десктопное приложение на Windows. Во всех ответах каждого субагента записана одна и та же модель)

Субагенты работали на указанных моделях, а тот, где модель не была указана, унаследовал модель основной сессии. В файле agent-*.meta.json из той же папки указанное значение, например "model": "sonnet", сохраняется только тогда, когда модель была задана.

6. Замер 2: десятки тысяч токенов только на запуск

Из тех же логов выяснилось ещё кое-что. Субагент читает десятки тысяч токенов уже в первом ответе, ещё до начала работы. Первыми в него попадают собственный системный промпт, определения инструментов, CLAUDE.md и прочее.

МодельЗапуск без кэша
(запись в кэш)
Запуск той же модели примерно через 1 минуту
(чтение / запись)
Sonnet 583 00744 846 / 38 385
Haiku 4.565 95834 008 / 32 122
Opus 577 23539 159 / 38 298

Источник: мои замеры (15 сентября 2026 года. Число токенов в первом ответе каждого субагента. Вся запись шла в 5-минутный кэш)

Из этих чисел следуют три вывода.

Первый: субагенты на одной и той же модели читают общее начало из кэша. При втором запуске у Sonnet 5 около 45 тысяч токенов пришлись на чтение кэша (0,1× цены ввода). Официальная документация тоже пишет, что запросы к одной модели с одинаковым началом делят кэш. И наоборот, кэш у каждой модели свой, а кэш основной сессии субагенты тоже не читают (начало у них другое).

Второй: даже по подписке кэш субагентов живёт 5 минут. По официальной документации, при работе в пределах тарифа кэш основного диалога живёт 1 час, а у субагентов — 5 минут. Если запустить следующего субагента больше чем через 5 минут, всё снова начнётся с записи. Чтобы кэш жил 1 час, установите настройку subagentPromptCacheTtl или переменную окружения CLAUDE_CODE_SUBAGENT_PROMPT_CACHE_TTL в 1h (v2.1.242 и новее). Чтобы задать это для каждого субагента отдельно, пропишите cacheTtl в experimental файла определения (v2.1.248 и новее; пока подписка Claude расходует дополнительные кредиты — usage credits, — значение 1h здесь игнорируется). Запись в часовой кэш стоит 2× цены ввода (в 5-минутный — 1,25×).

Третий: у Haiku 4.5 тот же текст даёт меньше токенов. Согласно официальной странице цен, модели Claude 4.7 и новее используют новый токенизатор, который насчитывает на том же тексте примерно на 30% больше токенов. Haiku 4.5 относится к поколению до 4.7 и не указан среди моделей с новым токенизатором. Если сравнивать числа в таблице напрямую, Haiku выглядит легче, чем на самом деле.

Оговорки к этим числам

  • В моём проекте большой CLAUDE.md (около 57 000 байт), поэтому числа выше, чем в типичном проекте. Размер CLAUDE.md целиком добавляется к тому, что читает каждый субагент
  • Если в файле определения указать omitClaudeMd: true, этот субагент не будет читать пользовательский, проектный и локальный CLAUDE.md (файлы управляемой политики организации он всё равно читает; v2.1.271 и новее). Встроенные Explore и Plan его и так не читают
  • 🟡 Из чего складываются токены, читаемые при запуске, официально не раскрывается. Здесь приведены суммарные числа в моём окружении

Если раздробить мелкую работу на множество субагентов, эта «плата за сам запуск» добавляется за каждого. Отдавая работу более дешёвой модели, вы экономите не только на самой работе, но и на этой части.

Источник: официальная документация Claude Code, «How Claude Code uses prompt caching» (кэш по моделям, субагенты и кэш, время жизни кэша), Claude Platform Docs, «Pricing» (токенизатор, множители для кэша), официальная документация Claude Code, «Create custom subagents» (omitClaudeMd)

7. Замер 3: один и тот же перевод — по два раза на трёх моделях

Идею из начала статьи — «перевести на модель попроще только переводы» — я проверил на деле. Из японской версии одной статьи этого сайта я взял раздел (6 265 символов HTML, включая таблицу, карточки с числами и фрагменты кода) и поручил каждой модели перевести его на английский, не меняя структуру тегов, — по два раза с одинаковой инструкцией, всего 6 запусков. Opus 5 и Sonnet 5 работали с effort high, унаследованным от основной сессии (Haiku 4.5 effort не поддерживает).

МодельВремя
(1-й / 2-й запуск)
Число тегов49 чиселСтоимость (ввод и кэш)
Opus 546 с / 45 сОба раза совпало с оригиналомОба раза все на месте$0.46 / $0.46
Sonnet 539 с / 74 сОба раза совпало с оригиналомОба раза все на месте$0.23 / $0.25
Haiku 4.599 с / 94 сВ 1-м запуске пропал один <strong>Оба раза все на месте$0.10 / $0.10

Источник: мои замеры (15 сентября 2026 года. Стоимость — по прейскуранту: число токенов из логов диалогов, умноженное на официальные цены. Вывод не учтён — см. пояснение ниже)

Вывод не включён в стоимость, потому что числу выходных токенов в логах нельзя было доверять. Попался ответ, который записал в файл перевод длиной около 8 800 символов, а в логе у него значилось 18 выходных токенов. Цена вывода за миллион токенов — $25 у Opus 5, $10 у Sonnet 5 и $5 у Haiku 4.5; все английские переводы получились длиной примерно 8 500–8 900 символов.

Качество перевода я проверил сам, сверяя каждое предложение с японским оригиналом.

  • Искажений смысла ни в одном из 6 запусков я не нашёл. Числа, таблицы и внутренние ссылки тоже сохранились правильно. Правда, текст с большим количеством чисел и списков относится к лёгким для перевода
  • Различия проявились в читаемости и единообразии написания. Haiku 4.5 в 1-м запуске смешивал «my» и «the author's» для первого лица, а во 2-м выдал скованный порядок слов вроде «G from 9th rises to 6th». Sonnet 5 писал естественным английским, но «subagent» в 1-м запуске написал как «Sub-agent», а во 2-м — как «Subagent», то есть написание менялось от запуска к запуску. У Opus 5 терминология оба раза была единообразной
  • Дольше всех работал самый дешёвый — Haiku 4.5. У Sonnet 5 время двух запусков различалось почти вдвое. Запусков мало, поэтому порядок по скорости стоит считать лишь ориентиром

Чего это сравнение не показывает

  • Это всего один раздел, переведённый по два раза. На длинных статьях, языках с сильно отличающимся порядком слов, языках с письмом справа налево вроде арабского или текстах с обилием терминов разница может вырасти
  • Способность «заметить ошибку в оригинале» я не измерял. На этом сайте бывало, что субагент на Opus, которому поручили перевод, указывал на фактические ошибки в японском оригинале (например, неверно записанный лимит символов для разных тарифов). Насколько такие замечания зависят от модели, в рамки этого эксперимента не входит

8. Как это сказывается на стоимости и лимитах

Насколько выгодно понизить модель субагентов, зависит от того, платите ли вы за API по факту использования или пользуетесь подпиской вроде Pro или Max.

API с оплатой по факту: соотношение цен работает напрямую

МодельВводВыводЗапись в 5-минутный кэшЧтение кэша
Claude Opus 5$5$25$6.25$0.50
Claude Sonnet 5$2$10$2.50$0.20
Claude Haiku 4.5$1$5$1.25$0.10

Источник: Claude Platform Docs, «Pricing» (за миллион токенов, на 15 сентября 2026 года. Вводная цена Sonnet 5 стала его постоянной ценой)

Цены Sonnet 5 составляют две пятых от Opus 5, а Haiku 4.5 — одну пятую. В замере из раздела 7 стоимость ввода и кэша у Sonnet 5 вышла примерно вдвое ниже, чем у Opus 5, а у Haiku 4.5 — примерно в пять раз ниже. Haiku 4.5 близок к соотношению цен, а Sonnet 5 вышел дороже двух пятых: число ответов и объём, прочитанный за один ответ, у моделей различались (Sonnet 5 — 4 и 6 ответов, Opus 5 — оба раза по 4; у Haiku 4.5 к тому же другой токенизатор).

Подписка: есть лимиты, которые смена модели не восстанавливает

В Pro и Max лимит сессии и недельный лимит общие для всех моделей. Если вы их исчерпали, переключение модели через /model доступ не вернёт. Помимо них есть лимиты по семействам моделей — «лимит Opus», «лимит Sonnet», — и только при достижении такого лимита можно продолжить, переключившись на модель другого семейства.

🟡 На сколько дольше хватит лимитов тарифа, если перевести субагентов на Sonnet или Haiku, официально не раскрывается. Соотношение цен API может служить ориентиром, но нигде не сказано, что лимиты расходуются именно в этой пропорции. Какие субагенты расходуют больше всего, можно посмотреть в разбивке по тарифу в /usage (доли по навыкам, субагентам, плагинам и серверам MCP).

Источник: официальная документация Claude Code, «Error reference» (You've hit your session limit: общие для всех моделей лимиты и лимиты по семействам моделей), там же, «Manage costs effectively» (разбивка по тарифу в /usage)

9. Какую работу отдавать модели попроще

Официальная документация даёт такие ориентиры: с большинством задач программирования Sonnet справляется хорошо и обходится дешевле Opus; Opus стоит приберечь для сложных архитектурных решений и многошаговых рассуждений; для простой работы субагентов стоит указывать в файле определения model: haiku. Для участников Agent Teams тоже рекомендуется Sonnet.

Исходя из этого, а также из замера в разделе 7 и опыта работы на этом сайте, приведу три ориентира для решения.

Легко отдать

Работа, результат которой можно проверить автоматически

Преобразование в заданный формат, поиск и чтение файлов, типовые проверки в большом количестве. Пропавший <strong> из раздела 7 тоже нашёлся автоматическим подсчётом тегов.

Отдавать только вместе с проверкой

Работа, где важны читаемость и единообразие написания

Например, перевод: смысл передан верно, но написание легко «плывёт». Нужны меры вроде списка терминов в инструкции или отдельного этапа, на котором написание приводится к единому виду.

Лучше не отдавать

Работа, где нужны суждения и умение «заметить, что что-то не так»

Задачи, в которых нужно заметить ошибку в оригинале или в архитектуре, и задачи, результат которых трудно проверить автоматически. Эта способность может зависеть от модели, а в этом эксперименте её измерить не удалось.

Если сомневаетесь, надёжнее всего поручить одну привычную задачу модели попроще и сравнить результат с тем, что выдаёт текущая модель. Для пробы достаточно поменять одну строку model в файле определения, а если не подойдёт — сразу вернуть как было. Если разделить нужно не модель субагента, а модель основной сессии — Opus только для планирования, Sonnet для реализации, — это делает opusplan (см. Что такое opusplan в Claude Code?).

FAQ

Q1. Если посреди диалога сменить модель основной сессии через /model, сменится ли модель субагентов?
У субагентов, чья модель определяется указанием при вызове, model в файле определения (кроме inherit) или переменной окружения, — нет. Субагенты, у которых ничего из этого нет, и субагенты с inherit в файле определения следуют за моделью основной сессии. Учтите, что при смене модели основной сессии её кэш создаётся заново.

Q2. Можно ли оставить модель прежней и понизить только effort?
Можно. Если написать в файле определения, например, effort: medium, этот уровень будет действовать только пока работает данный субагент. Но если задана переменная окружения CLAUDE_CODE_EFFORT_LEVEL, приоритет у неё.

Q3. Какая модель получится в Amazon Bedrock, если написать model: sonnet?
По официальной документации на 15 сентября 2026 года — Sonnet 4.5. В Anthropic API это Sonnet 5, так что один и тот же файл определения даёт разный результат в зависимости от провайдера. Если нужно закрепить версию, указывайте полный ID модели.

Q4. Выгоднее ли сделать кэш субагентов часовым?
Зависит от того, как вы работаете. Если вы многократно запускаете однотипных субагентов с перерывами больше 5 минут, это сократит повторные записи. С другой стороны, запись в часовой кэш стоит 2× цены ввода (в 5-минутный — 1,25×), так что если субагенты запускаются плотной серией за короткое время, 5-минутный кэш обойдётся дешевле. Настройки часового кэша и условия, при которых они действуют, описаны в разделе 6.

Q5. Я указал модель, но, похоже, она не действует.
Проверьте по порядку: 1) не включён ли CLAUDE_CODE_SUBAGENT_MODEL_FORCE (тогда указания в файлах определения игнорируются); 2) не стоит ли версия старше v2.1.251 с заданной переменной окружения; 3) разрешена ли эта модель в управляемых настройках организации. На какой модели субагент работал на самом деле, можно посмотреть в /tasks, пока он работает, а после завершения — в message.model в логах диалогов.

Источники