cli-for-agents · git:20260831.856ee57 · 2026-08-31 · sha256 73e8703fd50e2f68
cli-for-agents git:20260831.856ee57A
Immutable. This exact content is served forever at /api/v1/blob/73e8703fd50e2f68.
--- name: cli-for-agents description: >- Designs or reviews CLIs so coding agents can run them reliably: non-interactive flags, layered --help with examples, stdin/pipelines, fast actionable errors, idempotency, dry-run, and predictable structure. Use when building a CLI, adding commands, writing --help, or when the user mentions agents, terminals, or automation-friendly CLIs. origin: type: upstream upstream: repository: cursor/plugins path: cli-for-agent/skills/cli-for-agents ref: 60c641e4fad674784b30abcf9f8915dea39df38d license: MIT trust: tier: reviewed reviewed_at: '2026-08-19' reviewed_by: ulises-jeremias reviewed_provenance: sha256:8a04cbe405bced60ca66cc792a51dca4d2991f094d21ec0997ad85911212d3be maintenance: status: active last_checked: '2026-08-19' distribution: mode: vendored redistribution_allowed: true attribution_file: LICENSE security: scripts: false shell: false network: false mcp: [] hooks: [] dangerous_permissions: [] cve_policy: not-applicable updates: strategy: pull-request cadence: weekly --- # CLI for agents Human-oriented CLIs often block agents: interactive prompts, huge upfront docs, and help text without copy-pasteable examples. Prefer patterns that work headlessly and compose in pipelines. ## Non-interactive first - Every input should be expressible as a flag or flag value. Do not require arrow keys, menus, or timed prompts. - If flags are missing, **then** fall back to interactive mode—not the other way around. **Bad:** `mycli deploy` → `? Which environment? (use arrow keys)` **Good:** `mycli deploy --env staging` ## Discoverability without dumping context - Agents discover subcommands incrementally: `mycli`, then `mycli deploy --help`. Do not print the entire manual on every run. - Let each subcommand own its documentation so unused commands stay out of context. ## `--help` that works - Every subcommand has `--help`. - Every `--help` includes **Examples** with real invocations. Examples do more than prose for pattern-matching. ```text Options: --env Target environment (staging, production) --tag Image tag (default: latest) --force Skip confirmation Examples: mycli deploy --env staging mycli deploy --env production --tag v1.2.3 mycli deploy --env staging --force ``` ## stdin, flags, and pipelines - Accept stdin where it makes sense (e.g. `cat config.json | mycli config import --stdin`). - Avoid odd positional ordering and avoid falling back to interactive prompts for missing values. - Support chaining: `mycli deploy --env staging --tag $(mycli build --output tag-only)`. ## Fail fast with actionable errors - On missing required flags: exit immediately with a clear message and a **correct example invocation**, not a hang. ```text Error: No image tag specified. mycli deploy --env staging --tag <image-tag> Available tags: mycli build list --output tags ``` ## Idempotency - Agents retry often. The same successful command run twice should be safe (no-op or explicit "already done"), not duplicate side effects. ## Destructive actions - Add `--dry-run` (or equivalent) so agents can preview plans before committing. - Offer `--yes` / `--force` to skip confirmations while keeping the safe default for humans. ## Predictable structure - Use a consistent pattern everywhere, e.g. `resource` + `verb`: if `mycli service list` exists, `mycli deploy list` and `mycli config list` should follow the same shape. ## Success output - On success, return machine-useful data: IDs, URLs, durations. Plain text is fine; avoid relying on decorative output alone. ```text deployed v1.2.3 to staging url: https://staging.myapp.com deploy_id: dep_abc123 duration: 34s ``` ## When reviewing an existing CLI - Check: non-interactive path, layered help, examples on `--help`, stdin/pipeline story, error messages with invocations, idempotency, dry-run, confirmation bypass flags, consistent command structure, structured success output.