Designs CLIs that AI agents can invoke — non-interactive flags, layered help with examples, actionable errors, idempotency, dry-run, and destructive-action safety. Use when building or reviewing a CLI for agent-friendliness.
How this skill is triggered — by the user, by Claude, or both
Slash command
/pproenca-dot-skills-1:cli-for-agentsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Prescriptive design and review standards for Command-Line Interface Design targeting AI agents and scripts, not just humans typing at a prompt. Human-oriented CLIs often block agents: interactive prompts, huge upfront docs, help text without copy-pasteable examples, error messages without fixes, no dry-run mode. This skill prioritizes rules by blast radius — from "the agent cannot use this CLI ...
Prescriptive design and review standards for Command-Line Interface Design targeting AI agents and scripts, not just humans typing at a prompt. Human-oriented CLIs often block agents: interactive prompts, huge upfront docs, help text without copy-pasteable examples, error messages without fixes, no dry-run mode. This skill prioritizes rules by blast radius — from "the agent cannot use this CLI at all" (CRITICAL) to "the agent has to read help one extra time" (MEDIUM).
Use this skill both when building a new CLI and when reviewing an existing one for agent-friendliness.
This skill contains 45 rules across 8 categories.
Reference these guidelines when:
--help text for any subcommand| Priority | Category | Impact | Prefix |
|---|---|---|---|
| 1 | Non-interactive Operation | CRITICAL | interact- |
| 2 | Help Text Design | HIGH | help- |
| 3 | Error Messages | HIGH | err- |
| 4 | Destructive Action Safety | HIGH | safe- |
| 5 | Input Handling | HIGH | input- |
| 6 | Output Format | MEDIUM-HIGH | output- |
| 7 | Idempotency & Retries | MEDIUM-HIGH | idem- |
| 8 | Command Structure | MEDIUM | struct- |
Note: help-examples-in-help is rated CRITICAL within the HIGH help- category because its specific failure — help text without examples — makes every other help rule moot. The category label reflects the average, not the worst case.
interact-flags-first — Express every input as a flag first; prompts are TTY-only fallbackinteract-detect-tty — Check isatty() before promptinginteract-no-arrow-menus — Replace arrow-key menus with flag-selected choicesinteract-no-input-flag — Support --no-input to force non-interactive modeinteract-no-timed-prompts — Never use timed prompts or press-any-key screensinteract-no-hang-on-stdin — Don't block on stdin when a TTY is attachedhelp-examples-in-help — Include copy-pasteable examples in every --helphelp-per-subcommand — Every subcommand owns its own --helphelp-no-flag-required — Show help when invoked with zero argumentshelp-layered-discovery — Top-level help is a navigational indexhelp-flag-summary — List both short and long forms for every flaghelp-suggest-next-steps — Suggest what to run next in help and success outputerr-exit-fast-on-missing-required — Exit fast on missing required flagserr-actionable-fix — Include a concrete fix in every error messageerr-stderr-not-stdout — Send errors to stderr, not stdouterr-non-zero-exit-codes — Use distinct non-zero exit codes for distinct failureserr-include-example-invocation — Include a correct example invocation in errorserr-no-stack-traces-by-default — Reserve stack traces for --debug modesafe-dry-run-flag — Provide --dry-run for every destructive commandsafe-force-bypass-flag — Provide --yes / --force to skip confirmationssafe-confirm-by-typing-name — Require typing the resource name for irreversible actionssafe-no-prompts-with-no-input — Never prompt when --no-input is setsafe-idempotent-cleanup — Exit successfully when delete targets are already gonesafe-crash-only-recovery — Design multi-step commands for crash-only recoveryinput-accept-stdin-dash — Accept - as filename for stdin and stdoutinput-flags-over-positional — Prefer named flags over positional argumentsinput-stdin-for-secrets — Accept secrets through stdin or file, never as flag valuesinput-env-var-fallback — Accept common flags through environment variablesinput-no-prompt-fallback — Never fall back to a prompt when a flag is missingoutput-json-flag — Provide --json for stable machine-readable outputoutput-ndjson-streaming — Stream large result sets as NDJSONoutput-bounded-by-default — Bound default output size with --limit and --alloutput-machine-ids-on-success — Return chainable values on success, not just "Done"output-respect-no-color — Disable ANSI color when NO_COLOR or non-TTYoutput-no-decorative-only — Avoid relying on decorative output to convey stateoutput-one-record-per-line — One record per line for grep-able human outputidem-retry-safe — Make running the same command twice safeidem-create-or-skip — Make create commands skip when target already existsidem-stable-output-on-skip — Return the same output shape whether acting or skippingidem-state-reconciliation — Prefer "ensure state" semantics over delta applicationidem-stable-identifiers — Accept user-provided names instead of auto-generating IDsstruct-resource-verb — Use a consistent resource-verb command shapestruct-flag-order-independent — Parse flags in any position relative to subcommandsstruct-no-hidden-subcommand-catchall — Avoid catch-all handlers for unknown subcommandsstruct-standard-flag-names — Use standard flag names (--help, --version, --verbose, --quiet)Start at CRITICAL and walk down. The first two categories (interact- and help-) are non-negotiable — if any rule in these is violated, the CLI is unusable by agents regardless of how good the rest is. After those, work through err-, safe-, and input- — these are where most real-world friction lives. output-, idem-, and struct- are polish that compounds across many invocations.
Run through this checklist in priority order:
--no-input or under </dev/null and see which hangmycli --help list subcommands only, or dump everything?--help — every subcommand's help should end with a runnable Examples section- mean stdin?--dry-run (or equivalent)--yes/--forceservice list, deploy list, config list all exist and work the same way?deploy return a deploy_id the agent can use next?Read individual reference files for detailed explanations and code examples:
| File | Description |
|---|---|
| references/_sections.md | Category definitions and ordering |
| assets/templates/_template.md | Template for new rules |
| metadata.json | Version and reference information |
npx claudepluginhub pproenca/dot-skillsDesign spec with 98 rules for building CLI tools that AI agents can safely use. Covers structured JSON output, error handling, input contracts, safety guardrails, exit codes, and agent self-description.
Designs CLIs for both human users and LLM agents, covering subcommand structure, output streams, exit codes, JSON modes, TTY-aware color, and structured errors. Use when building or refactoring a CLI, adding machine-readable output, or making a tool agent-friendly.
Designs CLI surfaces including args/flags/subcommands/help/output/errors/config for new tools. Audits existing CLIs for consistency, composability, and agent ergonomics.