CLI-Anything 把任何 GUI 应用变成 CLI

王清欢2026-06-27人工智能Claude Code
cover

软件的默认用户是,所以有 GUI 应用都是通过鼠标键盘、动画、确认弹窗等方式与软件交互;但是 AI Agent 不需要这些交互方式,它需要的是命令行交互方式 Command Line Interface(CLI)

CLI-Anythingopen in new window 则是一个把任何人使用的 GUI 应用变成 CLI 的工具,他把造 Agent 需要的 CLI 过程自动化了,指着一个开源 repo 跑一条命令,通过代码扫码几分钟后就将 GUI 应用变成了 Agent 能够直接使用的 CLI

01 为什么需要把 GUI 应用 CLI 化

Claude Code 这种 Ai Agent 的"母语"事实上是通过 Bash Shell 执行的 CLI 脚本,例如 Claude Code 的 tool 使用模式几乎都通过 Bash 间接调用各种 CLI(gh / git / npm / python / jq / curl)

Claude Code 活在 terminal 里,CLI 也活在 terminal 里;所以,Agent 调一个 CLI,是它各种完成任务方式中开销最低、协议最简单的那条路:一次 Bash 调用,stdout/stderr 直接进入上下文,执行反馈就是状态机

直接把 GUI 应用包一层 CLI,相当于把这个软件翻译成 Agent 的母语,这样应用不再是一个需要自动化的对象,而是一个直接可调用的工具

人和 Agent 的输入输出不同:

  • 人是视觉+连续动作的用户:眼睛扫一遍应用 UI 拿信息,通过鼠标在二维平面上操作完成任务;所以 GUI 通常是顺着人的感官造的,输入框、按钮、下拉菜单、复选框、进度条、动画、确认弹窗等等

  • Agent 是文本+离散调用的用户:它的输入是一段 prompt,输出是一次命令执行脚本,并通过获取命令执行反馈来完成任务;它没有眼睛,没有鼠标轨迹,所以他们需要的是能够通过命令行调用的接口,而不是可交互的 GUI

当然,让 Agent 控制鼠标键盘直接操作 GUI 也是可行的,但是这样做的成本太高,每一步都是翻译损耗,而且操作准确度也难以保证

例如 Selenium、Playwright、AppleScript、PyAutoGUI、Browser-use 这些方案都是通过和 GUI 交互的方式来完成任务的,可能存在这些问题:

  • UI 改版之后交互方式需要重制
  • selector 漂移、控件 id 不稳定
  • 不同分辨率、不同主题、不同语言下行为不一致
  • Agent 难以调试自己的操作反馈,只能通过截图、日志等方式来判断

而直接通过 CLI 执行的成本完全不同:参数错了立刻报错、反馈输出是结构化文本、可以进行代码测试等等,工程负担会更轻量化

03 怎么实现 GUI 应用 CLI 化

CLI-Anything 把 GUI 应用 CLI 化的过程拆成 7 个阶段:

  1. 分析代码——绕开 GUI 的前端入口,直接找到软件的真后端
  2. 设计输出——把应用功能映射成命令组
  3. 命令实现——生成调用后端功能的 wrapper
  4. 计划测试——给每个命令规划测试矩阵
  5. 写测试——把测试用例写出来,强制必须调真后端
  6. 写文档——--help、README、SKILL.md 等使用使用手册和说明文档
  7. 发布——pip install 进 PATH,Agent 可以直接在 Bash Shell 中调用

这种 CLI 化和通用浏览器驱动方式的差别:

路径代表Agent 看到的接口适合不适合
驱动层(让 Agent 透过 GUI 操作)Playwright、webcli 等DOM / 像素 / accessibility treeSaaS、内网后台、不开源、无 API 的网站桌面 app、需要稳定语义的批处理
生成层(让 Agent 通过 CLI 直接调真后端)CLI-Anything原生 CLI开源软件、提供 API 的应用闭源 SaaS、纯渲染没 backend 的应用

事实上,这两种方式是互补的,开源软件天然能被 CLI-Anything 这种生成层方案改造成 Agent 工具,因为只要源码在,Agent 就能造出原生 CLI;而闭源应用 想通过 Agent 用,要么自己出 MCP server、要么自己出 OpenAPI,否则只能被驱动层 GUI-scrape 走

04 CLI-Anything 实践示例

我们通过 CLI-Anything 将开源的绘图工具 draw.ioopen in new window 生成出 Agent 能直接使用的 CLI

4.1 装 plugin

首先,需要给 Claude Code 装上 CLI-Anything 插件,在对话框里用 /plugin 斜杠命令按照:

/plugin marketplace add HKUDS/CLI-Anything
/plugin install cli-anything@cli-anything
/reload-plugins

