agent skills

什么是 Claude Skills? #

Claude Skills 是一种标准化的能力包(Capability Package),它将专家的隐性知识系统化封装,使 AI Agent 能够成为真正的领域专家。

1.1 核心组成

每个 Skill 由三个核心部分构成:

SOP(标准作业程序) - SKILL.md 文件 专家的行动剧本,固化程序性知识 工具(Tools) - scripts 文件夹 确定性的可靠函数,封装操作性知识 资源(Resources) - reference 文件夹 API 文档、配置文件等精选知识库

1.2 分层加载机制

Skills 采用渐进式披露(Progressive Disclosure)设计,实现高效的上下文管理:

第一层:仅加载所有 Skills 的 name 和 description(约 100 tokens) 第二层:需要时才加载具体的 SKILL.md 文件 第三层:按需读取 scripts 或 reference 中的具体文件

这种设计确保只有相关内容才会占用上下文窗口,让你可以安装多个 Skills 而不会造成性能问题。

1.3 Skills 的核心特性包括:

可组合性:支持多技能叠加使用。Claude 能够自动识别任务所需技能组合并协调执行。 可移植性:采用统一的格式标准。只需构建一次,即可在 Claude 应用、Claude Code 及 API 等不同环境中通用。 高效性:遵循按需加载原则,最大化资源利用率。 执行力:支持编写和执行代码,在处理需要确定性结果的任务时,比单纯的文本生成更可靠。

1.4 Skills 的核心优势

在传统使用模式下,每次对话都需要重新输入完整的指令和背景信息。以一个典型的数据分析任务为例: 传统方式:

• 基础指令:~500 tokens • 格式说明:~300 tokens • 样例数据:~200 tokens • 每次请求总计:~1000 tokens

使用 Skills:

• Skill 配置(一次性):~1000 tokens • 后续请求:~100 tokens • Token 节省:~90%

对于频繁使用的场景,这意味着成本降低 40-60%。

Claude Agent Skills 工作原理 #

Agent Skills 本质上是一个包含指令、脚本和资源的标准化目录结构。代理(Agent)能够动态发现并加载这些资源,从而获得完成特定任务所需的能力。通过将专业知识封装为可组合的资源包,Skills 极大地扩展了 Claude 的功能边界,将其从一个通用代理转变为能够适应特定需求的专用代理。

从技术角度来看,技能是一个包含 SKILL.md 文件及相关脚本、资源的标准化目录。这些组件共同协作,为代理提供额外的功能支持。

Skills 核心结构说明

每个技能目录的核心是一个 SKILL.md 文件。该文件必须以 YAML Frontmatter(前置元数据)开头,其中包含 name(技能名称)和 description(技能描述)等关键元数据。在启动阶段,代理会将所有已安装技能的 name 和 description 预加载到其系统提示符中。

这种机制构成了“渐进式披露”(Progressive Disclosure)的第一层:它仅提供最关键的索引信息,足以让 Claude 判断何时调用特定技能,而无需一次性加载所有细节。

SKILL.md 文件的正文内容则是第二层详细信息。当 Claude 判定某项技能与当前任务相关时,它才会读取该技能的完整信息并将其加载到上下文中。

随着技能复杂性的增加,单个 SKILL.md 配置文件可能无法容纳所有的上下文信息,或者某些信息仅在特定场景下才相关。在这种情况下,技能可以在目录中捆绑额外的文件,并在 SKILL.md 中通过文件名引用它们。这些额外的链接文件构成了第三层(及更高层)的详细信息,Claude 可以根据需要选择性地读取。

一个完整的技能包含三个核心要素:名称(唯一标识符)、描述(激活条件)和指令(执行步骤)。在实际运行中,只有 SKILL.md 中的名称和描述会直接影响技能的触发判定。换言之,这两个字段决定了 Claude 是否会调用该技能来获取专业知识或执行特定工作流。

因此,名称的设计应遵循简洁明了的原则,建议使用小写字母和连字符(kebab-case),例如 pdf-editor 或 brand-guidelines。

在下方所示的 PDF 技能示例中,SKILL.md 引用了两个与核心内容一起打包的附加文件:reference.md 和 forms.md。通过将表单填写说明移至单独的文件(forms.md),技能作者保持了 SKILL.md 核心内容的简洁,同时确保 Claude 仅在需要填写表单时才会读取相关说明。

你可以通过添加文件将更多上下文信息添加到你的技能中,然后Claude可以根据系统提示触发该技能。

