Как устроен Cusp

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

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

Строительные блоки

БлокЧто этоПримеры
ОпределениеМногократно используемое описание того, кто и что делает: промпт, инструменты, навыки, модель, разрешенияФайл агента .md, навык, роль в команде, скрипт процесса, уровень ревью
ЗапускОдно выполнение определения. Каждый запуск — это сессия: журнал событий со статусом, стоимостью и местомВаша основная сессия, субагент, дорожка гонки, ревью, смена участника команды
МестоГде выполняется запуск и к чему у него есть доступВаша папка, изолированный worktree (отдельная рабочая копия), облачная песочница (скоро)
ТриггерПочему запуск началсяВы отправили сообщение, его запустил родительский агент, сработало расписание, кто-то упомянул @cusp в GitHub
УчастникПостоянный исполнитель, которому со временем принадлежат запуски, с памятью и бюджетомУчастник команды, вы
КаналКак запуски и люди общаются друг с другомСообщения между агентами, общая комната команды, комментарии к PR
АртефактЧто остаётся после запускаДифф, ветка или PR, замечания ревью, план, чек расходов

Большинство функций — это сочетание этих блоков:

  • Субагент — дочерний запуск, который начинает родитель, в той же папке (только чтение) или в собственном worktree (когда он что-то пишет).
  • Гонка — несколько запусков одного запроса на разных моделях, каждый в своём worktree. См. Гонка.
  • Ревью — запуск или небольшая группа запусков, которые читают дифф и сообщают о замечаниях. См. Ревью.
  • Участник команды — участник, чьи смены — это запуски, которые начинаются по расписанию, по событиям и по сообщениям.
  • Запланированная задача — триггер, привязанный к определению.

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

Единый барьер для побочных эффектов

Любой запуск любого вида, прежде чем изменить файл, выполнить команду или обратиться к сети, проходит через один и тот же движок разрешений. Политики подтверждений команды, флаги CLI, колбэк canUseTool в Agent SDK и ваши собственные правила — всё это входные данные одного барьера. Обходного пути нет, поэтому написанное вами правило применяется к субагенту, дорожке гонки и участнику команды так же, как к вам.

За барьером стоит песочница: она ограничивает, что может сделать уже запущенная команда оболочки.

Общие службы

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

СлужбаЧто делаетСейчас
БарьерРешает, может ли произойти побочный эффектГотово: движок разрешений и песочница
Журнал расходовЗаписывает использование и стоимость каждого запуска и хранит бюджетыЧастично: чеки за каждый ход и страница использования работают; бюджеты предупреждают, но пока не могут приостановить сессию. См. Бюджеты и чеки
СупервизорПланирует запуски, распределяет лимиты запросов провайдеров между всеми запусками и отступает при ошибкахПревью: создан и протестирован как библиотека, но пока не работает в демоне
Общая доска (blackboard)Общее состояние запусков: доска задач, захват файлов, замечанияПревью: создана и протестирована как библиотека, но пока не работает в демоне

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

Где эта модель видна вам

Над всеми запусками есть два представления:

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

Единое представление центра управления для всего дерева запусков, с паузой и пересмотром бюджета для любой его ветки, скоро появится.

Как должна идти параллельная работа

Правила Cusp для одновременной работы многих агентов:

  1. Распараллеливание дёшево и безопасно. Помощники только для чтения работают в вашей папке. Всё, что пишет параллельно, получает собственный worktree.
  2. Координация до столкновения. Пишущие запуски сообщают, какие файлы правят, поэтому пересечения всплывают как сообщение, а не как конфликт слияния.
  3. Готовая работа попадает в код через очередь, которая делает rebase, запускает ваши проверки и выполняет слияние по одному изменению за раз.
  4. Результаты остаются компактными. Дочерние запуски возвращают краткую сводку и ссылки; родитель читает подробности, только когда они ему нужны.
  5. Любой запуск можно корректировать на ходу, пока он работает.
  6. Сколько запусков выполняется одновременно, решает планировщик, а не модель.

Правила 1 и 5 работают уже сейчас, и субагенты уже возвращают результат, а не всю свою переписку. Правила 2, 3 и 6 зависят от общей доски, очереди слияния и супервизора, которые находятся в предварительной версии. В разделе Параллельные агенты это разобрано подробно.

Агенты тоже могут управлять Cusp

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

Инструменты управления из чата находятся в предварительной версии. Семейство инструментов команды (crew.status, crew.hire, crew.assign и другие) спроектировано и протестировано, но в сессиях чата пока недоступно. См. Команда.

Что дальше

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