cli-for-agent · git:20260709.7239349 · 2026-07-09 · sha256 f333f220ff4a7b48
cli-for-agent git:20260709.7239349A
Immutable. This exact content is served forever at /api/v1/blob/f333f220ff4a7b48.
--- name: cli-for-agents description: Design or review 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 agent-friendly CLIs. --- # 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. Do not require arrow keys, menus, or timed prompts. If flags are missing, fall back to interactive — not the other way. **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. ## `--help` That Works Every subcommand has `--help`. Every `--help` includes **Examples** with real invocations. ``` 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 ``` ## Stdin, Flags, and Pipelines Accept stdin where it makes sense. Avoid odd positional ordering. Support chaining. ## Fail Fast With Actionable Errors On missing required flags: exit immediately with a clear message and a correct example invocation. ``` Error: No image tag specified. mycli deploy --env staging --tag <image-tag> ``` ## Idempotency Agents retry often. The same successful command run twice should be safe (no-op or explicit "already done"). ## Destructive Actions Add `--dry-run` so agents can preview plans. Offer `--yes` / `--force` to skip confirmations. ## Predictable Structure Use consistent patterns: `resource` + `verb`. If `mycli service list` exists, `mycli deploy list` should follow the same shape. ## Success Output Return machine-useful data on success: IDs, URLs, durations. ``` deployed v1.2.3 to staging url: https://staging.myapp.com deploy_id: dep_abc123 ```