很多开发者第一次看到 CLI-Anything 时,会被 GIMP、Blender、LibreOffice 这些桌面软件的演示所吸引,进而产生一个自然的疑问:这个工具是不是只能用于桌面端 GUI 软件?如果我有一个 Web 服务、一套 REST API、或者一个本地运行的 AI 推理引擎,能不能也用它来生成 CLI?本文以第三人称视角,结合项目已有的 20 余个 Harness 实例,系统回答这些问题。


一、先看事实:已支持的软件远不止桌面端

打开 CLI-Anything 的 registry.json,会发现已注册的 23 个 CLI 覆盖了至少六种截然不同的软件形态:

软件形态 代表性 CLI 后端集成方式
桌面 GUI 应用 GIMP、Blender、Inkscape、Krita、Kdenlive、Shotcut、Audacity、MuseScore 子进程调用真实软件的 CLI/脚本接口
办公套件 LibreOffice libreoffice --headless 无头模式
本地 Web 服务 ComfyUI(AI 图像生成)、AdGuard Home(DNS 广告拦截) REST API 调用(HTTP 请求)
云端 REST API Zoom(视频会议)、AnyGen(AI 内容生成)、Novita(AI 模型推理) OAuth2/API Key 认证 + REST 调用
本地推理引擎 Ollama(本地 LLM) REST API 调用(localhost)
浏览器自动化 Browser(DOMShell) MCP 协议(Model Context Protocol)
云端 AI 服务 NotebookLM(Google 研究助手) 封装已有 CLI 工具
知识管理工具 幕布(Mubu) 本地数据文件解析
图表工具 Mermaid、Draw.io 文本格式生成 + 渲染器 URL/CLI

答案已经很明确:CLI-Anything 不是一个"桌面软件专用"工具。它的适用范围是"任何有代码库或可编程接口的软件"。


二、六种后端集成范式

通过分析这些已有的 Harness,可以归纳出六种后端集成范式。理解这些范式,就能判断自己的软件该如何接入。

范式一:子进程调用桌面软件

这是最初也是最直观的模式。CLI 生成合法的项目文件(ODF、MLT XML、SVG 等),然后通过子进程调用真实软件完成渲染和导出。

典型代表:

  • LibreOffice:libreoffice --headless --convert-to pdf
  • Blender:blender --background --python script.py
  • Inkscape:inkscape --actions="..." --export-filename=...
  • Kdenlive/Shotcut:melt project.mlt -consumer avformat:output.mp4
  • Audacity:sox 处理音频

适用场景:目标软件提供了命令行接口或脚本接口,可以在无 GUI 环境下运行。

范式二:REST API 调用本地服务

当目标软件以 Web 服务形式运行在本地时,CLI 通过 HTTP 请求与其交互。

典型代表:

  • ComfyUI:向 http://localhost:8188 发送工作流 JSON,轮询生成结果,下载图片。CLI 提供了 workflow loadqueue promptimages download 等命令。
  • Ollama:向 http://localhost:11434 发送推理请求。CLI 封装了 model listgenerate textembed text 等命令,支持流式输出。
  • AdGuard Home:通过 REST API 管理 DNS 过滤规则、客户端、DHCP、统计等。CLI 提供了 filter addclients liststats show 等命令。

适用场景:目标软件以 HTTP 服务形式运行,提供 REST API。

范式三:云端 REST API 调用

与本地服务类似,但目标是云端 API,需要处理认证(OAuth2、API Key)和网络延迟。

典型代表:

  • Zoom:通过 OAuth2 认证调用 Zoom REST API,管理会议、参会者、录制。CLI 提供了 auth setupmeeting createrecording download 等命令。
  • AnyGen:通过 API Key 调用 AnyGen 云端 API,生成文档、幻灯片、网站。CLI 提供了 task createtask polltask download 等命令,支持异步任务轮询。
  • Novita:通过 API Key 调用 OpenAI 兼容的 API 接口,访问 DeepSeek、GLM 等模型。CLI 提供了 chatstreammodels 等命令。

适用场景:目标软件以云端 API 形式提供服务。

范式四:MCP 协议集成

当目标软件提供 MCP(Model Context Protocol)服务器时,CLI 通过异步 MCP 客户端与其交互。

