CLI-Anything:开源软件转命令行
CLI-Anything读取应用程序的源代码,生成一个完整的命令行界面来包装应用程序的内部API给智能体实用。
微信 ezpoda免费咨询:AI编程 | AI模型微调| AI私有化部署
AI工具导航 | Tripo 3D | Meshy AI | ElevenLabs | KlingAI | ArtSpace | Phot.AI | InVideo
AI代理可以写代码、搜索网页、读取文件和运行shell命令。但它们无法打开GIMP并从照片中移除背景。
一个能访问所有npm包和互联网上所有API端点的编码代理,仍然做不了平面设计实习生第一天就能做的事:打开应用程序、点击一些按钮、导出结果。
现有的解决方案都很糟糕。屏幕抓取工具截取GUI的截图,试图找出该点击哪里。它们速度慢、脆弱,只要UI变化就会崩溃。RPA机器人记录的点击序列,一旦对话框位置略有不同就会失效。自定义API包装器只为少数流行应用存在,而且维护成本高昂,因为每次UI更新都可能破坏绑定。
更深层的问题是,桌面软件从来不是为非人类使用而设计的。Web应用之所以有API,是因为它们必须通过HTTP与前端通信。移动应用也是如此。桌面应用只与自己对话。渲染引擎、业务逻辑、文件I/O,一切都封装在GUI事件循环后面。如果你不是移动鼠标的人,你就不是用户。
大多数专业软件(Blender、GIMP、LibreOffice、Audacity、OBS Studio、Shotcut、Kdenlive)根本没有代理友好的接口。
香港大学的CLI-Anything采取了不同的方法。它不试图与GUI交互,而是读取应用程序的源代码,生成一个完整的命令行界面来包装应用程序的内部API。代理永远看不到一个像素,它只需要运行shell命令。
# 这就是代理控制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"
cli-anything-gimp filter gaussian-blur --radius 4.0
cli-anything-gimp export --format png -o result.png
没有截图,没有像素搜索。只有返回JSON的结构化命令。
1、工作原理:七个阶段,一条命令
把CLI-Anything指向一个代码库,剩下的它来完成。
/cli-anything:cli-anything ./gimp
这一条命令触发一个七阶段的流水线:

第七阶段之后,系统上就有了一个可用的CLI。which cli-anything-gimp会返回一个路径。任何代理都可以调用它。
执行生成的AI代理(Claude Code、Codex、OpenClaw或任何运行流水线的工具)读取应用程序的源代码,理解其内部API接口,然后编写一个Python Click CLI来包装这些API。生成的CLI包括帮助文本、JSON输出、会话管理、撤销/重做和交互式REPL。
截至2026年3月,13个生成的应用程序通过了1,588个测试。这些不是hello-world测试。它们运行真实的软件:GIMP渲染图像,Blender创建3D场景,LibreOffice生成PDF。
2、代理实际获得什么
比较两种交互模式。
当代理抓取GUI屏幕时,它获得一张图像。它必须解析图像、识别UI元素、找出点击位置、处理加载状态、处理对话框,并希望分辨率和缩放比例与上次成功时一致。
当代理调用CLI-Anything命令时,它得到这个:
{
"status": "success",
"project": {
"id": "poster-001",
"width": 1920,
"height": 1080,
"layers": 3,
"format": "xcf"
},
"message": "Project created"
}
结构化且确定性的。相同的输入,相同的输出,每次如此。不需要视觉模型,只需要JSON进,JSON出。
这很重要,因为错误处理完全改变了。当GUI抓取代理遇到意外对话框时,它必须对一个从未见过的图像进行推理。当CLI命令失败时,它返回带有消息和代码的JSON错误。代理可以解析错误,决定重试还是尝试不同方法,然后继续。失败模式是一个字符串,而不是神秘的截图。
--json标志在每个生成的CLI中都是标准的。代理使用JSON模式;人类默认获得人类可读的输出。
3、他们测试的13个应用
CLI-Anything已在从未设计为可编程访问的专业软件上进行了测试:
创意和媒体:

