Перейти к содержанию

Субагенты

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

По умолчанию основной агент запускает всех нужных субагентов сразу и ждёт, пока они закончат: их результаты приходят к нему вместе, одним ответом, и он не тратит время на промежуточные реплики. В настройках можно разрешить ему продолжать независимую работу, пока субагенты исследуют; тогда результат каждого приезжает в разговор по мере готовности — см. ожидание субагентов.

Общая концепция субагентов описана в статье Субагенты.

Панель субагентов в чате

Когда агент запускает субагентов, над полем ввода появляется панель вида «2 субагента исследуют · 10 шагов». В ней видно каждую задачу: описание, статус и, для работающих задач, счётчик «работают / лимит параллельных задач».

Она может быть свёрнута и развёрнута кликом по ней.

Свёрнутая панель субагентов в работе

Развёрнутая панель субагентов в работе

По списку можно ходить стрелками, Enter открывает задачу, A разворачивает и сворачивает панель.

Ожидание субагентов

Пока основной агент ждёт результатов, заголовок панели так и говорит: «Ждём результатов: …», а когда отдаёт их модели — «Обрабатываем результаты субагентов». Рядом с «Ждём результатов» есть кнопка Продолжить, не дожидаясь: основной агент продолжит ответ без субагентов, а их результаты придут отдельным ходом, когда они закончат. Настройка ожидания при этом не меняется — это разовая мера для текущего ответа.

Пока идёт ответ и работают субагенты, кнопка Остановить ответ останавливает только ответ основного агента, а исследование продолжается.

Те же задачи видны в боковой панели под строкой чата, как запуски под задачей планировщика: счётчик с иконкой субагента в строке чата раскрывает и сворачивает список, а у открытого чата он раскрыт сам.

Задача, которая закончила работу или зависла, пока её экран не был открыт, отмечается точкой в боковой панели, а уведомление с кнопкой Открыть появляется в приложении и, если окно не в фокусе, в системе.

Итог субагента в чате

Итог завершённого субагента виден и в самом чате: карточка вызова разворачивает блок «Итог субагента», а длинный текст обрезается со ссылкой на экран задачи. Так находка остаётся в разговоре, а не только в пересказе модели.

Экран субагента