渐进式披露是使代理技能灵活且可扩展的核心设计原则。就像一本组织良好的手册,从目录开始,然后是具体章节,最后是详细的附录一样,技能允许 Claude 仅在需要时加载信息

拥有文件系统和代码执行工具的智能体在处理特定任务时,无需将某项技能的全部内容读取到其上下文窗口中。这意味着可以整合到一项技能中的上下文数量实际上是不受限制的。

技能与上下文窗口 #

下图展示了当用户消息触发某个技能时,上下文窗口会如何变化。

1、首先,上下文窗口有核心系统提示和每个已安装技能的元数据,以及用户的初始消息;

2、Claude通过调用Bash工具读取pdf/SKILL.md的内容来触发PDF技能;

3、Claude 选择读取该技能附带的forms.md文件;

4、最后,Claude在从PDF技能中加载了相关指令后,开始执行用户的任务。

技能与代码执行 #

技能还可以包括供Claude自行决定作为工具执行的代码。

大型语言模型在许多任务上表现出色,但某些操作更适合用传统代码执行。例如,通过生成令牌来对列表进行排序,其成本远高于直接运行排序算法。除了效率问题,许多应用还需要只有代码才能提供的确定性可靠性。

在我们的示例中,PDF技能包含一个预先编写的Python脚本,该脚本可读取PDF并提取所有表单字段。Claude无需将脚本或PDF加载到上下文中就能运行此脚本。而且,由于代码具有确定性,这个工作流程是一致且可重复的。

SKILL.md 编写指南 #

SKILL.md 是定义技能行为的核心文件。它是一个标准的 Markdown 文件,由两部分组成:Frontmatter(前言)和正文内容。前言用于配置技能的元数据和运行权限,而正文内容则详细指导 Claude 如何执行操作。

Frontmatter(前言)配置 #

Frontmatter 位于文件的头部,采用 YAML 格式编写,包含控制 Claude 如何发现和使用该技能的关键配置。以下是一个典型的 skill-creator 前言示例:

---
name: skill-creator
description: Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Claude's capabilities with specialized knowledge, workflows, or tool integrations.
license: Complete terms in LICENSE.txt
---

name:技能的唯一标识符。 description:技能功能的简要概述。这是 Claude 判断是否调用该技能的核心依据。描述应采用清晰、行动导向的语言(如“当用户想要创建新技能时使用此技能”),以帮助 Claude 准确匹配用户意图。 license(可选):许可协议信息。 allowed-tools(可选):定义该技能可自动使用的工具列表,无需用户每次批准。 model(可选):指定执行该技能的模型版本。默认继承当前会话模型,但对于代码审查等复杂任务,可指定更强大的模型。 version(可选):版本号(如 “1.0.0”),用于版本控制和文档管理。 disable-model-invocation(可选):如果设置为 true,Claude 将不会自动调用该技能。这适用于需要用户显式通过 /skill-name 触发的高风险操作或配置命令。

绝大对数情况下,我们只需要用到 namedescription

SKILL.md 提示内容编写 #

Frontmatter 之后是 Markdown 正文,即 Claude 在调用技能时实际读取的提示信息(Prompt)。这是定义技能行为、指令和工作流的地方。编写高效提示的关键在于简洁性和渐进式披露:在 SKILL.md 中仅提供核心指令,细节内容则通过外部文件引用。

---
# 文档前置信息
---

# [简要用途说明 - 1–2 句话]

## 概述
[描述此技能的功能、使用场景及所提供的价值]

## 前置条件
[列出所需的工具、文件或上下文]

## 操作步骤

### 步骤 1:[第一步操作]
[使用祈使句给出明确指令]
[必要时提供示例]

### 步骤 2:[下一步操作]
[使用祈使句给出明确指令]

### 步骤 3:[最后一步操作]
[使用祈使句给出明确指令]

## 输出格式
[说明结果应如何组织]

## 错误处理
[当出现问题时的应对措施]

## 示例
[提供具体的使用示例]

## 相关资源
[引用随附的 scripts/、references/、assets/ 等内容]

提示内容编写最佳实践:

控制篇幅:建议控制在 5000 字(约 800 行)以内,避免上下文过载。 使用指令性语言:直接使用祈使句(如“分析代码以发现…”),避免冗长的第二人称描述(如“你应该…”)。 引用外部文件:将详细文档、规范或长文本移至外部文件,通过引用加载。 使用相对路径:始终使用 {baseDir} 变量指定路径,严禁硬编码绝对路径(如 /home/user/project/)。

