命令行可能是 AI Agent 最友好的工具界面,因为命令、参数、标准输入输出和退出码都能用结构化文本表达。Agent 容易规划、组合、执行和审计这些操作。GUI 并不是“不好用”,它仍是人类浏览、比较、拖拽和视觉确认的重要界面;只是让 Agent 通过像素和点击控制 GUI,通常比调用 CLI 或结构化 API 增加更多状态识别和验证成本。
2025 年到 2026 年间,多家 AI 公司推出终端形态的编程 Agent。表面看,这是回到早期计算机交互;从工程角度看,终端恰好提供了 Agent 所需的工具契约。
大语言模型接收和生成 token。CLI 的命令名、参数、帮助文本、输出和错误同样是文本。Agent 不必先理解像素布局,就能将意图映射为一次可执行调用。
GUI 利用人的视觉直觉。人可以扫描页面、识别层级、观察颜色和空间关系,再通过点击、拖拽、悬停与手势探索功能。许多状态不需要写出来,人一眼就能理解。
例如图像裁剪、幻灯片排版、地图导航和复杂数据对比,都依赖空间反馈。要求人类为这些任务手写命令,反而会增加认知负担。
这些问题并非 GUI 质量差,而是 GUI 的主要调用者原本是具备视觉与运动能力的人。
一个设计良好的命令会通过名称和参数声明意图:
docs search "React 性能" --limit 10 --format json
Agent 可以在执行前理解搜索词、数量和输出格式,也能将相同命令记录给人类审查。相比“点击搜索框、输入、打开筛选、选择十条”,状态更集中。
面向 Agent 的 CLI 应支持 JSON 等稳定格式:
{
"results": [
{"id": 42, "title": "React 性能分析", "score": 0.91}
],
"next_cursor": null
}
模型可以直接读取字段,而不必从对齐表格、颜色或页面位置猜测含义。人类友好的文本和机器稳定的 JSON 最好分别通过输出选项提供。
Unix 工具通过标准输入输出组合。一个命令的结果可以成为另一个命令的输入:
docs search "数据库设计" --format json
| jq -r '.results[].id'
| xargs -n1 docs outline
Agent 可以将搜索、过滤、读取和汇总拆成可观察步骤。每一步都有明确输入输出,也容易在失败处停止。
命令行为由参数、环境、输入数据和程序版本决定。若这些条件固定,重复执行通常比 GUI 点击序列更稳定。Agent 能建立“调用前置条件、预期输出、副作用和失败方式”的工具模型。
可预测不等于结果永远不变。远端数据、时间、权限和依赖版本仍会变化,因此命令必须返回可观察元数据,而不能隐藏环境差异。
终端会留下命令、输出、错误和退出状态。Agent 可以根据失败结果自我修正,人类也能事后查看实际执行内容。
可审计性对写文件、部署、删除资源和发送外部请求尤其重要。一个完整日志至少应包含时间、工作目录、命令参数、结果摘要和副作用目标,同时避免记录密钥。
CLI 不应只输出一段自然语言。退出码为 Agent 提供最基本的成功或失败信号:
0:操作成功。程序如果错误时仍返回 0,或把结果和日志混在同一流中,会让自动化误判。
Agent 可能因超时而不知道命令是否已完成。创建和发布类命令应支持幂等键、查询状态或安全重试:
deploy create --request-id req-20260912-001 --service api
再次使用相同请求 ID 时,系统应返回已有结果,而不是创建第二份资源。
彩色表格、截断列、旋转进度和交互选择对人类友好,却可能破坏机器解析。最佳做法是同时提供:
tool list # 人类可读
tool list --format json # Agent 和脚本可读
tool list --quiet # 只输出关键标识
机器格式应保持字段稳定,新增字段尽量向后兼容。
大模型的 function call 或 tool use 本质上也是“选择工具名,填写参数,接收结果”。CLI 与这种模型非常接近,只是参数通过进程命令行传入,结果通过标准流和退出码返回。
因此已有 CLI 很容易被封装成 Agent 工具。但直接把任意 shell 暴露给 Agent 风险较高,生产系统应优先提供范围受控的命令。
不是。MCP 可以为 Agent 提供工具发现、结构化 schema 和资源协议;CLI 可以通过 stdio 启动 MCP 服务器,也可以作为 MCP 工具背后的具体执行层。
{
"mcpServers": {
"docs": {
"command": "docs-cli",
"args": ["mcp"]
}
}
}
这种方式不需要单独管理端口,但仍要处理进程生命周期、权限和版本。
对长期运行的远端服务,HTTP 或原生工具 API 往往更适合,能够提供认证、并发、流式事件和明确 schema。CLI 的优势是易安装、易组合、能利用本地文件和现有开发工具。
选择标准不是“命令行永远最好”,而是哪个接口能提供最明确的契约、最低的状态歧义和最可靠的验证。
Agent 可以用 CLI 生成结果,再由 GUI 呈现给人确认,这通常比强迫任一界面承担全部职责更合理。
人类自然语言提出目标
→ Agent 调用 CLI/API 完成检索与变更
→ 系统返回结构化结果和审计记录
→ GUI 展示差异、图像、风险和待确认项
→ 人类批准或修改
→ Agent 继续执行
CLI 是执行和组合层,GUI 是理解和决策层,两者并不冲突。
只有 GUI 暴露某项能力、网站没有稳定 API、任务本身需要视觉检查,或用户明确要求操作当前界面时,GUI 自动化是合理选择。
使用 GUI 时应读取无障碍树、文本和截图,操作后重新检查目标状态。不能把一次点击当作操作成功的证据。
CLI 并非天然无状态。当前工作目录、环境变量、配置文件、登录凭据、Git 分支、shell 展开和后台进程都会改变行为。
面向 Agent 的命令应允许显式指定项目、配置和输出位置,并在结果中回显实际上下文。Agent 在执行前也应检查当前目录、版本和身份。
Shell 支持管道、重定向、通配符和命令替换,组合能力强,也容易扩大副作用。Agent 应避免未经验证的变量、宽泛通配符和破坏性递归命令。
命令输出“成功”只是证据之一,目标状态才是最终依据。
原文以本地知识库为例,核心命令可以拆为搜索、大纲、分段读取和正则检索。这样的设计让 Agent 先定位文档,再只读取相关部分,避免一次加载全部内容。
kb search "架构设计" --format json
kb outline 42
kb read 42 --offset 80 --limit 100
kb grep "事务|幂等" --doc 42
每个命令只承担一种职责,并返回稳定标识供下一步引用。
Agent 不应默认获得整个 shell 和所有账户权限。可按能力分层:
命令本身也应使用最小权限令牌,并明确区分预览和执行。
如果输出只面向人类、错误码不可靠、必须交互选择或参数语义含糊,Agent 仍然难以使用。
现代无障碍树和视觉模型能支持 GUI 操作。问题是可靠性和成本,而不是绝对不能。
日志可能被截断、泄露密钥或缺少权威结果。审计还需要身份、时间、目标和状态验证。
复杂管道难以恢复和定位失败。高风险流程应拆成检查点,并保存中间结构化结果。
组合能力越强,权限控制越重要。应使用隔离环境、允许列表和最小权限。
命令行对 AI Agent 友好,根本原因不是复古,而是它把能力表达为可调用、可组合、可记录的文本契约。显式参数、结构化输出、退出码和管道让 Agent 更容易规划和验证。GUI 则继续擅长视觉导航、空间编辑和人类确认。成熟的 Agent 产品不应在 CLI 与 GUI 之间二选一,而应让 CLI、API 或 MCP 承担稳定执行,让 GUI 承担理解、预览和审批,并用最小权限、幂等与权威状态检查连接两者。