/reload-plugins 之后就能看到 cli-anything 插件被 Claude Code 成功加载了

install cli-anything plugin

4.2 clone 目标仓库

CLI-Anything 是个代码分析器,它必须能读到目标软件的源码;所以第一步是把仓库 clone 到本地,也可以直接让 CC 自己去做:

cd ~/Workbench/github
git clone https://github.com/jgraph/drawio
clone drawio

4.3 使用 /cli-anything 生成 CLI

代码 clone 完成后,在 CC 对话框中使用 /cli-anything ,它会自动在 draw 源码目录下生成一个 agent-harness/ 目录,里面包含了所有生成的代码和测试用例:

/cli-anything ~/Workbench/github/drawio

Claude Code 会按 HARNESS.md 的 SOP 依次做:

  1. Phase 1 代码分析——识别后端引擎(draw.io 的 desktop 二进制支持 --export 渲染 PDF/PNG/SVG),扫 mxfile/mxGraphModel/mxCell XML schema
  2. Phase 2 架构设计——给出 9 个命令组(project / page / shape / edge / template / layout / export / session / repl),写 DRAWIO.md SOP
  3. Phase 3 实现——生成 core/utils/CLI 主入口(Click + REPL),实现 --json 输出和 auto-save
  4. Phase 4-5 测试——写 TEST.md 计划 + 23 个 core 单测 + 8 个 E2E 测试(含 PDF/PNG/SVG/HTML 的 magic bytes 校验)
  5. Phase 6 跑测试——31/31 全过
  6. Phase 6.5 SKILL.md——给 Agent 准备自描述的 skill 文件
  7. Phase 7 PyPI 打包——pip install -e .cli-anything-drawio 命令塞进 PATH

整条流水线跑下来大约 20 分钟,期间 Claude Code 会持续输出阶段状态

run cli-anything pipeline

4.4 CLI 生成完成

跑完后 which cli-anything-drawio 能在 ~/Library/Python/3.9/bin/ 下定位到新生成的 entry point,-V 显示 1.0.0

cli-anything-drawio installed

整个 harness 目录大概是这样的,所有产物都在 agent-harness/ 下:

drawio/Agent-harness/
├── DRAWIO.md              # per-software SOP
├── setup.py               # PyPI 打包
├── skills/cli-anything-drawio/SKILL.md
└── cli_anything/drawio/
    ├── drawio_cli.py      # Click + REPL 主入口
    ├── core/              # project / templates / layout / session
    ├── utils/             # drawio_backend.py (调真实 draw.io desktop) + repl_skin
    └── tests/             # TEST.md + test_core.py + test_full_e2e.py

4.5 测试 CLI

新 CLI 装好后,就可以直接在会话里给 Claude Code 提绘图需求了:

开始测试 Draw CLI 工具,画一个 Claude Code 实现架构图

它自己规划了 8 层结构(User / CLI / 5 路控制面 / Context Engine / Anthropic API / Tool Dispatcher / 6 个工具家族 / 6 个后端),然后调 cli-anything-drawioshape add / edge add 把节点和连线一条条加上,最后调 export render 让真正的 draw.io desktop 把它渲染成 PDF/PNG/SVG

claude code drives the new CLI

CLI 最终使用效果,虽然并不完美,但也能看出它的能力:

generated architecture diagram

05 什么时候需要 CLI 化

这套方法的甜区,是那些你自己既用 GUI、又希望 Agent 帮你批量做的软件:

  • 必须是开源的——CLI-Anything 要分析源码
  • 有清晰的 internal API / 后端可见——需要软件自己有 API 入口
  • GUI 操作可以拆成离散动作——比如 draw.io 的加节点、连线、布局这些操作都是是离散的
  • 日常重复做这件事——重复才有自动化的价值

这些场景 Agent 都很适合使用 CLI :

  • draw.io / mermaid / excalidraw——绘图工具
  • OBS Studio——切场景、录屏,运维和直播脚本
  • DBeaver / Beekeeper——数据查询
  • Postman / Insomnia——API 测试

但应用 CLI 化不是银弹,需要注意:

  • 生成的 CLI 质量取决于源码质量——耦合度高、文档差的项目,生成出来的 Agent 接口大概率也乱
  • 要 review 生成的代码—— CLI 是个 wrapper 层,可能调错 API、漏掉边界条件
  • 维护成本不为零——上游项目升级了内部 API,生成的 CLI 也要重跑

参考资料

CLI-Anything GitHubopen in new window

Chase AI - CLI-Anything Just Brought Claude Code Into The Futureopen in new window

最后更新时间 6/27/2026, 11:42:44 PM