典型代表:

  • Browser(DOMShell):通过 MCP 协议与 Chrome 浏览器的无障碍树交互,将 DOM 映射为虚拟文件系统。CLI 提供了 page openfs lsact clickact type 等命令,支持 Daemon 模式复用连接。

适用场景:目标软件提供 MCP 服务器,或者希望通过 MCP 协议集成 AI 工具。

范式五:封装已有 CLI 工具

当目标软件已经有一个 CLI 工具但不够 Agent 友好时,可以在其上层封装一个统一的、支持 JSON 输出和 REPL 的 CLI。

典型代表:

  • NotebookLM:封装社区的 notebooklm-py CLI,添加 --json 输出、会话管理、命令分组等 Agent 友好特性。
  • MuseScore:封装 mscore CLI,提供转调、导出、乐器管理等结构化命令。

适用场景:目标软件已有 CLI 但缺乏结构化输出、会话管理等 Agent 所需特性。

范式六:本地数据文件解析

当目标软件的数据存储在本地文件中时,CLI 直接解析和操作这些文件。

典型代表:

  • 幕布(Mubu):解析幕布桌面端的本地数据文件和同步日志,提供知识管理和大纲操作的 CLI。

适用场景:目标软件的数据以文件形式存储在本地,可以直接读写。


三、判断自己的软件适不适合

基于以上六种范式,可以用一个简单的决策树来判断:

你的软件有可编程接口吗?
├── 有 CLI/脚本接口 → 范式一(子进程调用)
├── 有 REST API(本地) → 范式二(本地 REST)
├── 有 REST API(云端) → 范式三(云端 REST)
├── 有 MCP 服务器 → 范式四(MCP 协议)
├── 有已有 CLI 但不够好 → 范式五(封装增强)
├── 数据存储在本地文件 → 范式六(文件解析)
└── 以上都没有 → 需要先为软件创建可编程接口

换句话说,只要软件有某种形式的可编程接口——无论是命令行、REST API、MCP 协议、SDK 还是本地数据文件——CLI-Anything 就能为其生成 Agent 可用的 CLI。

唯一真正的限制是:如果软件只有 GUI,没有任何可编程接口,也没有可分析的源代码,那么 CLI-Anything 无法直接处理。但这种情况下,通常可以找到一个开源替代品来解决问题。


四、实操:如何为自己的软件生成 CLI

4.1 准备工作

需要准备的东西很简单:

  • Python 3.10+
  • 一个支持的 AI 编程工具(Claude Code、OpenCode、OpenClaw 等)
  • 目标软件的源代码(本地路径或 GitHub 仓库 URL)

4.2 一行命令生成

以 Claude Code 为例:

# 从本地源码生成
/cli-anything:cli-anything /path/to/your/software

# 从 GitHub 仓库生成
/cli-anything:cli-anything https://github.com/your-org/your-software

Agent 会自动执行 7 个阶段:代码分析 → 架构设计 → 实现 → 测试规划 → 测试编写 → 文档 → 发布。

4.3 安装和使用

# 安装到 PATH
cd your-software/agent-harness && pip install -e .

# 验证安装
which cli-anything-your-software

# 查看帮助
cli-anything-your-software --help

# JSON 模式供 Agent 消费
cli-anything-your-software --json <command>

# 进入交互式 REPL
cli-anything-your-software

4.4 迭代优化

单次生成不一定覆盖所有功能。使用 /refine 命令进行增量扩展:

# 全面差距分析
/cli-anything:refine /path/to/your/software

# 定向优化特定功能
/cli-anything:refine /path/to/your/software "我需要更多批处理和导出相关的命令"

每次 refine 都是增量的、非破坏性的,可以多次运行逐步扩大覆盖范围。

4.5 验证和测试

# 按照 HARNESS.md 标准验证
/cli-anything:validate /path/to/your/software

# 运行测试
/cli-anything:test /path/to/your/software

# 手动运行测试(推荐使用 force-installed 模式)
cd your-software/agent-harness
CLI_ANYTHING_FORCE_INSTALLED=1 python3 -m pytest cli_anything/your_software/tests/ -v -s

4.6 发布到社区

