Elytra
Blog2026

Skill + CLI 优先,MCP 按需:2026 年的 Agent 工具分层

Skill 定义工作流,CLI 执行本机操作,MCP 连接外部系统——三者分工不同,不应混为一谈。

随笔
GPT 5.6+1
agentskillmcpcliworkflow

2026 年,Coding Agent 的工具选型正在发生一个清晰的变化:能走 CLI 的先走 CLI,需要流程约束的加上 Skill,只有跨边界集成时才上 MCP。Claude Code、Codex CLI 等具备完整 Shell 与文件系统权限的 Agent,是这一趋势最明显的载体。

但这并不意味着 MCP 被「淘汰」了。更准确的理解是:Skill、CLI、MCP 分别回答三个不同的问题。

核心结论

层次技术职责典型问题
WorkflowSkill定义流程与约束什么时候做、按什么顺序做?
ExecutionCLI本机执行与组合具体命令是什么、如何 pipe?
IntegrationMCP外部系统连接如何安全访问远程 API?

Anthropic 的官方表述与此一致:Skill 提供按需加载的 instructions / scripts / resources;MCP 提供连接外部工具与数据的标准协议层。参见 Skills explained

案例:处理 GitHub Issue

以「调查并修复一个 GitHub Issue」为例,两种路径的差异很直观。

调用链

Agent MCP Client Protocol MCP Server GitHub API

模型看到的接口

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)

启动metadata 触发任务SKILL.md 深入细节scripts/ refs/

Agent 启动时只看到 Skill 的名称与一行摘要;任务相关时才加载完整流程与附属资源。Anthropic 将这一机制作为 Skills 的核心设计原则。

2. 训练熟悉度:CLI 已被模型内化

Coding Agent 背后的 LLM 在预训练与后训练阶段已接触过海量 Shell 与 CLI 用法——gitghnpmdockerkubectlrgjqcurl 等工具的 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:

Agent MCP Server OAuth / Token 外部 SaaS

典型需求

  • 远程 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 在执行时调用的两层能力。

SKILL.md

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

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 的定义都围绕这一机制展开。

任务描述 匹配 Skill? 仅 AGENTS.md 加载 SKILL.md 按需读 references/ scripts/

各 Agent 认哪些路径?

历史上各家不同,但 Agent Skills 开放标准 正在收敛:OpenAI 声明其 Skills 兼容开放标准,Cursor 也将 Agent Skills 称作 open standard。实际落地时,差异大致如下:

Agent项目 InstructionsSkills
CodexAGENTS.md(支持子目录嵌套).agents/skills/*/SKILL.md
CursorAGENTS.md.cursor/rules/*.mdc.agents/skills/.cursor/skills/ 等均可识别
Claude CodeCLAUDE.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.md

Codex 会从当前工作目录向 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/*.mdcglob / 手动 / alwaysApplyCursor 专属的细粒度控制
工作流.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 — 短、常驻:结构 / 命令 / 核心原则

别把 AGENTS.md 写成百科全书

Skill 出现之前,常见做法是把架构、Git、测试、部署、踩坑全塞进一个 3000 行的 CLAUDE.md。更合理的拆分是:

AGENTS.md — 短小、常驻:项目结构、build/test、关键 convention。

Skills — 大而专、按需:meshing、shader、release、profiling 等领域工作流。

AGENTS.md 是入职手册;Skill 是需要时才从书架上取下的专业操作手册。

选型决策

实践中的判断顺序

  1. 有成熟 CLI? → 直接用 CLI,不必包装成 MCP。
  2. 需要流程约束? → 编写 Skill,按需加载 SOP。
  3. 跨权限边界 / 无 CLI / 需 OAuth? → 引入 MCP Server。

仅当同时满足「远程服务 + 凭证隔离 + 无合适 CLI + 需跨客户端统一接口」时,MCP 才是必要选项,而非默认选项。

结语

「以前什么都做 MCP,现在越来越多 SKILL.md + CLI」——这一观察基本准确,但结论不应是 MCP 的失败,而是 适用边界的重新划定

2026 年的成熟实践,是将三者作为分层架构组合使用,而非非此即彼的单选:

一句话总结

Skill 是操作手册,CLI 是执行工具,MCP 是外部插座。 它们不在同一层竞争。

延伸阅读

On this page