当技能被激活时,Claude 将获得 allowed-tools 中指定工具的访问权限,并根据配置加载相应的模型。技能的根目录路径会自动注入,确保能够正确访问所有绑定的资源。

辅助资源的组织与绑定 #

为了充分发挥 Skills 的潜力,通常需要将辅助资源与 SKILL.md 捆绑在一起。推荐的标准目录结构包含以下三个子目录:

my-skill/
├── SKILL.md              # 核心提示词与指令
├── scripts/              # 可执行脚本 (Python/Bash)
├── references/           # 需加载到上下文的参考文档
└── assets/               # 静态资源与模板

为什么要进行资源打包? 资源打包的核心目的是保持 SKILL.md 的精简(建议不超过 5000 字),防止无效信息占用 Claude 的上下文窗口。通过将详细文档、脚本和模板分离,Claude 可以利用渐进式披露技术,仅在真正需要时加载特定资源。

scripts/:存放 Claude 可通过 Bash 工具调用的可执行代码。包括自动化脚本、数据处理程序、验证器或代码生成器,用于执行确定性任务。 references/:存放 Claude 在需要时会读取到上下文中的参考文档。包括 Markdown 指南、JSON Schema、API 规范、检查清单等。凡是对于 SKILL.md 来说过于冗长,但对任务执行又必不可少的文本内容,都应放入此处。 assets/:存放 Claude 可以引用但通常不会直接加载到上下文中的静态文件。包括 HTML/CSS 模板、图片、字体或二进制文件。

理解Skills与MCP的关系 #

模型上下文协议(MCP)将Claude与第三方工具相连,而技能则教会Claude如何熟练使用这些工具。当你将两者结合起来,你就能构建出遵循团队工作流程的智能体,而非那些需要不断修正的通用流程。

例如,通过MCP连接Notion,Claude可以搜索你的工作区。添加会议准备技能后,Claude就会知道要提取哪些页面、如何格式化准备文档,以及你的团队交付会议纪要的标准是什么。这种连接就变得有用了,而不仅仅是可用。

你走进一家五金店,想修理一个坏掉的橱柜。店里有你需要的所有东西(木胶、夹子、替换用的铰链),但知道该买哪些物品以及如何使用它们就是另一回事了。

MCP就好比能进入货架通道。而技能则类似于员工的专业知识。如果你不知道自己需要哪些物品或者如何使用它们,那么世界上所有的库存都无济于事。技能就像那位乐于助人的员工,会带你完成维修过程,为你指明合适的用品,并向你展示正确的技巧。

更具体地说,MCP服务器让Claude能够访问你的外部系统、服务和平台,而技能则为Claude提供有效使用这些连接所需的背景信息,指导Claude在获得这种访问权限后该做些什么

如果没有技能所提供的背景信息,Claude 就只能猜测你的需求。而有了技能,Claude 就能按你的策略来行动了。

为什么技能和MCP能很好地协同工作 #

MCP 负责处理连接:提供安全、标准化的外部系统访问方式。无论您是要连接到 GitHub、Salesforce、Notion,还是您自己的内部 API,MCP 服务器都能让 Claude 访问您的工具和数据。

技能掌握专业知识:即能将原始工具访问转化为可靠结果的领域知识和工作流逻辑。一项技能知道何时查询客户关系管理系统、在结果中寻找什么、如何格式化输出,以及哪些边缘情况需要不同的处理方式。

这种分离使架构具有可组合性。单个技能可以编排多个MCP服务器,而单个MCP服务器可以支持数十种不同的技能。添加新的连接后,现有技能可以将其整合进来。优化一项技能,它就能在所有已连接的工具中发挥作用。

当你将技能和MCP结合起来时,你会得到: #

清晰的发现:Claude不再猜测该去哪里查找信息。会议准备技能可能会明确规定:先查看项目页面,再查看之前的会议记录,然后查看利益相关者资料。研究技能可能会要求:先从共享驱动器开始,对照客户关系管理系统进行交叉参考,然后通过网络搜索填补空白。该技能将关于哪些来源对哪些任务重要的机构知识进行了编码。

可靠的编排:多步骤工作流变得可预测。如果没有技能,Claude可能会先提取数据并进行格式化,然后再检查是否获取了所有内容。技能会明确规定顺序,因此Claude每次都会以相同的方式执行工作流。

稳定的性能:输出实际上符合标准。一般化的结果需要编辑。技能决定了团队对“完成”的定义:合适的结构、恰当的详细程度、针对受众的恰当语气。

随着时间的推移,团队会积累一系列相互关联的技能和人脉,这使Claude在其特定领域具备专业知识。

