
当 AI Agent 还在拼命学习"看截图、找按钮、点鼠标"时,有人提出了一个灵魂拷问:为什么不让软件直接说人话?
2026 年 6 月,香港大学数据科学实验室(HKUDS)的研究团队在 arXiv 上发布了一篇题为 “CLI-Anything: Towards Agent-Native Computer Use” 的技术报告(arXiv:2606.03854),同期在 GitHub 上开源了同名项目。该项目迅速获得社区广泛关注,成为 Agent 领域现象级的开源项目。【需核实:发布前请检查 GitHub 当前 Stars 数并更新】
项目地址:https://github.com/HKUDS/CLI-Anything
论文地址:https://arxiv.org/abs/2606.03854
项目作者为 Yuhao Yang、Tianyu Fan、Chao Huang(均来自香港大学)。他们在论文中提出了一个极具冲击力的核心观点:
“GUI-centric paradigm fundamentally misaligns with agent capabilities.” (以 GUI 为中心的设计范式从根本上与 Agent 的能力不匹配。)
翻译成大白话就是:让 AI 像人一样看屏幕、找按钮、点鼠标,这事儿可能从一开始就搞错了方向。
CLI-Anything 的核心理念是 Agent-Native(Agent 原生)——与其强迫 Agent 模仿人类的视觉交互方式,不如为 Agent 重新设计一套它天生就擅长的交互接口:结构化的命令行、确定性的反馈、机器可读的输出格式。
让我们先看看目前主流的 Computer Use 方案是怎么工作的。
AI → 截图 → 识别按钮 → 计算坐标 → 模拟鼠标点击 → 再次截图 → 判断结果这个过程听起来很"智能",但实际运行中充满了脆弱性:
问题 | 表现 |
|---|---|
布局敏感 | 页面稍微调整 CSS,按钮位置变了,模型就找不到了 |
速度慢 | 每次操作都要截图 + 视觉识别,动辄数秒 |
成本高 | 视觉模型(尤其是多模态大模型)的 API 调用成本远高于纯文本模型 |
容易失效 | 弹窗、加载动画、异步渲染随时打断流程 |
无状态 | 每次截图都是"盲人摸象",没有结构化的上下文可追溯 |
调试困难 | 出错后难以复现,无法像代码一样调试 |
正如论文中指出的:
“GUI agents struggle with brittle pixel-level interactions, timing dependencies, and coordinate-based actions that break with interface changes.” (GUI Agent 受困于脆弱的像素级交互、时序依赖和基于坐标的操作,界面一变化就失效。)
Paper term | Repository location | Role in the system |
|---|---|---|
Harness-generation SOP | cli-anything-plugin/HARNESS.md | 将 GUI 应用提升为有状态 CLI 的方法论 |
Shared REPL shell | cli-anything-plugin/repl_skin.py | 注入所有生成 harness 的统一终端交互层 |
Generated harness | <software>/agent-harness/ | 为单个应用生成的独立 Python 包 |
CLI-Hub installer | cli-hub/cli_hub/installer.py | 统一 pip、npm、uv 等安装路径 |
(表来源:arXiv:2606.03854, Table 1: Repository map)
本质上,GUI Agent 是在让 AI 模仿人类的感知局限,而不是发挥 AI 在结构化数据处理和程序化控制上的计算优势。这就好比让一个数学家通过数手指头来做微积分——不是不行,但显然是错配。
CLI-Anything 的解决方案直截了当:把所有软件"CLI 化"——给每个应用生成一套 Agent 可以直接调用的命令行接口。
维度 | 传统 GUI Agent | CLI-Anything |
|---|---|---|
交互方式 | 截图 → 识别 → 点击 | 结构化命令 → 确定性反馈 |
输出格式 | 像素(需要二次解析) | JSON(机器可直接消费) |
状态管理 | 无状态,每次重新截图 | 有状态 REPL,支持撤销/重做 |
稳定性 | 页面布局一变就崩 | 接口稳定,命令不变 |
执行速度 | 秒级(截图+识别) | 毫秒级(直接调用) |
调试难度 | 极高(无法复现像素级问题) | 低(命令行可复现、可日志) |
CLI-Anything 方式(browser/agent-harness):
# 一条命令打开网页(来源:browser/agent-harness README)
cli-anything-browser page open https://example.com
# 文件系统式导航
cli-anything-browser fs ls /
cli-anything-browser fs cd /main
cli-anything-browser fs cat /main/button[0]
# 交互操作
cli-anything-browser act click /main/button[0]
cli-anything-browser act type /main/input[0] "Hello, World!"
# JSON 输出供 Agent 直接消费
cli-anything-browser --json fs ls /
# 返回结构化 JSON,而非像素截图传统 GUI Agent 方式:
1. 截图整个浏览器窗口
2. 识别地址栏位置(依赖像素坐标)
3. 模拟鼠标点击地址栏
4. 模拟键盘输入 URL
5. 按回车
6. 等待页面加载
7. 再次截图,判断是否加载成功CLI-Anything 的方式简洁到令人惊叹:一个 page open 命令到位,确定性返回结果。
命令行接口的输出是基于 DOMShell 的 Accessibility Tree 文件系统映射,Agent 可以通过
ls、cd、cat、grep等熟悉的 shell 命令来探索网页结构——浏览器变成了一个可遍历的目录树。 (来源:https://github.com/HKUDS/CLI-Anything/tree/main/browser/agent-harness)
CLI-Anything 不是手动为每个软件写 CLI,而是通过 AI Agent 自动完成。其 HARNESS.md 定义了 7 个阶段的标准化方法论:
1. 🔍 分析(Analysis)
— 扫描源码,将 GUI 操作映射到底层 API
2. 📐 设计(Design)
— 规划命令分组、状态模型、输出格式
3. 🔨 实现(Implementation)
— 构建 Click CLI,包含 REPL、JSON 输出、撤销/重做
4. 📋 测试规划(Test Planning)
— 生成 TEST.md,涵盖单元测试和端到端测试计划
5. 🧪 编写测试(Test Writing)
— 实现完整测试套件
6. 📝 文档(Documentation)
— 更新 TEST.md,写入测试结果
7. 📦 发布(Release)
— 生成 setup.py,安装到 PATH(来源:https://github.com/HKUDS/CLI-Anything/blob/main/cli-anything-plugin/HARNESS.md)
CLI-Anything 最值得称道的一点是:它不搞"山寨实现"。生成的 CLI 直接调用真实软件的后端引擎:
libreoffice --headless 转换文档sox 处理音频“The harness should use tools such as
libreoffice --headless,blender --background,melt,ffmpeg,inkscape,sox, native scripting, or service APIs, while avoiding Python imitations of the application.” —— arXiv:2606.03854, Section 3.1
这意味着 Agent 操作软件时得到的是真实、完整的专业能力,而不是功能阉割的玩具实现。
CLI-Anything 为每个软件生成的 CLI 遵循高度统一的架构模式。以 GIMP 的 CLI 实现为例(来源:https://github.com/HKUDS/CLI-Anything/tree/main/gimp/agent-harness):
cli_anything.*)所有 CLI 统一在 cli_anything 命名空间下,可 pip 安装,命名规范统一为 cli-anything-<软件名>。
项目统一使用 Python 的 Click 框架(≥8.0)构建 CLI。每个 CLI 都是一个 Click 组,支持两种模式:
模式一:一次性命令(One-shot)
# 来源:gimp/agent-harness 实际使用示例
# 创建项目
cli-anything-gimp project new --width 1920 --height 1080 -o poster.json
# 图层操作
cli-anything-gimp layer add -n "Background" --type solid --color "#1a1a2e"
# JSON 输出
cli-anything-gimp --json layer list模式二:交互式 REPL
$ cli-anything-gimp
cli-anything-gimp> project new --width 1920 --height 1080 -o poster.json
cli-anything-gimp> layer add -n "Background" --type solid --color "#1a1a2e"
cli-anything-gimp> filter add brightness --layer 0 --param factor=1.3
cli-anything-gimp> export png -o output.png
cli-anything-gimp> history
cli-anything-gimp> undo所有生成的 CLI 包都可以通过 pip install -e . 安装到 PATH。以 calibre 为例(来源:https://github.com/HKUDS/CLI-Anything/blob/main/calibre/agent-harness/setup.py):
from pathlib import Path
from setuptools import setup, find_namespace_packages
setup(
name="cli-anything-calibre",
version="1.0.0",
description="CLI harness for Calibre e-book manager",
packages=find_namespace_packages(include=["cli_anything.*"]),
install_requires=[
"click>=8.0.0",
"prompt-toolkit>=3.0.0",
],
entry_points={
"console_scripts": [
"cli-anything-calibre=cli_anything.calibre.calibre_cli:main",
],
},
python_requires=">=3.10",
)这种统一的架构设计使得 Agent 可以通过 which 命令自动发现已安装的工具,无需额外配置。目前 CLI-Hub 已管理 18+ 款主流软件的 CLI harness,测试用例数量超过 2,461 个(数据来源:README.md 最新数据)。
CLI-Anything 的出现,对当前 Agent 领域具有深远影响。
如果你正在开发或使用以下项目,CLI-Anything 是必须研究的对象:
项目目前已支持多个主流 Agent 平台:
平台 | 集成方式 |
|---|---|
Claude Code | /plugin marketplace add HKUDS/CLI-Anything |
OpenCode | 复制 opencode-commands/*.md 到命令目录 |
OpenClaw | SKILL.md 原生集成 |
Codex | codex-skill/ 提供接入 |
Qodercli | 社区贡献的插件 |
GitHub Copilot CLI | copilot plugin install ./cli-anything-plugin |
(来源:https://github.com/HKUDS/CLI-Anything 多平台集成文档)
CLI-Anything 所代表的趋势可以概括为:
Agent Future = Tool Calling + CLI Interface + Structured State而不是:
Agent Past = Screenshot + Object Detection + Click Coordinate这并不是说 GUI 交互完全没有价值——GUI 仍然是人机交互的最佳界面。但对于 AI Agent 之间的交互,结构化、确定性、可编程的 CLI 接口显然是更优解。
正如论文结论所述:
“Rather than building sophisticated screen readers and click simulators, we should redesign interaction paradigms around agent strengths: precise programmatic control and deterministic execution.” (与其构建复杂的屏幕阅读器和点击模拟器,不如围绕 Agent 的能力优势重新设计交互范式:精确的程序化控制和确定性的执行。)
CLI-Anything 不仅提供方法论,还打造了完整的生态分发平台——CLI-Hub(https://hkuds.github.io/CLI-Anything/)。
# 安装 CLI-Hub
pip install cli-anything-hub
# 浏览可用 CLI
cli-hub list
cli-hub search image
# 安装并使用
cli-hub install gimp
cli-hub info gimp
cli-hub launch gimpCLI-Hub 支持多种安装源(pip、npm、brew、bundled/system tools),并提供了公共注册表 public_registry.json,任何人都可以贡献新的 CLI harness。
回到文章标题的问题:为什么说 GUI Agent 方向可能从一开始就是错的?
因为 GUI 的设计哲学是"为人眼服务"——它把状态编码为像素,依赖空间记忆和视觉搜索,隐藏了底层的项目结构。而 Agent 需要的恰恰相反:稳定的动词命令、显式的状态表示、结构化的 JSON 输出、可追溯的操作历史、可编程的验证机制。
CLI-Anything 的项目口号精准地概括了这一转变:
“Today’s Software Serves Humans. Tomorrow’s Users will be Agents.” (今天的软件为人而生,明天的用户是 Agent。)
这不是要淘汰 GUI,而是要为 Agent 开辟一条新的交互通道。 在这个通道里,AI Agent 不再需要"假装是人"去操作软件,而是可以用自己最擅长的方式——结构化命令和确定性执行——与软件交互。
该项目获得了社区的广泛关注,844+ 次提交、18+ 款主流软件的 CLI 化、2,461+ 个测试用例通过——这些数字说明了一个事实:Agent Native 的方向正在成为共识。【需核实:发布前请检查 GitHub 最新数据并更新】
对于每一个正在构建 Agent 系统的开发者来说,现在就应该问自己一个问题:
你的 Agent 还在"看截图"吗?是时候换个思路了。
版权声明: 本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