生产力和通信:

图表绘制:

每个生成的CLI都是一个通过pip install -e .安装的Python包,可以从任何终端调用。代理不需要知道或关心它在与Blender对话。它只需要调用cli-anything-blender scene create --objects cube,light,camera并获得JSON返回。
4、优化循环
第一代覆盖最常见的操作。但专业软件有深层功能集。仅GIMP就有数百个滤镜、数十种颜色模式,以及一个可以进一步扩展功能的插件架构。初始过程不会覆盖所有内容,也不应该尝试。正确实现20个最常用的操作比半生不熟地实现200个操作更有价值。
CLI-Anything通过迭代优化处理长尾需求:
# 广泛优化:代理分析缺失内容并填补空白
/cli-anything:refine ./gimp
# 聚焦优化:针对特定领域
/cli-anything:refine ./gimp "batch processing and filters"
每次优化运行执行差距分析,将软件的全部功能与当前CLI覆盖范围进行比较,然后为缺失部分实现新命令、测试和文档。这个过程是非破坏性的、增量式的。运行五次,获得五层覆盖。
5、令人不安的论点
CLI-Anything文档中有一张幻灯片说得很清楚:
今天的软件服务于人类。明天的用户将是代理。
这对任何构建桌面软件的人来说都是令人不安的。如果代理成为专业工具的主要"用户",GUI就变成了可选的。不是无用的(人类仍然需要它来探索和创意工作),但变成了次要的。对于执行、批处理和自动化流水线,CLI成为真正的界面。
考虑营销团队每周运行的工作流程:
- 从共享驱动器下载活动图片
- 将每张图片调整为三种不同尺寸
- 添加水印
- 转换为WebP格式
- 上传到CDN
人类在GIMP中完成这些,对每张图片点击每个步骤。需要一个小时。
使用cli-anything-gimp的代理:
for img in campaign_*.png; do
for size in 1200x628 1080x1080 1920x1080; do
cli-anything-gimp resize "$img" --dimensions "$size" \
| cli-anything-gimp watermark --logo brand.png --position bottom-right \
| cli-anything-gimp export --format webp -o "output/${img%.png}_${size}.webp"
done
done
四分钟。没有GUI。底层使用相同的GIMP渲染引擎。
这里的赌注很简单:专业软件有数十年积累的功能——渲染引擎、音频处理器、视频编解码器——都被锁定在鼠标驱动的界面后面。生成的CLI使这些功能对代理可用,而不需要软件供应商动一根手指。
这与ImageMagick(已经可以从命令行进行批处理图像处理)的区别在于范围。ImageMagick是一个进行图像处理的工具。CLI-Anything是一种为任何应用程序生成CLI包装器的方法。生成的GIMP CLI可以做ImageMagick做不到的事,因为它可以访问GIMP的完整插件生态系统、图层合成引擎和特定格式的导出选项。同样的逻辑适用于Blender与独立3D转换器,或LibreOffice与pandoc。被包装的应用程序总是比独立替代品更强大,因为独立替代品是重新实现,而包装器使用的是真正的工具。
6、理论上,任何有仓库的软件都可以
CLI-Anything不限于测试过的13个应用。只要有源代码,它就能获得CLI。
他们的文档列出了远超媒体和生产力的类别:

限制因素不是CLI-Anything本身,而是应用程序的源代码是否可用,以及它是否暴露了可以编程调用的内部API。具有结构良好的后端的开源软件效果最好。没有脚本接口的闭源软件是死路一条。
值得注意的是:"有源代码"和"容易包装"是两回事。一个没有Python绑定、GUI层紧密耦合的大型C++应用程序,比一个UI和逻辑清晰分离的Python应用程序更难包装。文档中列出的支持类别是理想化的。测试过的13个应用程序是经过验证的。
7、自描述技巧(这很聪明)
每个生成的CLI都在Python包内附带一个SKILL.md文件。当REPL启动时,横幅显示该文件的绝对路径。
这解决了发现问题,这是代理工具中不太明显但更重要的问题之一。被告知"编辑这张图像"的代理需要弄清楚如何做。如果系统上有工具可以做到这一点,代理需要找到该工具、理解其接口并正确调用它。没有发现,代理只能搜索文档或猜测。
有了SKILL.md,代理可以运行which cli-anything-gimp找到它,然后读取技能文件来了解存在哪些命令、它们返回什么以及如何将它们链接在一起。
$ cli-anything-gimp
Welcome to CLI-Anything GIMP v1.2.0
SKILL.md: /usr/local/lib/python3.10/cli_anything/gimp/skills/SKILL.md
Type 'help' for commands, 'exit' to quit.
gimp>
代理读取SKILL.md,知道工具能做什么,就开始工作了。不需要单独的文档步骤,不需要网络查询。工具自带手册。
8、不足之处
演示结果看起来不错,但诚实的情况包括值得了解的差距。
生成的CLI依赖于目标应用程序已安装且可访问。cli-anything-blender调用Blender的Python API,这要求Blender已安装。没有Blender,就没有渲染。CLI是包装器,不是重新实现。
有些应用程序有Python API。有些有脚本接口。有些两者都没有。应用程序内部暴露得越好,生成的CLI就越完善。像Blender或LibreOffice这样支持无头模式的应用产生的CLI,比需要运行GUI才能做任何事的应用要强大得多。
七阶段流水线是代理驱动的,这意味着它继承了代理的局限性。如果编码代理误解了源代码或错过了API接口,CLI就会有差距。优化循环有帮助,但初始质量取决于代理理解可能庞大而复杂的代码库的能力。
性能是另一个问题。应用高斯模糊的cli-anything-gimp命令必须启动GIMP后端、加载图像、应用滤镜并序列化结果。对于一次性操作,没问题。对于批处理中的数千张图像,启动开销会累积。目前还没有持久服务器模式,添加这种模式将是一项重要的工程工作,因为它需要会话管理、连接池和当前架构没有考虑的清理逻辑。
还有正确性验证的问题。1,588个通过的测试是自生成的,这意味着编写CLI的同一AI也编写了测试。这不是毫无价值(测试确实运行真实的应用程序并检查真实输出),但这与由了解应用程序边缘情况的人编写的独立测试套件不同。如果代理误解了API调用的作用,它可能会编写验证错误行为的测试。
9、更大的图景
桌面应用自诞生以来就很难自动化。AppleScript在macOS上有效,但出了名的脆弱和冗长。COM自动化需要Windows和深入了解应用程序的对象模型。辅助功能API是为屏幕阅读器设计的,不是为驱动复杂工作流设计的。
CLI-Anything的方法(读取源代码、理解API、生成结构化CLI)是第一个不需要应用供应商配合就能扩展的方法。它之所以有效,是因为开源应用将其内部暴露为代码,而AI代理擅长阅读代码。
如果这种模式流行起来,"桌面应用程序"和"API"之间的界限就消失了。任何开源应用都变成了代理可以从shell脚本或流水线调用的东西,就像curl或ffmpeg一样。
这改变了专业人士的工作方式。它也为那些对基于GUI的工具收费的公司提出了难题——底层渲染引擎可以从终端免费调用。例如,Adobe花了多年时间围绕其Creative Cloud订阅建立护城河。如果像GIMP或Inkscape这样的开源替代品对代理来说变得像Photoshop或Illustrator一样容易访问,那么在任何人类不需要握鼠标的工作流中,专有GUI的价值主张就会被侵蚀。
10、试一试
# 在Claude Code中:
/plugin marketplace add HKUDS/CLI-Anything
/plugin install cli-anything
/cli-anything:cli-anything ./gimp
或手动方式:
git clone https://github.com/HKUDS/CLI-Anything.git
cd CLI-Anything
# 按照README中的平台特定设置操作
原文链接: CLI-Anything turns Photoshop into a terminal command. Blender too. And GIMP. And Zoom.
汇智网翻译整理,转载请标明出处