CLI
Все флаги командной строки cusp, слеш-команды, форматы вывода в неинтерактивном режиме и коды завершения.
cusp [options] [prompt]cusp запускает интерактивную сессию в текущей папке. Если передать запрос, сессия начнётся с этого сообщения. С -p запрос выполняется без интерфейса: результат печатается, и команда завершается.
Примеры
cusp # interactive session in this folder
cusp "explain the build pipeline" # start with a prompt
cusp -c # continue the most recent session here
cusp -r # pick a session to resume
cusp -m openai:gpt-6.1-sol --effort high # choose model and effort
cusp -p "list TODO comments in src/" # headless: print the answer and exit
cat error.log | cusp -p "what failed?" # headless with piped inputПараметры
Сессия
| Флаг | Назначение |
|---|---|
-c, --continue | Продолжить последнюю сессию в этой папке |
-r, --resume [ses_…] | Возобновить сессию по id или, если id не указан, выбрать её интерактивно |
--fork-session | Вместе с --continue или --resume: продолжить в копии, не трогая оригинал |
-n, --name <title> | Задать название сессии |
--cwd <dir> | Папка рабочей области. По умолчанию — текущая папка |
--continue и --resume нельзя использовать вместе. --fork-session требует одного из них.
Модель и разрешения
| Флаг | Назначение |
|---|---|
-m, --model <provider:model> | Модель для этой сессии или просто id модели у текущего провайдера |
--effort <level> | none, minimal, low, medium, high, xhigh или max |
--permission-mode <mode> | default, acceptEdits, plan, auto, bypassPermissions или dontAsk |
--dangerously-skip-permissions | То же, что --permission-mode bypassPermissions |
--allowedTools <rules…> | Заранее разрешить инструменты для этой сессии, например "Bash(git log *)" Edit |
--disallowedTools <rules…> | Всегда запрещать эти инструменты в этой сессии |
--append-system-prompt <text> | Дополнительные инструкции в конце системного промпта |
--system-prompt <text> | Заменить системный промпт. В 0.1 флаг принимается, но пока не поддерживается: Cusp игнорирует его и выводит предупреждение. Используйте --append-system-prompt |
--allowedTools и --disallowedTools также принимают написание в kebab-case: --allowed-tools и --disallowed-tools. Элементы списка можно разделять запятыми или пробелами; внутри скобок Cusp список никогда не делит, поэтому "Bash(git log *),Edit" — это два правила. Имя режима manual принимается как синоним default.
Неинтерактивный режим
| Флаг | Назначение |
|---|---|
-p, --print | Выполнить запрос (или stdin) неинтерактивно, напечатать результат и завершиться |
--output-format <f> | text (по умолчанию), json или stream-json |
--input-format <f> | text (по умолчанию) или stream-json |
--include-partial-messages | При выводе stream-json: также выдавать потоковые дельты |
--max-turns <n> | Остановиться после n ходов модели |
--output-format и --input-format требуют -p. С -p нельзя открыть выбор сессии, поэтому в неинтерактивном режиме --resume требует явного id.
Демон
| Флаг | Переменная окружения | Назначение |
|---|---|---|
--daemon <mode> | — | Как подключаться к демону (daemon): auto (по умолчанию), connect, spawn или embedded |
--daemon-url <url> | CUSP_DAEMON_URL | Подключиться к этому демону |
--daemon-token <token> | CUSP_DAEMON_TOKEN | Его bearer-токен |
--data-dir <dir> | CUSP_DATA_DIR | Папка данных демона. По умолчанию ~/.cusp |
| Режим | Поведение |
|---|---|
auto | Использовать --daemon-url, если он указан; иначе найти работающий демон для папки данных; иначе запустить новый |
connect | Только подключаться к --daemon-url. Завершиться с ошибкой, если он недоступен |
spawn | Всегда запускать новый процесс демона для этого запуска |
embedded | Запустить демон внутри процесса CLI. Удобно в контейнерах и CI |
Прочее
| Флаг | Назначение |
|---|---|
--verbose | Диагностика в stderr, включая отказы в разрешениях в неинтерактивном режиме |
-v, --version | Показать версию |
-h, --help | Показать справку |
Коды завершения
| Код | Значение |
|---|---|
0 | Успех |
1 | Запуск завершился ошибкой |
2 | Неверная командная строка |
130 | Прервано |
Работа в неинтерактивном режиме
cusp -p выполняет один запрос и завершается. Запрос берётся из аргументов, из stdin или из обоих источников: входные данные из конвейера читаются, когда stdin не является терминалом.
В неинтерактивном режиме отвечать на вопросы некому, поэтому:
- Запросы разрешений решаются через
--allowedToolsи--disallowedTools. Всё, что не разрешено заранее, запрещается, и агенту сообщается, как действовать дальше. Каждый отказ попадает вpermission_denialsв JSON-результате. - На вопросы агента (
AskUserQuestion) приходит ответ «No answer: running non-interactively. Use your best judgment and state the assumption.» - Запросы на доверие к рабочей области не показываются.
# Allow tests and edits, nothing else
cusp -p "make the failing test in auth.test.ts pass" \
--allowedTools "Bash(bun test *)" Edit Write \
--max-turns 25 \
--output-format jsonВывод text
Последнее сообщение ассистента обычным текстом. Ошибки выводятся в stderr.
Вывод json
Один JSON-объект по завершении запуска. Имена полей следуют распространённому формату результата неинтерактивного режима (type, subtype, result, session_id, total_cost_usd, …), поэтому существующие скрипты, которые его разбирают, продолжат работать.
{
"type": "result",
"subtype": "success",
"is_error": false,
"result": "Fixed the token expiry check in src/auth/session.ts. All 48 tests pass.",
"session_id": "ses_01JCQ8Z4X9T5V2M3N7K1P6R0WA",
"num_turns": 7,
"duration_ms": 41873,
"total_cost_usd": 0.0871,
"usage": {
"input_tokens": 182340,
"output_tokens": 2911,
"reasoning_tokens": 1404,
"cache_read_input_tokens": 151200,
"cache_creation_input_tokens": 18420
},
"permission_denials": []
}| Поле | Значение |
|---|---|
subtype | success, error_max_turns, error_during_execution или error_interrupted |
is_error | true для любого подтипа, кроме success |
result | Итоговый текст ассистента |
session_id | Передайте в --resume, чтобы продолжить сессию |
num_turns | Число ходов модели в этом запуске |
duration_ms | Реальное затраченное время |
total_cost_usd | Стоимость этого запуска или null, если цены неизвестны |
usage | Число токенов в этом запуске. input_tokens включает чтение из кеша и запись в него |
permission_denials | Каждый запрещённый вызов: tool, title и call_id |
error | Описание ошибки, если запуск не удался |
Вывод stream-json
Пока запуск идёт — по одному JSON-объекту на строку, а в последней строке — тот же объект результата, что и в json.
Первая строка описывает запуск:
{"type":"system","subtype":"init","session_id":"ses_01JC…","cwd":"/Users/me/code/app","model":{"providerId":"anthropic","modelId":"claude-opus-5-5"},"permission_mode":"default","cusp_version":"0.1.0","daemon":"spawned"}Каждая следующая строка содержит одно событие сессии:
{"type":"event","session_id":"ses_01JC…","event":{"seq":12,"body":{"type":"tool.start", …}}}Потоковые дельты (assistant.delta, tool.progress) включаются только с --include-partial-messages.
Ввод stream-json
С --input-format stream-json каждая строка в stdin — это сообщение пользователя:
{"type":"user","message":{"role":"user","content":"Now add tests for it."}}content может быть строкой или массивом блоков содержимого ({"type":"text","text":"…"}, изображения и так далее). Так другая программа может вести с Cusp многоходовой диалог через конвейер.
Интерактивный режим
Слеш-команды
| Команда | Назначение |
|---|---|
/help, /? | Команды и горячие клавиши |
/clear (/new, /reset) | Начать новую сессию. Текущую можно будет возобновить |
/resume [session] | Возобновить предыдущую сессию в этой папке |
/rename <title> | Переименовать эту сессию |
/rewind | Откатить переписку и файлы к одному из прошлых запросов |
/fork | Продолжить в копии этой сессии |
/model [provider:model] | Сменить модель |
/effort [low|medium|high|xhigh|max] | Задать уровень рассуждений |
/mode [default|acceptEdits|plan|auto] | Задать режим разрешений |
/plan | Перейти в режим планирования |
/todos | Показать или скрыть список задач |
/cost (/usage) | Токены и стоимость этой сессии |
/status | Сведения о демоне, сессии, модели и рабочей области |
/diff | Сводка незакоммиченных изменений в рабочей области |
/export [file] | Записать переписку в текстовый файл |
/init | Попросить Cusp написать руководство CUSP.md для этого проекта |
/review | Попросить Cusp провести ревью незакоммиченных изменений. Сначала он сообщает об ошибках с указанием файла и строки и не изменяет файлы |
/compact [instructions] | Сжать переписку в сводку, чтобы освободить контекст |
/exit (/quit) | Выйти |
Навыки, которые можно вызвать, появляются в том же меню /.
Префиксы в запросе
| Префикс | Назначение |
|---|---|
/ | Слеш-команда или навык |
@path | Упомянуть файл. По мере ввода предлагаются варианты путей |
!command | Самостоятельно выполнить команду оболочки и поделиться её выводом с агентом |
Горячие клавиши перечислены в разделе Горячие клавиши.
Переменные окружения
| Переменная | Назначение |
|---|---|
CUSP_DAEMON_URL | Демон, к которому нужно подключиться |
CUSP_DAEMON_TOKEN | Bearer-токен этого демона |
CUSP_DATA_DIR | Папка данных. По умолчанию ~/.cusp |
CUSP_THEME | dark (по умолчанию) или light — цвета терминального интерфейса |
NO_COLOR | Отключить цвет. Интерфейс сохраняет контраст по яркости, но убирает оттенки |
| Ключи провайдеров | См. Провайдеры и шлюзы |