Agent 时代大量产品增加 CLI,是因为软件的直接操作者不再只有人。人喜欢通过按钮和视觉反馈探索功能,Agent 更需要可调用、可理解、可组合、可恢复的接口。命令行用文本表达动作和结果,能复用成熟工具并支持即时编排,因此适合成为 Agent 的执行入口。但真正的 Agent First 产品还需要结构化 API、MCP、Skill、权限控制和面向人的可观测界面。
早期 CLI 让人通过“命令加参数”实时控制计算机。GUI 把命令变成按钮、图标和窗口,降低了记忆负担,使非技术用户也能操作复杂软件。
Agent 出现后,软件多了另一类用户。模型不需要漂亮动画,却需要准确知道有哪些动作、参数如何填写、结果是否成功以及失败后怎样恢复。
大语言模型以文本或结构化 token 接收信息并产生结果,终端也以命令和文本输出为主。典型闭环是:
用户提出目标
→ Agent 选择命令
→ 填写参数并执行
→ 读取 stdout、stderr 和退出码
→ 根据结果继续或修正
相比截图、识别控件、模拟点击和再次截图,文本调用链更短,也更容易审计。
calendar agenda --from 2026-09-14 --to 2026-09-20 --format json
命令清楚表达动作、时间范围和输出格式。GUI 中同一任务可能需要打开页面、切换视图、选择日期并点击导出,操作状态分散在多个控件里。
许多 CLI 提供 --help、子命令帮助和示例。Agent 遇到陌生工具时,可以先读取说明,再生成调用。
自描述并非自动成立。帮助文本如果缺少输出格式、副作用、权限和错误说明,模型仍会误用。面向 Agent 的 CLI 最好另行提供机器可读命令 schema。
Unix 管道允许把原子工具串成新流程:
calendar agenda --next-week --format json
| jq -r '.events[].attendees[]'
| sort | uniq -c | sort -nr
产品无需提前开发“统计下周参会者频次”按钮,Agent 可以临时组合查询、提取和统计。
非交互式命令容易由调度器批量启动,每个进程有独立输入、输出和退出状态。适合并行运行测试、转换文件或查询多个只读数据源。
但 CLI 并不天然无状态。工作目录、环境变量、配置、登录令牌、远端数据和共享文件都会引入状态。并行前必须确认资源隔离和副作用。
Agent 不必预先接收所有工具的完整描述,可以先搜索命令或读取帮助,只在需要时加载。对于拥有大量能力的环境,这能减少无关上下文。
MCP 也可以通过延迟发现降低工具描述开销,因此不应把“CLI 完全不占上下文”当成绝对优势。模型仍需知道命令存在以及怎样安全调用。
未来不是 GUI 消失,而是 GUI 不再是软件能力的唯一入口。
CLI 常常封装底层 API,将认证、参数、分页、重试和错误处理包装成一条命令。Agent 获得的是更高层动作,而不是每次手写 HTTP 请求。
对于高并发、长连接和复杂结构化数据,直接 API 可能更高效。CLI 更适合本地工具、人工调试和脚本组合。
MCP 提供能力发现和类型化工具调用。Agent 可以先看到工具名称、参数 schema 和结果类型,再决定调用。CLI 则通过命令字符串与进程接口工作。
它们是可以叠加的接口层,不是必须三选一。
一种实用分层是:
Skill:完整任务的方法、约束和验收流程
↓
MCP:高频能力的结构化工具与资源
↓
CLI/API:具体原子动作与底层执行
Skill 可以组合多个 CLI 和 MCP 工具,告诉 Agent 先读什么、怎样处理、何时验证和如何恢复。
新能力先做成 CLI,开发速度快,容易调试和脚本化。等调用模式稳定后,可沉淀为带 schema 的 MCP 工具;当完整流程被反复验证,再整理为 Skill。
这种演进不是硬性规则。高风险或复杂数据工具可能应从类型化 API 开始,避免先暴露危险 shell。
核心能力不能只藏在 GUI 中,应提供 CLI、API 或 MCP 接口。Agent 不应依赖坐标点击才能完成关键动作。
参数名称有语义,返回结构稳定,错误包含原因和恢复建议。工具要说明权限、副作用和限制。
操作粒度合理,输入输出标准化。一个结果能够安全成为下一步输入。
操作尽量幂等,状态变化可追踪,失败可以重试或回退,不因一次模型错误造成不可逆损失。
完全放手可能让 Agent 偏离目标,逐步确认又会失去自动化价值。好的协作界面需要让人以较低注意力掌握关键状态。
大量命令输出会把重要信号淹没。人类需要摘要、状态和异常,但也要能展开原始证据。
最佳界面同时提供两层:上层用 GUI 展示任务、风险与验证;下层保留完整命令、输出和文件差异供审计。
tool publish --help
Usage: tool publish --input FILE --idempotency-key KEY
Side effects: uploads one artifact and creates one remote record
Output: JSON on stdout; progress on stderr
Exit codes: 0 success, 2 invalid input, 3 auth, 4 conflict
Recovery: query with tool status --key KEY
帮助应明确副作用和恢复方法,而不只列参数缩写。
{
"status": "success",
"operation_id": "op_456",
"resource_id": "r_123",
"warnings": [],
"changed": true
}
Agent 能根据明确字段判断下一步。程序错误时应返回非零退出码和稳定错误代码。
模型生成命令时,用户输入可能含 shell 元字符。应用不要把不可信字符串直接拼接成一段 shell:
命令短暂执行不代表业务无状态。并行安全必须由资源模型证明。
Agent 可能因网络超时无法确认结果。如果直接重试发布或付款,可能造成重复副作用。工具应返回操作 ID,并允许查询:
tool create --idempotency-key req-001 ...
tool status --idempotency-key req-001
超时后先查状态,只有权威系统确认未执行才重新提交。
仪表盘只为人展示聚合图表还不够。Agent 需要可过滤、可分页、可订阅的结构化数据流,并能追溯到原始记录。
边界不应只有“全自动”和“全部确认”。可以按风险动态分级:
如果 CLI 只是模拟 GUI 点击、输出不稳定、没有错误码或无法恢复,它并不真正 Agent 友好。Agent First 是业务能力层的重新设计:
GUI 是给人类的前台,机器接口是给 Agent 的执行入口。两者应互相呈现同一状态。
CLI 是重要执行层,但类型化工具、多模态内容和人类审查仍需要 MCP、API 与 GUI。
--help 足以让 Agent 安全使用帮助文本可能不完整。还需要权限、沙箱、参数校验和副作用保护。
进程可能短暂,但配置、文件、凭据和远端服务都有状态。
管道适合低风险文本处理;需要类型校验、恢复和审计时,分步调用更可靠。
没有过程证据,人类无法判断权限是否越界、错误如何发生或结果能否复现。
Agent 时代大家做 CLI,不是因为图形界面过时,而是软件多了一类偏好文本、参数和结构化结果的执行者。CLI 提供动作明确、自描述、可组合和易调度的入口;MCP 补充能力发现、类型校验与多模态传递;Skill 封装经过验证的完整流程。真正的 Agent First 产品还必须可恢复、可审计并让人低成本观察。最终形态不是 CLI 战胜 GUI,而是 GUI 服务人的理解与决策,CLI、API 和 MCP 服务 Agent 的可靠执行。