-
Notifications
You must be signed in to change notification settings - Fork 1
features slash commands
Inside a chat you can type /<name> to run a command instead of sending a
message. There are two kinds:
-
Built-ins — REPL/chat controls baked into eVi (
/help,/model,/context, …). -
User & plugin commands — markdown prompt templates you drop in
~/.evi/commands/(or that a plugin ships), fired as/<name>with arguments.
Type /help (or /?) at any time to list everything available in the current
session; press Tab in the CLI REPL to complete command names.
The full set, from evi chat / evi sessions resume:
| Command | What it does |
|---|---|
/help, /?
|
Show the command list (built-ins + your user/plugin commands). |
/reset |
Clear the conversation history (start fresh, same session). |
/exit, /quit
|
Leave the REPL. |
/tools |
List the currently active tools. |
/model [id] |
Show the active model, or switch to id (persisted to config). |
/goal [text|clear] |
Set / clear / show the ongoing goal (prepended to each turn). |
/plan [task] |
Run the next turn in plan-only mode (no tools); optional inline task. |
/auto [on|off] |
Auto-approve every tool call for this session (no on/off = show state). |
/compact |
Summarise older history into one note to free context. |
/context, /ctx
|
Show where the context window is being spent (per-bucket breakdown). |
/recent [n] |
List recent sessions (resume via evi sessions resume). |
/image <path> |
Attach an image to the next turn (vision/VLM models). |
/effort [low|medium|high|max] |
Set reasoning effort for subsequent turns. |
/fast [on|off|<model-id>] |
Toggle fast mode (swap to a smaller model). |
/json <prompt> |
Force JSON-object output for the next turn. |
/schema <file> [prompt] |
Constrain the next turn to a JSON Schema (file path). |
/notools <prompt> |
Answer the next turn without using any tools. |
/forcetool <name> <prompt> |
Force the model to call a specific tool. |
/reload |
Re-read config.toml without restarting. |
/audio <path> |
Transcribe an audio file and send the text as the next turn. |
/audioraw <path> [prompt] |
Attach raw audio (omni models) / auto-transcribe otherwise. |
/speak [on|off] |
Auto-speak assistant replies sentence-by-sentence (TTS). |
/predict <text|file <p>|clear> |
Set a speculative-decoding hint for the next turn. |
Aliases: /? = /help, /ctx = /context, /img = /image, /quit = /exit.
Many of these have a GUI equivalent in the web/desktop app — the model picker chip (
/model), the usage-chip popover (/context), the auto/plan chips, the 📎 attach button (/image,/audio), the speak toggle (/speak). See Surface parity — CLI ↔ Web ↔ Desktop for the full mapping.
The web chat understands a subset of the built-ins (the ones that make sense without a terminal), plus all your user/plugin commands:
/help · /reset · /tools · /model [id] · /goal [text|clear] ·
/plan [task] · /auto [on|off] · /compact · /reload
The remaining built-ins (/context, /recent, /image, /effort, /fast,
/json, /schema, /notools, /forcetool, /audio*, /speak, /predict,
/exit) are CLI-only — in the web/desktop app their job is done by GUI controls
or per-turn API parameters instead.
Drop a markdown file at ~/.evi/commands/<name>.md; typing /<name> in the REPL
or the web chat sends its expanded content as the next user message. This is
modelled on Claude Code's custom commands (evi/commands.py).
evi command list # your + plugin commands (what /help shows in chat)
evi command new <name> # scaffold ~/.evi/commands/<name>.md (ns:name → subdir)
(REPL keybindings have the same treatment: evi keybindings list shows the
effective bindings from ~/.evi/keybindings.toml.)
---
description: Draft a conventional-commit message
argument-hint: [scope]
model: qwen2.5-coder:14b-instruct-q4_K_M
---
Write a conventional-commit message for the staged changes.
Scope: $1
Full request: $ARGUMENTS
Here is the diff:
@<(git diff --cached)-
Frontmatter (optional
---block):-
description— shown in/help. If omitted, the first body line is used. -
argument-hint— documents expected args (e.g.[scope]), shown to you. -
model— a per-command model override surfaced to callers that honour it.
-
-
Arguments:
-
$ARGUMENTS— everything after the command name. -
$1…$9— positional args (the argument string isshlex-split). -
{args}— legacy alias for$ARGUMENTS.
-
-
File references —
@path/to/fileinlines that file's contents (fenced), up to 16 KB, if the file exists; otherwise the token is left as-is. (Emails likea@b.comare not treated as file refs.) -
Namespacing — subdirectories become
:names:~/.evi/commands/git/commit.md→/git:commit.
No shell execution. Unlike some tools, eVi does not run
!bashblocks when expanding a command — auto-running shell on expansion is too sharp an edge for eVi's permission model. If you need triggering metadata or tool gating, write a skill instead.
Installed plugins can ship a commands/ directory; those appear as
/<plugin>:<command> alongside your own. See Plugins & Marketplace.
/help # list built-ins + user/plugin commands
/model qwen2.5:7b # switch model (persisted)
/context # see the context-window breakdown
/auto on # auto-approve tools for this session
/commit fix(web) # run ~/.evi/commands/commit.md with $1="fix(web)"
/git:commit # a namespaced command from commands/git/commit.md
Anything that isn't a built-in and isn't a known user/plugin command prints
unknown command: /<name> (try /help).
The repo ships one example command:
mkdir -p ~/.evi/commands
cp examples/commands/commit.md ~/.evi/commands/Now /commit in any chat runs git diff and proposes a conventional-commit
message. Pass a scope: /commit web.
mkdir -p ~/.evi/commands/pr
cat > ~/.evi/commands/pr/describe.md <<'EOF'
---
description: Draft a PR description from the branch diff
argument-hint: [ticket]
---
Write a concise PR description for ticket $1.
Summarise the change, call out risks, and list manual test steps.
Diff:
@<(git diff main...HEAD)
EOFFire it with /pr:describe ABC-123.
- Command and skill names must match
[A-Za-z0-9_-]+per path segment (this also blocks path traversal). - The command store rescans on every call, so newly added files show up
without restarting
evi web. -
/jsonand/schemaare per-turn structured-output controls — see Structured Outputs & Batch. The web/API equivalent is theoutput_schemafield on the chat request. - Built-ins always win over a user command of the same name, so you can't shadow
/modelwith~/.evi/commands/model.md.
Generated from docs/features/slash-commands.md — edit there, not here.
Start here
Guides
- Architecture
- [[Agent SDK (
evi.sdk)|sdk]] - SDK coverage + borrowable features
- Multi-machine setup
- Self-update design (Phase 29 proposal)
- [[Self-build — developing and building eVi with eVi|self-build]]
- Development notes
- Releasing
- Desktop bundling
- Code signing policy
- Surface parity — CLI ↔ Web ↔ Desktop
- eVi vs Claude Code — feature comparison
- Future integrations — backlog
- Roadmap
Feature deep-dives
- eVi feature guides
- Agents & Orchestration
- Recipes, Routines, Scheduled tasks, Channels
- Evals & LLM-as-judge
- Content Guardrails
- Hooks (tool + lifecycle, command/url)
- MCP (client + serve)
- Memory & Context management
- Observability (OpenTelemetry, stats, crash reports)
- Permissions & Sandbox
- Plugins & Marketplace
- Sessions, Resume, Handoff, Checkpoints
- Skills
- Slash commands
- Structured Outputs & Batch
- Ultracode
- Voice (TTS engines, STT, AutoSpeaker)
- Web & Desktop (settings, multi-user, deep links, updater)