# Команды агентов (эксперимент)

Курс: Claude Code: уровень профи — https://zero2claude.ru/learn/claude-code-pro
Канонический URL: https://zero2claude.ru/learn/claude-code-pro/4-4-komandy-agentov

Команда агентов — несколько сессий Claude Code, где твоя сессия ведущая, а напарники переписываются напрямую. Функция экспериментальная и выключена по умолчанию. Включай её только для отдельных сессий, собирай напарников из read-only определений и останавливай их по имени.

В уроке про выбор схемы команда агентов стояла последней: она нужна, когда исполнители должны **разговаривать друг с другом**. Это экспериментальная функция, по умолчанию выключенная.

## Как устроена команда

Команда агентов — это несколько сессий Claude Code, работающих вместе. Твоя сессия — **ведущая**: она запускает напарников, каждого в собственном контексте. Напарники пишут друг другу напрямую, и ты тоже можешь написать любому из них. Субагенты же в основном просто возвращают результат.

Напарник загружает твой CLAUDE.md, MCP-серверы и навыки плюс задание от ведущего — но **не** разговор ведущего. Значит, всё нужное для задачи должно быть в задании.

## Включаем для одной сессии

Не включай команды глобально. Сделай отдельный файл, например `.claude/team.json`:

```json
{
  "env": { "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" },
  "teammateMode": "in-process",
  "hooks": {
    "TeammateIdle": [
      { "hooks": [ { "type": "command", "command": "jq -r '.teammate_name' >> \"$CLAUDE_PROJECT_DIR/.claude/teammates.log\"" } ] }
    ]
  }
}
```

- `env` включает команды только для сессий, запущенных с этим файлом;
- `teammateMode: "in-process"` держит напарников прямо в твоём терминале — так работает в любом терминале;
- хук `TeammateIdle` срабатывает, когда напарник вот-вот замрёт без дела, и записывает его имя. Это и есть доказательство, что команда собралась: в нижней панели субагенты и напарники выглядят одинаково.

Запуск ведущего:

```bash
CLAUDE_CODE_ENABLE_TODO_TOOLS=1 claude --settings .claude/team.json
```

`CLAUDE_CODE_ENABLE_TODO_TOOLS=1` даёт сессии инструменты задач на любой модели. Без него эти инструменты есть только на некоторых старых моделях, а на остальных напарники координируются одними сообщениями, без общего списка задач. Сам список показывает и прячет `Ctrl+T`.

## Напарники из твоих определений

Назови в задании определение субагента — и напарник получит его `tools`, инструкции и `model`, если в задании не указана другая модель. Удобно брать read-only ревьюеров со строкой `tools: Read, Grep, Glob`: они читают и ищут, но не правят файлы и не запускают команды.

```text
Create an agent team to review the change saved in .claude/review.diff. Spawn two teammates:
one named security, using the security-reviewer agent type, and one named tests, using the
test-reviewer agent type. When both have reported, write one combined report.
```

Claude Code запускает напарников без подтверждения. Когда работа сделана, останавливай их **по имени**:

```text
Ask the security and tests teammates to shut down.
```

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

## Конкурирующие гипотезы

Самое сильное применение — отладка, когда причина бага неизвестна. Сделай read-only определение `hypothesis-tester` и попроси ведущего запустить трёх напарников: каждый отвечает за свою гипотезу и пишет остальным, чтобы оспорить их версии. Ведущий записывает объяснение, которое выдержало спор, и гипотезы, которые отпали.

**Осторожно.** 
Пока команды включены, субагент, которого Claude называет по имени, стартует как напарник — команда может собраться, хотя ты просил субагентов. Напарники наследуют твой режим разрешений, кроме dontAsk, а с --dangerously-skip-permissions так работает каждый из них. В claude -p напарники не запускаются, а /resume и /rewind не возвращают напарников в режиме in-process. И каждый активный напарник тратит токены, пока не выйдет: держи команду маленькой, ставь в определения model: sonnet и останавливай всех, как только они отчитались.
