Перейти к содержимому

Общаться с агентом

В этом руководстве рассказано, как работать с агентом в пространстве.

  1. Перейдите в раздел Пространства на боковой панели
  2. Нажмите кнопку + рядом с заголовком «Пространства»
  3. Введите название — оно обязательно. Пустое название не принимается; диалог остаётся открытым
  4. При необходимости добавьте агентов из рабочего пространства
  5. Если в рабочем пространстве есть хотя бы один репозиторий, появляется выбор репозиториев. Изначально выбраны все; сузьте выбор (в том числе сняв один репозиторий), оставив только те репозитории, для которых это пространство должно подготавливать worktree
  6. Подтвердите

Control Center открывает пространство и в фоне начинает подготавливать по одному worktree с копированием при записи для каждого выбранного репозитория.

Введите сообщение в поле ввода и нажмите Enter. Агент запускается и начинает передавать свой ответ потоком.

Если пространство всё ещё подготавливается, ваше сообщение не теряется, а откладывается — поле ввода удерживает его и отправляет автоматически, как только worktree будут готовы.

Пока агент работает, вы видите, как в потоке идёт его ход: сегменты рассуждений, вызовы инструментов (чтение и запись файлов, shell-команды) и текст ответа — всё внутри одного сообщения хода агента.

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

Поведение меняют три вещи:

  • Сообщение, содержащее @-упоминание, всегда отправляется как сообщение, а не как управление
  • Сообщение, начинающееся со slash-команды, всегда обрабатывается как эта команда
  • Сообщение с вложением всегда отправляется как сообщение — очередь управления работает только с текстом
  • Если все идущие запуски уже завершены, текст проходит дальше и отправляется как обычное сообщение

Когда агент упирается в действие, которое отсекают его ограничения — разрушительная команда, привилегированный инструмент — сервер блокирует запуск и публикует запрос на одобрение всем подключённым клиентам. Если у вас открыт этот разговор, запрос появляется в чате, над полем ввода, в виде той же карточки с пронумерованными вариантами, что и для ask_user (отклонить, одобрить и, при желании, одобрить на 8 часов). Пропустить нельзя: заблокированный агент ждёт решения.

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

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

Агент, которому нужно узнать предпочтение, недостающее требование или сделать настоящий выбор, обязан вызвать ask_user. Если написать вопрос обычным сообщением в чате, ход завершится, и вам придётся обратиться к агенту заново. Инструмент отображает в разговоре карточку с номерами — варианты, необязательное поле свободного текста или и то и другое — и запуск ждёт вашего ответа.

Нажмите один вариант, чтобы отправить его (номер в конце при наведении превращается в стрелку). Для множественного выбора и ответов, введённых с клавиатуры, используйте Продолжить (⌘↵ / Ctrl↵). Пропустить велит агенту выбрать разумное значение по умолчанию и больше не спрашивать.

Это отдельный механизм, отличный от карточки одобрения выше: одобрение — это «можно мне это сделать?», а вопрос — «что именно из этого вы имели в виду?». Задавать вопросы можно во встроенном раннере в любом режиме, включая режимы только для чтения (он ничего не изменяет), и это намеренно не обёрнуто в запрос одобрения — диалог перед диалогом при отсутствии подключённого одобряющего закрывался бы отказом. Запуск, у которого нет разговора для отображения, просто не получает этот инструмент.

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

В заголовке пространства нет элемента управления для остановки, и для неё нет сочетания клавиш. Чтобы остановить только один запуск, когда их несколько, откройте вкладку активности этого запуска — в её заголовке есть привязанные к запуску пауза/возобновление и остановка (при остановке потребуется подтверждение). Наблюдаемость → Онлайн перечисляет всех работающих агентов рабочего пространства с тем же элементом управления.

Остановленный запуск помечается как остановленный. Отправьте новое сообщение, чтобы запустить агента снова.

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

Команда Что она делает
/plan Переключает пространство в режим плана. Просто /plan только взводит режим; /plan <запрос> взводит его и отправляет остаток как ваше сообщение
/goal <text> Записывает рабочую цель разговора
/loop <text> Повторяет работу над задачей, пока она не будет завершена
/compact Сворачивает старую историю в закреплённое резюме и продолжает на сжатом контексте
/todo … Просматривает и редактирует сохранённый список задач этого разговора

Навыки появляются в том же списке в собственном пространстве имён skill:, поэтому они никогда не конфликтуют с командами выше — навык с именем plan или compact остаётся доступным:

Команда Что она запускает
/skill:<name> Навык, установленный в рабочем пространстве или привязанный к агенту
/skill:<repo>:<name> Навык, поставляемый одним из репозиториев, склонированных в это пространство

Навыки репозиториев помечены значком репозитория, из которого они пришли, потому что одно имя не говорит, соглашения какого сервиса он в себе несёт, и два репозитория могут каждый поставлять навык testing. Чтобы найти навык, необязательно вводить префикс: при вводе одного имени навыка совпадают и записи с пространством имён.

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

/compact и /todo перехватываются клиентом и никогда не сохраняются как сообщения — строка /compact в расшифровке сдвинула бы границу следующего сжатия на один ход назад. /plan переключает сохранённый режим пространства, а не передаётся как текст. Так что ни одна из этих трёх не является «сообщением, которое вы отправляете агенту»; не ждите увидеть их в истории.

Перед сложным изменением переключите пространство в режим плана с помощью /plan, раскрывающегося списка режимов на панели инструментов поля ввода или Shift+Tab. Тогда агент исследует всё в режиме только для чтения и выдаёт типизированный план, который вы одобряете до начала любой работы. См. Использовать режим плана.

Обратиться к агенту без отдельного пространства

Заголовок раздела «Обратиться к агенту без отдельного пространства»

Не нужно заводить отдельное пространство для каждого агента. В любом пространстве:

@alice can you look at the failing tests in src/auth_test.dart?

Упомянутый агент добавляется в пространство и запускается с контекстом этого пространства. О том, как сопоставляются имена, см. @-упоминать агентов.