Slash commands
Inside chat, anything starting with / is a slash command. There are three kinds: a handful are built into the runtime; some are injected by a higher layer (the job lane in the separate skilled_workflow package adds its own); and the rest are user-defined via .command.md files referenced from your .skilled_crew.yaml.
Built-in commands
These are the only commands the base _skillet_agent runtime ships:
| Command | Behavior |
|---|---|
/help | List every slash command (built-in, injected, and user-defined) with its description. |
/skills | List the skills available to the current agent. |
/mcp_servers | List attached MCP servers and the tools each one exposes. |
/compact | Force session compaction now. /compact info prints the current item count instead. |
/exit | Quit the REPL. Closes MCP connections and exits cleanly. |
Empty input — just pressing Enter — is treated as /help.
/help
Lists all slash commands the runtime knows about: the built-ins plus every entry under commands: in your .skilled_crew.yaml. Each row shows the command name and its description (the description: field from the .command.md frontmatter).
/skills
Lists every skill on the current agent, with each skill’s description from its SKILL.md frontmatter. Useful when you forget which skills exist or what they’re each supposed to do.
/mcp_servers
Lists the MCP servers wired to the current agent and, for each one, the tools the server exposes. Helps diagnose “the LLM doesn’t seem to have tool X” — if the server isn’t listed here, it isn’t attached.
/compact
The session is automatically compacted once it grows past 40 non-user items (see Architecture › Compaction). /compact forces it now. /compact info reports the current item count without compacting. Those are the only two forms — any other argument prints a usage error (there is no free-text hint).
Injected commands: the job lane
The job commands are not part of _skillet_agent. They are external slash commands registered by a higher layer — the job lane orchestrator in the separate skilled_workflow package. The base runner knows nothing about them; it just dispatches by name (extensions.externalSlashCommands) and lets the injecting layer handle the rest. When you run through the job lane, four extra commands let you inspect and nudge the board without leaving chat:
| Command | Behavior |
|---|---|
/jobs | List jobs that are ready, running, or blocked. |
/show <id> | Print one job’s full detail (body, status, runs, comments). |
/comment <id> <text> | Append a user comment to a job. |
/unblock <id> | Move a blocked job back to ready so the dispatcher can re-claim it. |
These read the same board as the jobs CLI commands. They appear in /help only when the job lane has injected them.
/exit
Closes the readline loop, closes MCP server connections, exits with code 0. Ctrl+C does the same, but /exit is the clean path.
User-defined commands
User-defined commands come from .command.md files referenced in .skilled_crew.yaml:
commands:
- name: french
filePath: ../dot_claude/commands/french.command.md
- name: caveman
filePath: ../dot_claude/commands/caveman.command.mdInside chat, type /french (or /french something) and the body of french.command.md is sent to the orchestrator as a normal user message, with $ARGUMENTS substituted. See .command.md for the file format.
The name in the YAML is what the user types. /help lists built-ins and user commands together.
Where commands run
Built-in commands short-circuit before the LLM runs — they never cost a token. User-defined commands always go through the orchestrator (and through the LLM), because the point is to get a model response shaped by the command’s body.
If a user-defined command’s frontmatter sets agent: <name>, the message is routed directly to that agent in a multi-agent skillet, bypassing the entry agent.