技能与MCP可能重叠之处 #

MCP服务器可能包含以工具使用提示和常见任务提示形式呈现的指令。这使得特定于工具的知识与工具紧密结合。然而,从设计上讲,这些指令应保持通用性。

经验法则:MCP说明涵盖了如何正确使用服务器及其工具。技能说明涵盖了如何在特定流程中或多服务器工作流中使用它们。

例如,Salesforce MCP服务器可能会指定查询语法和API格式。一项技能会指定先检查哪些记录、如何根据Slack对话交叉引用这些记录以获取最新上下文,以及如何构建输出内容供团队进行流程审查。

将MCP服务器和技能结合使用时,要注意相互冲突的指令。如果你的MCP服务器要求返回JSON格式,而你的技能要求格式化为markdown表格,Claude就不得不猜测哪个是正确的。让MCP负责连接,让技能负责呈现、排序和工作流逻辑。

技能与MCP协同使用的真实案例 #

会议准备:Notion的会议智能技能 #

技能:Meeting Intelligence 定义了要搜索的页面、输出的结构方式以及要包含的部分 MCP server:能够搜索、读取和创建页面的Notion连接

工作流程:

  1. 该技能会识别相关的待搜索页面,包括项目、以往会议、利益相关者信息(发现阶段)

  2. MCP连接从Notion搜索并检索内容

  3. 技能构建两个文档:内部预读材料和外部议程(编排)

  4. MCP连接会将两份文档都保存到Notion中,并且进行整理和关联

  5. 技能确保输出符合格式标准(性能)

何时使用技能与MCP #

技能和MCP解决不同的问题,但为特定工作流决定使用哪一个并不总是显而易见的。

技能的用途 #

  • 涉及工具的多步骤工作流:从多个来源提取信息,然后创建结构化文档的会议准备工作
  • 一致性至关重要的流程:必须每次遵循相同方法的季度财务分析、设有强制性检查点的合规审查
  • 您希望捕捉和分享的领域专业知识:研究方法、代码审查标准、写作指南
  • 团队成员离职后仍应保留的工作流程:以可重复使用的指令形式编码的机构知识

MCP服务器的用途 #

  • 实时数据访问:搜索Notion页面、读取Slack消息、查询数据库
  • 外部系统中的操作:创建GitHub问题、更新项目管理工具、发送通知
  • 文件操作:读写Google Drive、访问本地文件系统
  • API集成:连接到不具备原生Claude支持的服务
特性 Skills MCP
它是什么 程序性知识 工具连接性
它的作用 教Claude如何做某事 让Claude能够访问某些东西
加载时 按需,在相关时 连接后始终可用
包含 说明、脚本、模板、资产 工具、资源、提示词
令牌行为 按需加载,保留上下文 预先加载的定义
最适合 工作流、标准、方法学 数据访问、API调用、外部操作

创建一个SKILL #

1. 创建SKILL.md #

---
name: elephant-tool
description: 提供详细的将大象放进冰箱里的流程
---

# elephant-tool

该技能帮助你将大象放进冰箱里的流程

## 何时使用此技能

在以下情况下调用本技能:

- 用户请求将大象放进冰箱里时


## 如何使用

### 基本用法

**注意:** 始终使用系统提示中展示的绝对路径运行脚本。

如果在虚拟环境中运行 deepagents:

```bash
.venv/bin/python [SKILLS_DIR]/mytool/scripts/script.py

使用系统 Python:

python3 [SKILLS_DIR]/mytool/scripts/script.py

[SKILLS_DIR] 替换为系统提示中显示的技能目录。

输出说明 #

脚本会输出将大象放进冰箱里的详细流程

支撑文件 #

  • scripts/script.py:将大象放进冰箱里的脚本

### 2. 创建scripts/script.py

```python

def main() -> None:
    result = """
1.定制巨型冰箱
根据大象的体型(成年亚洲象体长 5-7 米,体重 3-5 吨),定制一台足以容纳大象的超大型冷藏 / 冷冻设备。
2.引导或搬运大象
采用专业的动物运输工具(如大型吊车、平板车),将大象安全转移到巨型冰箱的所在地。
3.打开巨型冰箱门
启动冰箱的开门装置(可能是电动液压门),确保门体完全开启。
4.将大象移入冰箱
通过吊车或牵引设备,缓慢将大象放置到冰箱内部的指定位置。
5.关闭冰箱门并启动设备
关闭冰箱门,密封后启动制冷系统,完成 “把大象放进冰箱” 的操作。
"""
    print(result)


