y83 code / справочник

Вопросы и одобрения

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

раздел
Чат с агентом (Codex)
пунктов возможностей
55
источник
docs/codex/chat-requests.md

Как только вы ответили, карточка остаётся в истории треда и показывает, что именно было выбрано.

Какие бывают карточки

  • Вопрос агента. Агент спрашивает, как делать дальше, и предлагает варианты ответа. Вопросов в одном запросе может быть несколько, и ответить нужно на каждый.
  • Одобрение команды. Агент собирается выполнить команду в терминале и ждёт разрешения.
  • Одобрение правки файлов. Агент собирается применить изменения в файлах и ждёт разрешения.
  • Запрос дополнительных прав. Агент просит расширенный доступ к инструментам или к сети.
  • Вызов инструмента через MCP. Агент собирается вызвать инструмент у стороннего сервера и ждёт разрешения.
  • Форма от MCP-сервера. Сервер просит заполнить небольшую форму: текст, число, переключатель или выбор из списка.

Вопрос агента

  • Вопрос показывается карточкой с заголовком и текстом. Заголовок вопроса рисуется бирюзовым цветом, а под ним сам текст вопроса.
  • Варианты ответа выбираются радиокнопками. У каждого варианта есть подпись, а под ней может быть пояснение, чем этот вариант отличается.
  • Под вариантами всегда есть поле для своего ответа. Оно подписано как Your answer и вмещает не больше трёх строк текста.
  • Кнопка Send доступна, только когда отвечены все вопросы. Пока хоть один вопрос без ответа, кнопка серая и не нажимается, потому что отправлять нечего.
  • Кнопка Dismiss закрывает вопрос без ответа. Агент при этом не прерывается и продолжает работу дальше, а в чате появляется подтверждение, что вопрос закрыт.
  • Вопросы с пометкой о секрете не показывают ваш ответ. Вместо него в истории будет написано, что ответ сохранён, но текст не выводится.
  • Обычный текст, отправленный в поле ввода, тоже считается ответом на вопрос. Если открыт вопрос, приложение берёт текст из поля ввода как ответ на него и не отправляет его отдельным сообщением.
  • Если открыто одобрение, отправка текста сначала закрывает его. Карточка одобрения сворачивается в историю как отклонённая, а написанный текст уходит в тред обычным сообщением.
  • Если в вопросе есть отдельный пункт для своего ответа, текст из поля ввода уходит именно в него. Это нужно, чтобы ответ на свободный вопрос не попал в тот пункт, где были готовые варианты.
  • Ответ на вопрос уходит на сервер только пока запрос ещё живой. Если запрос уже закрыт на стороне сервера, ответ отправляется обычным сообщением в тред, чтобы он не потерялся.
  • Повторные нажатия Send не плодят дубли. Пока ответ уже уходит, новые нажатия игнорируются, а если он уходит сообщением, одинаковый текст отсекается в течение пяти секунд.

Одобрения действий

  • Карточка одобрения состоит из трёх частей. В шапке написано, что именно собирается сделать агент: Run command, Apply changes или Permissions request.
  • Под шапкой показывается, что именно будет сделано. Для команды выводится сама команда, для правки файлов — причина, для запроса прав — то, зачем нужен доступ.
  • Подробности запроса выводятся мелким приглушённым текстом. В закрытой карточке тот же текст показывается шрифтом кода, чтобы команда и пути читались без переносов.
  • В карточке три кнопки: Allow, Always allow и Reject. Allow разрешает действие один раз, Always allow запоминает разрешение, Reject отказывает.
  • У формы от MCP-сервера кнопки Always allow нет. Форма только заполняется и отправляется, никакое разрешение ей не нужно.
  • Каждое нажатие открывает подтверждение. В окне Allow показывается текст действия, обрезанный до двухсот символов, а в окне Always allow — то, что именно будет запомнено.
  • Окно Always allow показывает, что именно разрешается навсегда. Это может быть шаблон команды, список шаблонов, адрес хоста или общие расширенные права.
  • Окно Reject предупреждает, что агент продолжит ход без этого действия. То есть отказ не останавливает всю работу, агент просто попробует сделать задачу иначе.
  • Отказ уходит на сервер как ошибка с кодом минус 32000. Вместо ответа приложение сообщает серверу, что действие запрещено пользователем.
  • После ответа карточка остаётся в истории с итогом. Возможные подписи: Approved, Always allowed и Rejected, у каждой свой значок и свой цвет.

