Управление сессиями Pi Agent

Система управления сессиями Pi Agent — одна из самых мощных её функций.

В этой главе подробно описываются сохранение, возобновление, ветвление и экспорт сессий.


Механизм хранения сессий

Каждый разговор автоматически сохраняется как файл сессии в формате JSONL, хранящийся в~/.pi/agent/sessions/— каталоге, классифицированном по пути проекта.

Имя каталога формируется из абсолютного пути проекта: слэши заменяются дефисами, и оно заключается в -- с обеих сторон.

Имя файла формируется путём объединения временной метки создания и UUID сессии.

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

~/.pi/agent/sessions/
└── --Users-example-projects-example-demo--/        # 目录名为项目路径,斜杠已替换为连字符
    ├── 2026-08-31T02-40-11-000Z_019fc2a1-93b4-7c22-8d5e-2b3c4d5e6f7a.jsonl    # 时间戳_UUID.jsonl
    ├── 2026-08-31T04-12-38-000Z_2c8f71ba-4a19-4e63-9d02-7f5a6b8c9d0e.jsonl
    └── 2026-08-31T08-55-02-000Z_5e3d92f4-8b26-47ac-a174-9c0d1e2f3a4b.jsonl

Внутренняя структура файлов сессий

Первая строка файла сессии — это фиксированные метаданные, в которых записаны версия формата сессии, идентификатор сессии, время создания и рабочий каталог.

Эти метаданные не имеют полей id и parentId и не участвуют в дереве диалога.

Начиная со второй строки каждая строка — это запись, и все они имеют поля id и parentId, которые вместе образуют древовидную структуру.

Типы записей включают message, compaction, branch_summary, label, custom и т. д.

Сессии, созданные с помощью /fork или /clone, также имеют дополнительное поле parentSession в метаданных первой строки, указывающее на исходный файл сессии.

{"type":"session","version":3,"id":"019fc2a1-93b4-7c22-8d5e-2b3c4d5e6f7a","timestamp":"2026-08-31T02:40:11.000Z","cwd":"/Users/example/projects/example-demo"}
{"type":"message","id":"m1","parentId":null,"message":{"role":"user","content":[{"type":"text","text":"帮我实现登录功能"}]}}
{"type":"message","id":"m2","parentId":"m1","message":{"role":"assistant","content":[{"type":"text","text":"好的,我用 JWT 来实现"}]}}

Каталог сессий также можно настроить; приоритет от высокого к низкому: аргумент --session-dir, переменная окруженияPI_CODING_AGENT_SESSION_DIR, и параметр в settings.jsonsessionDir。


Параметры сессии при запуске

Управляйте поведением сессии при запуске с помощью аргументов командной строки:

$ pi -c
Resumed session abc123-def456 (42 messages, model claude-sonnet-4-5)

$ pi -r
┌ 选择要恢复的会话:
│ > abc123  快速审查      3 分钟前
│   def456  重构认证模块  2 小时前
└

$ pi --session ~/.pi/agent/sessions/--Users-example-projects-example-demo--/2026-08-30T09-15-04-000Z_019fbb5d-7a2e-7f31-b5c4-1a2b3c4d5e6f.jsonl
Resumed session 019fbb5d-7a2e-7f31-b5c4-1a2b3c4d5e6f

$ pi --session abc123
Resumed session abc123-def456

$ pi --fork abc123
Forked to session 9f2e7a01-5c48

$ pi --name "重构认证模块"
Session renamed: 重构认证模块

$ pi --no-session
Temporary session (will not be saved)

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

После перехода в интерактивный режим следующие команды охватывают повседневное управление сессиями.

КомандаФункцияСценарий использования
/resumeПросмотр и возобновление исторических сессийПереключитесь на предыдущий диалог и продолжите работу
/newНачать новую сессиюНачать совершенно новую задачу, не связанную с историей
/name <name>Задать имя сессииДать сессии легко запоминающееся имя
/sessionПросмотреть информацию о сессииПросмотреть путь к файлу, количество сообщений, использование токенов и стоимость
/treeОткрыть браузер дерева сессийПерейти к любому узлу в дереве разговора
/forkОтветвить сессиюСоздать новую сессию из предыдущего сообщения пользователя
/cloneКлонировать сессиюСкопировать текущую активную ветку в новый файл сессии
/export <file>Экспорт в файл HTML или JSONLЛокальное архивирование или офлайн-обмен
/shareПоделиться сессиейЗагрузить как GitHub Gist, создав ссылку, которой можно поделиться

/resume Селектор сессий

Ввод /resume или запуск с pi -r открывает селектор сессий для текущего проекта.

Можно вводить символы прямо в списке для фильтрации сессий; остальные клавиши управления перечислены ниже:

ДействиеКлавишаОписание
Фильтровать сессииВводите символы напрямуюФильтровать список сессий текущего проекта в реальном времени на основе ввода
Переключить отображение путиCtrl+PПоказать или скрыть путь рабочего каталога сессий
Переключить сортировкуCtrl+SПереключаться между способами сортировки
Показывать только именованные сессииCtrl+NФильтровать только сессии, которым присвоено имя
ПереименоватьCtrl+RИзменить название выбранной сессии
DeleteCtrl+DПодтверждается перед выполнением; если в системе есть команда trash, перемещает в корзину вместо прямого удаления.