if __name__ == "__main__":
    main()

使用技能 #

我们使用 deepagents-cli 来验证我们的创建的skill是否有效。

创建好的skill存放格式如下:

elephant-tool/
├── SKILL.md              # 核心提示词与指令
├── scripts/              # 可执行脚本 (Python/Bash)
    └── script.py         # 脚本

然后将该文件夹,移动到:~/.deepagents/agent/skills/ 下:

现在,可以启动deepagents,验证我们创建的skill是否能被正确使用

执行日志:

root@ai /d/w/z/d/l/deepagents-cli (master) [2]# deepagents                                                                                                                                        (skills) 

 ██████╗  ███████╗ ███████╗ ██████╗
 ██╔══██╗ ██╔════╝ ██╔════╝ ██╔══██╗
 ██║  ██║ █████╗   █████╗   ██████╔╝
 ██║  ██║ ██╔══╝   ██╔══╝   ██╔═══╝
 ██████╔╝ ███████╗ ███████╗ ██║
 ╚═════╝  ╚══════╝ ╚══════╝ ╚═╝

  █████╗   ██████╗  ███████╗ ███╗   ██╗ ████████╗ ███████╗
 ██╔══██╗ ██╔════╝  ██╔════╝ ████╗  ██║ ╚══██╔══╝ ██╔════╝
 ███████║ ██║  ███╗ █████╗   ██╔██╗ ██║    ██║    ███████╗
 ██╔══██║ ██║   ██║ ██╔══╝   ██║╚██╗██║    ██║    ╚════██║
 ██║  ██║ ╚██████╔╝ ███████╗ ██║ ╚████║    ██║    ███████║
 ╚═╝  ╚═╝  ╚═════╝  ╚══════╝ ╚═╝  ╚═══╝    ╚═╝    ╚══════╝


✓ Model: OpenAI → 'gpt-4o'

✓ LangSmith tracing enabled: Deepagents → 'my-agent-project'
  User code (shell)'my-deepagents'

... Ready to code! What would you like to build?
  Working directory: /data/workplace/zhangzc/deepagents/libs/deepagents-cli

  Tips: Enter to submit, Alt+Enter (or Esc+Enter) for newline, Ctrl+E to open editor, Ctrl+T to toggle auto-approve, Ctrl+C to interrupt

> 如何将大象放进冰箱里
如何将大象放进冰箱里
  📖 read_file(/root/.deepagents/agent/skills/elephant-tool/SKILL.md)

⏺ Read(SKILL.md)
  ⎿  Read 43 lines (lines 1-43)

● 要将大象放进冰箱,需要运行一个脚本来提供详细流程。在虚拟环境中可以使用以下命令:                                                                                                                           

                                                                                                                                                                                                           
 .venv/bin/python ~/.deepagents/agent/skills/elephant-tool/scripts/script.py                                                                                                                               
                                                                                                                                                                                                           

如果使用系统 Python,则运行如下命令:                                                                                                                                                                      

                                                                                                                                                                                                           
 python3 ~/.deepagents/agent/skills/elephant-tool/scripts/script.py                                                                                                                                        
                                                                                                                                                                                                           

此脚本会输出将大象放进冰箱里的详细步骤和流程。                                                                                                                                                             

> 请你直接执行
请你直接执行
  ⚡ shell("python3 ~/.deepagents/agent/skills/elephant-tool/scripts/script.py")
╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ ⚠️  Tool Action Requires Approval                                                                                                                                                                        │
│                                                                                                                                                                                                         │
│ Shell Command: python3 ~/.deepagents/agent/skills/elephant-tool/scripts/script.py                                                                                                                       │
│ Working Directory: /data/workplace/zhangzc/deepagents/libs/deepagents-cli                                                                                                                               │
╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
☑ Approve
☐ Reject
☐ Auto-accept all going forward

● 这是将大象放进冰箱的详细步骤:                                                                                                                                                                             

 1 定制巨型冰箱:首先,根据成年大象的体型定制适合的超大型冷藏设备。                                                                                                                                        
 2 引导或搬运大象:使用专业的工具安全地将大象移动到冰箱所在地。                                                                                                                                            
 3 打开巨型冰箱门:确保冰箱门完全开启。                                                                                                                                                                    
 4 将大象移入冰箱:利用设备慢慢将大象放入冰箱。                                                                                                                                                            
 5 关闭冰箱门并启动设备:关门并启动制冷系统完成操作。

可见,我们创建的skill有被agent成功使用。