命令行工具
mvanhorn/cli-printing-press avatar
mvanhorn/cli-printing-press

cli-printing-press:把 API 文档压成给 AI 代理用的 Go CLI

该项目围绕「Every API has a secret identity. This finds it, absorbs every feature from every competing tool, then builds the GOAT CLI, designed for AI agents first, with SQLite sync, offline search, and compound insight commands.」构建,适用于实际场景的开源实践,提供可复用的工具链与集成方式。

4,685 个 Star505 个 ForkGoMIT
GitHub

秒懂

它是什么?
cli-printing-press 读取官方 API 文档、研究社区 CLI 与 MCP 服务器,甚至嗅探未公开的网页接口,然后生成一个带 SQLite 本地镜像和复合查询命令的 Go CLI。本文基于仓库 README 与发布记录,说明它的工作机制、安装方式、局限与适用人群。
适合谁用?
cli-printing-press 适合那些需要为 AI 代理(尤其是 Claude Code)快速生成专用 CLI 的团队,特别是当目标 API 没有官方 SDK、或者官方 API 无法回答复合查询(如“被阻塞一周的 issue”)时。它不适合对生成代码有严格审计要求、或者不希望代理直接读取网页接口的场合。
能商用吗?
可以。MIT 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库最近一次提交在 2 天前。
用什么语言写的?
主要是 Go(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月14日)和我们的分析,不构成法律意见。

开源项目深度解析

它解决什么问题:代理的肌肉记忆

README 开篇说得很直白:对 AI 代理来说,时间就是 token 消耗。一个设计良好的 CLI 是代理的肌肉记忆,不用翻文档、不走弯路。cli-printing-press 的目标是把任意 API 或网站变成这样一个 CLI。它读取官方 API 文档,研究流行的社区 CLI 和 MCP 服务器,甚至嗅探没有公开文档的网页接口,比如 Google Flights 或 Domino's。然后输出一个 Go CLI、一个 Claude Code skill 和一个 MCP 服务器。这个项目面向的是用 Claude Code 或 Codex 做自动化任务的开发者,尤其是那些需要让代理反复调用同一批 API 的场景。

工作方式:三路输入,一个输出

从 README 描述看,生成过程有三条输入路径。第一是官方 API 文档,这是最直接的来源。第二是社区已有的 CLI 和 MCP 服务器,项目会吸收它们的特性。第三是网页嗅探,针对没有公开 API 的网站,比如 ESPN 或 Google Flights。这些输入被融合后,输出一个 Go CLI、一个 Claude Code skill 和一个 MCP 服务器。输出的 CLI 带有本地 SQLite 镜像,用于离线搜索和快速查询。README 给出的例子是 linear-pp-cli,它能在 50ms 内对本地 SQLite 镜像执行“被阻塞一周的 issue”这类复合查询,而官方 API 本身无法直接回答这种问题。这个机制的核心是:不是简单包装 API,而是把数据同步到本地,再用复合命令做跨实体的查询。

安装与启动:两个部分,一个循环

安装分两个部分:二进制和 skills。README 明确说,只装二进制也能用,但会跳过“精选的代理循环”;只装 skills 则没有东西可调用。安装命令是 curl 脚本:curl -fsSL https://raw.githubusercontent.com/mvanhorn/cli-printing-press/main/scripts/install.sh | bash。脚本会运行 go install 安装生成器二进制,然后通过 skills@latest add --skill '*' 刷新所有 skills。可以用 --cli-only 或 --skills-only 只装一边。默认目标是 Claude Code,给 Codex 用要加 --agent codex。安装后验证用 cli-printing-press --version。启动方式是在 Claude Code 里输入 /printing-press <app-name>,也可以传一个网址,比如 /printing-press https://postman.com/explore,这样不需要 API spec。还有一个 /printing-press-reprint 命令,用于在最新版本下重新生成已有的 CLI。

命令示例:从自然语言到复合查询

