Сессии

Сессия — это журнал событий, в который можно только дописывать; именно он позволяет возобновлять, ветвить и откатывать сессии и изолировать их в worktree.

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

Журнал событий

У каждого события есть порядковый номер (seq), который только растёт. Типичный ход записывает такие события:

СобытиеЗначение
user.messageВаш запрос, включая прикреплённые файлы и изображения
assistant.start, assistant.delta, assistant.endОтвет модели по мере поступления, с рассуждениями и расходом
tool.start, tool.progress, tool.endОдин вызов инструмента: входные данные, вывод в реальном времени и результат
permission.request, permission.decisionЗапрос подтверждения и ответ на него (от вас, правила, режима, классификатора или хука)
question.ask, question.answerАгент задал вам вопрос с вариантами ответа
todo.updateИзменился список задач
checkpointПеред запуском изменяющего инструмента сделан снимок файлов
compactionКонтекст пересказан, чтобы освободить место
session.statusidle, running, awaiting-input или error
subagent.updateХод работы субагента
error, noticeЧто-то пошло не так или есть что-то, что вам стоит знать

Поскольку источник истины — журнал, из этого естественно следует:

  • Переподключение обходится дёшево. Клиент, потерявший соединение, заново подписывается с последнего увиденного seq и получает только то, что пропустил.
  • Все интерфейсы видят одно и то же. CLI и десктопное приложение могут одновременно следить за одной сессией.
  • Историю можно изучить. REST API возвращает события постранично с фильтром по типу.

Идентификация сессии

У каждой сессии есть:

  • Id вида ses_01JC… — его вы передаёте в cusp --resume.
  • Заголовок. Cusp создаёт его по вашему первому сообщению с помощью малой модели; переименовать сессию можно через /rename или cusp -n "title".
  • Короткий хендл вида api-tests, по которому к ней обращаются другие агенты через SendMessage.
  • Модель, уровень рассуждений и режим разрешений — каждый из них можно изменить посреди сессии.
  • Источник: сессию начали вы, субагент, CLI, расписание или участник команды.

Возобновление

Сессии сохраняются между перезапусками. Продолжайте с того места, где остановились:

cusp --continue          # the most recent session in this folder
cusp --resume            # choose from a list
cusp --resume ses_01JC…  # a specific session

В CLI команда /resume открывает тот же список. /clear начинает новую сессию; старую по-прежнему можно возобновить.

Ответвление

Ответвление (fork) копирует журнал сессии в новую независимую сессию. Используйте его, чтобы попробовать другой подход, не теряя текущий, или чтобы отделить ветку от долгого расследования.

cusp --continue --fork-session

В CLI /fork продолжает работу в копии текущей сессии. Ответвление можно сделать и с более ранней точки: API принимает seq и копирует только события до него.

Откат

Откат возвращает разговор к моменту прямо перед одним из ваших предыдущих запросов и по умолчанию восстанавливает файлы в том виде, в каком они были в тот момент.

  • В CLI нажмите Esc дважды в пустом поле запроса или выполните /rewind и выберите запрос, к которому нужно вернуться.
  • Запрос, к которому вы откатились, возвращается в поле ввода, чтобы его можно было отредактировать и отправить снова.

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

Контрольные точки

Прежде чем любой инструмент изменит файлы, Cusp сохраняет снимок файлов, которые будут изменены, в хранилище с адресацией по содержимому. Откат к точке восстанавливает для каждого пути содержимое, которое было в тот момент. Файл, которого тогда не было, удаляется.

Контрольные точки охватывают изменения, сделанные файловыми инструментами Cusp (Write, Edit, MultiEdit, ApplyPatch, EditLines, NotebookEdit). Они не могут отменить побочные эффекты команд оболочки, например удалённый каталог, миграцию базы данных или git push. Снимки файлов больше 32 МБ не делаются. Если изменение важно, делайте коммит пораньше.

Worktree

Сессия может работать в собственном git worktree (отдельной рабочей копии), так что её изменения не смешиваются ни с вашей рабочей копией, ни с другими сессиями. Так можно запускать несколько агентов в одном репозитории одновременно, и они не будут мешать друг другу.

  • Worktree хранятся в каталоге данных Cusp (по умолчанию ~/.cusp/worktrees/<workspace>/), никогда не внутри вашего репозитория.
  • Рабочий каталог сессии повторяет ваше положение в репозитории. Если вы начали в packages/api, сессия начнётся в packages/api внутри worktree.
  • Когда вы удаляете сессию, Cusp может удалить и её worktree.

Субагенты тоже могут запросить изоляцию в worktree (isolation: worktree в их определении).

Прерывание

Нажмите Esc в CLI или кнопку остановки в десктопном приложении, чтобы прервать текущий ход. Поток модели отменяется, работающие инструменты останавливаются, а незаконченное сообщение ассистента закрывается как прерванное. Сессия возвращается в idle, и можно продолжать.

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

Сжатие контекста

Длинные сессии со временем заполняют контекстное окно модели. Cusp сжимает контекст поэтапно: сначала обрезает большие старые выводы инструментов, затем пересказывает разговор в виде структурированной передачи дел, которая сохраняет список задач, затронутые файлы и решения. Событие compaction фиксирует, что произошло. Сжать контекст вручную можно командой /compact [instructions].

Экспорт

/export [file] записывает разговор в текстовый файл. Программы могут читать исходный журнал событий через REST API демона.

Где хранятся сессии

Демон хранит сессии в базе данных SQLite в своём каталоге данных, рядом со снимками контрольных точек и worktree.

Среда выполненияКаталог данных
CLI (по умолчанию)~/.cusp
Десктопное приложение в macOS~/Library/Application Support/run.cusp.desktop/daemon
Переопределение--data-dir <dir> или CUSP_DATA_DIR

Облачная синхронизация сессий между устройствами скоро появится. Она реплицирует тот же журнал событий, так что сессию, начатую на ноутбуке, можно будет продолжить в веб-приложении.

На этой странице