快速摘要:CLI-Anything 是香港大学数据智能实验室(HKUDS)开源的一个项目,它的核心能力是:只需一条命令,就能把任何拥有源码的软件自动转化为 AI Agent 可以直接调用的命令行工具。 简单来说,GIMP、Blender、LibreOffice、OBS 这些原本只能通过图形界面操作的重量级专业软件,经过 CLI-Anything 处理后,AI Agent 就能像使用终端命令一样驱动它们完成真实的专业任务——编辑图片、渲染3D场景、生成PDF文档、处理音视频,全部通过命令行搞定,不再需要脆弱的截图点击式自动化。项目已在 GitHub 开源,采用 MIT 协议,开源即获得大量关注。 如果你对 AI Agent 开发、自动化工作流、或专业软件的程序化调用感兴趣,往下看有更详细的原理拆解和实操教程。
一、为什么我们需要 CLI-Anything?从 AI Agent 的「工具困境」说起
莫潇羽@源码七号站 在持续跟踪 AI Agent 生态发展的过程中,发现了一个非常明显的趋势:越来越多的开发者和团队开始把复杂任务交给 AI Agent 去执行,而这些 Agent 在选择工具时,绝大多数都倾向于使用命令行界面(CLI)——而不是图形界面(GUI)。
这个趋势在编码领域尤为突出。Claude Code 作为 Anthropic 推出的终端编码工具,已经成为众多 AI 编码 Agent 的首选。原因很简单:CLI 天然适合 AI Agent 的工作方式。文本命令与大语言模型的输入输出格式完美匹配,命令可以组合串联形成复杂工作流,--help 标志提供自动文档让 Agent 自主发现功能,JSON 格式输出让 Agent 可以直接解析结构化数据,而确定性的命令执行让 Agent 的行为可预测、可复现。
但问题来了:真正的专业软件世界,绝大多数工具是没有完善 CLI 的。
想想看,GIMP(图像编辑)、Blender(3D建模与渲染)、LibreOffice(办公套件)、Audacity(音频处理)、OBS Studio(直播推流)、Inkscape(矢量绘图)、Kdenlive 和 Shotcut(视频编辑)……这些都是各自领域的重量级开源软件,功能强大且成熟,但它们几乎清一色都是为人类用户设计的图形界面软件。AI Agent 根本没有一个好用的接口去驱动它们。
现有方案的痛点
在 CLI-Anything 出现之前,让 AI Agent 操作这些图形界面软件主要有几种思路,但都存在明显缺陷。
第一种是 GUI Agent 方案,也就是通过截图识别界面、模拟鼠标点击来操作。这种方案最大的问题在于极其脆弱——截图识别存在不确定性,UI 元素位置一变就失效,操作延迟大,分辨率和系统主题变化都可能导致失败。稍有开发经验的人都知道,基于像素坐标的 RPA(机器人流程自动化)是自动化领域公认最不稳定的方案之一。
第二种是调用软件本身提供的有限 API。但大多数桌面软件的 API 要么不存在、要么极不完善、要么文档匮乏。即使存在 API,往往也是为插件开发者设计的,接口复杂、缺乏一致性,Agent 需要大量的上下文知识才能正确调用。
第三种是自己从头开发命令行包装器。这条路技术上可行,但工作量巨大——需要深入理解目标软件的内部架构,手工映射每个功能到命令行接口,编写测试,维护文档。对于一个大型软件来说,这往往需要数周甚至数月的工作量。
正是看到了这些痛点,香港大学数据智能实验室(HKUDS)团队提出了 CLI-Anything 方案——用自动化的方式,一条命令就完成整个 CLI 生成流程,让任意软件都能变成 Agent 原生工具。
二、CLI-Anything 是什么?项目定位与核心理念
CLI-Anything 的全称已经很好地说明了它的定位:Making ALL Software Agent-Native(让所有软件变成 Agent 原生的)。项目的 slogan 同样直白:"今天的软件为人而生,明天的用户是 Agent。"
从技术定位来看,CLI-Anything 并不是一个简单的命令行包装器(wrapper),也不是某个具体软件的替代品。它是一套完整的方法论和工具链,核心目标是在 AI Agent 和真实专业软件之间建立一座桥梁——而这座桥梁,就是 CLI。
莫潇羽@源码七号站 认为,理解 CLI-Anything 的关键在于抓住以下几个核心理念:
不是替代,而是增强。 CLI-Anything 生成的命令行工具不是对原始软件的简化模拟,而是真正调用了原始软件的后端来执行操作。比如,用生成的 LibreOffice CLI 导出 PDF 时,底层确实是调用 LibreOffice 的无头模式(headless mode)来渲染的;用 Blender CLI 渲染 3D 场景时,底层确实是调用 Blender 的 Python 脚本引擎(bpy)来执行的。功能不打折扣,只是换了一个 Agent 友好的交互方式。
CLI 是通用语言。 项目团队的理论基础是,命令行界面是人类和 AI Agent 之间最好的通用接口。CLI 的特性天然适合 Agent 消费:结构化、可组合、轻量级、自描述、跨平台、确定性。
自动化到极致。 从分析源代码、设计命令架构、实现CLI代码、编写测试、生成文档到发布安装包,整个七阶段流水线完全由 AI 自动完成,人类只需要等待结果。
生产级质量。 这不是一个概念验证(PoC)项目,而是经过了严格的多层测试验证。团队在 8 个大型开源软件上完成了 1298 个测试,全部通过,包括单元测试、端到端测试和真实软件调用验证。
三、深入理解原理:七阶段自动化流水线是怎么工作的?
CLI-Anything 的核心技术在于它的七阶段自动化流水线。这套流水线以 Claude Code 插件的形式运行,当你执行 /cli-anything ./gimp 这样的命令时,实际上触发了一个高度自动化的多步骤工程过程。下面,莫潇羽@源码七号站 为大家逐阶段详细拆解每一步到底在做什么。
阶段一:分析(Analyze)
这是整个流程的起点。在这个阶段,系统会对目标软件的源代码库进行全面扫描和分析。具体来说,它会完成以下工作:
识别软件的架构模式、模块组织方式和核心功能模块。系统需要搞清楚软件的哪些功能是面向用户的核心操作,哪些是内部辅助逻辑。
将 GUI 操作映射到底层 API。一个桌面软件的图形界面操作,背后通常对应着一组可编程的 API 调用。比如在 GIMP 中"新建图层"这个 GUI 操作,底层对应的是特定的函数调用。分析阶段的任务就是找到这些映射关系。
识别软件的输入输出格式。不同软件使用不同的项目文件格式——LibreOffice 使用 ODF(开放文档格式)、Blender 使用自己的 .blend 格式、Kdenlive 使用 MLT XML 格式、Inkscape 使用 SVG 格式。理解这些格式是后续生成可靠 CLI 的基础。
确定可用的命令行后端。很多软件虽然主要提供图形界面,但也支持一定程度的命令行调用。比如 LibreOffice 支持 --headless 模式进行文档转换,Blender 支持 --background 模式进行批量渲染。分析阶段需要发现和利用这些已有的命令行能力。
阶段二:设计(Design)
基于分析结果,系统进入架构设计阶段。这是一个至关重要的步骤,因为 CLI 的设计质量直接决定了 Agent 使用它的效率和可靠性。
在这个阶段,系统会完成命令组的架构设计。一个专业软件往往拥有数十甚至上百个功能,不可能把它们全部铺展成一级命令。好的 CLI 设计需要合理的命令层次结构,比如 cli-anything-gimp project new 用于创建项目、cli-anything-gimp layer add 用于添加图层、cli-anything-gimp filter apply 用于应用滤镜,这种层次化的组织让命令直觉、易发现。
同时还要设计状态模型。许多专业软件的操作是有状态的——你打开一个项目文件,在上面进行一系列编辑,然后保存。CLI 需要支持这种有状态的工作流,让 Agent 能够在一个会话中持续操作同一个项目。
输出格式的设计也在这个阶段确定。每个命令都需要支持两种输出模式:一种是 JSON 格式的机器可读输出,供 Agent 直接解析;另一种是人类可读的格式化输出,方便调试和人工检查。这种双模设计是 Agent 原生工具的标志性特征。
阶段三:实现(Implement)
这是工作量最大的阶段。基于设计方案,系统自动生成完整的 CLI 实现代码。CLI-Anything 使用 Python 的 Click 库作为命令行框架(这是 Python 生态中最成熟的 CLI 框架之一),生成的代码包含以下关键组件:
完整的命令树实现。 每个命令组和子命令都有清晰的参数定义、帮助文档和验证逻辑。
REPL 交互模式。 REPL(Read-Eval-Print Loop)是一种交互式的命令行模式,用户(或 Agent)可以在一个持续运行的会话中逐条输入命令并立即看到结果。这对于需要多步操作的工作流特别重要。所有生成的 CLI 都共享一个统一的 REPL 界面(通过 repl_skin.py 实现),提供品牌横幅、样式化提示符、命令历史和进度指示器。
JSON 输出支持。 通过内置的 --json 标志,每个命令都可以输出结构化的 JSON 数据。Agent 不需要解析文本,直接读取 JSON 就能获取所有信息。
撤销/重做功能。 专业软件的操作往往需要支持撤销,CLI 也不例外。生成的 CLI 内置了操作历史和撤销/重做机制,让 Agent 可以安全地尝试和回退。
真实软件后端调用。 这是 CLI-Anything 区别于玩具项目的关键。生成的代码包含了对真实软件的调用逻辑,确保操作结果是真实的而非模拟的。
阶段四:规划测试(Plan Tests)
在代码实现完成后,系统不是直接跳到测试编写,而是先创建一份详细的测试计划文档(TEST.md)。这份文档明确列出了需要测试的所有功能点、测试类型(单元测试还是端到端测试)、预期行为、边界条件和已知限制。
这个设计哲学是:先规划再行动。有了清晰的测试计划,后续的测试编写才能系统全面,不会遗漏关键场景。
阶段五:编写测试(Write Tests)
基于测试计划,系统自动实现完整的测试套件。测试分为多个层级:
单元测试使用合成数据(synthetic data)验证每个核心函数的正确性。比如测试项目创建功能是否正确初始化了所有字段、图层操作是否正确修改了数据结构、滤镜参数是否被正确传递。
端到端测试(E2E)验证完整的工作流程。比如测试从创建项目到添加内容再到导出输出的全流程,检查生成的文件格式是否合法(ODF ZIP 结构是否正确、MLT XML 是否格式良好、SVG 是否符合规范)。
CLI 子进程测试验证安装后的命令行工具是否可以正确发现和执行。这一层测试确保 pip install -e . 之后,Agent 真的可以通过 which cli-anything-gimp 找到工具并正常使用。
阶段六:文档更新(Document)
测试完成后,系统自动更新 TEST.md 文档,记录所有测试结果,包括通过的测试数量、失败的测试(如果有的话)和相关说明。这份文档既是质量保证的证明,也是后续维护和贡献者了解项目状态的重要参考。
阶段七:发布(Publish)
最后一个阶段是将生成的 CLI 打包为可安装的 Python 包。系统自动创建 setup.py 配置文件,定义包的元数据、依赖关系和入口点(entry points),然后通过 pip install -e . 将工具安装到系统 PATH 中。安装完成后,Agent 可以从任何位置直接调用 cli-anything-<软件名> 来使用。
这七个阶段从头到尾完全自动化,用户只需要提供目标软件的代码库路径(或 GitHub 仓库地址),然后等待流水线完成即可。对于大型软件,整个流程可能需要一些时间,但产出的是一套完整的、经过测试的、可以直接使用的生产级 CLI。
四、CLI-Anything 架构深度剖析:它为什么可靠?
理解了七阶段流水线之后,我们再来看看 CLI-Anything 在架构层面做了哪些关键设计来保证可靠性。这部分内容对于想要深入使用或者基于它进行二次开发的读者尤为重要。
真实软件后端集成:零妥协的设计哲学
CLI-Anything 最核心的设计原则之一是「零妥协的真实集成」。什么意思呢?就是说,生成的 CLI 不会因为某个操作难以通过命令行实现就选择跳过或简化——如果后端软件没有正确安装,测试会直接失败(fail),而不是跳过(skip)。
这是一个非常重要的设计决策。很多工具在面对依赖缺失时选择优雅降级(graceful degradation),但 CLI-Anything 明确拒绝这种做法。它的理由是:Agent 需要的是确定性——一个命令要么正确执行,要么明确报错,不能出现"看起来成功了但其实没有真正渲染"的情况。
来看一些具体的后端集成方式:
GIMP 的 CLI 使用 Pillow 库处理图像数据,同时通过 GEGL/Script-Fu 调用 GIMP 的高级图像处理能力。Blender 的 CLI 使用 bpy(Blender 的 Python 脚本接口)在后台模式下执行 3D 操作。LibreOffice 的 CLI 生成标准的 ODF 文件格式,然后调用 LibreOffice 的无头模式进行渲染和格式转换。Audacity 的 CLI 使用 Python 的 wave 模块和 sox 工具来处理音频。OBS Studio 的 CLI 生成 JSON 场景配置文件,通过 obs-websocket 接口与 OBS 通信。Kdenlive 和 Shotcut 的 CLI 直接操作 MLT XML 项目文件,调用 melt 渲染器来输出视频。Inkscape 的 CLI 直接操作 SVG/XML 文件来实现矢量图形编辑。
双模输出:兼顾 Agent 和人类
每个生成的 CLI 都支持两种工作模式,这在实际使用中非常方便。
第一种是有状态的 REPL 交互模式。运行裸命令(比如直接输入 cli-anything-blender)就会进入这种模式。在 REPL 中,系统维护着一个持续的会话状态——你创建了一个项目,后续的所有操作都在这个项目上进行,不需要每次都指定项目路径。这种模式特别适合 Agent 进行多步骤的交互式操作。
第二种是子命令的脚本模式。直接通过完整的命令行参数来执行单个操作,比如 cli-anything-gimp project new --width 1920 --height 1080 -o poster.json。这种模式适合在 shell 脚本或自动化流水线中使用,每个命令都是独立的、幂等的。
两种模式下都支持 --json 标志。加上这个标志,输出就是结构化的 JSON 数据;不加的话,输出是格式化的、带颜色的人类可读文本。这种设计让开发者调试时可以看到友好的文本输出,而 Agent 在实际执行时则获取精确的 JSON 数据。
统一的包架构
所有生成的 CLI 都组织在 cli_anything.* 命名空间下,遵循统一的命名规范:cli-anything-gimp、cli-anything-blender、cli-anything-libreoffice 等。这种一致性让 Agent 可以轻松发现和管理已安装的工具——只需要用 which 命令就能检查工具是否存在,用 --help 就能了解工具的全部功能。
包的安装也极其简单。进入生成的 agent-harness 目录,执行 pip install -e . 就完成了。不需要额外的配置、不需要包装脚本、不需要修改环境变量。
五、手把手实操教程:从零开始使用 CLI-Anything
这一部分,莫潇羽@源码七号站 带大家从零开始,一步步上手 CLI-Anything。无论你是 AI Agent 开发者、自动化脚本爱好者,还是对开源项目感兴趣的技术小白,都能跟着操作起来。
环境准备
在开始之前,你需要确保你的开发环境满足以下条件:
安装了 Claude Code 并且支持插件功能。Claude Code 是 Anthropic 推出的一款终端 AI 编码工具,它是 CLI-Anything 当前的运行载体。
Python 版本不低于 3.10。CLI-Anything 生成的所有 CLI 工具都是基于 Python 的,依赖 Click 8.0 以上版本等库。
目标软件已安装在你的系统上。这一点很重要——CLI-Anything 生成的是一个调用接口,而不是替代品。如果你想为 GIMP 生成 CLI,你的电脑上必须装有 GIMP;想为 Blender 生成 CLI,就必须装有 Blender。
第一步:添加 CLI-Anything 插件市场
CLI-Anything 作为 Claude Code 的插件进行分发。首先你需要将 HKUDS 的插件市场添加到 Claude Code 中:
/plugin marketplace add HKUDS/CLI-Anything
这条命令告诉 Claude Code 去 GitHub 上的 HKUDS/CLI-Anything 仓库获取插件信息。
第二步:安装 CLI-Anything 插件
/plugin install cli-anything
安装完成后,/cli-anything 命令就在你的 Claude Code 会话中可用了。
如果你不想使用市场安装方式,也可以手动安装。具体做法是将仓库克隆到本地,然后把插件目录复制到 Claude Code 的插件路径下:
# 克隆仓库
git clone https://github.com/HKUDS/CLI-Anything.git
# 复制插件到 Claude Code 插件目录
cp -r CLI-Anything/cli-anything-plugin ~/.claude/plugins/cli-anything
# 在 Claude Code 中重新加载插件
/reload-plugins
第三步:为目标软件生成 CLI
这是最关键的一步。假设你想为 GIMP 生成命令行工具,只需要执行:
/cli-anything ./gimp
这里的 ./gimp 是 GIMP 源代码库的本地路径。如果你没有在本地克隆源码,也可以直接提供 GitHub 仓库地址:
/cli-anything https://github.com/GNOME/gimp
执行后,系统会自动走完前面介绍的七阶段流水线:分析 → 设计 → 实现 → 规划测试 → 编写测试 → 文档 → 发布。整个过程完全自动化,你只需要等待完成即可。
类似地,为其他软件生成 CLI 的方法完全一致:
# 为 Blender 生成 CLI
/cli-anything ./blender
# 为 LibreOffice 生成 CLI
/cli-anything ./libreoffice
# 为 Audacity 生成 CLI
/cli-anything ./audacity
# 为 Inkscape 生成 CLI
/cli-anything ./inkscape
第四步:安装和使用生成的 CLI
生成完成后,进入输出目录并安装:
# 安装
cd gimp/agent-harness && pip install -e .
# 验证安装
which cli-anything-gimp
# 查看帮助
cli-anything-gimp --help
安装成功后,你就可以在终端中任意位置使用这个工具了。
实战示例一:用 CLI 操作 GIMP 创建海报
# 创建一个新项目
cli-anything-gimp project new --width 1920 --height 1080 -o poster.json
# ✓ Created project: poster.json
# 添加一个纯色背景图层
cli-anything-gimp --json layer add -n "Background" --type solid --color "#1a1a2e"
# 输出 JSON 格式的图层信息
# 添加文字图层
cli-anything-gimp layer add -n "Title" --type text --content "Hello Agent"
# 导出最终图像
cli-anything-gimp export render output.png --overwrite
# ✓ Exported: output.png
这个示例展示了一个典型的工作流:创建项目 → 添加图层 → 导出结果。每一步都是一个清晰的命令,Agent 可以按序执行,也可以根据中间结果动态调整后续步骤。
实战示例二:用 CLI 操作 LibreOffice 生成 PDF 报告
这是一个在办公自动化场景中非常实用的示例:
# 创建一个新的 Writer 文档
cli-anything-libreoffice document new -o report.json --type writer
# ✓ Created Writer document: report.json
# 添加标题
cli-anything-libreoffice --project report.json writer add-heading -t "Q1 Report" --level 1
# ✓ Added heading: "Q1 Report"
# 添加一个数据表格
cli-anything-libreoffice --project report.json writer add-table --rows 4 --cols 3
# ✓ Added 4×3 table
# 通过 LibreOffice 无头模式导出真实的 PDF 文件
cli-anything-libreoffice --project report.json export render output.pdf -p pdf --overwrite
# ✓ Exported: output.pdf (42,831 bytes) via libreoffice-headless
# 用 JSON 模式查看文档信息,供 Agent 消费
cli-anything-libreoffice --json document info --project report.json
最后那条命令的输出是这样的 JSON 数据:
{
"name": "Q1 Report",
"type": "writer",
"pages": 1,
"elements": 2,
"modified": true
}
注意最后的 export 命令——它并不是自己生成 PDF,而是调用了真正的 LibreOffice 无头模式来做转换。输出的是一个真实的、完全合规的 PDF 文件,不是简化版本。
实战示例三:用 REPL 模式操作 Blender 进行 3D 渲染
REPL 模式特别适合需要多步操作的场景。直接执行裸命令进入交互模式:
$ cli-anything-blender
╔══════════════════════════════════════════╗
║ cli-anything-blender v1.0.0 ║
║ Blender CLI for AI Agents ║
╚══════════════════════════════════════════╝
blender> scene new --name ProductShot
✓ Created scene: ProductShot
blender[ProductShot]> object add-mesh --type cube --location 0 0 1
✓ Added mesh: Cube at (0, 0, 1)
blender[ProductShot]*> render execute --output render.png --engine CYCLES
✓ Rendered: render.png (1920×1080, 2.3 MB) v