Сессии
Сессия — это журнал событий, в который можно только дописывать; именно он позволяет возобновлять, ветвить и откатывать сессии и изолировать их в 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.status | idle, 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 |
Облачная синхронизация сессий между устройствами скоро появится. Она реплицирует тот же журнал событий, так что сессию, начатую на ноутбуке, можно будет продолжить в веб-приложении.