3 天涨星 2000+,CLI-Anything 想把 GUI 软件补成 Agent 原生命令行

3 天涨星 2000+,CLI-Anything 想把 GUI 软件补成 Agent 原生命令行

这个仓库最该看的,不是 Agent 又能替你点几个按钮,而是它想把软件接口这件事往前推一层:不给 Agent 练 GUI,直接给软件补一层正式 CLI。

这和常见的 Agent shell wrapper 不是一回事。普通 wrapper,大多是把现成命令、现成 API 再包一层;CLI-Anything 想做的是另一件更靠前的事:原软件没有一套像样的 Agent 接口,它就按固定流水线给你补出来。

项目卡片

  • 项目名:CLI-Anything
  • GitHubhttps://github.com/HKUDS/CLI-Anything
  • 涨星速度:3 天 2000+
  • 一句话判断:它不是给 Agent 再包一层壳,而是在批量生产“软件 → 正式 CLI”这层接口。

CLI-Anything 官方项目图

官方 teaser 其实已经把定位说透了:核心不是让 Agent 去学 GUI,而是把软件产出成它能稳定调用的命令行工具。

先把它的定位说死

如果只看标题,你很容易把它理解成“又一个 Agent 工具箱”。但仓库里的证据不是这么写的。

第一,README 的入口非常明确:先把它作为 Claude Code 插件市场接进去,再执行 /cli-anything <software-path-or-repo>。这说明它首先是一个CLI harness 生成器,不是一个已经写好的通用软件控制器。

第二,cli-anything-plugin/commands/cli-anything.md 写得很硬:输入必须是本地源码路径或 GitHub 仓库 URL,因为它要先读代码、分析后端、映射 GUI 动作,再设计命令组、实现 CLI、补测试、最后装进 PATH。它要吃的是代码库,不是截图,不是按钮坐标。

第三,HARNESS.md 反复强调一条底线:不要重写软件本身,必须调用真实后端。 文档里直接给了后端例子:

  • LibreOffice 走 libreoffice --headless --convert-to
  • Blender 走 blender --background --python
  • GIMP 走 gimp -i -b
  • Inkscape 走 inkscape --actions
  • Shotcut / Kdenlive 走 melt
  • OBS 走 obs-websocket

所以它和常见几种东西都不一样:

  • 不是 GUI Agent:它不押注截图点击。
  • 不是普通 shell 包装器:它要先把缺失的 CLI 层造出来。
  • 不是“Python 山寨版软件”:官方写得很明确,CLI 必须接真实后端,不准把 GIMP、Blender 重新实现一遍。

一句话说透:它真正想补的,是软件到 Agent 之间那层长期缺位的“正式接口”。

它最值得看的地方,是把这件事做成了流水线

这仓库最有野心的地方,不是口号里的 “ALL Software”,而是它真把方法拆成了固定阶段。

README 首页给的是 7 步:分析、设计、实现、测试规划、测试实现、测试文档、发布。commands/cli-anything.md 里也把输出结构写得很细:agent-harness/setup.pycli_anything/<software>/tests/TEST.mdtest_core.pytest_full_e2e.py,最后再把命令注册成 cli-anything-<software>

这就不是“帮你生成一份脚手架”了,而是在逼 Agent 交付一个像样的软件接口层:

  • 要有 Click CLI
  • 要有 REPL
  • 要有 --json 输出
  • 要有 undo/redo 和状态管理
  • 要有 真实后端 E2E 测试
  • 要能 pip install -e . 后直接进 PATH

你去看现成 harness 目录,味道会更明显。比如 gimp/agent-harness/setup.py 里已经把 entry point 定成了 cli-anything-gimp;GIMP CLI 代码里默认支持 --json,主命令没有子命令时直接进 REPL,session undo / session redo 也不是 PPT 上的词,源码和测试里都在。

把 GUI 软件接成 Agent CLI 的架构图

这个项目真正的门槛,不在一个命令,而在这条 7 阶段流水线够不够工程化。

它和普通 Agent wrapper 的差别,到底在哪

普通 Agent wrapper 的前提通常是:软件本来已经有 CLI、HTTP API 或 SDK,你只是换个更顺手的入口。

CLI-Anything 处理的是另一类问题:软件功能很强,但接口形态不适合 Agent 长期调用。 这时候它不是再包一层,而是补三样真正关键的东西:

1. 把 GUI 动作翻成命令组

不是“会点哪里”,而是把操作重写成 projectlayerexporttimeline 这种稳定命令域。

2. 把返回结果翻成结构化输出

README 和 HARNESS 都把 --json 放在高优先级位置,因为 Agent 真正在乎的不是终端里好不好看,而是结果能不能继续被下一步消费。

3. 把一次性演示翻成可安装、可测试、可复用的工具

这点尤其关键。setup.pyconsole_scripts、subprocess 测试、PATH 校验这些东西,看起来不性感,但它们才是“能不能接进生产流”的分水岭。

所以你可以把它理解成:别再训练 Agent 忍受 GUI 了,干脆把软件改造成 Agent 更擅长调用的形状。

最短上手闭环,仓库里真正靠谱的是这条

如果你只是想快速理解它,不用把 README 全读完,按下面这条走就够了。

第一步:把插件接进 Claude Code

/plugin marketplace add HKUDS/CLI-Anything
/plugin install cli-anything

.claude-plugin/marketplace.json 也能对上:这个仓库本身就是一个插件市场入口,不是一堆散脚本。

第二步:给它一个真实路径或仓库 URL

这里有个细节值得你注意:README 的 Quick Start 某些地方写过 /cli-anything gimp 这种示例,但命令文档里写得更严格,稳妥做法是始终传本地路径或 GitHub URL,比如:

/cli-anything ./gimp
# 或
/cli-anything https://github.com/GNOME/gimp

原因很简单:它要读代码,不是猜软件名。

第三步:把生成出来的 CLI 装进 PATH

cd gimp/agent-harness
pip install -e .
which cli-anything-gimp
cli-anything-gimp --help