如果希望将生成的 CLI 分享给社区,需要:

  1. registry.json 中添加条目:
{
  "name": "your-software",
  "display_name": "Your Software",
  "version": "1.0.0",
  "description": "简短描述 CLI 的功能",
  "requires": "后端依赖(如 your-software 可执行文件)",
  "install_cmd": "pip install git+https://github.com/HKUDS/CLI-Anything.git#subdirectory=your-software/agent-harness",
  "entry_point": "cli-anything-your-software",
  "skill_md": "your-software/agent-harness/cli_anything/your_software/skills/SKILL.md",
  "category": "分类名"
}
  1. 向 CLI-Anything 仓库提交 PR,CLI-Hub 会自动更新。

五、不同场景的实操建议

场景一:我有一个内部 Web 后台管理系统

如果系统提供 REST API(大多数现代 Web 应用都有),可以直接用 CLI-Anything 生成 CLI。Agent 会分析 API 文档或源码,生成对应的命令分组。

建议:将 API 文档(OpenAPI/Swagger)放在源码目录中,Agent 分析时会自动参考。

场景二:我有一个 SaaS 产品,只有 API

完全适用。Zoom、AnyGen、Novita 都是这种模式。CLI 会封装认证流程(OAuth2/API Key)和 API 调用,提供结构化的命令和 JSON 输出。

建议:确保 API 文档或 SDK 源码可供 Agent 分析。

场景三:我有一个本地运行的 AI 模型服务

Ollama 和 ComfyUI 就是这种场景。CLI 会封装模型管理、推理请求、结果获取等操作。

建议:确保服务的 API 端点文档清晰,或者源码中有明确的路由定义。

场景四:我有一个 Electron 桌面应用

Electron 应用通常有 Node.js 后端,可能暴露了 IPC 接口或 CLI 参数。CLI-Anything 可以分析其源码并生成对应的 CLI。

建议:如果应用没有现成的 CLI 接口,可以先在应用中添加一个简单的命令行入口,再用 CLI-Anything 扩展。

场景五:我有一个开源项目,想让 AI Agent 能操控它

这正是 CLI-Anything 的核心场景。将源码路径或 GitHub URL 传给 /cli-anything,等待 7 阶段流水线完成即可。

建议:从 /cli-anything 开始,然后用 /refine 逐步扩展功能覆盖。

场景六:我的软件只有编译后的二进制文件

这是 CLI-Anything 的已知局限之一。/cli-anything 基于源码进行分析和生成,仅有二进制文件时,生成质量会显著下降。

建议:如果软件有 API 文档或 SDK,可以将文档作为"源码"提供给 Agent。如果完全没有可分析的材料,考虑找一个功能相近的开源替代品。


六、生成的 CLI 长什么样?

无论目标软件是什么形态,生成的 CLI 都遵循统一的结构和交互模式:

# 所有 CLI 都支持 --json 输出
cli-anything-your-software --json <command>

# 所有 CLI 都支持 --help 自描述
cli-anything-your-software --help

# 所有 CLI 都支持 REPL 交互模式
cli-anything-your-software

# 所有 CLI 都通过 pip install 安装到 PATH
pip install -e .
which cli-anything-your-software

命令分组会根据软件的领域自动设计。例如:

  • 对于视频会议软件(Zoom):authmeetingparticipantrecording
  • 对于 AI 图像生成(ComfyUI):workflowqueuemodelsimagessystem
  • 对于本地 LLM(Ollama):modelgenerateembedserversession
  • 对于 DNS 管理(AdGuard Home):configserverfilterblockingclientsstatslogrewritedhcp

每个 CLI 还附带 SKILL.md 文件,使 AI Agent 能够自动发现和理解工具的全部能力。


七、总结

CLI-Anything 的适用范围远超桌面端 GUI 软件。它的核心能力是"为任何有可编程接口的软件生成 Agent 原生的 CLI",已有的 23 个 Harness 覆盖了桌面应用、本地 Web 服务、云端 REST API、MCP 协议服务、已有 CLI 封装和本地数据文件解析六种形态。

对于开发者而言,关键不是"我的软件是不是桌面端的",而是"我的软件有没有某种形式的可编程接口"。只要有——无论是命令行、REST API、MCP、SDK 还是本地文件——CLI-Anything 就能为其生成一套结构化的、支持 JSON 输出的、带 REPL 交互的、附带完整测试的 Agent 可用 CLI。


项目地址:https://github.com/HKUDS/CLI-Anything
CLI-Hub:https://hkuds.github.io/CLI-Anything/
协议:Apache 2.0

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