关于 cli-for-agents
cli-for-agents 为开发者提供面向 AI Agent 和脚本的命令行设计与审查规范。45 条规则涵盖八个类别,从非交互操作到命令结构。
主要功能
- 01八类共 45 条规则
- 02非交互操作设计指南
- 03帮助文本与错误消息规范
- 04破坏性操作安全指南
- 05输出、重试与命令结构规范
适用场景
- 01设计面向 Agent 的新命令行工具
- 02审查现有 CLI 的无头操作能力
- 03改进帮助文本和错误消息
- 04让命令输出便于串接处理
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ pproenca/ dot-skills --skill cli-for-agents安装后在 Claude Code 中输入/cli-for-agents确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
AGENTS.mdmetadata.jsonassets/templates/_template.mdreferences/_sections.mderr-actionable-fix.mderr-exit-fast-on-missing-required.mderr-include-example-invocation.mderr-no-stack-traces-by-default.mderr-non-zero-exit-codes.mderr-stderr-not-stdout.mdhelp-examples-in-help.mdhelp-flag-summary.mdhelp-layered-discovery.mdhelp-no-flag-required.mdhelp-per-subcommand.mdhelp-suggest-next-steps.mdidem-create-or-skip.mdidem-retry-safe.mdidem-stable-identifiers.mdidem-stable-output-on-skip.mdidem-state-reconciliation.mdinput-accept-stdin-dash.mdinput-env-var-fallback.mdinput-flags-over-positional.mdinput-no-prompt-fallback.mdinput-stdin-for-secrets.mdinteract-detect-tty.mdinteract-flags-first.mdinteract-no-arrow-menus.mdinteract-no-hang-on-stdin.md详细介绍
面向 Agent 的 CLI 设计最佳实践
面向 AI Agent 和脚本的命令行界面设计规范与评审标准,不仅适用于在提示符处输入命令的人类用户。以人为中心的 CLI 常常会阻碍 Agent:交互式提示、开篇文档过长、帮助文本缺少可复制粘贴的示例、错误消息没有修复建议、没有试运行模式。本技能按影响范围排序规则——从“Agent 完全无法使用此 CLI”(严重)到“Agent 需要多查看一次帮助”(中等)。
构建新的 CLI 和评审现有 CLI 是否方便 Agent 使用时,都可使用本技能。
本技能包含 8 个类别的 45 条规则。
适用场景
在以下情况下,请参考这些指南:
- 为任何子命令编写
--help文本 - 设计新的标志、参数或子命令
- 编写错误消息或设置退出码
- 添加需要试运行或确认的破坏性操作
- 在交互式提示和仅使用标志的输入方式之间做出选择
- 设计成功输出,以便 Agent 能够串联命令
- 评审现有 CLI 是否出现无头使用方面的回归
按优先级划分的规则类别
| 优先级 | 类别 | 影响 | 前缀 |
|---|---|---|---|
| 1 | 非交互式操作 | 严重 | interact- |
| 2 | 帮助文本设计 | 高 | help- |
| 3 | 错误消息 | 高 | err- |
| 4 | 破坏性操作安全性 | 高 | safe- |
| 5 | 输入处理 | 高 | input- |
| 6 | 输出格式 | 中高 | output- |
| 7 | 幂等性与重试 | 中高 | idem- |
| 8 | 命令结构 | 中 | struct- |
注意:help-examples-in-help 在高优先级的 help- 类别中被评为严重,因为其具体问题——帮助文本没有示例——会让其他所有帮助规则都失去意义。类别标签反映的是平均水平,而非最严重的情况。
快速参考
1. 非交互式操作(严重)
interact-flags-first— 优先将每项输入都设为标志;提示仅作为 TTY 环境下的备用方式interact-detect-tty— 提示前检查isatty()interact-no-arrow-menus— 用通过标志选择的选项替代方向键菜单interact-no-input-flag— 支持--no-input以强制进入非交互模式interact-no-timed-prompts— 切勿使用限时提示或“按任意键”屏幕interact-no-hang-on-stdin— 连接了 TTY 时,不要因等待标准输入而阻塞
2. 帮助文本设计(高)
help-examples-in-help— 在每个--help中都加入可复制粘贴的示例help-per-subcommand— 每个子命令都应有自己的--helphelp-no-flag-required— 不带参数调用时显示帮助help-layered-discovery— 顶层帮助应作为导航索引help-flag-summary— 列出每个标志的短格式和长格式help-suggest-next-steps— 在帮助和成功输出中建议接下来要运行的命令
3. 错误消息(HIGH)
err-exit-fast-on-missing-required— 缺少必需标志时快速退出err-actionable-fix— 在每条错误消息中提供具体的修复方法err-stderr-not-stdout— 将错误发送到 stderr,而非 stdouterr-non-zero-exit-codes— 为不同故障使用不同的非零退出码err-include-example-invocation— 在错误消息中提供正确的调用示例err-no-stack-traces-by-default— 仅在--debug模式下显示堆栈跟踪
4. 破坏性操作安全(HIGH)
safe-dry-run-flag— 为每个破坏性命令提供--dry-runsafe-force-bypass-flag— 提供--yes/--force以跳过确认safe-confirm-by-typing-name— 对不可逆操作,要求输入资源名称以确认safe-no-prompts-with-no-input— 设置--no-input时绝不显示提示safe-idempotent-cleanup— 删除目标已不存在时也成功退出safe-crash-only-recovery— 将多步骤命令设计为仅需崩溃后恢复
5. 输入处理(HIGH)
input-accept-stdin-dash— 接受-作为 stdin 和 stdout 的文件名input-flags-over-positional— 优先使用命名标志,而非位置参数input-stdin-for-secrets— 通过 stdin 或文件接收密钥,绝不将其作为标志值input-env-var-fallback— 支持通过环境变量传递常用标志input-no-prompt-fallback— 标志缺失时绝不回退到提示
6. 输出格式(MEDIUM-HIGH)
output-json-flag— 提供--json以输出稳定的机器可读格式output-ndjson-streaming— 将大型结果集以 NDJSON 格式流式输出output-bounded-by-default— 使用--limit和--all限制默认输出大小output-machine-ids-on-success— 成功时返回可链接的值,而非仅返回“完成”output-respect-no-color— 设置NO_COLOR或非 TTY 时禁用 ANSI 颜色output-no-decorative-only— 避免仅依靠装饰性输出传达状态output-one-record-per-line— 人类可读且便于 grep 的输出中,每行输出一条记录
7. 幂等性与重试(MEDIUM-HIGH)
idem-retry-safe— 确保同一命令重复运行是安全的idem-create-or-skip— 目标已存在时,创建命令应跳过idem-stable-output-on-skip— 无论执行操作还是跳过,均返回相同结构的输出idem-state-reconciliation— 优先采用“确保状态”语义,而非应用增量变更idem-stable-identifiers— 接受用户提供的名称,而非自动生成 ID
8. 命令结构(中)
struct-resource-verb— 使用一致的「资源-动词」命令形式struct-flag-order-independent— 支持在子命令前后任意位置解析标志struct-no-hidden-subcommand-catchall— 避免为未知子命令设置兜底处理器struct-standard-flag-names— 使用标准标志名称(--help、--version、--verbose、--quiet)
使用方法
构建新的 CLI 时
从 CRITICAL 开始,逐项向下检查。前两个类别(interact- 和 help-)不可妥协——如果违反其中任何一条规则,无论其他部分做得多好,Agent 都无法使用该 CLI。完成这两类后,再依次检查 err-、safe- 和 input-——大多数实际使用中的阻碍都出现在这里。output-、idem- 和 struct- 则是锦上添花,能在多次调用中累积效果。
审查现有 CLI 时
按优先级依次检查以下清单:
- 非交互路径 — 使用
--no-input调用每个子命令,或通过</dev/null运行,检查哪些命令会挂起 - 分层帮助 —
mycli --help是否只列出子命令,还是会输出所有内容? --help中的示例 — 每个子命令的帮助信息末尾都应包含可运行的 Examples 部分- 包含调用信息的错误消息 — 每条错误是否都明确告知调用方应添加哪个标志?
- stdin/管道支持 — 能否将输出通过管道传入输入?
-是否表示 stdin? - 退出代码 — 用法错误(2)、运行时失败(1)和暂时性失败(69)是否彼此区分?
- 试运行 — 每个破坏性命令是否都有
--dry-run(或等效选项)? - 跳过确认 — 每个破坏性命令是否都有
--yes/--force? - 一致的命令结构 —
service list、deploy list和config list是否都存在且行为一致? - 结构化成功输出 —
deploy是否会返回供 Agent 后续使用的deploy_id?
单项规则
阅读各参考文件,了解详细说明和代码示例:
参考文件
| 文件 | 描述 |
|---|---|
| references/_sections.md | 类别定义和排序 |
| assets/templates/_template.md | 新规则模板 |
| metadata.json | 版本和参考信息 |
评论
支持 Markdown