Better CLI 面向基于命令的 CLI 工具(类似 git、docker、gh、kubectl,带子命令、标志与结构化输出),目标是在终端中好用,同时在自动化管线中可靠。适合新建 CLI、改进或重构现有 CLI、增加命令与输出格式、评审可组合性与智能体就绪度;不适用于全屏 TUI、GUI、REST/GraphQL API 设计与 shell 脚本。
核心规则按优先级分为三档。P0:stdout 只放数据,错误、警告、进度、诊断与提示全部走 stderr;成功退出 0、失败非 0,并使用语义化退出码(如 2 用法错误、3 未找到、4 权限不足、5 冲突、75 临时失败可重试、78 配置错误);每个有输出的命令支持 --json,采用统一信封(status、data、warnings),并视为有版本的 API 契约;输出需指引下一步操作,成功时给出后续命令,失败时给出修复命令,部分结果时说明如何获取更多;必须支持 --help 与 --version,示例应靠前;不得强制交互输入,所有提示都要有标志等价物(如 --yes/--force、--type、--name),stdin 非 TTY 时不得挂起。
P1:检测 TTY 并自适应,终端显示颜色与表格,管道输出纯文本,尊重 NO_COLOR、TERM=dumb、CI 等信号;错误需含原因、上下文、修复命令与参考,--json 下错误须结构化并带 code 与 transient;配置优先级为标志 > 环境变量 > 项目配置 > 用户配置 > 默认值,密钥不得经标志传入;支持 --fields、stdin 读取与 NDJSON;改进现有 CLI 时不得破坏既有契约,移除或重命名标志、退出码、JSON 字段等属破坏性变更,需大版本升级,新增能力应保持叠加;优先使用标志而非位置参数,主对象之外的位置参数应慎用。
P2:长操作在 stderr 显示进度,管道中抑制;修改类命令支持 --dry-run;操作尽量幂等,或提供 --if-not-exists;提供 bash、zsh、fish 补全;命令语法保持一致。资料还列出反模式与智能体就绪检查清单,并给出 references 目录下的深入资料文件名,包括输出设计、智能体模式、错误处理、交互性、可组合性、可发现性、安全与测试等。具体实现细节与平台支持情况以原文为准,资料未提供价格与收费信息。