# Что именно делал агент

> Инспектор действия в сессии разработки: виды действий и что показывает каждый, статусы, «Вызов и результат как есть», вкладка «Файлы».

**Инспектор** — правая колонка открытой сессии (на телефоне — нижняя шторка). Две вкладки:
**«Действие»** — выбранное действие целиком, в том виде, который ему подходит: терминал,
файл, диф, код; **«Файлы (N)»** — все файлы, которые сессия читала и меняла. Как выбрать
действие — на странице [Прочитать сессию](/docs/buff-code/sessions/view).

_Иллюстрация: Инспектор: чем именно модель вызвала инструмент и что он ответил — дословно._

## Заголовок действия

- значок вида и **глагол с объектом** — те же, что в строке ленты: «Прочитал» и путь,
  «Запустил» и команда;
- строка **hh:mm · модель · ход N с · имя инструмента** — когда начался ход, какая модель
  отвечала, сколько ход длился и как инструмент называется технически (`bash`, `edit`,
  `knowledge_read_entry`, `jira__get_issue`);
- **статус** справа — см. таблицу ниже. У действия с ошибкой под заголовком — её текст.

## Виды действий

Вид определяется по имени инструмента; он задаёт значок, цвет на полосе хода, глагол и то,
как инспектор показывает тело действия.

| Вид | Инструменты | Глагол · объект | Что показывает инспектор |
| --- | --- | --- | --- |
| **Терминал** | `bash`, `shell` | **Запустил** · первая строка команды; команда в фоне — **Запустил в фоне** | Окно терминала: папка, команда, вывод. При ненулевом коде выхода вывод красный. |
| **Чтение файла** | `read` и инструменты с окончанием `_read` | **Прочитал** · путь | Файл с номерами строк — ровно тот фрагмент, который получила модель, с той строки, с которой читала. Листинг папки — как текст. |
| **Правка файла** | `write`, `edit`, `multiedit`, `apply_patch`, `patch` | **Записал** (`write`) или **Изменил** · путь | Диф с подписью, против чего он посчитан (см. ниже), число **+N −N**, ниже — «Ответ инструмента». |
| **Поиск** | `glob`, `grep`, `search`, `list`, `ls` и подобные | **Искал** · шаблон или запрос | «Вызов» — аргументы, «Результат» — что нашлось. |
| **Код** | `execute` (Code Mode) | **Выполнил код** · первая строка кода | «Код модели» с номерами строк и «Результат» его выполнения. |
| **Знания** | `knowledge_*` | **Записал знание** · заголовок — разработчик добавил запись; **Предложил знание — не добавлено** — отказался; **Предлагает знание** — запрос ещё ждёт ответа; **Просмотрел знания** · имя записи или запрос | «Вызов» и «Результат». Это [база знаний](/docs/buff-code/knowledge) организации. |
| **Справочник** | инструменты с `handbook` в имени | **Искал в справочнике** · запрос | «Вызов» и «Результат». |
| **Вопрос разработчику** | `question` | **Спросил разработчика** · первый вопрос | Вопросы с вариантами ответов и «Ответ разработчика». |
| **Интернет** | `webfetch`, `websearch`, `fetch` | **Открыл** · адрес или запрос | «Вызов» и «Результат». |
| **Подзадача** | `task`, `subagent` | **Поручил подзадачу** · описание | «Вызов» и «Результат». |
| **Навык** | `skill` | **Применил навык** · имя навыка | «Вызов» и «Результат». |
| **План** | `plan_exit` | **Предложил план** · заголовок плана | План текстом, как его видел человек при утверждении. |
| **Список дел** | `todo_update` | **Обновил список дел** · «готово N из M» | Пункты списка с отметками сделанного. |
| **Сценарий** | `workflow_*` | **Запустил сценарий**, **Исправил прогон сценария**, **Сохранил сценарий**, **Спросил человека** и другие · название | «Вызов» и «Результат». См. [Сценарии](/docs/buff-code/work/workflows). |
| **Автоматизация** | `automation_*` | **Предложил автоматизацию** · название | «Вызов» и «Результат». См. [Автоматизации](/docs/buff-code/work/automations). |
| **Инструмент** | всё остальное — [инструменты подключений](/docs/buff-code/tools), [репозитории проекта](/docs/buff-code/repositories), свои MCP | имя инструмента как есть | «Вызов» — аргументы как JSON, «Результат» — ответ как JSON или текст. |

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

- **«заменённый фрагмент»** — у `edit`: старый текст против нового, как их передала модель;
- **«против версии, записанной раньше в этой сессии»** — у `write`, если этот файл в сессии
  уже записывали;
- **«против версии, прочитанной раньше в этой сессии»** — у `write`, если файл раньше читали
  с первой строки;
- **«Новый файл — или его прежняя версия в этой сессии не видна»** — сессия его раньше не
  читала и не писала: весь текст показан как добавленный. Так бывает и с существующим
  файлом, если модель записала его, не читая.

_Иллюстрация: Терминал в инспекторе: команда, вывод и код выхода — красным, если команда завершилась с ошибкой._

_Иллюстрация: Правка файла: диф против заменённого фрагмента, счётчик строк и ответ инструмента._

## Статусы

| Статус | Когда |
| --- | --- |
| **ждёт ответа** | результата ещё нет — идущая сессия или обрыв, после которого ответ не пришёл |
| **код выхода 0** / **готово** | команда завершилась нулём; у остальных инструментов — ответ пришёл без ошибки |
| **код выхода N** (красный) | команда завершилась ненулевым кодом |
| **ошибка** (красный) | инструмент ответил ошибкой: JSON с полем `error`, «Unknown tool», «Error:» |

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

## «Вызов и результат как есть»

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

## Вкладка «Файлы»

Все файлы, которые сессия **читала или меняла отдельными вызовами**, в порядке первого
обращения — за всю загруженную сессию, а не за один ход. У каждого:

- значок: создан, изменён или только прочитан;
- подпись: **«создан»**, **«изменён N раз»** (у созданного — «создан, потом изменён N раз»),
  **«прочитан N раз»**;
- **+N −N** — сумма добавленных и удалённых строк по всем правкам файла в сессии.

Клик по файлу открывает во вкладке «Действие» последнее действие с ним. Листинги папок в
список не попадают. Если сессия файлов не трогала — «Сессия не читала и не меняла файлы
отдельными вызовами».

**Что сюда не попадает.** Правки, которые модель сделала из кода Code Mode (действие
«Выполнил код»), отдельными вызовами не записаны — их видно в самом коде и его результате.
Правки, внесённые разработчиком руками, не попадают никуда: они не проходили через модель.

_Иллюстрация: «Файлы» — все файлы сессии: что прочитано, что изменено и сколько строк; клик открывает последнее действие с файлом._