Дерево сессий (/tree)

Это самая уникальная особенность Pi Agent — сессии хранятся в виде древовидной структуры, и вы можете ответвляться в любом историческом узле.

Древовидная структура

Ниже показана типичная структура дерева сессий:

├─ user: "帮我实现一个登录功能..."
│  └─ assistant: "好的,我来实现..."
│     ├─ user: "用 JWT 方案..."
│     │  └─ assistant: "使用 JWT 实现..."
│     │     └─ user: "测试通过了"  ← 当前活跃分支
│     └─ user: "还是用 Session 方案..."
│        └─ assistant: "使用 Session 实现..."

В этом примере, начиная с одной и той же исходной точки, вы исследовали два подхода — JWT и Session, — и диалоги для каждого подхода полностью сохранены.

Операции в браузере дерева

После открытия /tree используйте следующие клавиши для перемещения и выбора в дереве.

ДействиеГорячая клавишаОписание
Перемещение вверх/вниз↑/↓Перемещает курсор среди видимых записей
Страница вверх/вниз←/→Страница вверх / страница вниз
Свернуть/РазвернутьCtrl+←/Ctrl+→ или Alt+←/Alt+→Свернуть/развернуть сегменты ветвей или перейти
Установить меткуShift+LУстановить метку для выбранного узла
Переключить временную меткуShift+TПоказать/скрыть временные метки на метках записей (метки устанавливаются с помощью Shift+L)
Подтвердить выборEnterВыбрать текущий узел
CancelEscape / Ctrl+CВыйти из браузера дерева
Переключить режим фильтрацииCtrl+OПеребирать режимы фильтрации (действует только в браузере /tree)

Режимы фильтрации

Режимы фильтрации определяют, какие записи отображаются в браузере дерева; нажмите Ctrl+O, чтобы переключать их.

ModeОтображаемое содержимое
defaultВид по умолчанию, сворачивает подробности вызовов инструментов
no-toolsСкрыть все вызовы инструментов и результаты
user-onlyПоказывать только сообщения пользователя
только помеченныеПоказывать только помеченные записи
allПоказывать все записи

При выборе сообщения пользователя его текст подставляется в редактор, что позволяет отредактировать и отправить его повторно, создавая новую ветку.

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


Различия между /tree, /fork и /clone

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

КомандаВыводПредставлениеТипичное использованиеСводка по веткеПамятка в одном предложении
/treeТот же файл сессииПолное дерево разговораИсследовать альтернативные подходы в рамках той же сессииНеобязательное резюмеУправление несколькими идеями вместе для удобного сравнения
/forkНовый файл сессииПоказывать только сообщения пользователяНачать новую сессию с более раннего запросаОтсутствуетПерезапустить с исторической точки, полностью независимо
/cloneНовый файл сессииТекущая активная веткаСкопировать текущую работу и продолжитьОтсутствуетСделать копию перед продолжением, сохранив резервный вариант

Сводка по ветке

Когда вы переходите с одной ветки на другую через /tree, Pi Agent может создать для вас сводку покинутой ветки.

Эта сводка прикрепляется к новому месту, чтобы вы знали, что делала предыдущая ветка:

ModeПоведениеПрименимый сценарий
Сводка не созданаПерейти напрямую, не сохраняя никакой информации о покинутой веткеПокинутая попытка не имеет ценности, которую стоит сохранять
Сводка по умолчаниюИспользовать запрос по умолчанию, чтобы ИИ сделал сводку по заброшенной веткеНужно только приблизительное представление о том, что было сделано раньше
Пользовательская сводкаУкажите фокус, и ИИ создаст сводку в соответствии с вашими потребностямиНужно получить конкретные выводы, например о встреченных подводных камнях

Вы можете управлять поведением сводки в~/.pi/agent/settings.json:

Пример

{
  "branchSummary": {
    "reserveTokens": 16384,
    "skipPrompt": false
  }
}

НастройкаskipPromptУстановите значение true, чтобы пропустить запрос "создавать ли сводку" при навигации с помощью /tree.

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


Экспорт и общий доступ к сессиям

Сессии можно экспортировать как локальные файлы или загружать напрямую, чтобы создать ссылку для обмена.

Экспортировать как HTML

При экспорте создаётся страница в виде одного файла, которую можно открыть прямо в браузере; подходит для офлайн-просмотра.

# 导出到默认位置
/export

# 导出到指定文件
/export ~/Desktop/my-session.html

Поделиться как GitHub Gist

Если вы не хотите загружать файлы, используйте команду /share, чтобы создать онлайн-ссылку.

/share

После выполнения будет создан приватный GitHub Gist и сгенерирована HTML-ссылка, которой можно поделиться.

Экспорт из командной строки

Существующие сессии можно экспортировать без входа в интерактивный режим.

$ pi --export session.jsonl output.html
Exported to output.html (128 KB)

Если вы работаете над проектом с открытым исходным кодом и хотите публиковать сессии в исследовательских целях, обратите внимание наpi-share-hf— инструмент, который может публиковать сессии в наборах данных Hugging Face.

Другие расширения