Субагенты
В уроке про контекст мы несколько раз говорили: «отдайте это субагенту». Пора разобраться, что это такое. Субагенты — способ разделить работу на изолированные контексты: основной разговор остаётся чистым, а шумные или специализированные задачи выполняются отдельно. В этом уроке — как они устроены, какие есть из коробки и как написать свой.
Что такое субагент
Субагент — это отдельный запуск Claude с собственным контекстным окном, собственной системной инструкцией и, при желании, ограниченным набором инструментов. Основной агент передаёт ему задачу, субагент работает — читает файлы, запускает команды — и возвращает в основной разговор только итоговый отчёт. Все промежуточные чтения и выводы команд остаются в его окне и не засоряют ваше.
Отсюда три свойства, ради которых субагентов используют:
- Изоляция контекста. Исследование на пятьдесят файлов не попадает в основной разговор.
- Специализация. У субагента своя инструкция: «ты ревьюер безопасности», «ты запускаешь тесты и разбираешь падения».
- Ограничение инструментов. Ревьюеру можно дать только чтение и поиск — он физически не сможет ничего изменить.
Субагент не видит историю основного разговора. Он получает системную инструкцию, текст задачи, файлы CLAUDE.md и снимок состояния git. Это надо учитывать при постановке задачи: всё, что он должен знать, нужно передать явно. Исключение — субагент-«форк», который стартует с копией текущего разговора.
Встроенные субагенты
Claude Code поставляется с несколькими субагентами, которых не нужно настраивать.
Explore — только чтение, без правок. Для поиска файлов и исследования кода. Чтобы работать быстро и дёшево, он пропускает загрузку CLAUDE.md и git-статуса. Именно его Claude выбирает, когда вы пишете «используй субагента, чтобы разобраться…».
Plan — тоже только чтение, используется в режиме планирования для исследования перед составлением плана.
general-purpose — со всеми инструментами, для сложных многошаговых задач, включая правки кода.
Есть и служебные: claude-code-guide отвечает на вопросы о самом Claude Code, statusline-setup настраивает строку состояния.
Вызвать субагента можно обычным языком:
используй субагента, чтобы выяснить, как в проекте обновляется токен
и есть ли готовые утилиты для OAuthClaude сам выберет подходящего по описанию. Если нужен конкретный — упомяните его через @: @agent-security-reviewer проверь изменения в auth. Упоминание гарантирует вызов именно этого субагента.
По умолчанию субагенты работают в фоне: основной агент продолжает работу, а запросы на разрешения от субагента всплывают в основной сессии. Список запущенных показывает /list-agents, остановить все фоновые — Ctrl+X Ctrl+K.
Свой субагент: формат файла
Субагент — это markdown-файл с YAML-заголовком. Место хранения определяет область:
| Путь | Область |
|---|---|
.claude/agents/ |
Проект, в git, для всей команды |
~/.claude/agents/ |
Все ваши проекты, только вы |
Обе папки сканируются рекурсивно, так что субагентов можно раскладывать по подпапкам. Минимальный файл:
---
name: code-reviewer
description: Reviews code for quality and best practices
tools: Read, Glob, Grep
model: sonnet
---
You are a code reviewer. When invoked, analyze the code and provide
specific, actionable feedback on quality, security, and best practices.Обязательны два поля. name — идентификатор латиницей в нижнем регистре с дефисами. description — когда Claude должен делегировать этому субагенту; по нему модель решает, кого вызвать, поэтому пишите конкретно и коротко. Текст после заголовка — системная инструкция субагента.
Необязательные поля, которые пригодятся чаще других:
tools— список разрешённых инструментов через запятую. Без поля субагент наследует все.disallowedTools— наоборот, список запрещённых.model—sonnet,opus,haikuилиinherit. Для простых задачhaikuзаметно дешевле.permissionMode— режим прав субагента:default,acceptEdits,planи другие.maxTurns— предел шагов, после которого субагент остановится с частичным результатом.memory— постоянная память субагента (user,projectилиlocal), чтобы он накапливал знания между сессиями.skills— навыки, которые загружаются в контекст субагента при старте.
Полный список полей — в документации. Не обязательно писать файл руками: попросите Claude — «создай субагента test-runner в .claude/agents/, который запускает тесты, разбирает падения и предлагает исправления; только чтение и Bash».
Пример: раннер тестов для Flutter
Прогон тестов Flutter-приложения даёт длинный вывод, а разбор падений требует чтения нескольких файлов. Хороший кандидат для субагента:
---
name: flutter-test-runner
description: Runs Flutter tests and diagnoses failures. Use after changes to lib/ or test/ when the user asks to verify or fix tests.
tools: Read, Grep, Glob, Bash
model: sonnet
maxTurns: 15
---
You run `flutter test` (or `flutter test <path>` when a path is given),
read the output, and for each failure find the cause in lib/ or test/.
Report back:
1. Total passed/failed.
2. For each failure: test name, file:line, one-sentence cause,
proposed fix (do not apply it).
Keep the report under 40 lines. Do not paste raw test output.Вызов: «используй flutter-test-runner для test/features/orders». В основной разговор вернётся отчёт на сорок строк вместо нескольких тысяч строк вывода. Заметьте последнюю инструкцию — без неё субагент склонен вставлять сырой вывод, и весь выигрыш по контексту пропадает.
Аналогичные субагенты уместны для Python (pytest с разбором трейсбеков), для Node (vitest, линтер) и для сборки: «собери проект, если упало — найди причину и опиши».
Когда субагент — правильный выбор
Документация выделяет типичные случаи.
- Исследование большой кодовой базы. Вопрос требует прочитать много файлов, а вам нужен только вывод.
- Многословные операции. Тесты, логи, загрузка документации.
- Проверка чужой работы. Ревьюер в свежем контексте не предвзят к коду, который написал основной агент. Об этом был урок про ревью.
- Параллельная работа. Несколько субагентов могут работать над независимыми частями одновременно, а основной агент собирает результаты.
Когда субагент не нужен: короткая задача с понятным ответом. Запуск субагента сам по себе стоит контекста и времени — для «прочитай этот файл и ответь» это лишнее.
Один нюанс: описания всех субагентов загружаются в основной контекст, чтобы модель могла выбирать. Держите description коротким и не плодите десятки субагентов «на всякий случай».
Субагент как основной агент
Файл субагента можно использовать и как конфигурацию основной сессии: claude --agent code-reviewer запустит Claude Code с инструкцией и ограничениями этого субагента. Это удобно для ролевых сессий — например, сессия только для ревью, в которой физически отключены инструменты записи. Для скриптов субагентов можно передать флагом --agents в виде JSON, не создавая файлов.
Попробуйте сами
10–15 мин на рабочем месте- Попросите основного агента: «используй субагента, чтобы описать, как в проекте устроена обработка ошибок». Сравните
/contextдо и после с тем, что было бы при прямом исследовании. - Создайте в
.claude/agents/субагента-раннера тестов для своего стека по образцу выше. Вызовите его на реальном падающем тесте и оцените отчёт: достаточно ли информации, чтобы исправить? - Закоммитьте субагента в репозиторий и попросите коллегу вызвать его в своей сессии. Обсудите, что стоит поправить в описании.
Коротко
- Субагент — отдельный Claude со своим контекстом, инструкцией и инструментами; в основной разговор возвращается только отчёт.
- Встроенные: Explore (чтение), Plan (планирование), general-purpose (всё). Вызов — обычным языком или через
@agent-имя. - Свой субагент — markdown с YAML-заголовком в
.claude/agents/(проект) или~/.claude/agents/(личный). - Обязательны
nameиdescription;tools,model,maxTurnsограничивают поведение. - Используйте для исследований, многословных операций, независимого ревью и параллельной работы.
- Субагент не видит историю разговора — всё нужное передавайте в задаче.
Видеоверсия
Сценарий озвучки · 510 слов, ≈ 4 мин
В уроке про контекст мы несколько раз говорили: отдайте это субагенту. Пора разобраться, что это такое, какие субагенты есть из коробки и как написать свой.
Субагент — это отдельный запуск Claude с собственным контекстным окном, собственной инструкцией и, при желании, ограниченным набором инструментов. Основной агент передаёт ему задачу. Субагент читает файлы, запускает команды и возвращает в основной разговор только итоговый отчёт. Все промежуточные чтения остаются в его окне.
Отсюда три свойства. Изоляция контекста: исследование на пятьдесят файлов не попадает в ваш разговор. Специализация: у субагента своя роль — ревьюер, раннер тестов. И ограничение инструментов: ревьюеру можно дать только чтение, и он физически не сможет ничего изменить.
Важно: субагент не видит историю основного разговора. Он получает инструкцию, текст задачи, файл клод-эм-дэ и состояние git. Всё, что он должен знать, передавайте явно.
Из коробки есть несколько субагентов. Explore — только чтение, для поиска и исследования кода; он работает быстро и пропускает загрузку лишнего. Plan — тоже только чтение, для режима планирования. И general-purpose — со всеми инструментами, для сложных многошаговых задач. Вызвать субагента можно обычным языком: «используй субагента, чтобы выяснить, как обновляется токен». Claude сам выберет подходящего. Если нужен конкретный — упомяните его через собачку и слово «эйджент», тогда вызов гарантирован. По умолчанию субагенты работают в фоне, а их запросы на разрешения всплывают в основной сессии.
Теперь свой субагент. Это markdown-файл с заголовком в формате ямл. Лежит либо в папке агентов внутри папки точка-клод проекта — тогда он в git и доступен команде, либо в такой же папке в вашей домашней директории — тогда он ваш для всех проектов. Обязательных поля два: имя латиницей и описание — когда Claude должен делегировать этому субагенту. По описанию модель решает, кого вызвать, поэтому пишите конкретно и коротко. Текст после заголовка — системная инструкция. Из необязательных полей чаще всего нужны список инструментов, модель — для простых задач подойдёт дешёвая, и предел шагов, после которого субагент остановится.
Писать файл руками не обязательно: попросите Claude создать субагента с нужной ролью, и он сделает это сам.
Пример. Прогон тестов Flutter-приложения даёт длинный вывод, а разбор падений требует чтения нескольких файлов. Делаем субагента: описание — запускает тесты Flutter и диагностирует падения; инструменты — чтение, поиск и командная оболочка; инструкция — запусти тесты, для каждого падения найди причину, верни отчёт: сколько прошло, сколько упало, для каждого падения — файл, строка, причина и предлагаемое исправление. И важная последняя строка: не вставляй сырой вывод, отчёт до сорока строк. Без неё субагент склонен вставлять весь вывод, и выигрыш по контексту пропадает. То же уместно для Python, для Node и для сборки.
Когда субагент — правильный выбор? Исследование большой кодовой базы, когда нужен только вывод. Многословные операции: тесты, логи, документация. Проверка чужой работы в свежем контексте. Параллельная работа над независимыми частями. Когда не нужен? Для короткой задачи с понятным ответом: запуск субагента сам стоит контекста и времени. И не плодите десятки субагентов на всякий случай — их описания загружаются в основной контекст.
И последнее. Файл субагента можно использовать как конфигурацию основной сессии: флаг «эйджент» при запуске откроет Claude Code с его инструкцией и ограничениями. Удобно для ролевых сессий — например, сессии только для ревью, где отключена запись.
В следующем уроке — навыки: как упаковать повторяющиеся инструкции и процедуры так, чтобы они загружались по запросу.
