Design CLI tools as local APIs for AI agents. TTY detection, --json output, stderr/stdout separation, exit codes. | 为 AI 设计 CLI 工具的规范:TTY 检测、JSON 输出、stderr/stdout 分离、退出码。
CLI 不是命令行界面,是AI 可调用的本地 API。
Unix 风格 = 最便宜、最稳定、最通用的 API 协议。
检测 stdout 是否连接终端,自动切换输出模式:
go
import golang.org/x/term
isTTY := term.IsTerminal(int(os.Stdout.Fd()))
| 场景 | stdout | 行为 |
|---|---|---|
| 人在终端敲命令 | TTY | 进度条、颜色、交互提示 |
| AI/脚本调用 |
规则:如果不是 TTY,绝对不输出 ANSI 转义码、进度条、spinner。
这是最关键的设计:
stdout = 结果数据(机器读)
stderr = 日志/进度/调试信息(人读)
AI 调用时:tool action 2>/dev/null 拿到纯净数据。
人调试时:stderr 能看到过程信息。
绝对不要把日志和结果混在 stdout 里。
go
// 日志 → stderr
func log(format string, a ...any) {
if !jsonMode && !quiet {
fmt.Fprintf(os.Stderr, format+\n, a...)
}
}
// 结果 → stdout
func output(data any) {
if jsonMode {
json.NewEncoder(os.Stdout).Encode(data)
} else {
// tab-separated 纯文本
fmt.Println(formatTSV(data))
}
}
Tab-separated,可 grep/awk/cut:
OK /media/usb1 31 files 500KB 25ms 20MB/s
OK /media/usb2 31 files 500KB 26ms 19MB/s
FAIL /media/usb3 0 files 0B 1ms 0B/s
bash
json
{
ok: true,
data: [...],
error: null
}
JSON 输出契约(必须遵守):
顶层必有 ok: bool → AI 判断成功/失败
失败时必有 error: string → AI 读取错误信息
列表用数组 [] → 不要换行拼接字符串
字段名用 snake_case → 统一风格
数值不要格式化 → bytes 用数字,不用 1.5MB
完整 JSON 响应结构模板:
go
type Response struct {
OK bool json:ok
Data interface{} json:data,omitempty
Error string json:error,omitempty
Stats *Stats json:stats,omitempty
}
type Stats struct {
Elapsed string json:elapsed
Count int json:count,omitempty
}
0 = 成功
1 = 运行时错误(部分失败、IO 错误)
2 = 参数/用法错误
AI 用 $? 快速判断:
bash
tool action --json && echo success || echo failed: $?
不要用奇怪的退出码(比如 137、255)。简单的 0/1/2 足够。
把每个子命令看作一个 API endpoint:
| CLI 命令 | 等价 API | 说明 |
|---|---|---|
| tool list --json | GET /items | 查询 |
| tool get ID --json |
设计原则:
每个 AI-friendly CLI 都应该支持这些 flag:
--json 结构化 JSON 输出
--quiet, -q 只输出结果,不输出日志
--verbose, -v 详细日志
--no-input 禁用交互式提示
--yes, -y 自动确认所有提示
--version 版本号
参考 templates/tty.go.tmpl 获取完整的 Go 代码模板,包含:
设计一个新的 CLI 工具时,逐项检查:
fastcp(本规范的第一个实践项目):
bash
该技能支持在以下平台通过对话安装:
帮我安装 SkillHub 和 ai-cli-design-1775943866 技能
设置 SkillHub 为我的优先技能安装源,然后帮我安装 ai-cli-design-1775943866 技能
skillhub install ai-cli-design-1775943866
文件大小: 3.39 KB | 发布时间: 2026-4-12 08:44