关于 creating-cli-tools
creating-cli-tools 是一项用于设计兼顾人工使用与脚本调用的命令行界面的技能。它引导梳理需求,并产出涵盖命令、输入输出、错误、安全、配置和示例的精简规格。
主要功能
- 01明确命令用途和目标用户
- 02定义命令树、参数和选项
- 03规定输出、错误和退出码
- 04设置安全、配置及环境变量规则
- 05提供调用示例
适用场景
- 01规划新命令行工具的命令结构
- 02定义稳定的机器可读输出
- 03规定交互式与脚本调用行为
- 04记录确认机制和破坏性操作规则
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ zenobi-us/ dotfiles --skill creating-cli-tools安装后在 Claude Code 中输入/creating-cli-tools确认已加载。
附带文件references/cli-guidelines.mdreferences/styles-bash.md
详细介绍
创建 CLI
设计 CLI 的使用界面(语法 + 行为),以人为本,便于脚本使用。
先做这些
- 阅读
agent-scripts/skills/create-cli/references/cli-guidelines.md,并将其作为默认评审标准。 - 上游/完整指南:https://clig.dev/(提出修改建议:https://github.com/cli-guidelines/cli-guidelines)
- 只询问确定接口所需的最少澄清问题。
快速澄清
先提问;如果用户不确定,则采用最合理的默认值并继续:
- 命令名称 + 一句话用途。
- 主要用户:人类、脚本,还是两者兼有。
- 输入来源:参数还是 stdin;文件还是 URL;机密信息(绝不通过标志传递)。
- 输出约定:人类可读文本、
--json、--plain、退出码。 - 交互方式:是否允许提示?是否需要
--no-input?破坏性操作是否需要确认? - 配置模型:标志/环境变量/配置文件;优先级;XDG 还是仓库本地配置。
- 平台/运行时限制:macOS/Linux/Windows;单一二进制文件还是需要运行时。
交付内容(输出什么)
设计 CLI 时,请提供一份紧凑的规格说明,方便用户实现:
- 命令树 + USAGE 用法概要。
- 参数/标志表(类型、默认值、必填/可选、示例)。
- 子命令语义(每项的作用;幂等性;状态变更)。
- 输出规则:stdout 与 stderr;TTY 检测;
--json/--plain;--quiet/--verbose。 - 错误与退出码映射(主要失败模式)。
- 安全规则:
--dry-run、确认、--force、--no-input。 - 配置/环境变量规则 + 优先级(标志 > 环境变量 > 项目配置 > 用户配置 > 系统配置)。
- Shell 补全方案(如适用):安装/可发现性;生成命令或内置脚本。
- 5–10 个调用示例(常见流程;包含管道/stdin 示例)。
默认约定(除非用户另有说明)
-h/--help始终显示帮助,并忽略其他参数。--version将版本信息打印到 stdout。- 主要数据输出到 stdout;诊断信息/错误输出到 stderr。
- 添加
--json以支持机器处理;可考虑添加--plain,提供稳定的逐行文本。 - 仅当 stdin 是 TTY 时才显示提示;
--no-input禁用提示。 - 破坏性操作:交互模式下要求确认;非交互模式下必须使用
--force或显式指定--confirm=...。 - 遵循
NO_COLOR、TERM=dumb;提供--no-color。 - 处理 Ctrl-C:快速退出;限制清理时间;尽可能采用崩溃即终止设计。
模板(复制到你的回答中)
CLI 规格说明骨架
填写以下部分,删除不相关内容:
- 名称:
mycmd - 一句话说明:
... - USAGE:
mycmd [global flags] <subcommand> [args]
- 子命令:
mycmd init ...mycmd run ...
- 全局标志:
-h, --help--version-q, --quiet/-v, --verbose(明确定义)--json/--plain(如适用)
- I/O 约定:
- stdout:
- stderr:
- 退出码:
0成功1通用失败2用法无效(解析/验证错误)- (仅在确有帮助时添加命令专属退出码)
- 环境变量/配置:
- 环境变量:
- 配置文件路径 + 优先级:
- 示例:
- …
备注
- 仅在用户提出要求时,才建议使用特定语言的解析库;否则保持语言无关。
- 如果请求是“设计参数”,不要偏离主题去讨论实现。
评论
支持 Markdown