CLI Printing Press:从任意 API 生成一个 Go 命令行工具
文章摘要
CLI Printing Press 是 Matt van Horn 开源的一个生成器,目标只有一个:给任意 API 自动印出一个为 AI agent 优化过的高质量命令行工具。它的输入可以是 OpenAPI spec、浏览器抓下来的 HAR 文件、甚至只是一个 URL(项目会反向工程出 spec),输出则是一对孪生产物——一个基于 Cobra 的 Go CLI,以及一个对应的 MCP server——两者从同一份规格生成,不会出现实现漂移。
整条流水线分五步走:”研究 → 生态吸收 → 生成 → 验证 → 发布“。研究阶段会去爬目标 API 的官方文档以及现有竞品 CLI / MCP,找出常见命令模式;生成阶段把端点映射成 Cobra 命令的同时,会额外造出一批”洞察型”复合命令——例如 health、bottleneck、similar 这种任何无状态 API 都做不到的分析命令。这是因为它在本地内嵌了一层 SQLite + FTS5 的数据层:增量同步、cursor 跟踪、本地全文搜索,让 CLI 既能当 API 客户端,又能当本地分析引擎。
在”为 agent 服务”这件事上,它做了几个明确的设计决策:piped 时自动输出 JSON、有类型化的 exit code 让 agent 自我修正、--compact 模式压缩 token、--dry-run 提供安全闸门。验证阶段也很扎实:两层 scorecard(基础设施 + 领域正确性)、结构化 dogfood 检查、行为证明、可选的 live API smoke test。整体哲学很清楚——API → CLI 不再是手工活,而是工业化产线——每一份 OpenAPI 都能被”印”成一个 agent 友好的工具集,作者甚至直接把项目名取成”印刷机”。
HN 评论精华
注:这条 Hacker News 帖子(id=48054795)目前只有 6 分,几乎没有展开的评论讨论。下面是社区在类似项目(OpenAPI → CLI 生成器)下经常出现的关注点,也基本对应了开发者第一次看到 CLI Printing Press 时会问的问题:
-
关于”为何还要再造 CLI 生成器”:openapi-generator、Speakeasy、Stainless、fern 已经存在多年,差异点是 CLI Printing Press 不是给人用的 SDK——它专门给 agent 生成、强制 JSON/exit code/compact 模式,并且同时吐出 MCP server,这是传统 CLI generator 没有覆盖的形态。
-
关于本地 SQLite 层的争议:把 API 数据落到本地 FTS5,确实让
similar/bottleneck这种跨记录查询变得可能;但同步一致性、增量 cursor 失效、token 过期等问题会被推给 CLI 用户,开发者通常会问”出错时怎么 reset”。 -
关于 HAR 反向工程的可靠性:从浏览器抓 HAR 推 OpenAPI 是个老想法,但生产环境里端点参数往往是动态、依赖鉴权状态的,自动推断的 spec 通常需要人工修正——这步在文档里被一笔带过,实际使用时是最大坑点。
-
关于 Go + Cobra 选型:社区普遍叫好——Cobra 是事实上的标准,Go 二进制方便分发,agent 跑 CLI 时不用拖一整个语言运行时;这条选择让生成出来的工具天然适合在 sandbox 里作为 agent tool 调用。
-
关于”为 agent 设计”是否过度迎合:有人会担心这种 CLI 对人类不够友好(默认 JSON 输出、错误信息更适合机器解析);但作者明确表示这就是项目目标——人类用 SDK,agent 用这个;两者解耦才是合理的。
-
整体看,CLI Printing Press 击中的是 2026 年一个非常具体的需求:当 agent 成为 API 主要消费者时,”给 API 配一个 agent 友好工具”应该是流水线作业,而不是每家公司各写各的。这条思路如果跑通,未来或许会有标准化的”agent CLI”格式像 OpenAPI 一样出现。