Skill + CLI 优先,MCP 按需:2026 年的 Agent 工具分层
Skill 定义工作流,CLI 执行本机操作,MCP 连接外部系统——三者分工不同,不应混为一谈。
2026 年,Coding Agent 的工具选型正在发生一个清晰的变化:能走 CLI 的先走 CLI,需要流程约束的加上 Skill,只有跨边界集成时才上 MCP。Claude Code、Codex CLI 等具备完整 Shell 与文件系统权限的 Agent,是这一趋势最明显的载体。
但这并不意味着 MCP 被「淘汰」了。更准确的理解是:Skill、CLI、MCP 分别回答三个不同的问题。
核心结论
| 层次 | 技术 | 职责 | 典型问题 |
|---|---|---|---|
| Workflow | Skill | 定义流程与约束 | 什么时候做、按什么顺序做? |
| Execution | CLI | 本机执行与组合 | 具体命令是什么、如何 pipe? |
| Integration | MCP | 外部系统连接 | 如何安全访问远程 API? |
Anthropic 的官方表述与此一致:Skill 提供按需加载的 instructions / scripts / resources;MCP 提供连接外部工具与数据的标准协议层。参见 Skills explained。
案例:处理 GitHub Issue
以「调查并修复一个 GitHub Issue」为例,两种路径的差异很直观。
调用链
模型看到的接口
github.list_issues(...)
github.get_issue(...)
github.create_issue(...)每一层工具都需在上下文中注册名称、参数 JSON Schema 与返回结构。Server 越多,启动时的 schema 负担越重。
常见误解
Skill 不是 MCP 的替代品。与之存在替代关系的,是 CLI 与 MCP 在「如何触达外部能力」这一层的选型。Skill 位于更上层,负责编排二者——它是 SOP,不是传输协议。
为什么 Skill + CLI 成为默认组合
1. 上下文成本:Progressive Disclosure
MCP 需要在会话启动时向模型暴露完整的 tool catalog:
tool 名称 · 参数 schema · 返回值结构 · 使用约束挂载数十个 Server、数百个 tool 时,仅 schema 描述就会占用大量 context,并增加 tool selection 的决策噪声。
Skill 采用 渐进式披露(progressive disclosure):
Agent 启动时只看到 Skill 的名称与一行摘要;任务相关时才加载完整流程与附属资源。Anthropic 将这一机制作为 Skills 的核心设计原则。
2. 训练熟悉度:CLI 已被模型内化
Coding Agent 背后的 LLM 在预训练与后训练阶段已接触过海量 Shell 与 CLI 用法——git、gh、npm、docker、kubectl、rg、jq、curl 等工具的 flag、常见组合与错误输出,都已在训练分布中反复出现。
这意味着 Agent 对 CLI 的理解不是「临时读文档学会的」,而是接近 内化(internalized) 的:看到 gh issue view --json 就知道如何取字段,看到非零 exit code 就知道命令失败,看到 | jq 就知道如何过滤 JSON。同样的能力,如果换成一套自定义 MCP tool schema,模型反而需要额外 context 来学习命名约定与参数结构。
MCP tool 只有在你挂载之后才会进入上下文;而 CLI 的知识早已在模型权重里。对 Coding Agent 而言,这是 Skill + CLI 路径的结构性优势之一。
3. 组合能力:Shell 的原生编排
熟悉度解决的是「会不会用」;Shell 解决的是「能不能串起来」。
模型可以直接写出可组合的管道,在单次调用里完成筛选与变换:
gh issue list --json number,title \
| jq '.[] | select(.title | contains("regression"))'Shell 原生提供 pipe、redirect、xargs、exit code 与脚本编排——无需将 git status 再封装为带 JSON Schema 的 MCP tool。Parallel 的分析也指出:CLI 可在单次 Shell 调用中完成多步组合,而 MCP 通常需要模型在多次 tool call 间自行编排。
4. 可调试性:链路透明
| 路径 | 出错时的排查方式 |
|---|---|
| Skill + CLI | 复制终端命令,本地复现,逐行定位 |
| MCP | 逐层排查 Client → JSON-RPC → Transport → Server → SDK → API |
CLI 路径的故障面更短、输出更直观,对工程团队而言维护成本显著更低。
MCP 仍然不可替代的场景
CLI 的边界在于:Agent 所在机器之外的权限域与服务域。以下场景仍应优先考虑 MCP:
典型需求
- 远程 SaaS:Google Drive、Slack、Notion、Salesforce
- 企业内网:私有数据库、内部 API、合规审计系统
- 凭证管理:OAuth 授权、Token 刷新、权限隔离
在生产环境中,不应将 refresh token 写入 Shell 环境变量再交给 Agent 执行 curl。MCP Server 可将 认证、权限边界、API 封装与结构化 Schema 集中托管,Agent 侧只消费稳定的 tool 接口。
Anthropic 的定位同样强调二者互补:MCP 负责 Connect,Skill 负责 How——先建立连接,再定义如何正确使用这条连接。
参考架构:开源项目维护
以一个典型的开源仓库维护场景为例。Skill 按 任务域 拆成独立目录,每个目录只有一个 SKILL.md;CLI 与 MCP 不是文件树里的子文件夹,而是 Skill 在执行时调用的两层能力。
pr-review/SKILL.md 可能约束的流程
- 先用
gh pr view读描述与 CI 状态,再用rg定位改动范围 - 本地
npm test/cargo test验证,最后git diff确认 diff 范围
Execution 层(CLI,本机执行)
git · gh · rg · npm / cargo —— 模型已内化,Skill 只规定何时调用
Integration 层(MCP,外部连接)
GitHub · Linear · Slack —— 处理 OAuth、远程 API 与跨团队通知
Skill 写 流程,CLI 做 本机执行,MCP 做 外部连接。三者职责不同,目录结构也不应混在一起。
Skill 写到哪里?AGENTS.md 又是什么?
一两年前,Codex、Cursor、Claude Code 各自的 Skill 目录确实各搞一套;到 2026 年 9 月,跨 Agent 的公约已经清晰得多。若你希望同一套配置尽量被多个客户端共享,建议以 AGENTS.md + .agents/skills/ 为主,只在确有专属需求时再补 .cursor/、.claude/ 等目录。
AGENTS.md 与 Skill:常驻知识 vs 按需工作流
二者最容易混淆,但分工其实很明确:
一句话区分
AGENTS.md — 这个项目里,Agent 几乎每次都应该知道什么(结构、规范、build/test 命令)。
Skill — 遇到 某类任务 时,才需要加载的专业流程(meshing、发布、profiling 等)。
AGENTS.md 示例(节选)
# Project
A TypeScript monorepo with packages under packages/.
# Conventions
- Prefer strict TypeScript; no implicit any.
- Run tests before opening a PR.
# Commands
- Install: pnpm install
- Test: pnpm test
- Lint: pnpm lint.agents/skills/pr-review/SKILL.md 示例(节选)
---
name: pr-review
description: Workflow for reviewing pull requests and validating CI.
---
When reviewing a PR:
1. gh pr view <id> --json title,body,statusCheckRollup
2. rg changed symbols; run pnpm test
3. git diff origin/main...HEAD改文档或调样式时,Agent 只需 AGENTS.md;只有任务与 pr-review 的 description 匹配时,才加载完整 Skill——这正是前文提到的 Progressive Disclosure。OpenAI 与 Anthropic 对 Skills 的定义都围绕这一机制展开。
各 Agent 认哪些路径?
历史上各家不同,但 Agent Skills 开放标准 正在收敛:OpenAI 声明其 Skills 兼容开放标准,Cursor 也将 Agent Skills 称作 open standard。实际落地时,差异大致如下:
| Agent | 项目 Instructions | Skills |
|---|---|---|
| Codex | AGENTS.md(支持子目录嵌套) | .agents/skills/*/SKILL.md |
| Cursor | AGENTS.md 或 .cursor/rules/*.mdc | .agents/skills/、.cursor/skills/ 等均可识别 |
| Claude Code | CLAUDE.md | .claude/skills/*/SKILL.md |
| 通用推荐 | AGENTS.md | .agents/skills/ |
项目内:
project/AGENTS.md
project/.agents/skills/my-skill/SKILL.md全局:
~/.codex/AGENTS.md
~/.agents/skills/my-skill/SKILL.mdCodex 会从当前工作目录向 repo root 向上查找 .agents/skills。
AGENTS.md 的文件名:Claude 传统用 CLAUDE.md,Cursor 旧版用 .cursorrules;而 AGENTS.md 正在成为跨客户端的事实标准。Codex 与 Cursor 均支持 嵌套 AGENTS.md——例如 engine/AGENTS.md 覆盖引擎子树规则,与 repo 根的 AGENTS.md 组合生效,子目录优先级更高。
.cursor/rules 不要和 Skill 混为一谈
Cursor 实际上叠了三层配置,职责不同:
| 层 | 路径 | 加载方式 | 典型用途 |
|---|---|---|---|
| 项目规则 | AGENTS.md | 常驻 | 结构、命令、通用 convention |
| 条件规则 | .cursor/rules/*.mdc | glob / 手动 / alwaysApply | Cursor 专属的细粒度控制 |
| 工作流 | .agents/skills/*/SKILL.md | 按需 | 专业 SOP、脚本、参考资料 |
.cursor/rules/unity.mdc 可以指定 globs: ["Assets/**/*.cs"],只在处理匹配文件时生效——这比 AGENTS.md 更适合 条件触发,但不替代 Skill 的渐进式披露。Cursor 官方也将 AGENTS.md 定位为 .cursor/rules 的简化跨 Agent 替代方案。
推荐的项目布局
若目标是 Cursor / Codex / Claude Code 尽可能共享同一套 Agent 知识,避免在 .cursor/、.claude/、.codex/ 里复制三份相同内容:
别把 AGENTS.md 写成百科全书
Skill 出现之前,常见做法是把架构、Git、测试、部署、踩坑全塞进一个 3000 行的 CLAUDE.md。更合理的拆分是:
AGENTS.md — 短小、常驻:项目结构、build/test、关键 convention。
Skills — 大而专、按需:meshing、shader、release、profiling 等领域工作流。
AGENTS.md 是入职手册;Skill 是需要时才从书架上取下的专业操作手册。
选型决策
实践中的判断顺序
- 有成熟 CLI? → 直接用 CLI,不必包装成 MCP。
- 需要流程约束? → 编写 Skill,按需加载 SOP。
- 跨权限边界 / 无 CLI / 需 OAuth? → 引入 MCP Server。
仅当同时满足「远程服务 + 凭证隔离 + 无合适 CLI + 需跨客户端统一接口」时,MCP 才是必要选项,而非默认选项。
结语
「以前什么都做 MCP,现在越来越多 SKILL.md + CLI」——这一观察基本准确,但结论不应是 MCP 的失败,而是 适用边界的重新划定。
2026 年的成熟实践,是将三者作为分层架构组合使用,而非非此即彼的单选:
一句话总结
Skill 是操作手册,CLI 是执行工具,MCP 是外部插座。 它们不在同一层竞争。
延伸阅读
- Skills explained — Anthropic:Skill 与 MCP、Prompt、Project 的定位对比
- MCP vs. Skills vs. CLIs for AI Agents — Parallel:三者在 Agent 实践中的边界分析
- 构建技能 — OpenAI:Skills 结构与 Progressive Disclosure
- 使用 AGENTS.md 自定义指令 — OpenAI:嵌套 AGENTS.md 与查找规则
- Agent Skills — Cursor:Skills 路径与开放标准
- Rules — Cursor:AGENTS.md、
.cursor/rules与 Skills 的分工