Документация

Документация/Безопасность и данные

Аварийная остановка и журнал действий

Как одним сочетанием клавиш остановить агента вместе со всем, что он запустил, как включить его снова и где смотреть журнал всех его действий.

Аварийная остановка (в приложении она же «рубильник») выключает агента целиком: прерывает запросы к модели во всех чатах и убивает всё, что он запустил. Обычная кнопка «Остановить» в поле ввода прерывает один ход. После аварийной остановки агент остаётся выключенным, пока вы сами его не включите. Журнал действий хранит всё, что делал агент, и показывает, что именно прервала остановка.

Как остановить агента

Подойдёт любой способ:

  • Нажмите ⇧ ⌘ Esc на macOS или Ctrl Alt Shift Esc на Windows и Linux. Сочетание не зависит от раскладки и работает откуда угодно: из чата, редактора, терминала или открытого диалога.
  • Выполните команду «Аварийно остановить агента» в окне поиска. Это окно с вкладками «Чаты», «Файлы» и «Текст»; клавиши, которые его открывают, есть в таблице на странице Файлы и редактор. На вкладке «Чаты» или «Файлы» начните вводить название команды: она появится в группе «Действия», выберите её.
  • Откройте «Настройки → Безопасность агента → Организация» и в карточке «Аварийная остановка» нажмите «Остановить агента».
  • Нажмите красную кнопку «Остановить агента» в шапке окна, если вы её включили.

Подтверждения нет: агент останавливается сразу.

Красная кнопка в шапке

По умолчанию кнопки в шапке нет. Чтобы её включить:

  1. Откройте «Настройки → Расположение панелей».
  2. Отметьте «Красная кнопка «Остановить агента»».

Кнопка появится в верхней панели главного окна и окон модулей. Сочетание клавиш работает и без неё.

Что останавливается

На этом компьютере и на сервере проекта, открытого по SSH:

  • запросы к модели и все вызовы инструментов во всех чатах всех проектов;
  • все процессы, которые запустил агент, в том числе фоновые;
  • контейнеры, которые агент запустил через docker run;
  • обращения агента к базам, кластерам и очередям, его вызовы kubectl и helm, все пробросы портов и соединения с базами;
  • трассировки RabbitMQ и запросы агента во входящих;
  • API-клиент Ignition;
  • подтверждения, которые вы выдали, но агент ещё не использовал.

Терминалы приложения закрываются вместе с агентом. Чаты и файлы остаются как были.

Что видно после остановки

  • Уведомление «Агент остановлен за N мс» со списком «Остановлено: …» или с фразой «Агент ничего не выполнял.». Если что-то остановить не удалось, там же появится «Не всё удалось остановить:» и список.
  • Плашка «Агент остановлен» в шапке. Нажмите на неё, чтобы увидеть, кто и когда остановил агента. Там же кнопки «Включить агента» и «Журнал агента».
  • Надпись в поле ввода: «Агент остановлен аварийным рубильником — запросы не отправляются, пока его не включат.»

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

Как включить агента снова

  1. Нажмите «Включить агента» — на плашке в шапке, в поле ввода или на вкладке «Организация».
  2. Появится окно «Включить агента?» с текстом: «Агент снова сможет обращаться к модели и выполнять инструменты в ваших проектах на этом компьютере и на серверах. Включение записывается в журнал агента.» Нажмите «Включить».

Включайте агента только из приложения: править или удалять файлы приложения для этого не нужно. Приложение хранит состояние рубильника в своём файле. Если этот файл изменили, заменили или перенесли с другого компьютера, приложение на всякий случай считает агента выключенным, и плашка вместо обычного текста показывает: «Файл состояния рубильника не открылся (изменён или перенесён), поэтому агент выключен, пока вы его не включите.» Тогда тоже нажмите «Включить агента».

Если агента отключила организация, плашка называет причину, и включить агента нельзя, пока его снова не включит администратор. После этого агент сам не вернётся — включите его вручную (см. Организации).

Журнал действий

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

Как смотреть

  1. Откройте «Настройки → Журнал действий». Внутри раздел называется «Журнал агента».
  2. Записи разбиты по дням («Сегодня», «Вчера»), показаны последние 100.
  3. Сузьте список фильтрами: «Все», «Заблокированные», «Рубильник», «Решение» (разрешено, спросили, записано, запрещено) или «Правило» с поиском «Найти правило».
  4. Нажмите «Проверить сейчас», и приложение проверит целостность журнала. В ответ появится «Цепочка цела: N записей, ни одна не изменена, не удалена и не вставлена.» или место, где цепочка нарушена.
  5. Нажмите «Выгрузить…», чтобы сохранить журнал в файл JSONL. Первая строка файла — итог проверки цепочки.

Кнопкой «Создать правило» в записи можно сразу сделать из её команды или пути своё правило: «Больше не спрашивать», «Всегда запрещать» или «Записывать», в этом проекте или везде.

Почему журнал нельзя незаметно исправить

Каждая запись связана с предыдущей и подписана ключом из системной связки ключей. Если запись изменить, удалить или вставить, проверка это покажет. Если связки ключей нет (бывает на Linux), в каждой записи хранится контрольная сумма предыдущей: правку видно, а аккуратную подделку — нет.

Файлы журнала лежат в ~/.koder/ade/audit/, по файлу на день.

Журнал в организации

Если вы в организации, администратор может включить сбор журналов с компьютеров сотрудников. По умолчанию сбор выключен. Когда он включён, в разделе написано: «Журнал также уходит в журнал организации «…». Записи, сделанные до …, не отправляются.» Там же показаны время последней отправки и ошибка, если отправить не удалось. Подробнее — на странице Организации.

Ограничения

  • Аварийная остановка и журнал охватывают агента в приложении DevMachine ADE. Остановка действует и на внешних агентов: все их чаты останавливаются, и новых задач они не поставят, пока вы снова не включите агента (см. Внешние агенты).
  • Не останавливаются: процесс, который стёр своё окружение (env -i); на macOS — системные программы из /bin, ушедшие из группы процессов агента; контейнеры, запущенные через docker compose; службы, запущенные через systemctl --user start.
  • Если связь с агентом прерывалась, вызовов за это время в журнале нет: на их месте стоит запись «Пропуск».
  • Песочница — средство операционной системы: она не даёт команде агента писать вне разрешённых папок и ходить в сеть мимо списка. По умолчанию она выключена. Пока агент работает без песочницы, его команда может удалить файлы журнала. Проверка цепочки покажет удаление, но записи не вернёт. Если вам важна сохранность журнала, включите песочницу (см. Ограничения агента).

Что дальше

Обновлено · Нашли неточность? Напишите на support@devmachine.ai или в Telegram.