Нажмите на задачу в панели, в боковой панели или на ссылку «Открыть субагента» в карточке вызова, чтобы открыть её отдельным экраном. Экран устроен как обычный чат: запрос субагента показан сообщением пользователя, вызовы инструментов карточками, ответы модели текстом, а итог последним ответом. Сверху подпись «Субагент» с названием задачи и кнопка Основной чат, которая возвращает в разговор; то же делают Esc при пустом поле ввода и [. Пока задача работает, лента обновляется сама, с каждым шагом субагента.

Экран работающего субагента

В строке состояния у работающей задачи видны бюджеты: «12 из 64 шагов», «5 мин из 30 мин», а у подвисшей — отсчёт до остановки сторожевым таймером. Вместо строки ввода внизу — состояние задачи и кнопки:

  • Остановить прекращает задачу. Кнопка Остановить всех в панели над строкой ввода останавливает сразу все работающие.
  • Продлить появляется у подвисшей задачи, то есть у такой, которая давно не делала шагов, но ещё не выбрала свой бюджет времени.
  • Перезапустить доступна у завершённых: незавершённая задача продолжится, а завершённая прогонится заново с тем же запросом.
Сессию завершённого субагента тоже можно просмотреть

Экран завершённого субагента

По мере работы завершённые субагенты скрываются в развёрнутой панели. Их можно увидеть вновь, кликнув «Завершённые» внизу панели.

Завершённые субагенты скрыты

Завершённые субагенты показаны

Разговор с субагентом

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

  • Политика на следующий ход. Только чтение оставляет субагенту исследовательский набор инструментов, Авто-правки добавляет правку файлов, Без подтверждений ещё и команды терминала. Режима «Запрашивать» нет: субагенту некому задать вопрос, поэтому всё, что разрешено, выполняется без подтверждений. Выбирайте правки только когда готовы принять их без просмотра.
  • Кольцо контекста, то же, что в основном чате: показывает, сколько занял последний запрос субагента по счёту модели. Пока субагент не отправил ни одного запроса, а также у задач старой версии агента, кольцо пустое и показывает «—». В раскрытом меню кнопка Сжать контекст заменяет всю историю одним резюме. Пока субагент отвечает, сжатие недоступно; после него в ленте остаётся пометка, прежние реплики не восстанавливаются, а следующее сжатие откроется после нового сообщения.

Пока субагент отвечает, вставить реплику в его ход нельзя: сообщение, отправленное в это время, встаёт в очередь и уходит следующим ходом, как только задача остановится. Очередь видна под полем ввода, крестик возвращает текст в поле; второе сообщение подряд дописывается к первому. Кнопка остановки при этом остаётся на месте.

Если агент чата не запущен (например, после перезапуска приложения), экран показывает сохранённый снимок задачи, а первая же реплика субагенту поднимает агента — как сообщение в основном чате. То же делают Перезапустить и Сжать контекст. Разговор с субагентом пишется в его собственную историю и виден после перезапуска приложения; лента строится по ней, поэтому у реплик, кроме первой, нет времени отправки.

Остановка чата с субагентами

Кнопка Стоп у поля ввода останавливает ответ, всех субагентов и автоматические продолжения в этом чате. Если работают только субагенты, кнопка остаётся доступной при пустом поле ввода. Чтобы остановить только исследование, используйте кнопку задачи или Остановить всех в панели; чтобы остановить только ответ, оставив исследование, — Остановить ответ в панели субагентов.

Приложение сначала просит агента отменить дочерние задачи: они помечаются как отменённые вами, а не как упавшие, и модель получает указание не продолжать текущий поток. Затем процесс агента выключается — не дольше чем через пару секунд, даже если агент перестал отвечать. Поэтому панель не покажет субагентов как ошибочные после того, как вы решили их остановить. Уже показанный текст остаётся в истории чата.

Если агент остановлен или перезапущен, незавершённые субагенты обрываются вместе с ним. В панели при общем Стоп они помечаются остановленными, при выходе или перезапуске агента — ошибкой. Управление снова доступно после отправки сообщения и запуска агента.

Роли субагентов

Помимо универсального субагента-исследователя, можно описывать собственные роли — именованные наборы инструкций и ограничений в Markdown-файлах. Агент сам видит список ролей и выбирает подходящую, когда делегирует задачу, а в карточке и в панели такая задача подписана именем роли. Роль проекта перекрывает общую с тем же именем. Выключенную роль агент не предлагает и не принимает, файл при этом остаётся.

Ролями удобно управлять прямо в интерфейсе:

  • роли проекта живут в чипе Субагенты над полем ввода, рядом с навыками: список ролей открытого чата с переключателем у каждой, поле для создания новой роли, а у каждой роли карандаш, корзина и кнопка запуска;
  • общие роли, доступные во всех проектах, лежат в разделе «Общие роли субагентов» на вкладке Субагенты в настройках.

Карандаш открывает окно с формой: описание, по которому агент выбирает роль, модель, уровень рассуждений, список инструментов и инструкции. «Сохранить» переписывает файл целиком, и если черновик не проходит проверку (пустое описание, инструмент, которого роли нельзя), ошибка показывается под формой, а файл не меняется. Внизу формы есть ссылка «Открыть файл в редакторе» для правок, которые в форму не помещаются.

У каждой роли есть кнопка запуска: она ставит в поле ввода чата метку @agent:<имя> — допишите задание и отправьте, и субагент этой роли получит его. Роль можно запустить самому, не дожидаясь решения агента: напишите @agent:reviewer в начале сообщения, и по @agent: строка ввода подскажет роли. Агент запустит по субагенту на каждую названную роль с текстом сообщения как задачей, а сам получит их результаты первым же ответом, с учётом настройки ожидания. Метка @agent: посреди фразы или в коде остаётся обычным текстом. То же правило работает в сообщении из Telegram и в терминальном Koda CLI.

Формат файла роли

Роль — это файл .koda/agents/<имя>.md в папке проекта или ~/.kodacli/agents/<имя>.md для всех проектов: в шапке имя роли, описание, при желании модель и список инструментов, а всё, что ниже шапки, субагент получает как инструкции. Подробнее о формате — в статье о ролях субагентов и в описании формата в CLI.

Субагенты и План

План может быть составлен заранее субагентами, если явно потребовать этого или модель агента сама решит это сделать. Консолидированная информация будет использована для составления плана.

Субагенты могут работать параллельно и реализовывать план, который сформирован в основном потоке.

Один сценарий не исключает другой.

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

Развёрнутые панели плана и субагентов

Свёрнутые панели плана и субагентов

Настройки

Откройте Настройки и перейдите на вкладку Субагенты.

Настройки субагентов

Настройки субагентов

Все параметры вкладки — на странице настроек субагентов.