Claude Code accepts input through three distinct channels. They differ in when they are parsed, what parses them, and whether the input reaches the model at all.
| Channel | Parsed | Reaches the model | Example |
|---|---|---|---|
| CLI arguments | By the shell, before the process starts | No | claude --model opus --add-dir ../api |
| Slash commands | By Claude Code, at the start of an input line | Mostly no | /context |
| Sigils | By Claude Code, inside the prompt text | Depends on the sigil | explain @src/auth.ts |
flowchart TB
subgraph T["Shell — before the process exists"]
A["claude --model opus --add-dir ../api"]
end
subgraph S["Session — start of an input line"]
B["/context /compact /doctor"]
end
subgraph P["Prompt — inside the text"]
C["explain @src/auth.js and check !git log"]
end
T --> S --> P
Two of the three do not consume model calls. That is the practical consequence: work done through channels 1 and 2 is free of inference cost and latency.
Continue reading »