Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
190 changes: 190 additions & 0 deletions docs/slash-commands.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,190 @@
# Slash commands

Generated from the command catalog. Run `cargo run --package claurst-commands --example command_reference` from `src-rust/` to regenerate.

Type `/` for contextual suggestions, or open the command palette with Ctrl+K. Enter opens a command group; choose its Run entry to execute the parent. Use `/help <path>` for a command, including grouped paths. Suggestions use local session state and recent commands.

## Start & Navigate

| Command | Usage | Description |
|---|---|---|
| `/clear` | `/clear` | Clear the conversation history |
| `/exit` | `/exit` | Exit Coven |
| `/help` | `/help [command]` | Show available commands and usage information |
| `/init` | `/init` | Initialize a new project with AGENTS.md |
| `/search` | `/search <query>` | Search across all sessions |
| `/session` | `/session <resume\|fork\|branch\|tag\|add-dir>` | Show or manage conversation sessions |
| `/session rename` | `/session rename <name>` | Rename the current session |
| `/session resume` | `/session resume [id]` | Resume a saved session |
| `/session fork` | `/session fork [message_index]` | Fork the current session |
| `/session branch` | `/session branch [arguments]` | Create a session branch |
| `/session tag` | `/session tag [arguments]` | Tag the current session |
| `/session add-dir` | `/session add-dir <path>` | Add an allowed workspace directory |

## Work & Review

| Command | Usage | Description |
|---|---|---|
| `/commit` | `/commit [message]` | Ask Coven to commit staged changes |
| `/diff` | `/diff` | Show git diff of changes in the working directory |
| `/memory` | `/memory [edit\|clear]` | View, edit, or clear AGENTS.md memory files |
| `/review` | `/review [pr-comments]` | Review code changes via LLM and optionally post to GitHub PR |
| `/review pr-comments` | `/review pr-comments` | Read pull request comments |
| `/review security` | `/review security [path]` | Run a security-focused review |
| `/review ultra` | `/review ultra [path]` | Run an exhaustive review |
| `/rewind` | `/rewind [list\|diff\|last]` | Rewind the conversation or roll back a turn's file changes |
| `/rewind list` | `/rewind list` | List recorded file-change checkpoints |
| `/rewind diff` | `/rewind diff [checkpoint]` | Preview a recorded file-change diff |

## Conversation

| Command | Usage | Description |
|---|---|---|
| `/find` | `/find` | Search the current transcript |
| `/compact` | `/compact` | Compact the conversation to reduce token usage |
| `/export` | `/export [copy [n]\|share] [--format markdown\|json] [--output <file>]` | Export conversation to markdown or JSON |
| `/export share` | `/export share` | Create a shareable session export |
| `/export copy` | `/export copy` | Copy the session export to the clipboard |
| `/plan` | `/plan [prompt]` | Enter plan mode – model outputs a plan for approval before acting |
| `/tasks` | `/tasks` | List and manage background tasks |
| `/thinking` | `/thinking <back>` | Toggle extended thinking mode |
| `/thinking back` | `/thinking back` | View earlier thinking traces |

## Account & Models

| Command | Usage | Description |
|---|---|---|
| `/account` | `/account <login\|logout\|list\|dedupe\|providers\|connect\|switch\|refresh>` | Manage accounts and provider connections |
| `/account login` | `/account login [--console] [--codex] [--label <name>]` | Sign in to a provider |
| `/account logout` | `/account logout` | Sign out of a provider |
| `/account list` | `/account list` | List configured accounts |
| `/account dedupe` | `/account dedupe` | Remove duplicate credentials |
| `/account providers` | `/account providers` | List available providers |
| `/account connect` | `/account connect` | Connect a provider account |
| `/account switch` | `/account switch [name]` | Switch the active account |
| `/account refresh` | `/account refresh` | Refresh provider authentication |
| `/model` | `/model [name]` | Show or change the current model |
| `/permissions` | `/permissions [sandbox]` | View or change tool permission settings |
| `/permissions sandbox` | `/permissions sandbox` | Configure sandbox permissions |
| `/usage` | `/usage [cost\|context\|stats]` | Show API usage, quotas, and rate limit status |
| `/usage cost` | `/usage cost` | Show session cost details |
| `/usage context` | `/usage context` | Show context window usage |
| `/usage stats` | `/usage stats` | Show detailed session statistics |

