2026 年初,CLI-first 已成为 AI Agent 工具层的主流共识。本文从 Token 经济学、架构设计、行业实践三个维度,总结 CLI-first Agent 的核心方法论。
一、为什么 CLI 是 Agent 的母语
1.1 Token 经济学
同一任务,CLI 和 MCP 的 token 消耗差距巨大:
| 维度 | CLI | MCP |
|---|---|---|
| 单个工具描述 | ~68 tokens | ~3,600 tokens |
| 差距 | — | 50× |
实测案例:
| 任务 | MCP tokens | CLI tokens | 倍数 |
|---|---|---|---|
| Playwright 15 步浏览器自动化 | ~114K | ~27K | 4× |
| Claude Code 代码执行 | ~150K | ~2K | 75× |
膨胀根源:MCP 的 JSON-RPC schema 加载 + 状态内联到上下文窗口。CLI 的状态走磁盘文件,按需读取,不占上下文。
50 个 MCP 工具的 schema 就能塞满整个上下文窗口。CLI 把同样数量的工具压缩到 ~200 tokens。
1.2 训练数据优势
LLM 的训练语料包含数十亿行 CLI 命令——Stack Overflow、GitHub、man pages、Shell 脚本。对 CLI 的理解已内化到模型参数中。
MCP 的 JSON-RPC 是 2024 年末发布的新规范,训练数据中几乎没有。
CLI 是 LLM 的母语,MCP 是需要额外学习的外语。
1.3 Unix 哲学契合
CLI 输入输出是纯文本,LLM 处理的也是文本(token),两者之间零格式转换。MCP 在中间插入 JSON-RPC 编码层,对 Agent 而言是不必要的抽象。
Unix 管道与 Agent 的思维链天然同构——编排原子化 CLI 工具实现复杂自动化:
log-fetch --days 7 | grep "ERROR" | feishu-send --channel #ops
二、CLI vs MCP:各自的主场
不是 CLI vs MCP,是轻量灵活 vs 标准治理。
2.1 对比矩阵
| 场景 | CLI | MCP |
|---|---|---|
| Coding Agent / 个人使用 | ✅ 轻量高效,按需加载 | |
| 本地工具调用 | ✅ 模型原生理解,进程隔离 | |
| 企业级 / 多租户 / 安全敏感 | ✅ 统一权限、审计、治理 | |
| 远程服务(无本地 CLI) | ✅ 标准化发现与连接 | |
| 跨客户端复用 | ✅ 即插即用,无需安装二进制 |
2.2 CLI 的企业级短板
- 权限继承 Shell 用户,无细粒度控制
- 审计追溯困难
- 幻觉可能导致危险操作(
rm -rf /等)
2.3 MCP 的独有能力
- Resources 抽象:数据库表、日志流、设备状态 → URI + 动态提示词模板
- 类似 USB 的标准化网络效应——即插即用
2.4 行业信号
- Perplexity CTO Denis Yarats(Ask 2026):正从 MCP 转向 APIs 和 CLIs
- YC 掌门人 Garry Tan:公开批评 MCP 的 context window 膨胀和 auth 机制
- 头部产品集体验证:Claude Code、Codex CLI、Gemini CLI、OpenCode 均采用 CLI-native 架构
开发者三大痛点:上下文膨胀(50 个工具就爆)、管理负担(手动维护 MCP Server 生命周期)、中间层损耗(重复封装已有 CLI/API)。
三、混合架构决策树
需要给 Agent 添加一项新能力?
├─ 本地工具 / 个人使用 → CLI
├─ 多人复用 / 跨客户端 / 权限管控 → MCP Server
└─ 远程服务 + 本地高效执行 → MCP 发现连接 + CLI 实际执行
架构全景:
┌─────────────────────────────────────────────┐
│ Agent (LLM) │
├────────────────────┬────────────────────────┤
│ CLI 执行层(肌肉) │ MCP 连接层(神经) │
│ │ │
│ 本地工具调用 │ 远程服务发现 │
│ 高效 token │ 统一认证授权 │
│ 模型原生理解 │ 跨宿主即插即用 │
│ 按需加载/用完即走 │ 合规审计 / 资源抽象 │
│ │ │
│ git / rg / jq │ DB / MQ / SaaS API │
│ curl / ffmpeg │ LSP / 浏览器自动化 │
└────────────────────┴────────────────────────┘
Playwright 团队的总结:有文件系统访问权限用 CLI,沙箱环境用 MCP。
四、CLI 工具自动发现模式
Agent 常见的一个问题:它不知道当前环境装了什么工具,于是建议使用不存在的命令(幻觉)。
4.1 设计模式
┌─────────────┐ ┌──────────────┐ ┌─────────────────┐
│ Tool │ ──▶ │ Detector │ ──▶ │ System Prompt │
│ Catalog │ │ (which) │ │ Injection │
│ (纯数据) │ │ (进程缓存) │ │ (~200 tokens) │
└─────────────┘ └──────────────┘ └─────────────────┘
- Catalog:预定义工具目录,纯数据。添加工具 = 添加一条记录
- Detector:进程启动时用
which命令探测已安装的工具,结果进程级缓存 - Injection:将探测结果格式化为紧凑的 XML/Markdown 片段注入 System Prompt
4.2 关键设计要点
- 极低开销:
which扫描 ~25 个工具 <1ms,纯文件系统检查 - 扩展 PATH:自动包含
/usr/local/bin、~/.local/bin、~/.cargo/bin等常见路径 - 进程级缓存:工具列表不会在进程生命周期内变化,缓存后结果稳定
- 稳定输出:不破坏 Prompt Cache(结果在进程内不变)
- 双语描述:根据用户语言偏好选择
desc_en/desc_zh - 优雅降级:探测失败不影响 Agent 正常运行
4.3 注入效果
<available_cli_tools>
The following CLI tools are installed and available via bash:
- ffmpeg: Audio/video processing (transcode, cut, merge, stream)
- jq: JSON processor (query, filter, transform)
- rg (ripgrep): Ultra-fast regex text search across files
- git: Version control (commit, branch, diff, log)
...
</available_cli_tools>
~200 tokens,远小于 MCP schema 的数万 tokens。
五、AI-Native CLI 设计 6 原则
如果你在开发给 Agent 使用的 CLI 工具,遵循以下原则:
| # | 原则 | 说明 |
|---|---|---|
| 1 | --help 即 Prompt | 帮助文档是给 AI 看的,多写 Examples(Few-shot) |
| 2 | --json 输出 | 结构化输出便于 Agent 解析,避免解析 ASCII 表格 |
| 3 | 非交互模式 | 提供 -y / --yes,避免阻塞 Agent |
| 4 | 原子操作 | 只做一件事,通过管道组合 |
| 5 | 幂等性 | 重复执行无副作用,便于错误恢复重试 |
| 6 | 明确退出码 | 成功 0、失败非 0,Agent 据此判断结果 |
反面案例
# ❌ 交互式确认 → Agent 卡死
$ dangerous-tool --delete-all
Are you sure? [y/N]:
# ✅ 非交互模式
$ dangerous-tool --delete-all --yes
# ❌ ASCII 表格 → Agent 需要正则解析
NAME STATUS AGE
nginx Running 3d
redis Error 1h
# ✅ JSON 输出 → Agent 直接解析
$ tool list --json
[{"name":"nginx","status":"Running","age":"3d"},...]
六、CLI-native 实战场景
| 场景 | Agent 实际使用的 CLI 工具链 | 不需要的 MCP |
|---|---|---|
| Monorepo 重构 | rg → 编辑 → git diff → npm test → git commit | GitHub MCP |
| 全栈调试 | git pull → npm run dev → tail -f → curl → docker-compose | Docker/Logging MCP |
| 脚手架搭建 | cargo new → cargo add → cargo watch → curl 健康检查 | Rust/DB MCP |
| CI/CD 修复 | act → 编辑 YAML → docker build → gh pr create | CI 集成层 |
共性:强推理模型 + bash/zsh 足矣。不需要自定义 Server、不需要 schema 膨胀上下文、Unix 管道天然组合。
总结
- CLI 是 LLM 的母语:训练数据中有数十亿行 CLI 命令,MCP 是 2024 年的新外语
- Token 经济学:CLI 工具描述比 MCP schema 小 50 倍
- 不是二选一:CLI 做本地执行(肌肉),MCP 做远程连接和治理(神经)
- 自动发现:让 Agent 只使用真实存在的工具,消除幻觉,~200 tokens 注入
- 设计给 AI 用的 CLI:JSON 输出、非交互、幂等、原子操作
选择标准:有文件系统访问权限用 CLI,沙箱/远程/企业治理用 MCP。
参考资料:
- Playwright CLI vs MCP 对比数据 — github.com/nicobailon/…
- LLM 工具调用方式系统性对比 — arXiv 2601.11672
- CLI Is All You Need — Marco Franzon
- Denis Yarats (Perplexity CTO), Ask 2026 演讲