The slash command menu
Discoverable power, triggered by a single character.
The slash menu started in Slack, matured in Notion, and is now the most under-designed surface in most AI products. It's where power users want to go to skip the chat layer entirely, and where new users first glimpse what the product can actually do. Most teams ship a bloated dropdown. A few ship something that feels like a keyboard API.
"A slash menu is not a feature list. It's a vocabulary. Users will learn the words if you name them precisely and group them well."
Grouped, filterable, keyboard-first.
The user types slash. A menu opens. Each command has a verb (/draft, /translate, /search), a short hint, and a group. Up/down keys move, enter selects, escape clears. Typing after the slash filters the list. No mouse required.
The slash menu is not a replacement for chat. It's an escape hatch for when the user already knows what they want and wants to skip conversational throat-clearing.
A slash menu is a keyboard API. Grouped, filterable, not a dropdown tax.
Chat is bandwidth. Commands are directness.
Every chat turn costs the user a sentence. For routine moves, that sentence is friction, not conversation. Users who know what they want shouldn't have to compose a prompt to get it. A slash command is the shortest path from intent to result.
Details that separate great menus from bad ones.
- Groups, not tags. Three to five buckets max. "Write," "Transform," "Search." Not "Power," "Pro," "Lab."
- One hint per command. A six-word explanation beside each verb. Reads like a menu, not a manual.
- Command = real noun. /email, not /email-generator. /brief, not /brief-summarizer. The command is the thing, not the feature marketing.
Menus that grow without grouping.
Add commands without discipline and you ship a linear list of twenty items that the user has to scroll. At that point, the feature has lost its purpose: you might as well have a button. The slash menu's value collapses the moment the user has to read more than they would have typed.
What this pattern gets wrong when it gets wrong.
- Phantom tool
- A visible tool call that didn't happen, or happened but with different arguments than shown.
- Ambiguous state
- Running, done, errored, paused all look the same. The user has to infer from context.
Three shipping variants worth copying.
- Fuzzy-match that surfaces verb + one-line description
- Recent commands float to the top on re-open
- A 'see all commands' keybind (?) that reveals the full map