## Customize

| Command | Usage | Description |
|---|---|---|
| `/vim` | `/vim` | Toggle Vim input mode |
| `/voice` | `/voice` | Toggle voice input |
| `/config` | `/config [show\|get\|set\|unset\|<area>] ...` | Show or modify configuration settings |
| `/config splash` | `/config splash [show\|hide\|toggle]` | Configure the empty-session splash screen |
| `/config theme` | `/config theme [name]` | Select the display theme |
| `/config output-style` | `/config output-style [style]` | Select the response output style |
| `/config keybindings` | `/config keybindings` | Open keybinding configuration |
| `/config import` | `/config import` | Import configuration from another tool |
| `/config advisor` | `/config advisor [model\|off]` | Configure the advisor model |
| `/effort` | `/effort [low\|normal\|high\|fast [on\|off]]` | Set the model's thinking effort (low \| normal \| high) |
| `/effort fast` | `/effort fast [on\|off]` | Enable fast response mode |

## Extend

| Command | Usage | Description |
|---|---|---|
| `/help feedback` | `/help feedback [report]` | Submit feedback about Coven |
| `/integrations` | `/integrations <hooks\|mcp\|chrome>` | Configure external integrations |
| `/integrations hooks` | `/integrations hooks` | Configure lifecycle hooks |
| `/integrations mcp` | `/integrations mcp [arguments]` | Manage MCP servers |
| `/integrations chrome` | `/integrations chrome` | Connect Chrome integration |
| `/learn` | `/learn` | Codify a script or workflow we just built into a reusable skill (Hermes) |
| `/plugin` | `/plugin [reload]` | Manage plugins |
| `/plugin reload` | `/plugin reload` | Reload installed plugins |
| `/skills` | `/skills` | List available skills in .coven-code/commands/ |

## Coven & Advanced

| Command | Usage | Description |
|---|---|---|
| `/coven` | `/coven [status\|sessions\|familiars\|log\|run\|daemon\|goal\|help] ...` | Drive the local Coven daemon (sessions, harness runs, rituals) |
| `/coven goal` | `/coven goal [objective\|status\|pause\|resume\|clear\|complete]` | Manage durable session goals |
| `/familiar` | `/familiar <incant\|whisper\|handoff\|list\|managed>` | Your familiar & agents — switch persona, inspect, and manage |
| `/familiar incant` | `/familiar incant [arguments]` | Run a familiar incantation |
| `/familiar whisper` | `/familiar whisper <message>` | Ask a familiar side question |
| `/familiar handoff` | `/familiar handoff <name>` | Hand work to a familiar |
| `/familiar list` | `/familiar list` | List available familiars |
| `/familiar managed` | `/familiar managed [arguments]` | Manage familiar execution |
| `/stash` | `/stash <link\|attach>` | Store useful links and attachments |
| `/stash link` | `/stash link [arguments]` | Store and manage links |
| `/stash attach` | `/stash attach [arguments]` | Store and manage attachments |
| `/status` | `/status [doctor]` | Show comprehensive system and session status |
| `/status doctor` | `/status doctor` | Run diagnostic checks |
| `/update` | `/update <version\|notes>` | Check for updates and download the latest release |
| `/update version` | `/update version` | Show the installed Coven version |
| `/update notes` | `/update notes` | Show recent Coven release notes |

## Removed paths

These paths no longer execute. Their replacement remains available.

