Buff Development
Buff CodeСессии разработки

Выгрузка

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

В открытой сессии — две кнопки в шапке: Markdown и JSON. Файл называется buff-code-<id сессии>.md или .json. Выгружается вся сессия целиком, а не загруженная в ленту часть; служебные вызовы входят всегда.

Markdown — для чтения

Вся история сессии как текст: заголовок по первой строке первого сообщения разработчика, разработчик, устройство, проект, начало, число ходов, списанная сумма и токены по видам; дальше — по порядку:

  • Разработчик: сообщение;
  • Buff Code — время · модель · токены: рассуждение модели, ответ, каждое действие — глагол, объект, техническое имя инструмента, аргументы и результат в блоках кода, — ошибки хода;
  • служебные вызовы помечены «(служебный вызов)»;
  • ответ инструмента, чей вызов в запись не попал, — блоком «Ответ инструмента».

Так выглядит начало файла (сессия из двух ходов; значения условные):

# Почему падает test_orders?

Разработчик: alice · устройство ноутбук alice · проект shop-web
Начало: 2026-09-24T10:12:03+00:00 · ходов: 2 · списано: 3,4 ₽
Токены: 18 240 вход · 612 выход · 0 рассуждение · 9 100 кэш-чтение · 0 кэш-запись

**Разработчик:**

Почему падает test_orders?

### Buff Code — 2026-09-24T10:12:05+00:00 · gpt-5 · 9 120 вход · 96 выход · 0 рассуждение · 0 кэш-чтение · 0 кэш-запись

**Запустил** `pytest tests/test_orders.py -q` (`bash`):

```
{
  "command": "pytest tests/test_orders.py -q",
  "description": "Прогнать падающий тест"
}
```

Результат:

```
F                                                                        [100%]
FAILED tests/test_orders.py::test_total - AssertionError: 100 != 90
Command exited with code 1
```

### Buff Code — 2026-09-24T10:12:19+00:00 · gpt-5 · 9 120 вход · 516 выход · 0 рассуждение · 9 100 кэш-чтение · 0 кэш-запись

Тест ждёт итог со скидкой, а `total()` её не применяет — исправляю.

**Изменил** `src/orders.py` (`edit`):

```
{
  "filePath": "src/orders.py",
  "oldString": "    return sum(i.price for i in items)",
  "newString": "    return sum(i.price for i in items) - discount"
}
```

Результат:

```
Edited src/orders.py
```

Подходит, чтобы приложить к разбору инцидента, отправить коллеге или положить в базу знаний.

JSON — вся сессия как данные

Объект с тремя полями:

  • session — описание сессии: идентификатор, организация, проект, логин, устройство, начало и последнее изменение, число ходов, модель, первое сообщение, токены по видам, длительность и сумма;
  • note — пояснение к составу файла;
  • messages — сообщения сессии по порядку, как их записал Buff Code. У каждого — номер в сессии (id), кто говорит (role: разработчик или модель), время, признак служебного (service) и части (parts): текст, рассуждение, вызов инструмента с аргументами (tool_call), результат вызова (tool_result), ошибка. У ответа модели — answer_of: ход, которым он получен, — модель, статус, длительность, токены по видам и списанная сумма.

Подходит для своего анализа: посчитать вызовы инструментов, разобрать типичные вопросы, загрузить в SIEM.

Что в выгрузку не входит

  • системный промпт и описания инструментов, которые Buff Code добавляет к каждому запросу, — ни в Markdown, ни в JSON (см. что не показывается);
  • файлы на диске разработчика, которые модели не передавались;
  • секреты подключений — их в записи нет с самого начала.

Журнал аудита

Каждая выгрузка — своей и чужой сессии — записывается в журнал аудита событием «Выгружена сессия разработки»: кто, чью сессию, когда, с какого адреса. Подробнее — Журнал аудита и Buff Code.

Локальная выгрузка из Buff Code

У самого Buff Code есть buff session export — это локальная копия сессии с машины разработчика, в формате Buff Code. К записям в кабинете она отношения не имеет: кабинет хранит то, что прошло через сервер, и эту запись разработчик изменить не может.

On this page