Default output: return only the result, blockers, and required evidence. Omit preambles, process narration, repeated context, confidence scores, and follow-up offers. Use at most five bullets unless a required artifact or schema needs more.
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.
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.
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.
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.
1---2name: cli-for-agents3description: "Design or review CLIs so coding agents can run them reliably: non-interactive flags, fast actionable errors, idempotency, dry-run, layered --help. Use when building a CLI or adding commands."4metadata:5 category: model-invoked6 version: 1.0.07 tags: cursor-import, cli-for-agent8---910Default output: return only the result, blockers, and required evidence. Omit preambles, process narration, repeated context, confidence scores, and follow-up offers. Use at most five bullets unless a required artifact or schema needs more.1112# CLI for agents1314Human-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.1516## Non-interactive first1718- Every input should be expressible as a flag or flag value. Do not require arrow keys, menus, or timed prompts.19- If flags are missing, **then** fall back to interactive mode—not the other way around.2021**Bad:** `mycli deploy` → `? Which environment? (use arrow keys)` 22**Good:** `mycli deploy --env staging`2324## Discoverability without dumping context2526- Agents discover subcommands incrementally: `mycli`, then `mycli deploy --help`. Do not print the entire manual on every run.27- Let each subcommand own its documentation so unused commands stay out of context.2829## `--help` that works3031- Every subcommand has `--help`.32- Every `--help` includes **Examples** with real invocations. Examples do more than prose for pattern-matching.3334```text35Options:36 --env Target environment (staging, production)37 --tag Image tag (default: latest)38 --force Skip confirmation3940Examples:41 mycli deploy --env staging42 mycli deploy --env production --tag v1.2.343 mycli deploy --env staging --force44```4546## stdin, flags, and pipelines4748- Accept stdin where it makes sense (e.g. `cat config.json | mycli config import --stdin`).49- Avoid odd positional ordering and avoid falling back to interactive prompts for missing values.50- Support chaining: `mycli deploy --env staging --tag $(mycli build --output tag-only)`.5152## Fail fast with actionable errors5354- On missing required flags: exit immediately with a clear message and a **correct example invocation**, not a hang.5556```text57Error: No image tag specified.58 mycli deploy --env staging --tag <image-tag>59 Available tags: mycli build list --output tags60```6162## Idempotency6364- Agents retry often. The same successful command run twice should be safe (no-op or explicit "already done"), not duplicate side effects.6566## Destructive actions6768- Add `--dry-run` (or equivalent) so agents can preview plans before committing.69- Offer `--yes` / `--force` to skip confirmations while keeping the safe default for humans.7071## Predictable structure7273- 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.7475## Success output7677- On success, return machine-useful data: IDs, URLs, durations. Plain text is fine; avoid relying on decorative output alone.7879```text80deployed v1.2.3 to staging81url: https://staging.myapp.com82deploy_id: dep_abc12383duration: 34s84```8586## When reviewing an existing CLI8788- 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.