create-cli — Claude Code skill: what it does, how to install
Drafts human-friendly CLI specifications with argument tables, exit codes, and output contracts based on clig.dev guidelines before writing code.
npx skills add steipete/agent-scripts --skill create-cli -a claude-codeWhat create-cli does
The skill turns Claude Code into a CLI design assistant. Before writing any tool code, the agent clarifies core requirements: target audience, input sources, interactive prompts, and output contracts like --json or --plain. It applies rules from clig.dev as the default standard.
The resulting deliverable is a compact specification ready for implementation. It includes a command tree, an arguments table, rules for separating stdout from stderr, and an exit code map covering codes 0, 1, and 2. It also covers safety mechanisms like --dry-run and configuration precedence from flags down to config files, alongside 5 to 10 usage examples.
The skill deliberately avoids pushing code or picking parsing libraries unless explicitly requested. This keeps the design language-agnostic and prevents premature implementation details from derailing CLI usability.
What it helps with
- Design flag hierarchies and subcommand trees for a new CLI tool
- Define stream contracts separating stdout data from stderr diagnostics
- Map exit codes and safety options like --dry-run and --force
- Establish precedence across CLI flags, environment variables, and config files
Example prompts for the agent
- Design the CLI interface for a container deployment tool with init and deploy subcommands
- Draft a CLI specification for an image converter with flags for output formats and stdin support
- Create an argument and exit code spec for a script-friendly database backup tool
How to install create-cli
1Skills CLI (Vercel)
npx skills add steipete/agent-scripts --skill create-cli -a claude-code2Manually: put the files in place
~/.claude/skills/create-cli/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/create-cli/
1Skills CLI (Vercel)
npx skills add steipete/agent-scripts --skill create-cli -a codex2Manually: put the files in place
.agents/skills/create-cli/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add steipete/agent-scripts --skill create-cli -a cursor2Manually: put the files in place
.cursor/skills/create-cli/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install steipete/agent-scripts create-cli2Manually: put the files in place
.github/skills/create-cli/SKILL.md1Skills CLI (Vercel)
npx skills add steipete/agent-scripts --skill create-cli -a gemini-cli2Platform CLI
gemini skills install https://github.com/steipete/agent-scripts --path skills/create-cliManually: put the files in place
.devin/skills/create-cli/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add steipete/agent-scripts --skill create-cli -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about create-cli
How to install create-cli in Claude Code?
Run npx skills add steipete/agent-scripts --skill create-cli -a claude-code. Alternatively, place the skill file directly at ~/.claude/skills/create-cli/SKILL.md.
What does create-cli do?
It produces a structured CLI specification covering syntax, output handling, error codes, and safety flags before any implementation code is written.
Does create-cli implement argument parsing code?
Not by default. The skill stays language-agnostic and only suggests parsing libraries when you explicitly ask for them.
Source text
SKILL.md · MIT
--- name: create-cli description: "CLI UX/spec: args, flags, help, output, errors, config, dry-run." --- # Create CLI Design CLI surface area (syntax + behavior), human-first, script-friendly. ## Do This First - Read `agent-scripts/skills/create-cli/references/cli-guidelines.md` and apply it as the default rubric. - Upstream/full guidelines: https://clig.dev/ (propose changes: https://github.com/cli-guidelines/cli-guidelines) - Ask only the minimum clarifying questions needed to lock the interface. ## Clarify (fast) Ask, then proceed with best-guess defaults if user is unsure: - Command name + one-sentence purpose. - Primary user: humans, scripts, or both. - Input sources: args vs stdin; files vs URLs; secrets (never via flags). - Output contract: human text, `--json`, `--plain`, exit codes. - Interactivity: prompts allowed? need `--no-input`? confirmations for destructive ops? - Config model: flags/env/config-file; precedence; XDG vs repo-local. - Platform/runtime constraints: macOS/Linux/Windows; single binary vs runtime. ## Deliverables (what to output) When designing a CLI, produce a compact spec the user can implement: - Command tree + USAGE synopsis. - Args/flags table (types, defaults, required/optional, examples). - Subcommand semantics (what each does; idempotence; state changes). - Output rules: stdout vs stderr; TTY detection; `--json`/`--plain`; `--quiet`/`--verbose`. - Error + exit code map (top failure modes). - Safety rules: `--dry-run`, confirmations, `--force`, `--no-input`. - Config/env rules + precedence (flags > env > project config > user config > system). - Shell completion story (if relevant): install/discoverability; generation command or bundled scripts. - 5–10 example invocations (common flows; include piped/stdin examples). ## Default Conventions (unless user says otherwise) - `-h/--help` always shows help and ignores other args. - `--version` prints version to stdout. - Primary data to stdout; diagnostics/errors to stderr. - Add `--json` for machine output; consider `--plain` for stable line-based text. - Prompts only when stdin is a TTY; `--no-input` disables prompts. - Destructive operations: interactive confirmation + non-interactive requires `--force` or explicit `--confirm=...`. - Respect `NO_COLOR`, `TERM=dumb`; provide `--no-color`. - Handle Ctrl-C: exit fast; bounded cleanup; be crash-only when possible. ## Templates (copy into your answer) ### CLI spec skeleton Fill these sections, drop anything irrelevant: 1. **Name**: `mycmd` 2. **One-liner**: `...` 3. **USAGE**: - `mycmd [global flags] <subcommand> [args]` 4. **Subcommands**: - `mycmd init ...` - `mycmd run ...` 5. **Global flags**: - `-h, --help` - `--version` - `-q, --quiet` / `-v, --verbose` (define exactly) - `--json` / `--plain` (if applicable) 6. **I/O contract**: - stdout: - stderr: 7. **Exit codes**: - `0` success - `1` generic failure - `2` invalid usage (parse/validation) - (add command-specific codes only when actually useful) 8. **Env/config**: - env vars: - config file path + precedence: 9. **Examples**: - … ## Notes - Prefer recommending a parsing library (language-specific) only when asked; otherwise keep this skill language-agnostic. - If the request is “design parameters”, do not drift into implementation.
© steipete · MIT · steipete/agent-scripts