0.4.11
04 · Техническая документация

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-ревью:

text
/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 в каждом потребителе заставляет завести хендлер.