从 Agent 视角系统梳理命令行工具为什么兴起、如何设计 Agent 友好的命令行工具,并结合开源 CLI 转换工具 OpenCLI、CLI-Anything 和钉钉、飞书、谷歌 Workspace、Stripe 等多家产品的官方 CLI 工具案例进行分析。
为什么 Agent 时代反而更需要 CLI
过去很多人把 CLI 看成"给工程师手工敲命令的老工具",而在 Agent 时代,这个判断反而过时了。对于大模型驱动的 Agent 而言,CLI 并不是落后的接口,而是最天然的一类执行面:
- 它是文本输入、文本输出,和 LLM 的工作方式天然匹配
- 它通常自带 --help、--version、退出码、标准输出/错误输出,具备自描述性
- 它容易组合,适合被 shell、脚本、CI/CD、子 Agent 链式调用
- 它不要求额外协议栈,部署和运行成本低
更重要的是,Agent 不会像人一样脑补一个 CLI 的意图。
CLI 是 Agent 的理想接口
1. CLI 比 GUI 自动化更稳定
GUI 自动化依赖截图、DOM、像素、焦点状态和时序,天然脆弱。CLI 只要求明确的命令、参数和输出,状态面更小,可复现性更强。
2. CLI 比直接调 API 更接近 Agent 的工作流
API 本身当然重要,但 Agent 不一定擅长从零拼装 HTTP 请求、认证方式、分页逻辑和错误恢复。设计良好的 CLI 已经把这些复杂性收敛成命令语义,Agent 可以直接发现并调用。
3. CLI 比很多 MCP 包装器更轻
MCP 适合做权限治理、工具注册、上下文注入和多工具编排,但并不是所有事情都值得单独做成 MCP Server。很多 MCP 本质上只是把已有 CLI 再包一层。如果底层 CLI 已经设计得足够好,直接调用 CLI 常常更便宜、更快,也更符合 Unix 的组合哲学。
讨论 CLI 和 MCP 时,一个常见误区是把它们当成互斥方案。更准确的理解应该是:
- CLI 是执行接口,先把底层能力做成稳定、可组合、可脚本化的 CLI
- MCP 是工具分发与治理接口
- API 是产品能力接口
这样做的好处是:
- 人类、脚本、Agent 都能复用同一套能力
- 文档、测试、错误码、输出契约只维护一份
- 如果某个平台不支持 MCP,只要有 shell 就还能工作
Agent 友好 CLI 的 7 条设计原则
下面这组原则,综合了开源社区知名的 CLI 工具通用经验,以及 OpenCLI / CLI-Anything 的实践。
1. 默认非交互
任何 Agent 可能自动化的命令,都不应依赖交互式 prompt。
推荐做法:
- 支持 --yes、--force、--quiet、--no-input
- 检测非 TTY 时自动禁用交互
- 必填项都能通过 flag、stdin、配置文件或环境变量传入
原因很直接:当一个 Agent 启动子 Agent,再由子 Agent 调起 CLI 时,中间通常没有办法把"请输入 y/n"回传到最上层用户。
2. 为机器输出结构化结果
如果命令返回的是数据,而不是纯展示信息,就应该提供稳定的机器可读格式。
推荐做法:
- 提供 --json 选项
- 成功结果写入 stdout
- 警告、进度、错误写入 stderr
- 输出字段命名稳定,不要今天叫 id 明天改成 resource_id
这是 Agent 友好的基础,否则模型只能靠脆弱的文本解析来猜。
3. 错误要能指导下一步修复
对人类可接受的报错,对 Agent 往往不够。
坏报错:Error: missing required arguments
好报错:
Error: --content is required.
Usage: blog-cli publish --content [--status ]
Available statuses: draft, published, scheduled
Example: blog-cli publish --content my-post.md
Agent 需要的不只是哪里错了,更是下一次怎么改才对。
4. 可安全重试,边界清晰
Agent 会重试、恢复、回放。对有副作用的命令,CLI 设计必须考虑这一点。
推荐做法:
- 幂等性:同一命令重复执行不产生副作用
- 事务性:失败时回滚到一致状态
- 明确的进度指示:让 Agent 知道可以安全重试的断点
5. 自描述性强
Agent 发现工具能力主要靠 --help 和子命令列表。
推荐做法:
- 每个子命令都有清晰的 description
- 参数说明包含类型、默认值、是否必填
- 提供典型使用示例
6. 版本和兼容性明确
Agent 需要知道当前 CLI 的能力边界。
推荐做法:
- --version 输出语义化版本号
- 废弃功能提前标注 deprecated
- 破坏性变更在 changelog 中明确说明
7. 认证和配置标准化
认证流程是 Agent 自动化的常见卡点。
推荐做法:
- 支持环境变量(如 API_KEY)
- 支持配置文件(如 ~/.config/tool/config.yaml)
- 提供 login 命令,但支持非交互式 token 注入
总结
CLI 不是老古董,而是 Agent 时代的理想接口。设计良好的 CLI 工具,让人类、脚本和 Agent 都能高效使用。在 MCP、API 等多种接口形式并存的今天,CLI 凭借其简洁、稳定、可组合的特性,仍然是构建 Agent 友好工具的首选方案。
参考资料
- MCP: https://modelcontextprotocol.io/
- MCP vs CLI 基准测试:https://mariozechner.at/posts/2025-08-15-mcp-vs-cli/