| name | cli |
| description | CLI application design: argument conventions, output streams, exit codes, configuration hierarchy, interactive modes, and terminal UX. Invoke whenever task involves any interaction with command-line tools or terminal applications — building, reviewing, debugging, or designing CLI interfaces. |
CLI Design
Programs are composable by default. stdout carries data, stderr carries diagnostics, exit codes carry status, and
signals carry intent. Get the boundaries right and everything else follows.
References
- Arguments [
${CLAUDE_SKILL_DIR}/references/arguments.md] — Full POSIX guidelines, GNU long option table,
subcommand patterns, flag design
- Output [
${CLAUDE_SKILL_DIR}/references/output.md] — Stream separation details, color codes, ANSI escapes,
NO_COLOR spec, pager setup
- Exit codes [
${CLAUDE_SKILL_DIR}/references/exit-codes.md] — Standard/extended code tables, signal exit codes,
partial success patterns
- Interaction [
${CLAUDE_SKILL_DIR}/references/interaction.md] — TTY detection, prompting patterns, confirmation
levels, progress display, error format
- Configuration [
${CLAUDE_SKILL_DIR}/references/configuration.md] — Full hierarchy, XDG spec, env var catalog,
config file formats, secret handling
- Signals [
${CLAUDE_SKILL_DIR}/references/signals.md] — Full signal table, SIGPIPE handling, crash-only design,
child process signals
Output Streams
This is the single most important convention. Mixing data and diagnostics in stdout is the #1 way to break
composability.
- stdout is data. Primary output goes to stdout -- query results, computed values, formatted data. This is what gets
piped to the next command or redirected to a file.