乐于分享
好东西不私藏

一行命令,把任意软件变成 AI Agent 的原生工具——CLI-Anything 实测

一行命令,把任意软件变成 AI Agent 的原生工具——CLI-Anything 实测

让 Claude Code 处理个图片——裁切、调色、加水印——它给你写了一段 Python 用 Pillow 实现。功能勉强能跑,但 GIMP 那 20+ 种图层混合模式和滤镜链全丢了。

这不是 Agent 偷懒,是它根本操控不了图形化软件。Agent 能调 API、能写代码、能跑 Shell,但面对只有 GUI 的 GIMP、Blender、Audacity,基本束手无策。

港大数据科学实验室(HKUDS)的 CLI-Anything 就是冲这个来的:给任意软件自动生成一套 CLI,让 Agent 像调函数一样操控它们40778 Star,2600+ 测试用例,覆盖 80+ 款软件。

几个实战例子

LibreOffice — 办公自动化:

# 创建文档并添加内容
$ cli-anything-libreoffice document new -o report.json --type writer
$ cli-anything-libreoffice --project report.json writer add-heading \
    -t "2026年Q1营收报告" --level 1
$ cli-anything-libreoffice --project report.json writer add-table \
    --rows 4 --cols 3

# 调用 LibreOffice headless 导出真实 PDF

$ cli-anything-libreoffice --project report.json export render \
    output.pdf -p pdf --overwrite
✓ Exported: output.pdf (42,831 bytes) via libreoffice-headless

导出的 PDF 是真刀真枪用 LibreOffice headless 渲染的,字体、排版、样式跟手动操作一模一样。不是 Python 脚本模拟的。

Blender — 3D 建模到渲染:

$ cli-anything-blender
blender> scene new --name ProductShot
blender[ProductShot]> object add-mesh --type cube --location 0 0 1
blender[ProductShot]*> render execute --output render.png --engine CYCLES
✓ Rendered: render.png (1920×1080, 2.3 MB) via blender --background

注意提示符变化:blender> → blender[ProductShot]> → blender[ProductShot]*>。最后的 * 号表示项目有未保存的修改——REPL 细节做得非常到位。

GIMP — 图像处理:

$ cli-anything-gimp project new --width 1920 --height 1080 -o poster.json
$ cli-anything-gimp --json layer add -n "Background" --type solid --color "#1a1a2e"
{"status": "ok", "layer": {"name": "Background", "type": "solid", "visible": true}}

$ cli-anything-gimp --project poster.json
gimp[poster]> filter apply gaussian-blur --radius 5
gimp[poster]*> export render output.png
✓ Exported: output.png (1920×1080, 245 KB)

三条命令的通用模式:子命令模式供脚本调用、REPL 模式供交互操作、--json 参数供 Agent 消费结构化数据——人看可读表格,Agent 拿 JSON。

http://Draw.io

Game

CLI vs MCP:Token 消耗对比

CLI-Anything 比 MCP 更省 token 吗?先厘清一个前提:不管用哪种方式,”帮我用 GIMP 把图裁成 800×600 再加个高斯模糊”——Agent 理解这句话、规划命令、解析结果、处理错误,这部分推理 token 两者消耗是一样的。省不下来的。

区别在工具接口层:

CLI-Anything(生成后)
MCP
工具描述存放
不在 prompt 里,Agent 需要时读 SKILL.md 或 --help
常驻 system prompt,每次对话都占上下文
每次工具调用
subprocess.run

 一行命令
JSON-RPC 编解码 + 往返
重复使用的上下文成本
第一次读工具文档花几百 token,后面记住了
每轮对话 tool schema 都在那
首次接入
高(自动生成 CLI 的 token)
中(手写 Server)

真正的差异不是每次调用的 token,而是工具描述对上下文窗口的持续占用。MCP 的 tool schema 写进 system prompt 后就一直在那,对话越长、占的累积 token 越多。CLI-Anything 的 CLI 是独立进程,Agent 需要时读一下 --help,不需要时不占地方。

但这也有代价:Agent 每次都从零理解 CLI 的 help 输出,不像 MCP 工具定义那样结构化、稳定。MCP 在这方面反而是优势。

五条铁律

CLI-Anything 的架构有五条不可妥协的原则:

  1. 1. 必须调真实软件 — 不能用 Pillow 替代 GIMP,不能自己写渲染器替代 Blender。走 Script-Fu、bpy、headless 模式等真实后端引擎
  2. 2. 双模式交互 — 子命令模式(供脚本)+ REPL 模式(供人),一条命令两种用法
  3. 3. 统一 REPL 界面 — 所有 CLI 共享同一套品牌横幅、提示符、命令历史,学习成本为零
  4. 4. Agent 原生设计 — 每个命令内置 --json,Agent 零配置自动发现
  5. 5. 零降级策略 — 后端缺失时测试直接 FAIL,不做假、不降级、不跳过

项目规模

每个软件的 CLI 都自带完整的测试套件:

软件
测试数
类型分布
s&box
244
157 unit + 50 e2e
Blender
208
150 unit + 58 e2e
Inkscape
202
148 unit + 54 e2e
Audacity
161
107 unit + 54 e2e
LibreOffice
158
89 unit + 69 e2e
Kdenlive
155
111 unit + 44 e2e
Shotcut
154
110 unit + 44 e2e

全部 18 款软件合计 1,774 项测试,100% 通过率。e2e 测试会调真实软件后端验证——比如 LibreOffice 的测试真的导出 PDF 然后检查 %PDF 魔术字节。

CLI-Hub:Agent 工具的”应用商店”

2026 年 3 月,CLI-Hub 中心化注册表上线。生成好的 CLI 可以发布上去共享:

pip install cli-anything-hub
cli-hub list                    # 80+ 款可用
cli-hub install gimp            # 一键装
cli-hub search "3d modeling"    # 搜
cli-hub update --all            # 批量更新

目前覆盖创意设计(GIMP、Blender、Krita)、办公(LibreOffice、Zotero)、3D/CAD(FreeCAD)、GIS(QGIS)、游戏引擎(Godot)、AI 工具(ComfyUI、Ollama)、开发工具(Jenkins、n8n、LLDB)等领域。

最妙的是 CLI-Hub 的 meta-skill:Agent 可以自己在 CLI-Hub 里搜索、安装需要的 CLI——”Agent 帮 Agent 找工具”的闭环。


CLI-Anything 解决的是 Agent 落地一个很实际的瓶颈:软件生态没跟上 Agent 时代。它用”自动生成 CLI 给 Agent 调”的思路,把 GUI 软件接入了 Agent 工作流。至于 token——Agent 的推理该怎么花还是怎么花,但至少工具描述不用再常驻上下文了。

GitHub:HKUDS/CLI-Anything ⭐ 40778