agentops-delegate — Когда звать сабагента
Главное, что определяет решение: вывод сабагента вклеивается в главный контекст дословно. Сабагент экономит не свои токены, а твои — но только если его вывод короче, чем материал, который тебе иначе пришлось бы прочитать.
Отсюда правило: делегирование выигрывает, когда сабагент читает много и отвечает мало. Если он читает мало и отвечает много — ты потерял на накладных расходах.
Таблица решений
| Задача | Кому | Почему |
|---|---|---|
| Найти, где в кодовой базе живёт X | bear-locator |
Прочитает десятки файлов, вернёт список строк |
| Понять, как устроен незнакомый модуль | сам | Понимание не сжимается в контракт вывода |
| Точечная правка в одном-двух файлах | bear-surgeon |
Изоляция правки, короткий отчёт |
| Правка, растекающаяся на 5+ файлов | сам | Сабагент не удержит связность, вернёт кашу |
| Ревью diff на предмет проблем | bear-reviewer |
Читает много, отдаёт список находок |
| Один вопрос по одному известному файлу | сам | Делегирование дороже чтения |
| Широкий поиск по незнакомому репозиторию | встроенный Explore |
Он для этого и сделан |
| Что-то, где нужен диалог с пользователем | сам | Сабагент не может спросить |
| Необратимое действие | сам | Подтверждение берётся в главном диалоге |
Контракт вывода
Каждому сабагенту задавай формат ответа явно, в самом промпте. Без контракта он вернёт прозу, и ты получишь худшее из двух миров: заплатил за отдельный вызов и всё равно читаешь много текста.
Хороший контракт — грепается. path:line — symbol — note можно отфильтровать регуляркой, «в файле auth.go, примерно в районе middleware» — нельзя.
Обязательная часть любого контракта — терминальный токен отказа. Сабагент должен иметь способ сказать «не нашёл» или «слишком большая задача» одним словом, а не абзацем извинений. No match. дешевле, чем «К сожалению, мне не удалось обнаружить…».
Паттерны цепочек
locate → fix → verify. Локатор находит места, хирург правит, ревьюер проверяет. Каждый следующий получает конкретный вход от предыдущего, а не задачу целиком.
Параллельная разведка. Несколько локаторов по разным подсистемам одновременно, когда заранее неизвестно, где проблема. Оправдано, если подсистемы независимы: иначе они вернут пересекающиеся результаты, за которые ты заплатил дважды.
Одиночный выстрел. Один сабагент, один вопрос, один ответ. Самый частый и самый недооценённый паттерн: не всякое делегирование должно быть цепочкой.
Как ставить задачу
Дай сабагенту ровно тот контекст, который нужен для его шага. Пересказ всей сессии в промпте сабагента — это те же токены, только теперь оплаченные дважды.
Формулируй границы явно: сколько файлов трогать, что делать при неоднозначности, что считать провалом. Сабагент, которому не сказали «останавливайся на трёх файлах», не остановится.
Чего не делать
- Не делегируй то, чего сам не понял. Задача, которую ты не смог сформулировать, вернётся неправильно решённой, и ты этого не заметишь.
- Не давай сабагенту право на необратимые действия. Подтверждение берётся у пользователя в главном диалоге.
- Не запускай цепочку из пяти шагов там, где хватает одного вызова.
- Не проси сабагента «заодно посмотреть, нет ли ещё чего-нибудь» — размытая задача даёт размытый вывод любой длины.
- Не верь отчёту сабагента о том, что он проверил работу, если проверка была частью его же задачи. Верификацию отдавай отдельному вызову.