| Removed path | Use instead |
|---|---|
| `/cost` | `/usage cost` |
| `/context` | `/usage context` |
| `/stats` | `/usage stats` |
| `/rename` | `/session rename` |
| `/changes` | `/diff` |
| `/version` | `/update version` |
| `/v` | `/update version` |
| `/release-notes` | `/update notes` |
| `/whats-new` | `/update notes` |
| `/changelog` | `/update notes` |
| `/resume` | `/session resume` |
| `/r` | `/session resume` |
| `/continue` | `/session resume` |
| `/reload-plugins` | `/plugin reload` |
| `/doctor` | `/status doctor` |
| `/login` | `/account login` |
| `/logout` | `/account logout` |
| `/accounts` | `/account list` |
| `/accounts dedupe` | `/account dedupe` |
| `/switch` | `/account switch` |
| `/refresh` | `/account refresh` |
| `/incant` | `/familiar incant` |
| `/handoff` | `/familiar handoff` |
| `/hooks` | `/integrations hooks` |
| `/import-config` | `/config import` |
| `/mcp` | `/integrations mcp` |
| `/fork` | `/session fork` |
| `/theme` | `/config theme` |
| `/output-style` | `/config output-style` |
| `/keybindings` | `/config keybindings` |
| `/splash` | `/config splash` |
| `/welcome-screen` | `/config splash` |
| `/share` | `/export share` |
| `/add-dir` | `/session add-dir` |
| `/agents` | `/familiar list` |
| `/branch` | `/session branch` |
| `/tag` | `/session tag` |
| `/pr-comments` | `/review pr-comments` |
| `/copy` | `/export copy` |
| `/chrome` | `/integrations chrome` |
| `/fast` | `/effort fast` |
| `/speed` | `/effort fast` |
| `/think-back` | `/thinking back` |
| `/thinkback` | `/thinking back` |
| `/whisper` | `/familiar whisper` |
| `/btw` | `/familiar whisper` |
| `/sandbox` | `/permissions sandbox` |
| `/sandbox-toggle` | `/permissions sandbox` |
| `/advisor` | `/config advisor` |
| `/providers` | `/account providers` |
| `/connect` | `/account connect` |
| `/managed-agents` | `/familiar managed` |
| `/goal` | `/coven goal` |
| `/link` | `/stash link` |
| `/links` | `/stash link` |
| `/attach` | `/stash attach` |
| `/attachments` | `/stash attach` |
| `/feedback` | `/help feedback` |
| `/bug` | `/help feedback` |
| `/survey` | `/help feedback` |
4 changes: 2 additions & 2 deletions scripts/tui-tests/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@ screen, and runs `run.sh`. No secrets or network access required.
|---|---|---|
| `cases/01_headless.sh` | CLI surface (no TTY) | `--version` semver, `--help` usage + flags, unknown flag exits non-zero, `auth status`, `models` catalog, `--dump-system-prompt` |
| `cases/02_startup.sh` | TUI cold start | title banner, welcome/changelog sections, input glyph, footer keybindings, no panic on boot |
| `cases/03_command_palette.sh` | Slash palette | `/` opens it, lists `/clear` `/compact` `/config`, typing filters the list, `Ctrl+K` entry point |
| `cases/04_help_overlay.sh` | Help overlay | `?` opens keybinding + command reference, `Esc` closes it |
| `cases/03_command_palette.sh` | Slash palette | `/` shows contextual suggestions, typing filters the list, `Ctrl+K` opens grouped navigation, one Enter runs a leaf, retired paths are rejected |
| `cases/04_help_overlay.sh` | Help overlay | `?` opens keybinding + grouped command reference, search finds `/account login`, `Esc` closes it |
| `cases/05_input_editing.sh` | Prompt input | typed text echoes into the buffer, `Ctrl+U` clears it |
| `cases/06_quit.sh` | Shutdown | `Ctrl+C` twice exits cleanly back to the shell |
| `cases/07_paste_burst.sh` | Paste burst | a line delivered in one write still submits; interior newlines coalesce without submitting |
Expand Down
50 changes: 37 additions & 13 deletions scripts/tui-tests/cases/03_command_palette.sh
Original file line number Diff line number Diff line change
Expand Up @@ -10,25 +10,23 @@ tc_palette() {
if ! have_tmux; then _skip "tmux not installed"; return 0; fi
tui_start || { tui_stop; return 0; }

# Typing "/" as the first character opens the palette.
# Contextual roots replace the expired standalone account/integration paths.
tui_type "/"
if ! wait_for "/clear"; then
_fail "palette opened on '/' (/clear never appeared)" "$(tui_capture)"
if ! wait_for "/help"; then
_fail "palette opened on '/' (/help never appeared)" "$(tui_capture)"
tui_stop; return 0
fi
local s; s="$(tui_capture)"
# Assert on entries near the top of the alphabetical list — the palette
# viewport shows a handful of rows, so entries further down (e.g. /config)
# scroll out of view as new commands are registered.
assert_contains "$s" "/accounts" "palette lists /accounts"
assert_contains "$s" "/attach" "palette lists /attach"
assert_contains "$s" "/chrome" "palette lists /chrome"
assert_contains "$s" "/clear" "palette lists /clear"
assert_contains "$s" "/help" "palette lists contextual /help"
assert_absent "$s" "/accounts " "palette omits retired /accounts"
assert_absent "$s" "/attach " "palette omits retired /attach"
assert_absent "$s" "/chrome " "palette omits retired /chrome"

# Filtering narrows the list: "/config" should surface /config, drop /clear.
tui_type "config"
# Wait for the filter to take effect (a non-matching entry disappears).
wait_absent "/clear" 5
# The contextual starting list may already omit /clear. Wait for the
# requested result instead, proving the new filtered frame has rendered.
wait_for "/config" 5
s="$(tui_capture)"
assert_contains "$s" "/config" "filter '/config' keeps /config"
assert_absent "$s" "/clear" "filter '/config' drops /clear"
Expand All @@ -39,12 +37,38 @@ tc_palette() {

# Ctrl+K is the second documented entry point to the palette.
tui_keys C-k
if wait_for "/clear" 5; then
if wait_for "Command Palette" 5; then
_pass "Ctrl+K opens the command palette"
else
_fail "Ctrl+K opens the command palette" "$(tui_capture)"
fi
tui_keys Escape; tui_settle

# Enter on a selected palette leaf submits through the CLI in one step.
tui_keys C-k; tui_settle
tui_type "help feedback"; tui_settle
tui_keys Enter
if wait_for "Session Feedback" 5; then
_pass "palette leaf executes on one Enter"
else
_fail "palette leaf executes on one Enter" "$(tui_capture)"
fi

tui_keys Escape; tui_settle

# Exact retired input must be rejected before automatic suggestion acceptance.
tui_type "/fork"; tui_settle; tui_keys Enter
if wait_for "/fork was removed; use /session fork" 5; then
_pass "retired /fork cannot execute through completion"
else
_fail "retired /fork cannot execute through completion" "$(tui_capture)"
fi
tui_type "/theme"; tui_settle; tui_keys Enter
if wait_for "/theme was removed; use /config theme" 5; then
_pass "retired /theme cannot open picker through completion"
else
_fail "retired /theme cannot open picker through completion" "$(tui_capture)"
fi

tui_stop
}
13 changes: 9 additions & 4 deletions scripts/tui-tests/cases/04_help_overlay.sh
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,22 @@ tc_help() {
# The overlay is tall; under load the lower rows render a beat after the
# top. Poll for a late item before snapshotting so the assertions don't
# race the draw.
if ! wait_for "/permissions"; then
_fail "help overlay rendered (/permissions never appeared)" "$(tui_capture)"
if ! wait_for "/session resume"; then
_fail "help overlay rendered (/session resume never appeared)" "$(tui_capture)"
tui_stop; return 0
fi
local s; s="$(tui_capture)"
assert_contains "$s" "Toggle help" "help overlay documents the help toggle"
assert_contains "$s" "Command palette" "help overlay documents the command palette"
assert_contains "$s" "Model picker" "help overlay documents the model picker"
# Command reference section.
assert_contains "$s" "/login" "help overlay lists /login"
assert_contains "$s" "/permissions" "help overlay lists /permissions"
assert_contains "$s" "/session resume" "help overlay lists grouped session commands"
tui_type "account login"
if wait_for "/account login" 5; then
_pass "help filter finds canonical /account login"
else
_fail "help filter finds canonical /account login" "$(tui_capture)"
fi

# Esc closes the overlay.
tui_keys Escape
Expand Down
2 changes: 1 addition & 1 deletion scripts/tui-tests/cases/07_paste_burst.sh
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ tc_paste_burst() {
tui_paste "/help"$'\r'
# The overlay is tall; poll for a late-rendered item so the assertion does
# not race the draw (same guard as the help-overlay case).
if wait_for "/permissions"; then
if wait_for "/session resume"; then
_pass "burst-delivered line submits (help overlay opened)"
local s; s="$(tui_capture)"
assert_contains "$s" "Toggle help" "burst submit reached the slash-command path"
Expand Down
2 changes: 1 addition & 1 deletion src-rust/crates/cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ default = ["voice"]
voice = ["claurst-core/voice", "claurst-tui/voice"]

# Opt-in `/steer` command (see crates/tui). Build with `--features steer`.
steer = ["claurst-tui/steer"]
steer = ["claurst-commands/steer", "claurst-tui/steer"]

[dependencies]
claurst-core = { workspace = true }
Expand Down
Loading
Loading