Introduction
The most common new-user mistake on the Hermes CLI is asking the agent to do something a slash command would do faster and cheaper. "Can you switch to a different model?", "Please be more concise", "Use less reasoning effort", these all belong to the command channel, not the chat channel. The reverse mistake also exists: trying to use a slash command for actual work. The framework in this lesson keeps both straight.
Key Concepts
- Change vs. work: Slash commands change the agent. Chat asks the agent to do work.
- Deterministic vs. interpretive: Slash commands run a known operation; chat goes through model interpretation.
- Local vs. remote: Slash commands execute locally in the CLI; chat involves a provider call.
Real World Context
A new hire on the team writes "hey hermes, please use claude opus for this next part" and pays five cents to receive a polite explanation that the agent cannot change its own model. A teammate watching them coach: "That's a slash command. /model anthropic/claude-opus-4." The new hire saves the five cents next time and starts to internalize the framework.
Deep Dive
The decision rule has two halves and one tiebreaker.
Half 1: Are you trying to change the agent's runtime state?
If yes, the answer is almost always a slash command. The full list of "change the agent's runtime state" actions:
- Change the model, provider, or reasoning level →
/model,/reasoning - Enable or disable tools or skills →
/tools,/skills - Change personality, voice, theme →
/personality,/voice,/skin - Compress, branch, reset, or end the session →
/compress,/branch,/new,/quit - Change how interrupts work →
/busy - Launch parallel work →
/background,/queue,/steer
If your request fits any of those buckets, reach for /.
Half 2: Are you trying to get the agent to do something in the world?
If yes, use chat. Write code, read files, search the web, run a tool, summarize, explain, analyze, debug, brainstorm. These are model-mediated actions that benefit from natural language and the model's reasoning. The command channel cannot do them.
Tiebreaker: Are you asking for information about the agent's state?
If the answer is on the screen already, do not ask. Read the banner or status bar. If it is information the CLI maintains (sessions, profiles, models, skills), there is usually an info-only slash command (/config, /usage, /status, /profile, /skills). Use that. Only ask in chat when the information genuinely requires reasoning.
textYour intent Channel ───────────────────────────────────── ──────── Switch the model /model Make the agent be terser /personality Run with less reasoning /reasoning Refactor a function chat Explain this stack trace chat See current token usage /usage (or just read the status bar) Get the agent to pick a model for me chat ("recommend a model")
The last row is the interesting edge case. Asking the agent to recommend a model is work (model-mediated reasoning). Acting on the recommendation is a state change (/model <picked>).
Common Pitfalls
- Using chat to change state: Wastes tokens, introduces ambiguity, and the model usually has to tell you to use the command anyway.
- Using slash for nuanced work: "Tell me about my codebase" is not a
/command. Slash commands are deterministic; nuanced work needs the model.
Best Practices
- Default to
/for state changes, default to chat for tasks: This single rule covers 95% of cases. - When in doubt, type
/first and Tab: If there is a matching slash command, use it. If not, fall back to chat.
Summary
- Slash commands change the agent's state; chat asks the agent to do work.
- Slash is local, deterministic, and free; chat is remote, interpretive, and metered.
- The fast tiebreaker: if the information is already on the screen, just read it.
- When unsure, type
/and Tab. If something fits, use it.
Code Examples
# Same goal, two channels, one wrong choice and one right one
# Wrong: ask the agent to switch models in chat
> Hey, can you use a cheaper model for the rest of this conversation?
# (model responds politely that it cannot change itself, costing tokens)
# Right: use the command channel for state change
> /model openai/gpt-4o-mini
# (instant, free, deterministic)
# Right: chat is for actual work the model needs to do
> Refactor the parseInput function to use the new TokenStream API