Вызов инструмента через MCP

  • Карточка вызова инструмента узнаётся по значку вилки. В шапке написано MCP tool call, а рядом имя сервера, у которого агент хочет вызвать инструмент.
  • Под именем сервера показывается сообщение и описание инструмента. Сообщение рисуется обычным текстом, описание — приглушённым мелким шрифтом.
  • Внизу карточки есть пояснение, откуда взялся запрос. Там прямо написано, что агент хочет вызвать инструмент MCP и что его можно разрешить один раз, всегда или отклонить.
  • Набор кнопок такой же, как у обычного одобрения. Allow, Always allow и Reject, и каждое нажатие тоже открывает подтверждение.
  • После ответа остаётся карточка с итогом. Она показывает, что запрос был разрешён, разрешён навсегда, отклонён или просто отвечен, и перечисляет ваши ответы.

Форма от MCP-сервера

  • Сервер может попросить заполнить форму вместо простого одобрения. Форма собирается прямо из того, что сервер описал, поэтому набор полей у каждого сервера свой.
  • Поля формы бывают пяти видов. Это строка текста, число с цифровой клавиатурой, переключатель да или нет, выбор одного варианта и выбор нескольких вариантов галочками.
  • У каждого поля есть подпись, а под ней может быть пояснение. Подпись выводится бирюзовым, пояснение приглушённым мелким шрифтом.
  • Если сервер не описал схему, показывается одно большое поле. В него можно написать любой текст, и он уйдёт серверу как поле answer.
  • Кнопка Send активна, только когда все обязательные поля заполнены. У переключателя значение считается заполненным всегда, поэтому его заполнять не нужно.
  • Кнопка Decline отказывает без отправки данных. Сервер получает решение declined, и форма закрывается.
  • Подпись внизу объясняет, что разрешение не сохраняется. Протокол не хранит права на такие ответы, поэтому при следующем запросе форму придётся заполнить заново.

Сколько живёт вопрос без ответа

  • Обычный вопрос ждёт вас минуту скрыто и ещё минуту с отсчётом. Скрытая минута нужна, чтобы вы успели заметить карточку и спокойно её прочитать.
  • За последнюю минуту в карточке появляется строка отсчёта. Она выглядит как auto-resolves in и таймер вида 1m 05s, который тикает раз в секунду.
  • Любое ваше действие в карточке откладывает автозакрытие. Выбор варианта и печать в поле перезапускают таймер заново, поэтому отвечать можно не торопясь.
  • Когда время вышло, вопрос закрывается сам. На сервер уходит пустой ответ, а над чатом появляется предупреждение, что вопрос закрыт автоматически и агент продолжил без ответа.
  • Блокирующий вопрос ждёт ответа сколько угодно. Так ведут себя вопросы в режиме плана, где отвечать нужно осознанно, и никакого отсчёта у них нет.
  • Одобрения не закрываются по таймеру. Если вы не нажали ни одну кнопку, запрос так и остаётся на экране.

Когда вопрос становится неактуальным

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

Как вопросы и одобрения живут в ленте

  • Все открытые карточки собираются в один блок внизу ленты. Они показываются над полем ввода и идут в порядке появления, одна под другой.
  • Порядок внутри блока не меняется от того, какая карточка открыта. Между карточками есть небольшой отступ, чтобы их было видно по отдельности.
  • Закрытые карточки остаются в ленте на своих местах. Они больше не требуют действия и просто показывают, что было решено.
  • Дубли одного вопроса схлопываются в одну карточку. Один и тот же вопрос может прийти и запросом с сервера, и уведомлением, но в ленте он показывается один раз.
  • Если номер запроса совпал у разных вопросов, карточки остаются разными. Признаком одного вопроса считается не только номер запроса, но и номер хода, поэтому ничего лишнего не пропадёт.

Технические данные

ПараметрЗначение
Типы запросоввопрос, одобрение команды, одобрение правки, запрос прав, вызов инструмента MCP, форма MCP
Что отвечают в карточкеSend, Dismiss, Allow, Always allow, Reject, Decline
Подтверждения поверх карточкиAllow, Always allow, Reject
Обрезка текста в окне Allow200 символов
Обрезка команды в окне Always allow120 символов
Высота поля ответане больше трёх строк
Скрытое ожидание неблокирующего вопроса60 секунд
Видимый отсчёт неблокирующего вопроса60 секунд
Формат отсчётаauto-resolves in 1m 05s
Блокирующий вопрос в режиме планабез таймера
Сверка вопросов с сервером после входа в тред3 секунды
Защита от повторной отправки ответа5 секунд
Код отказа при Reject и Declineошибка с кодом -32000
Ответ при автозакрытии вопросапустой объект ответов без единого варианта
Радиус карточки вопроса12dp
Радиус карточки вызова MCP16dp
Внутренние отступы карточки12dp, у карточки MCP 16dp
Признак одного и того же вопросасовпадение номера запроса и номера хода
Подписи итога в историиQuestion answered, Approved, Always allowed, Rejected, MCP request declined, Expired

Источник: docs/codex/chat-requests.md. Страница собрана из документации проекта при сборке сайта — без пересказа.

Вопросы и одобрения Вернуться к справочнику