README 给了三个已生成的 CLI 例子。ESPN 是嗅探出来的,没有官方 API,它的一条命令能返回 NBA 季后赛比赛、比分、系列赛状态、两队得分王的数据统计,以及过去 24 小时的伤病或阵容新闻。flight-goat 把 Kayak 的非中转搜索和嗅探到的 Google Flights 拼在一起,能回答“12 月 24 日到 1 月 1 日,4 人,从西雅图出发,8 小时以上的非中转航班,按价格从低到高排序”这样的问题。linear-pp-cli 则依赖本地 SQLite 镜像,回答“所有被阻塞一周以上的 issue”这种官方 API 无法直接给出的复合查询。这些例子的共同点是:一次调用返回完整答案,而不是让代理多次轮询。这正是 README 强调的 token 效率。

局限与风险:嗅探的边界与维护成本

这个项目的一个明显局限是它依赖网页嗅探。Google Flights 或 ESPN 这类网站没有公开 API,嗅探意味着爬取网页结构,这种结构随时可能改变。一旦网站改版,生成的 CLI 就可能失效。README 没有说明嗅探的更新频率或失败处理机制。另一个局限是,生成的 CLI 是 Go 写的,但安装前提是 Go 1.26.6 或更新版本,以及 Node/npm 用于 npx。这意味着即使你只想用生成的 CLI,也需要完整的 Go 工具链。维护成本方面,项目本身更新频繁,最近一次发布是 v4.31.2,日期为 2026-08-28,说明迭代很快。但用户需要自行跟踪新版本,并重新运行安装脚本刷新 skills。许可证是 MIT,这意味着你可以自由修改和再分发,但 README 没有提供贡献指南或代码结构说明,对于想深度定制的人来说是个障碍。

替代方案:从手写 CLI 到 MCP 服务器

与 cli-printing-press 最接近的替代方案是直接为每个 API 手写一个 CLI 或 MCP 服务器。手写 CLI 的优势是完全可控,你可以精确控制每个命令的输出格式和错误处理,但代价是每个 API 都要单独开发,而且很难做到像 README 里 ESPN 那样的复合查询。另一个替代是使用现成的 MCP 服务器,比如社区为 Linear 或 Notion 写的 MCP。这些服务器通常只做 API 的薄封装,不支持本地 SQLite 镜像,也没有复合命令。cli-printing-press 的差异在于它把“研究”这一步自动化了,它替你读文档、看社区工具、嗅探网页,然后生成一个整合的产物。但这也意味着你失去了对研究过程的可视性,你无法确认它是否遗漏了某个关键 API 端点。

适用判断:谁该用,谁该绕开

如果你在用 Claude Code 做日常自动化,并且经常需要代理访问多个 API 或网站,cli-printing-press 值得一试。它适合那些“官方 API 回答不了”的查询,比如跨实体的复合条件。但如果你的 API 有严格的访问控制、需要复杂的 OAuth 流程,或者你的团队要求对生成的代码做安全审计,那么这个工具可能不合适,因为生成代码的不可预测性会放大审计成本。另一个考虑是数据新鲜度:本地 SQLite 镜像的同步频率决定了查询结果的时效性。对于实时性要求高的场景,比如股票价格或航班状态,镜像可能不够及时。在采用前,先用一个非关键 API 跑一次 /printing-press,检查生成的 CLI 是否真的符合你的 token 预算和查询需求。

编辑结论

cli-printing-press 适合那些需要为 AI 代理(尤其是 Claude Code)快速生成专用 CLI 的团队,特别是当目标 API 没有官方 SDK、或者官方 API 无法回答复合查询(如“被阻塞一周的 issue”)时。它不适合对生成代码有严格审计要求、或者不希望代理直接读取网页接口的场合。采用前应先验证三点:目标 API 是否在公开文档或可嗅探的网页范围内,生成的 CLI 是否满足你的 token 预算,以及本地 SQLite 镜像的同步频率是否满足数据新鲜度需求。最终判断:这是一个把“研究、生成、评分”打包进一个斜杠命令的工具,它的价值取决于你愿意信任它替你做的研究。

官方来源

  1. Official README
  2. Project repository
  3. Release notes
社区笔记

社区笔记