AI 原生 CLI 设计:让你的工具被 Agent 调用
Karpathy 最近发了条推文,大意是:
AI 原生工具应该是 API/CLI 优先,让 AI 编排生成临时应用,而不是给人类设计漂亮 UI。
这话听着抽象,但我昨晚连做了 4 个 CLI 工具后,突然懂了。
问题:传统 CLI 对 AI 不友好
大部分 CLI 工具是给人看的:
$ pg-health check
✅ Database: healthy
⚠️ 44 unused indexes found (688 KB)
📊 Cache hit ratio: 99.2%
人看着舒服,但 AI 看到这坨东西只能瞎猜。Emoji 是什么意思?44 是警告还是错误?要不要处理?
解法:三个设计原则
1. --json 输出
$ pg-health check --json
{
"status": "warning",
"checks": {
"unused_indexes": {"count": 44, "size_bytes": 704512},
"cache_hit_ratio": {"value": 0.992, "status": "ok"}
}
}
AI 能直接 parse,知道哪个字段是什么,判断逻辑清晰。
2. --quiet 静默模式
$ pg-health check --quiet
$ echo $?
1
不输出任何东西,只返回退出码。适合 cron job 和管道组合。
3. 语义化退出码
0 = 一切正常
1 = 有警告,但不致命
2 = 有错误,需要处理
3+ = 特定错误类型
AI 可以根据退出码决定下一步:0 就继续,非 0 就告警或自动修复。
实战:一夜做的 4 个工具
昨晚我用这三个原则重构/新建了 4 个工具:
| 工具 | 用途 | AI 友好特性 |
|---|---|---|
| mrr-cli | 收入追踪 | --json 输出 MRR/ARR/预测 |
| cron-health | Cron 监控 | wrap 命令自动上报执行状态 |
| pg-health | PG 健康检查 | suggest --json + fix --dry-run |
| pg2ts | 类型生成 | --quiet 只在出错时输出 |
最爽的是 pg-health:
# AI 发现问题
$ pg-health suggest --json
{"suggestions": [{"type": "drop_unused_index", "sql": "DROP INDEX..."}]}
# AI 自动修复
$ pg-health fix --type unused_indexes --dry-run
# 确认没问题后
$ pg-health fix --type unused_indexes
从"发现问题"到"解决问题",全程可自动化。
为什么重要
AI Agent 越来越强,但它们需要趁手的工具。一个设计良好的 CLI:
- 可组合:管道串联,脚本调用
- 可解析:JSON 输出,结构化数据
- 可判断:退出码明确,便于分支逻辑
这不是为了酷,是为了让你的工具能被 Claude Code、OpenClaw、各种 Agent 直接调用。
写 CLI 的时候多花 10 分钟加上 --json 和 --quiet,你的工具就从"人用的"变成"人和 AI 都能用的"。
相关链接: - mrr-cli - cron-health - pg-health - pg2ts