04. Slash-команды
В TUI команда вводится со слешем в начале (/help, /cd src/). Большинство команд имеют локализованные описания (RU/EN), показываемые в popup-автодополнении. Подробная справка по каждой команде — /help <команда> (откроет pager-оверлей).
Обозначения
- Inline-args — команда принимает аргументы прямо в строке (
/resume my-thread). - During task — доступна, пока агент работает над запросом.
- In side — доступна внутри
/side-разговора. - Popup — открывает интерактивный popup или оверлей.
Управление сессией
/new
Начать новый тред. Предыдущий тред остаётся доступен через /sessions//resume,
но его /goal не переносится: цель хранится в state DB с ключом thread_id.
- Inline: ✗ | During task: ✗ | In side: ✗
/clear
Начать свежий тред и очистить экран. Старый тред и связанная с ним цель остаются доступны при последующем resume, но не становятся целью нового треда. - Inline: ✗ | During task: ✗ | In side: ✗
/resume [id_or_name]
Продолжить сохранённую сессию.
Каноническое имя команды — /sessions; /resume сохранён как алиас для muscle-memory (SlashCommandId::Sessions сериализуется и как sessions, и как resume).
Без аргументов — открывает picker сохранённых сессий. В каждой строке: - timestamp создания / последнего изменения (Tab переключает поле сортировки); - git-ветка и рабочая директория; - короткий preview разговора.
С аргументом — /resume <id> или /resume <prefix-имени>. Принимается частичное совпадение по имени треда; при неоднозначности берётся первое совпадение. В сомнительных случаях используйте полный thread ID.
- Inline: ✓ | During task: ✗ | In side: ✗
/fork
Создать независимую копию текущей сессии. Полезно для экспериментов. - Inline: ✗ | During task: ✗ | In side: ✗
/rename [new_title]
Переименовать текущий тред. Без аргумента — inline-редактор. - Inline: ✓ | During task: ✓ | In side: ✗
/compact
Просит текущую модель сделать сжатое резюме предыдущих ходов.
Поведение:
- Запускается серверной задачей и не отменяется после старта.
- Резюме заменяет старые сообщения; самые свежие ходы остаются, чтобы разговор продолжался плавно.
- Используется текущая модель сессии (не отдельная).
- AstraCode также автоматически предложит compact, когда тред приближается к model_auto_compact_token_limit из config.toml.
- Inline: ✗ | During task: ✗ | In side: ✗
/quit / /exit
Выйти из AstraCode (graceful shutdown). - Inline: ✗ | During task: ✓ | In side: ✗
Работа с кодом и проектом
/cd [path]
Сменить рабочую директорию. Tab открывает popup-автодополнение подкаталогов; повторный Tab спускает на уровень. Распознаёт ~, .., абсолютные пути.
- Inline: ✓ | During task: ✗ | In side: ✗
/init
Просит модель сгенерировать AGENTS.md в текущей директории.
Что попадает в файл:
- Обзор проекта (язык, фреймворк, структура).
- Команды для сборки и тестов (cargo build, npm test, …).
- Стиль кода (rustfmt, prettier, …).
- Conventions для коммитов.
- Рекомендации по тестированию.
Edge cases:
- Если AGENTS.md уже существует — команда no-op с уведомлением. Переименуйте или удалите старый файл, если нужен свежий scaffold.
- Inline: ✗ | During task: ✗ | In side: ✗
/diff
Полноэкранный pager.
Что показывает:
- git diff по tracked-файлам с цветовой подсветкой;
- untracked-файлы через git ls-files --others --exclude-standard + --no-index diff для каждого (новые файлы тоже видны).
Без фильтрации по файлу/пути — это весь дельта-стрим разом. Закрытие — q или Esc.
- Inline: ✗ | During task: ✓ | In side: ✓
/review [hint]
Code-review текущих изменений.
Без аргументов — меню из четырёх целей:
- Против базовой ветки — picker веток; ревью diff'а HEAD ↔ <ветка> (стиль PR).
- Неcommit'нутые изменения — ревью текущего рабочего дерева.
- Конкретный коммит — picker коммитов; ревью одного коммита.
- Custom-инструкции — свободный промпт для ревьюера.
С inline-аргументом — сразу custom-ревью:
/review проверь безопасность /review focus on test coverage
Модель: берётся review_model из config.toml, если задана; иначе — текущая модель. Лучше всего работает в паре со встроенными скиллами code-review, code-review-breaking-changes, code-review-change-size, code-review-context, code-review-testing.
- Inline: ✓ | During task: ✗ | In side: ✗
/plan [instructions]
Переключиться в режим планирования. Агент сначала излагает план, не трогая код, потом ждёт подтверждения. - Inline: ✓ | During task: ✗ | In side: ✗
/goal <objective> / subcommands
Долгоиграющая цель с budget'ом токенов и продолжением через /resume. Subcommands:
- /goal --budget 200k <текст> — задать цель с лимитом токенов
- /goal edit — отредактировать текущую цель
- /goal pause — поставить на паузу
- /goal resume — продолжить
- /goal clear — очистить
- /goal budget <tokens|clear> — изменить лимит
Подробнее — 13-goal-and-modes.md. - Inline: ✓ | During task: ✓ | In side: ✗
/undo [call_id]
Отменить изменение файла, сделанное агентом. Каждое срабатывание apply_patch и write_file снимает baseline затронутых файлов в отдельное хранилище ~/.astracode/projects/<sha256_cwd>/undo/<thread_id>.jsonl, отрезанное от rollout (компактизация его не орфанит).
- Без аргумента — открывает интерактивный message-picker с записанными изменениями (Enter — запросить отмену, список рефрешится через
fs/listChanges). - С аргументом —
/undo <call_id>откатывает конкретное изменение: перезаписывает файл записанными байтами, либо удаляет файл, если он был создан агентом; бинарники хранятся и восстанавливаются как байты.
Модель LIFO-only (последнее изменение файла восстанавливается первым), без redo; коллаб-/сабагентские правки живут в хранилище своего треда. Undo двухфазный (RestoreOutcome), состояние терминально и переживает рестарт.
- Inline: ✓ | During task: ✗ | In side: ✗
/expand / /collapse
Управление сворачиванием tool-блоков в истории.
/collapseсворачивает все завершённые успешные tool-блоки в компактные однострочные сводки вида «• Изучено — 8 чтений, 2 папок, 1 поиск». Активные, упавшие, отклонённые и approval-блоки остаются развёрнутыми./expandбез аргументов раскрывает все блоки обратно; с открытым message-picker'ом позволяет точечно ткнуть в конкретный блок.
Состояние сворачивания хранится in-process (Arc<AtomicBool>) и переживает replay/компактизацию в живой сессии, но не сериализуется в rollout и не восстанавливается при resume в новом процессе. Message-picker переиспользуется с /undo и /fork.
- /expand Inline: ✗ | During task: ✓ | In side: ✓
- /collapse Inline: ✗ | During task: ✓ | In side: ✓
/index
Построить индекс проекта — резюме модулей в Obsidian-формате. Хранится в ~/.astracode/projects/<sha256_cwd>/.
- Inline: ✓ | During task: ✗ | In side: ✗
/update
Проверить и установить новую версию AstraCode. - Inline: ✗ | During task: ✗ | In side: ✗
Конфигурация
/model
Открывает трёхколонный picker провайдеров (Provider | Status | Models).
- Онлайн-провайдеры показывают свои модели сразу.
- Провайдеры без API-ключа помечены Needs key, но остаются выбираемыми.
Действия в footer:
| Клавиша | Действие |
|---|---|
| Enter | Активировать выделенную модель |
| r | Обновить каталог моделей у провайдера |
| d | Удалить выделенного провайдера (и сохранённый ключ) |
| Esc | Отмена |
| + Add provider | Открыть форму добавления нового провайдера |
Форма «Add provider» — три шага:
1. Display name — человекочитаемое имя (обязательно).
2. Base URL — корень /v1, совместимый с OpenAI Chat Completions (обязательно). Валидируется как URL.
3. API key — Bearer-токен (опционально). Шифруется и пишется в ~/.astracode/secrets/local.age.
Edit-in-place нет: чтобы изменить настройки провайдера, удалите (d) и добавьте заново.
Inline-аргументы НЕ поддерживаются — /model gpt-5 вернёт ошибку «does not accept inline arguments». Активный выбор сохраняется в секции [ui_state] файла config.toml.
- Inline: ✗ | During task: ✗ | In side: ✗
/submodel
Picker моделей для ролей субагентов (explorer/worker). Зеркало /model, но read-only по провайдерам и показывает колонку роли.
Когда роль имеет запись здесь, субагенты с этой ролью используют именно этот (provider, model). Отсутствие записи = роль наследует модель и провайдер родителя (поведение по умолчанию). Назначения сохраняются в [ui_state.role_models] (config/src/providers_toml.rs); для пользовательских ролей — в [ui_state].custom_agent_model. Каждая запись требует и provider, и model (одно имя модели может быть у нескольких провайдеров).
В v1 назначения ролей заблокированы: обе роли наследуют модель /model.
- Inline: ✗ | During task: ✗ | In side: ✗
/subagent
Управление пользовательскими (custom) ролями субагентов — создание/редактирование standalone TOML-файлов ролей. Встроенные роли (explorer, worker, awaiter) лежат в core/src/agent/builtins/*.toml и не редактируются.
- Inline: ✗ | During task: ✗ | In side: ✗
/locale [en|ru]
Сменить язык интерфейса.
Поведение:
- Без аргумента — popup с выбором en / ru.
- С аргументом — сразу переключает: /locale en, /locale ru.
Ограничение: доступна только до первого сообщения в новой сессии. После того как агент уже что-то делал — /locale вернёт hint «The session must start before you can change language.» Чтобы поменять locale в активной сессии: /new (или /clear), потом /locale ru.
Отличие от ASTRACODE_LOCALE: переменная окружения задаёт дефолт до старта; /locale меняет язык внутри уже запущенного TUI (но только до первого turn'а).
- Inline: ✓ | During task: ✗ | In side: ✗
/theme
Picker тем подсветки синтаксиса.
Источники тем:
- Встроенные темы (захардкоженные в бинарнике).
- Пользовательские .tmTheme файлы из ~/.astracode/themes/.
Live-preview: подсветка обновляется по мере перемещения курсора по списку. Esc возвращает предыдущую тему; Enter сохраняет выбор в [tui].theme файла config.toml.
- Inline: ✗ | During task: ✗ | In side: ✗
/title
Multi-select picker: что показывать в заголовке терминала. Space — переключить пункт, Enter — сохранить.
Доступные пункты: имя приложения, имя проекта, текущая директория, заголовок треда, git-ветка, модель, модель + reasoning, статус, спиннер, остаток/расход контекста, rate-limits, токены (used/input/output), session id, флаг fast-mode, прогресс задачи, версия.
Неприменимые пункты (например, git-ветка вне репо) скрываются автоматически. Сохраняется в [tui].terminal_title в config.toml.
- Inline: ✗ | During task: ✓ | In side: ✗
/statusline
Та же логика, что у /title, но для строки состояния внизу TUI. Multi-select: Space — переключить, Enter — сохранить.
Доступные пункты: имя приложения, имя проекта, корень проекта, текущая директория, статус, заголовок треда, git-ветка, остаток/расход контекста, rate-limits, токены, session id, fast-mode, модель, прогресс задачи, версия.
Сохраняется в [tui].status_line в config.toml. Во время правки доступен live-preview.
- Inline: ✗ | During task: ✓ | In side: ✗
/keymap
Иерархический picker для правки сочетаний TUI.
Шаги:
1. Корневое меню — группы привязок по областям (Chat, App, …).
2. Меню по действию — показывает текущие клавиши и опции Set / Replace / Add alternate.
3. Окно захвата — записывает следующее одиночное key event. Поддерживаются
модификаторы Ctrl, Alt и Shift; многошаговые последовательности не
являются настраиваемыми binding.
4. Replace-меню — если у действия несколько привязок, спрашивает, какую заменить.
Конфликты проверяются до сохранения. Диалог сообщает, какое действие уже использует эту клавишу, чтобы вы выбрали другую. Сообщения локализованы EN/RU.
Изменения пишутся в [tui.keymap] файла ~/.astracode/config.toml и применяются к текущей сессии сразу.
- Inline: ✗ | During task: ✗ | In side: ✗
/settings
Настроить микрофон/динамик для realtime-режима. Доступна только если включены realtime и audio device selection. - Inline: ✗ | During task: ✓ | In side: ✗
/realtime
Переключить голосовой режим (экспериментально, WebRTC). - Inline: ✗ | During task: ✓ | In side: ✗
Доступ и безопасность
/approvals / /permissions
Picker готовых пресетов разрешений (не per-tool настройка):
| Пресет | Описание |
|---|---|
| Default (auto) | Разумные значения по умолчанию для повседневной работы |
| Auto-review | Агент действует и сам себя проверяет с ограничениями |
| Agent mode | Широкие права для агента |
| Minimal | Только чтение, очень узко |
| Full access | Перед включением — отдельное подтверждение |
| Read-only | Только на Windows (при degraded sandbox) |
Куда сохраняется: approval_policy и approvals_reviewer в config.toml. Переключение обратимо — просто выберите другой пресет.
Часть пресетов может быть недоступна (greyed out) с указанием причины — например, Auto-review требует настроенной Guardian-модели.
- Inline: ✗ | During task: ✗ | In side: ✗
/sandbox-add-read-dir <absolute_path>
Windows-only команда: разрешить песочнице читать дополнительную абсолютную директорию в текущей сессии. Не сохраняется в конфиге. - Inline: ✓ | During task: ✗ | In side: ✗
/setup-default-sandbox (Elevate)
Настроить расширенную песочницу (Windows degraded mode). - Inline: ✗ | During task: ✗ | In side: ✗
/autoreview
Разрешить один повтор после отказа auto-review. - Inline: ✗ | During task: ✓ | In side: ✗
/experimental
Popup переключения экспериментальных feature flags. - Inline: ✗ | During task: ✗ | In side: ✗
Скиллы, агенты, MCP
/skills
Меню из двух пунктов:
- List skills — тот же picker, что и шорткат
$в композере. Выбор скилла сразу вставляет егоdefault_promptв композер. - Enable/Disable — экран toggle'ов с фильтром (введите
>и текст для поиска). Изменения применяются и сохраняются сразу; при закрытии экрана показывается сводка изменений относительно исходного состояния.
Откуда подгружаются скиллы (по приоритету):
1. <repo>/.astracode/skills/ — проектные.
2. ~/.astracode/skills/ — пользовательские.
3. ~/.astracode/skills/.system/ — встроенные (не редактируйте — перезаписываются при обновлении).
Установка из GitHub: используйте встроенный скилл skill-installer — введите $skill-installer в композере.
- Inline: ✗ | During task: ✓ | In side: ✗
/agent / /subagents
Picker активного агентного треда. Используется для мультиагентной работы. - Inline: ✗ | During task: ✓ | In side: ✗
/collab
Picker режима ответа (Default / Plan). Команда доступна при включённой
feature collaboration_modes; сам механизм collaboration modes в текущей
версии всегда активен, а ключ сохранён для обратной совместимости.
- Inline: ✗ | During task: ✓ | In side: ✗
/mcp [verbose]
Только инвентаризация — вывод печатается ячейкой в чат, интерактивного меню нет.
| Команда | Что выводит |
|---|---|
/mcp |
Серверы со списком их инструментов и статусом авторизации |
/mcp verbose |
Дополнительно — полные определения tools и детали соединений |
Из этой команды нельзя добавить или отредактировать сервер. Настройка — в секциях [mcp_servers.*] файла ~/.astracode/config.toml (stdio с command/args, либо http с url + bearer_token_env_var), или через CLI: astracode mcp add. После правки конфига перезапустите AstraCode или пересоздайте сессию.
- Inline: ✓ | During task: ✓ | In side: ✗
/apps
Список настроенных app-интеграций (коннекторов) — Slack, GitHub, email, и т.п. Read-only вывод в чат — добавлять/редактировать через эту команду нельзя.
Настройка: в config.toml в секции [apps.*]. Некоторые коннекторы требуют OAuth — flow запускается при первом использовании.
Если apps выключены конфигом или features — команда выведет короткое информационное сообщение.
- Inline: ✗ | During task: ✓ | In side: ✗
/plugins
Просмотр плагинов. В текущей версии отключено (disabled-build hint). - Inline: ✗ | During task: ✓ | In side: ✗
/memories
Экран настроек с тремя элементами:
| Элемент | Тип | Действие |
|---|---|---|
| Use memories | toggle | Инжектить MEMORY.md в новые треды |
| Generate memories | toggle | Запускать Phase 1 / Phase 2 извлечение из прошлых rollout'ов |
| Reset all memories | action | Очистить ~/.astracode/memories/ после подтверждения (необратимо) |
Toggle'ы пишутся в [memories] файла config.toml. Use memories применится в следующем новом треде; Generate memories начинает работать сразу.
Edge case: если фича памяти выключена при сборке — вместо экрана настроек показывается приглашение её включить.
Подробнее — 07-memories.md.
- Inline: ✗ | During task: ✗ | In side: ✗
Прочие
/side [message]
Открыть временный «side conversation» — ответвление от основного треда. Внутри side нельзя вложенные side; Esc возвращает в main. Подробнее — 13-goal-and-modes.md.
- Inline: ✓ | During task: ✓ | In side: ✗
/personality
В этой версии не поддерживается (заглушка). - Inline: ✗ | During task: ✓ | In side: ✗
/mention
Вставить @ для inline-пикера файлов (для упоминания файла в промпте).
- Inline: ✗ | During task: ✓ | In side: ✓
/copy
Скопировать последний ответ модели в буфер обмена (markdown). - Inline: ✗ | During task: ✓ | In side: ✓
/help [command]
Показать справку. Без аргумента — обзорная страница. С аргументом — подробное описание команды (USAGE/DETAILS/NOTES). Локалезависимо. - Inline: ✓ | During task: ✓ | In side: ✓
/status
Показать текущую конфигурацию сессии: модель, провайдер, sandbox, локаль, токены. - Inline: ✗ | During task: ✓ | In side: ✓
/debug-config
Показать слои конфига и источники значений. Полезно для дебага «откуда взялся этот параметр». - Inline: ✗ | During task: ✓ | In side: ✗
/ps
Список фоновых терминалов, запущенных агентом. - Inline: ✗ | During task: ✓ | In side: ✗
/stop / /clean
Остановить все фоновые терминалы. /clean — алиас.
- Inline: ✗ | During task: ✓ | In side: ✗
/feedback
Двухшаговый процесс:
1. Выбор категории: | Категория | Описание | |---|---| | Bug | Креш, ошибка, зависание, сломанный UI | | Bad result | Мимо цели, неверный, неполный вывод | | Good result | Полезный, правильный, качественный ответ | | Safety check | Безобидный запрос заблокирован проверкой | | Other | Медленно, UX, предложение фичи и т.п. |
2. Заметка (опциональная) — Enter отправляет, заметка может быть пустой.
Что отправляется: категория + заметка + лёгкие метаданные (версия, id треда, модель). Логи и транскрипт сессии не отправляются.
Если фидбэк выключен конфигом, команда покажет информационный popup и ничего не отправит.
- Inline: ✗ | During task: ✓ | In side: ✗
Отладочные (debug-only)
Действительно debug-only (VisibilityRule::DebugOnly, видны только в debug-сборке без --release):
| Команда | Назначение |
|---|---|
/rollout |
Показать путь к JSONL rollout-файлу текущей сессии. |
/test-approval |
Сгенерировать тестовый approval-запрос для проверки UI. |
VisibilityRule::DebugOnly проверяет именно flavor билда (cfg!(debug_assertions)), а не конфигурацию features — в release-бинарнике эти команды недоступны.
Скрытые из popup (hidden_in_popup)
Эти команды имеют VisibilityRule::Always (доступны и в release), но помечены hidden_in_popup: true — не показываются в меню автодополнения, но работают при ручном вводе:
| Команда | Назначение |
|---|---|
/debug-config |
Показать слои конфигурации с источниками значений. |
/subagents |
Алиас /agent; открыть picker активного агентного треда. |
/debug-m-drop |
Внутренняя команда памяти; не использовать вручную. |
/debug-m-update |
Внутренняя команда памяти; не использовать вручную. |
Алиасы и популярные шорткаты
Tabв composer — открыть popup автодополнения команд / файлов //cd-путей.Ctrl-P/Ctrl-N— листать историю промптов.Escдважды — прервать ответ модели (с локализованным сообщением).Ctrl-Cдважды — выйти из TUI.@<file>— упомянуть файл (как/mention).$<skill>— явный вызов скилла.!<shell-command>— выполнить shell-команду (с учётом sandbox).
Доступность во время side-conversation
В /side доступны только: /help, /copy, /diff, /mention, /status,
/expand и /collapse. Остальные команды скрыты в popup, но
find_builtin_command_for_dispatch всё ещё резолвит их — чтобы вернуть
human-readable сообщение «недоступно в side» вместо «unknown command».
Где определены команды
Единый источник истины — крейт astracode-slash-commands:
- Канонические id:
astracode-rs/slash-commands/src/id.rs(enum SlashCommandId). TUI реэкспортит его какSlashCommand(tui/src/slash_command.rs:pub use astracode_slash_commands::SlashCommandId as SlashCommand). - Метаданные (описания EN/RU, usage, availability, feature-gates, видимость): реестр
REGISTRYвastracode-rs/slash-commands/src/commands.rs— одна записьSlashCommandSpecна команду. Порядок вариантов = порядок в меню. - Разрешение имени/алиаса:
slash-commands/src/registry.rs::resolve. - TUI-фильтры popup:
astracode-rs/tui/src/bottom_pane/slash_commands.rs. - TUI-диспетчер:
astracode-rs/tui/src/chatwidget/slash_dispatch.rs. - Серверный dispatch (для desktop/веб-клиента):
slashCommand/dispatchв app-server; init-промпт лежит вastracode_slash_commands::INIT_PROMPT. - Справка для
/help <cmd>:astracode-rs/tui/src/help_text.rs.
Чтобы добавить новую команду: (1) вариант в SlashCommandId (id.rs) + алиасы при необходимости, (2) запись SlashCommandSpec в commands.rs (EN/RU описание, usage, availability, feature-gates, hidden_in_popup), (3) ветка в TUI slash_dispatch и/или серверный handler в app-server, (4) текст в help_text.rs (overview + detail), (5) обновить snapshot-тесты. Исчерпывающий match по SlashCommandId в каждом потребителе заставляет завести хендлер.