引言
"Making ALL Software Agent-Native."
这是"一天一个开源项目"系列的第104篇文章。今天带你了解的项目是 CLI-Anything。
同样来自香港大学 HKUDS 团队(上一次我们介绍了他们的 OpenHarness ),这次他们解决的是一个更基础但同样关键的问题:AI 代理怎么控制那些没有 API 的软件?
你的 AI 代理能调用 GitHub API、操作数据库、发送 HTTP 请求------但如果你让它打开 GIMP 处理一张图片呢?让它用 Blender 渲染一个 3D 场景?让它在 LibreOffice Calc 里生成一份报表?这些软件没有为 AI 设计的接口,它们只有 GUI。
CLI-Anything 的答案是:用 7 阶段自动化方法论,把任何软件包装成一个结构化的 CLI------输出确定性的 JSON,有完整的测试覆盖,带自动生成的 SKILL.md 让 AI 代理能"读懂"如何使用它。35.7k Stars、3.5k Forks,支持 80+ 应用,来自同一个团队的第二个重量级开源项目。
你将学到什么
- 7 阶段方法论(分析 → 设计 → 实现 → 测试规划 → 测试 → 文档 → 发布)的完整流程
- HARNESS.md 和 SKILL.md 的设计哲学------让 AI 代理能"读懂"任何软件
- CLI-Hub 包管理器如何构建可共享的 CLI 生态
- 为什么"确定性 CLI 输出"比"模拟 GUI 操作"更适合 AI 代理
- 如何在 Claude Code 中一条命令为 GIMP 或 Blender 生成完整的 CLI 封装
前置知识
- 了解命令行基础(什么是 CLI)
- 有 Python 环境(pip 安装)
- 使用过 Claude Code 或其他 AI 代理工具(有助于理解应用场景)
项目背景
项目简介
CLI-Anything 是一个让"所有软件变成 Agent 原生"的开源框架。它的核心能力是:给定任意一个桌面或 Web 应用的路径,自动分析其功能,生成一套结构化的 CLI 封装,让 AI 代理能像调用函数一样控制这个软件。
这与之前介绍的 UI-TARS-Desktop(第98篇,视觉感知 + 模拟鼠标操作)走的是截然不同的技术路线:
- UI-TARS 方式:看截图 → 判断点哪里 → 模拟鼠标点击(视觉理解,适应性强,但不确定性高)
- CLI-Anything 方式:分析软件 → 生成 CLI → JSON 输出(结构化,确定性,可测试)
两种方式各有适用场景,CLI-Anything 更适合需要可靠、可重复执行的自动化工作流。
作者/团队介绍
- 团队:HKUDS(香港大学数据科学实验室)
- 同一团队出品:OpenHarness(第96篇)------AI 代理基础设施框架
- 学术 + 工程:HKUDS 的项目一贯具备学术严谨性和工程实用性的双重特征
- 社区活跃度:有飞书和微信社区,贡献者通过 Issue 模板参与,每日更新 Changelog
项目数据
- ⭐ GitHub Stars: 35,700+
- 🍴 Forks: 3,500+
- 🧪 测试覆盖: 2,600+ 通过的测试用例(跨所有 Harness)
- 🔧 支持软件: 80+ 桌面/Web 应用
- 📄 License: Apache-2.0
- 🌐 仓库: HKUDS/CLI-Anything
主要功能
核心作用
CLI-Anything 做的事情可以用一句话概括:把"只有 GUI"的软件,变成 AI 代理能程序化调用的工具。
它解决了 AI 代理与传统软件之间的"最后一公里"问题:
objectivec
AI 代理的能力边界(没有 CLI-Anything):
✅ 调用 REST API
✅ 执行 SQL 查询
✅ 运行 Shell 命令
✅ 读写文件
❌ 控制 GIMP 处理图片
❌ 让 Blender 渲染场景
❌ 操作 LibreOffice 生成报表
❌ 调用 FreeCAD 的 CAD 功能
AI 代理的能力边界(有了 CLI-Anything):
以上全部 ✅
使用场景
-
创意软件自动化
- 让 AI 代理批量处理图片(GIMP 裁剪 + 调色 + 导出),一行命令完成本来需要手动操作几十次的工作。
-
3D 内容生产流水线
- AI 代理调用 Blender CLI,从脚本到渲染输出,整个 3D 内容生产流程全自动化。
-
文档批量生成
- LibreOffice 的 CLI 封装让 AI 代理能批量生成、填写、格式化办公文档。
-
游戏开发自动化
- Godot 引擎的 CLI 封装让 AI 代理参与游戏资产管理和构建流程。
-
专业领域工具接入
- FreeCAD(机械 CAD)、分子建模软件、GIS 地图工具------这些专业软件通过 CLI-Anything 都能被 AI 代理调用。
快速开始
在 Claude Code 中使用(最快路径):
bash
# 1. 安装插件
/plugin marketplace add HKUDS/CLI-Anything
/plugin install cli-anything
# 2. 为目标软件生成 CLI(以 GIMP 为例)
/cli-anything ./gimp
# CLI-Anything 自动执行 7 阶段流程,约 2-5 分钟后完成
# 生成的文件结构:
# gimp-harness/
# ├── gimp_cli.py ← 主 CLI 文件
# ├── HARNESS.md ← 详细使用指南
# ├── SKILL.md ← AI 代理可读的技能描述
# ├── TEST.md ← 测试计划和结果
# ├── tests/ ← 单元测试 + E2E 测试
# └── setup.py ← 安装配置
# 3. 生成后直接使用
gimp-cli image resize --input photo.jpg --width 800 --height 600 --output resized.jpg
gimp-cli image convert --input photo.png --format jpg --quality 85 --output photo.jpg
gimp-cli batch process --input-dir ./raw/ --output-dir ./processed/ --operations "resize,sharpen"
通过 CLI-Hub 包管理器安装现有 Harness:
bash
# 安装 CLI-Hub
pip install cli-anything-hub
# 查看可用的 Harness 列表
cli-hub list
# 安装特定软件的 Harness(已有社区贡献版本)
cli-hub install gimp
cli-hub install blender
cli-hub install libreoffice
cli-hub install godot
cli-hub install freecad
# 搜索
cli-hub search "3d modeling"
# 更新所有已安装的 Harness
cli-hub update --all
扩展已有 Harness(添加新功能):
bash
# 在 Claude Code 中扩展现有的 GIMP Harness
/cli-anything:refine ./gimp-harness "添加批量水印功能和 EXIF 数据处理"
在其他 AI 代理中使用:
bash
# Pi Coding Agent
bash .pi-extension/cli-anything/install.sh
# 然后:@cli-anything ./blender
# OpenCode
opencode cli-anything ./inkscape
# 手动 Python 开发模式
pip install cli-anything
python -m cli_anything generate ./target-app
核心特性(7 阶段方法论)
这是 CLI-Anything 的核心技术,一个把"软件"变成"CLI"的完整自动化流水线:
Phase 1 --- Analyze(分析)
makefile
输入: 目标软件路径 ./gimp
↓
自动扫描:
- 可执行文件结构
- 命令行参数(--help 输出)
- Python/脚本 API(如果有)
- 插件系统(如果有)
- 文档(man page、README)
↓
输出: 功能映射表(GUI 操作 → 可程序化的接口)
Phase 2 --- Design(设计)
makefile
输入: 功能映射表
↓
架构设计:
- 命令分组(gimp-cli image / gimp-cli batch / gimp-cli script)
- 状态模型(会话管理、REPL 模式)
- 输出格式(JSON 结构定义)
- 错误处理规范
↓
输出: CLI 架构设计文档
Phase 3 --- Implement(实现)
markdown
基于 Click 框架(Python)实现:
- 主 CLI 命令组
- 子命令和参数
- JSON 输出格式化
- REPL 交互模式(含 undo/redo)
- 会话状态管理
- 错误处理
Phase 4 --- Plan Tests(测试规划)
markdown
生成 TEST.md,包含:
- 单元测试策略(每个命令的参数边界)
- E2E 测试场景(完整工作流测试)
- 异常场景测试(无效输入、文件不存在等)
- 性能测试基线
Phase 5 --- Write Tests(编写测试)
bash
自动生成 pytest 测试套件:
- tests/unit/ ← 单元测试
- tests/e2e/ ← 端到端测试
- tests/fixtures/ ← 测试数据
目标: 100% 关键路径覆盖
Phase 6 --- Document(文档)
自动生成两种文档,服务两类受众:
yaml
HARNESS.md(面向人类):
- 完整的使用指南
- 所有命令和参数说明
- 示例工作流
- 故障排查指南
SKILL.md(面向 AI 代理):
---
name: gimp-cli
description: GIMP image manipulation CLI for AI agents
triggers:
- "process image"
- "resize photo"
- "batch images"
commands:
- name: image resize
description: Resize an image to specified dimensions
parameters:
- name: --input
type: file_path
required: true
- name: --width
type: integer
...
output_format: json
---
SKILL.md 是整个项目最有设计感的部分------它定义了一种让 AI 代理能自动发现和使用任何 CLI 工具的标准格式。
Phase 7 --- Publish(发布)
arduino
生成 setup.py → pip install -e . → 安装到系统 PATH
→ 工具立即可用: $ gimp-cli --help
→ 注册到 CLI-Hub(可选,便于社区共享)
支持的 80+ 应用(精选)
| 类别 | 代表应用 |
|---|---|
| 图像处理 | GIMP、Inkscape、Krita、ImageMagick |
| 3D 建模/渲染 | Blender、FreeCAD、OpenSCAD |
| 视频编辑 | Shotcut、OpenShot、Kdenlive |
| 音频处理 | Audacity、Ardour |
| 办公套件 | LibreOffice Writer/Calc/Impress |
| 游戏开发 | Godot Engine |
| 笔记/知识库 | Obsidian、Zotero |
| 科学计算 | Octave(MATLAB 兼容) |
| GIS 地图 | QGIS |
| 分子建模 | Avogadro、PyMOL |
| 区块链 | Ethereum 质押工具 |
项目优势
| 对比项 | CLI-Anything | 视觉 GUI 代理(UI-TARS) | 传统 RPA(UiPath) |
|---|---|---|---|
| 输出可靠性 | ✅ 确定性 JSON | ⚠️ 视觉判断,有不确定性 | ⚠️ 坐标依赖,脆弱 |
| 可测试性 | ✅ 完整测试套件 | ❌ 难以自动化测试 | ⚠️ 有限 |
| 速度 | ✅ 直接调用 CLI | ⚠️ 截图-思考-操作循环 | ⚠️ 模拟操作慢 |
| 对 API 的依赖 | 无需 API(包装 CLI) | 无需(视觉操控) | 无需(坐标操控) |
| 开源 | ✅ Apache-2.0 | ✅ | ❌ 商业软件 |
| 可复用性 | ✅ CLI-Hub 生态共享 | ❌ 任务相关 | ⚠️ 工作流相关 |
项目详细剖析
1. SKILL.md:AI 代理的软件使用说明书
这是 CLI-Anything 最有前瞻性的设计。传统软件只有给人看的文档(README、man page),而 SKILL.md 是专门给 AI 代理看的:
yaml
# 一个完整 SKILL.md 示例(Blender CLI)
---
name: blender-cli
version: 1.0.0
description: Blender 3D software CLI for AI agent automation
author: HKUDS/CLI-Anything
triggers:
- "render 3d scene"
- "create animation"
- "blender"
- "3d modeling"
commands:
render:
description: Render a Blender scene to image or animation
usage: blender-cli render --scene <file> --output <path> [options]
parameters:
- name: --scene
type: file_path
required: true
description: Path to .blend file
- name: --output
type: directory_path
required: true
description: Output directory for renders
- name: --frame-start
type: integer
default: 1
- name: --frame-end
type: integer
default: 1
- name: --engine
type: enum
values: [CYCLES, EEVEE, WORKBENCH]
default: EEVEE
output_format: json
example: |
blender-cli render --scene scene.blend --output ./renders
# Output: {"status": "success", "frames": 1, "output_path": "./renders/render0001.png"}
export:
description: Export 3D model to different formats
...
有了这种格式,AI 代理(如 Claude Code)在遇到"渲染这个 3D 场景"的需求时,可以直接加载对应的 SKILL.md,知道该调用什么命令、传什么参数、期望什么格式的输出------无需任何人工配置。
2. CLI-Hub:构建可共享的 CLI 生态
CLI-Anything 不只是一个生成工具,还包含一个包管理生态------CLI-Hub:
markdown
创建者: 为 GIMP 生成 Harness → 发布到 CLI-Hub
使用者: cli-hub install gimp → 一键安装 → AI 代理立即可用
这与 npm、pip、brew 的逻辑完全一致:
- 有人贡献高质量的 Harness
- 社区可以直接复用,不需要每个人重新生成
- 通过版本管理持续改进
这个设计让 CLI-Anything 从"单人使用的工具"变成了"社区共同维护的 AI 软件接口标准库"。
3. 与 HKUDS OpenHarness 的关系
这两个来自同一团队的项目形成了自然的技术栈:
objectivec
OpenHarness(第96篇)
← 代理运行时基础设施
← 工具调用引擎、记忆管理、权限治理
← 提供 "代理的骨架"
CLI-Anything(第104篇)
← 工具层扩展
← 把各种软件封装成 OpenHarness 可调用的工具
← 提供 "代理的手臂延伸"
组合使用:
OpenHarness 代理 → 通过 CLI-Anything 生成的 CLI → 控制 Blender/GIMP/LibreOffice
项目地址与资源
官方资源
- 🌟 GitHub : github.com/HKUDS/CLI-A...
- 📦 CLI-Hub 包管理器 :
pip install cli-anything-hub - 🤝 社区: 飞书 / 微信开发者社区(见 GitHub README)
- 🐛 贡献软件愿望清单: GitHub Issues wishlist 模板
适用人群
- AI 代理开发者:需要让代理控制没有 API 的桌面软件
- 自动化工程师:希望用程序化方式驱动图形软件(GIMP、Blender 等)
- 开源贡献者:为 CLI-Hub 贡献新软件的 Harness,扩展生态
- 企业自动化团队:需要把遗留图形软件接入现代 AI 工作流
总结与展望
核心要点回顾
- 7 阶段方法论:分析 → 设计 → 实现 → 测试规划 → 测试 → 文档 → 发布,完整的自动化 CLI 生成流水线
- SKILL.md:AI 代理的软件使用说明书,实现"代理自动发现和使用任何工具"的标准格式
- 80+ 软件支持:GIMP、Blender、LibreOffice、Godot、FreeCAD 等,横跨创意、办公、工程领域
- CLI-Hub 包管理:让 Harness 成为可共享的社区资产,而非重复劳动
- HKUDS 出品:35.7k Stars,与 OpenHarness 形成"代理基础设施 + 工具接口"的完整技术栈
一句话评价
CLI-Anything 做的事情极其务实但意义深远:它不等软件厂商为 AI 设计接口,而是自己动手,把整个现有软件生态变成 AI 代理的工具箱。
欢迎来我的个人主页找到更多有用的知识和有趣的产品