教程2026-10-19 · 智涌AI

不截图也能让 AI 出 PDF:CLI-Anything 上手实测与 5 个坑

想让 AI 帮你出一份 PDF 周报,不用截图点按钮,也不用写一堆 API 胶水:港大数据智能实验室(HKUDS)开源的 CLI-Anything 把 LibreOffice、Blender、GIMP 这些软件包成了 Agent 能直接调用的命令行。我在自己的 Linux 机器上从安装到导出 PDF 跑了一遍,下面只写跑出来的结果。

CLI-Anything:让 Agent 直接驱动 LibreOffice

项目地址 HKUDS/CLI-Anything,Apache-2.0 协议,GitHub 显示 2026 年 3 月建仓,截至 10 月 19 日约 5.4 万 star,配套技术报告 arXiv:2606.03854。本文核对的是 9 月 22 日的提交 34f5195,包管理器 cli-anything-hub 用的是 PyPI 上的 0.4.1。

思路很简单:Agent 最会用的界面是命令行

GUI 自动化要截图、找按钮、点像素,界面一改就崩;很多软件又没有像样的 API。CLI-Anything 的做法是读软件源码,找到它背后真正干活的引擎(LibreOffice 的 headless 模式、blender --background、ffmpeg、sox),再在外面包一层 Click 写的命令行:

它不重写软件,只给软件装一个 Agent 看得懂的「遥控器」,真正渲染的还是 LibreOffice 和 Blender 本身。

和 MCP、GUI Agent 比,它适合什么

GUI Agent(看截图点鼠标)最通用,但慢、贵、容易点错;MCP 要软件方或社区先写好服务端,覆盖面看运气。CLI-Anything 卡在中间:只要有源码,就能生成一套命令,Agent 调用时只吃文本、不吃截图,token 也省。它也不排斥 MCP,插件的 guides/mcp-backend.md 专门讲了软件只提供 MCP 服务时,怎么把 MCP 当后端包成 CLI。

所以最适合它的是两类活:一是本来就有开源桌面软件、要批量重复操作的,比如出报告、转格式、批量修图、渲染 3D 预览;二是零散 Web API 很多、想统一成一个有状态工具的。临时点几下就完的事,直接让 GUI Agent 做更省心。

前置条件

第一步:装 cli-hub,看看有哪些现成 CLI

python3 -m venv ~/.venvs/cli-anything
source ~/.venvs/cli-anything/bin/activate
pip install cli-anything-hub
cli-hub list            # 按类别列出全部 CLI
cli-hub info libreoffice

我这次 cli-hub list 列出了 100 多个条目,分 3D、AI、音频、办公、自动化等类别,其中一部分是社区收录的第三方 CLI(标 npm、go 的那些),不全是 CLI-Anything 生成的。info 会显示依赖、入口命令和 SKILL.md 的位置。

第二步:装 LibreOffice 的 CLI,生成一份 PDF

cli-hub install libreoffice
L=cli-anything-libreoffice
$L document new -n 周报 -o report.json --type writer
$L --project report.json writer add-heading -t "本周进展" --level 1
$L --project report.json writer add-paragraph -t "新增 2 篇文章,部署正常。"
$L --project report.json export render report.pdf -p pdf --overwrite
$L --json --project report.json document info

我这边建文档、加标题这类命令不到 1 秒返回,导出 PDF 约 2 秒。导出结果里会写明 method: libreoffice-headless 和 LibreOffice 版本号,生成的文件开头是 %PDF-,中文标题正常显示。最后一条的 JSON 里有 content_count,Agent 可以靠它确认内容真的写进去了。

表格用 Calc:document new --type calc 之后用 calc set-cell A1 产品、calc set-cell B2 120 --type float 写单元格,再 export render s.xlsx -p xlsx。想改动之前先演练一遍,就在命令前加全局参数 --dry-run,我试过,项目文件不会变。

第三步:交给 Agent

每个 CLI 都附带一份 SKILL.md,装好后在包目录 cli_anything/libreoffice/skills/SKILL.md,仓库里也有 skills/cli-anything-libreoffice/。在 Claude Code 里可以直接说:

读一下 cli-anything-libreoffice 的 SKILL.md,然后用它把下面三条进展
写成一页 Writer 文档并导出 PDF;每步都加 --json,导出后检查文件头是 %PDF-。

提示词里写清两件事:一是每步都加 --json,Agent 拿到的结果才好判断;二是给出验收办法,别让它看到「Exported」就宣布完成。仓库还提供了一个 cli-hub-meta-skill,让 Agent 自己 cli-hub search 找工具、按需安装,适合你也不确定该用哪个软件的时候。

进阶:给你自己的软件生成 CLI

Claude Code 里两条命令装插件:/plugin marketplace add HKUDS/CLI-Anything,然后 /plugin install cli-anything。之后 /cli-anything ./你的软件源码 或者跟一个 GitHub 地址,插件按 HARNESS.md 走 7 个阶段:

阶段做什么产物
1 分析找后端引擎,把 GUI 操作映射到 API架构笔记
2 设计命令分组、状态模型、输出格式命令清单
3 实现Click CLI + REPL + 撤销/重做cli_anything 包
4 测试计划先写测试计划再写代码TEST.md
5 写测试单元测试 + 调真软件的端到端测试tests/
6 文档回填测试结果,生成 SKILL.mdTEST.md、SKILL.md
7 发布setup.py,pip 安装到 PATHcli-anything-<软件名>

第一次生成不全,就用 /cli-anything:refine ./源码 "我要批量滤镜相关命令" 做差距分析、增量补命令。README 的测试汇总表里,19 个 CLI 合计 1,955 项测试全部通过;OpenCode、Codex、Cursor 也有对应的安装方式,见 README。

常见坑

完成标准

HARNESS.md 里有一句值得记住:进程退出码是 0,不代表导出成功。上面那个 #VALUE! 就是例子,命令全部成功返回,文件里却是错的,所以验收要看文件内容本身。

最后

今天就做一件事:用 cli-hub install libreoffice 装上,让你的 Agent 把这周的待办导出成一份 PDF,看它能不能不靠截图独立跑完。

📬 订阅《智涌AI周报》

每周一封,精选 AI 大事和实用技巧。