Claude Code Skills入门
Claude Code Skills Advanced Tips
1. SKILLs是什么
要想真正入门Claude Code,绕不过的一个概念就是SKILLs,一直困惑在skills到底是什么?算什么?程序还是简单的md文档?该怎么写?别人写的skills怎么用?所以准备从不同的角度和文章来深入理解skill到底是什么?只有深入才能浅出,而不是简单的安装和调用。
1.1 函数是什么?
函数,从数学开始大家就开始接触了,最开始的定义就是
数学函数:在一个变化的过程中,有两个变量x和y,对于每一个x,都有唯一确定的一个y,y就是x的函数。重点时函数不是式子本身,而是从x到y的对应规则
而在编程中,函数是什么?他们不是两套东西,而是同一思想在不同世界的表达
函数= 一个可以反复使用的操作说明书
编程中的函数时一段被命名的代码,用来完成一个特定任务,常见的形式
参数 ──► [代码逻辑] ──► 返回值
└──► 其他行为(打印 / 文件 / 网络)
就像最简单的编程函数
def add(x):
return 2*x + 1不就等价于$ y=2*x+1 $。
你告诉它要做什么(输入),帮你计算出来结果(输出)。就像磨咖啡一样,你给咖啡机豆子和水,它磨出来咖啡,咖啡机就是函数整体,能够帮你重复的完成磨咖啡的动作。

1.2 函数调用
函数调用(function calling), 不是新发明的函数,而是让AI大模型知道什么时候,如何去调用外部程序的一套机制。
🧠 让 AI 从“只会说话”,进化成“会做事”
早期AI,GPT3的时候只能输出文本,不能调用数据库,调用API,执行代码,控制系统。2023年OpenAI引入Function Calling,不是让模型直接调用函数,而是让模型结构化告诉你:它想调用哪个函数,用什么参数。
核心设计
生成json便签文件
{
"name": "get_weather",
"arguments": {
"city": "Shanghai",
"date": "today"
}
}现在的共识是:函数调用不是“功能”,而是 AI 与现实世界的“接口层(Interface Layer)”
举个生活的例子:AI点外卖
1. 现实世界AI不知道的事:你的位置,附近的点,几点,什么店,什么菜,都是真实世界里的,不是模型中的
2. 提前给AI准备好生活的函数:`get_location()`,`get_nearby_restaurants(location)`
3. AI进行判断,需要什么工具
4. AI第一次函数调用,AI输出json文件,程序得到json输入文件后执行输出json文件
5. AI和你确人,附近是不是附近有「老王汉堡」,招牌牛肉堡 28 元,要不要点这个?
6. 你回复后,AI调用下单的函数
AI 中的函数调用,本质上就是: AI 做决策 (AI理解意图) → 选择一个“可用操作” → 把参数告诉程序 → 执行 → 得到结果 → 继续推理
AI 的函数调用瓶颈 = “从模型的决策到函数执行,再到反馈回模型的过程中可能出错、延迟或受限的地方”
AI 可能会“想要做事”,但函数调用链上有多个环节容易卡住或出错。
1.3 Skill诞生
Skill本质上应该是由一个或多个函数组合而成的能力,带逻辑、决策和上下文。
skill可以理解成员工手册(怎么调用函数,什么时候调用函数)+工具箱(函数)
- 手册就是相当于给你一个说明书,告诉你怎么调用函数,什么时候调用函数;就像你告诉新来的员工什么时候做什么,怎么做;不同的物品着火了用什么干粉还是二氧化碳灭火器?
Claude Code遵循agent skills规则
(Agent skills)代理技能是包含指令、脚本和资源的文件夹,代理可以发现并使用它们来更准确、更高效地完成任务。

直观的来看,Skills就是一个文件夹,可以放在用户.claude中,也可以放在项目下/project/.claude
- 1.SKILL.md文件,用自然语言写的,告诉大模型这个SKill是干什么的,什么情况下用,怎么用,什么注意事项等
- 脚本。在SKILL.md中,会调用一些脚本,脚本就是函数,经常放在skill目录下的
src目录中
- 脚本。在SKILL.md中,会调用一些脚本,脚本就是函数,经常放在skill目录下的
- 资源。在SKILL.md中,会调用一些资源,资源就是数据,经常放在skill目录下的
data目录中
- 资源。在SKILL.md中,会调用一些资源,资源就是数据,经常放在skill目录下的
还有个重要的机制–渐进式披露
渐进式披露 = 不一次性把所有 skills 给模型,而是按“需要 → 能力 → 风险”逐步解锁。
Skills就像是装了锤子,斧子,螺丝刀和说明书的工具箱,说明书告诉你每个工具该怎么用,什么时候用。各个工具就是可以调用的函数,用来完成某些任务的脚本。
2.Skills 底层
Claude 的 Agent Skills 系统代表了一种复杂的基于提示词的元工具架构,通过专门的指令注入来扩展 LLM 的能力。与传统的函数调用或代码执行不同,skills 通过 提示词扩展 和 上下文修改 来改变 Claude 处理后续请求的方式,而无需编写可执行代码。
Claude Code你可以把Read,Write等当成工具,Cluade Code代理工具一般能够调用计算机的读写git等,而Skills也作为一种元工具,可以调用其他工具,比如/explain-code,/code-review,/code-generate等,这些工具就是Skills。
Skills 被定义为包含指令、脚本和资源的文件夹,Claude 可以在需要时加载。Claude 使用 声明式、基于提示词的系统 来进行 skill 发现和调用。AI 模型(Claude)根据其系统提示词中呈现的文本描述来决定调用 skills。在代码层面没有算法化的 skill 选择或 AI 驱动的意图检测。 决策完全发生在 Claude 的推理过程中,基于提供的 skill 描述。
Skills 不是可执行代码。它们 不会 运行 Python 或 JavaScript,背后也没有 HTTP 服务器或函数调用。它们也不是硬编码到 Claude 的系统提示词中。Skills 存在于 API 请求结构的独立部分。
Skills 是专门的提示词模板,将特定领域的指令注入到对话上下文中。当一个 skill 被调用时,它会修改对话上下文(通过注入指令提示词)和执行上下文(通过更改工具权限并可能切换模型)。skill 不是直接执行操作,而是扩展为详细的提示词,为 Claude 解决特定类型的问题做准备。每个 skill 都作为 Claude 看到的工具模式的动态添加出现。
Skill 工具(大写 S)= 管理所有 skills 的元工具。它与 Read、Write、Bash 等一起出现在 Claude 的 tools 数组中。
skills(小写 s)= 单个 skills,如 pdf、skill-creator、internal-comms。这些是 Skill 工具加载的专门指令模板。
(fig-align=“center” fig-alt=“skills”)
skill 选择机制在代码层面没有算法路由或意图分类。Claude Code 不使用嵌入、分类器或模式匹配来决定调用哪个 skill。相反,系统将所有可用的 skills 格式化为嵌入在 Skill 工具提示词中的文本描述,并让 Claude 的语言模型做出决定。这是纯粹的 LLM 推理。没有正则表达式,没有关键字匹配,没有基于 ML 的意图检测。决策发生在 Claude 通过 transformer 的前向传递中,而不是在应用程序代码中。
Skills是Claude 做准备来解决问题的,而不是直接解决问题
2.1 编写SKILL.md
SKILL.md 是 skill 提示词的核心。它是一个遵循两部分结构的 markdown 文件——frontmatter 和内容。frontmatter 配置 skill 如何运行(权限、模型、元数据),而 markdown 内容告诉 Claude 做什么。Frontmatter 是用 YAML 编写的 markdown 文件头部。
技能通过 SKILL.md 顶部的 YAML 前置元数据和随后的 markdown 内容进行配置。
┌─────────────────────────────────────┐
│ 1. YAML Frontmatter (Metadata) │ ← 配置
│ --- │
│ name: skill-name │
│ description: Brief overview │
│ allowed-tools: "Bash, Read" │
│ version: 1.0.0 │
│ --- │
├─────────────────────────────────────┤
│ 2. Markdown Content (Instructions) │ ← Claude 的提示词
│ │
│ Purpose explanation │
│ Detailed instructions │
│ Examples and guidelines │
│ Step-by-step procedures │
└─────────────────────────────────────┘参考内容添加 Claude 应用于你当前工作的知识。约定、模式、风格指南、领域知识。此内容内联运行,以便 Claude 可以将其与你的对话上下文一起使用。
任务内容为 Claude 提供特定操作的分步说明,如部署、提交或代码生成。这些通常是你想使用 /skill-name 直接调用的操作,而不是让 Claude 决定何时运行它们。添加 disable-model-invocation: true 以防止 Claude 自动触发它。
2.2 SKILL.md 元数据
frontmatter 包含控制 Claude 如何发现和使用 skill 的元数据。
| 字段 | 是否必须 | 实际作用 | 不写的后果 |
|---|---|---|---|
| name | ❌ | Skill 的显示名 | 用目录名代替 |
| description | ❌(但强烈推荐) | Claude 判断“什么时候用你” | Claude 很可能永远不会自动用 |
| argument-hint | ❌ | /skill 自动补全提示 |
手动调用体验差 |
| disable-model-invocation | ❌ | 禁止自动触发 | Claude 可能会“多管闲事” |
| user-invocable | ❌ | 是否出现在 / 菜单 |
默认可见 |
| allowed-tools | ❌ | 工具白名单 | Claude 可能频繁请求授权 |
| model | ❌ | 指定模型 | 使用默认模型 |
| context | ❌ | 是否 fork 子上下文 | 默认共享上下文 |
| agent | ❌ | 子代理类型 | 只有 fork 时才需要 |
| hooks | ❌ | 生命周期钩子 | 不启用自动化行为 |
2.3 增加支持文件
技能可以在其目录中包含多个文件,这使 SKILL.md 专注于要点,同时让 Claude 仅在需要时访问详细的参考材料。大型参考文档、API 规范或示例集合不需要在每次技能运行时加载到上下文中。
my-skill/
├── SKILL.md (required - overview and navigation)
├── reference.md (detailed API docs - loaded when needed)
├── examples.md (usage examples - loaded when needed)
└── scripts/
└── helper.py (utility script - executed, not loaded)然后从SKILL.md中引用支持文件,以便 Claude 知道每个文件包含什么以及何时加载它:
## Additional resources
- For complete API details, see [reference.md](reference.md)
- For usage examples, see [examples.md](examples.md)2.4 限制工具访问
使用
allowed-tools字段来限制技能处于活动状态时 Claude 可以使用哪些工具。此技能创建一个只读模式,其中 Claude 可以浏览文件但不能修改它们:!`command “ 语法在技能内容发送给 Claude 之前运行 shell 命令。命令输出替换占位符,所以 Claude 接收实际数据,而不是命令本身。
你和 Claude 都可以在调用技能时传递参数。参数可通过
$ARGUMENTS占位符获得。
---
name: fix-issue
description: Fix a GitHub issue
disable-model-invocation: true
---
Fix GitHub issue $ARGUMENTS following our coding standards.
1. Read the issue description
2. Understand the requirements
3. Implement the fix
4. Write tests
5. Create a commit当你运行 /fix-issue 123 时,Claude 收到”按照我们的编码标准修复 GitHub 问题 123…”
3. SKILLs实践
关键见解: Skill = 提示词模板 + 对话上下文注入 + 执行上下文修改 + 可选的数据文件和 Python 脚本
3.1 入门–创建你的第一个技能
创建你的第一个技能
此示例创建一个教 Claude 使用视觉图表和类比来解释代码的技能。由于它使用默认前置元数据,Claude 可以在你询问某事如何工作时自动加载它,或者你可以使用 /explain-code 直接调用它。
- 创建技能目录
在个人的home目录下,创建一个skill的目录,用来存放个人技能
mkdir -p ~/.claude/skills/explain-code- 创建SKILL.md文件
每个技能都需要一个 SKILL.md 文件,包含两部分:YAML 前置元数据(在 — 标记之间)告诉 Claude 何时使用该技能,以及包含 Claude 在调用技能时遵循的说明的 markdown 内容。name 字段变成 /slash-command,description 帮助 Claude 决定何时自动加载它。
---
name: explain-code
description: Explains code with visual diagrams and analogies. Use when explaining how code works, teaching about a codebase, or when the user asks "how does this work?"
---
When explaining code, always include:
1. **Start with an analogy**: Compare the code to something from everyday life
2. **Draw a diagram**: Use ASCII art to show the flow, structure, or relationships
3. **Walk through the code**: Explain step-by-step what happens
4. **Highlight a gotcha**: What's a common mistake or misconception?
Keep explanations conversational. For complex concepts, use multiple analogies.
- 测试技能
可以通过两种方式测试它:
让Claude自动调用它,需要询问与描述匹配的内容
How does this code work?或者直接使用技能名称调用它,搜索/explain会出现,然后Tab进行补充即可
/explain-code src/auth/login.tsskill可以存放的位置
| 位置 | 路径 | 适用于 |
|---|---|---|
| 企业 | 参阅托管设置 | 你的组织中的所有用户 |
| 个人 | ~/.claude/skills/<skill-name>/SKILL.md |
你的所有项目 |
| 项目 | .claude/skills/<skill-name>/SKILL.md |
仅此项目 |
| 插件 | <plugin>/skills/<skill-name>/SKILL.md |
启用插件的位置 |
当你在子目录中处理文件时,Claude Code 会自动从嵌套的 .claude/skills/ 目录中发现技能。例如,如果你在 packages/frontend/ 中编辑文件,Claude Code 也会在 packages/frontend/.claude/skills/ 中查找技能。这支持单仓库设置,其中包有自己的技能。
每个技能都是一个以SKILL.md作为入口点的目录
my-skill/
├── SKILL.md # 主要说明(必需)
├── template.md # Claude 要填写的模板
├── examples/
│ └── sample.md # 显示预期格式的示例输出
└── scripts/
└── validate.sh # Claude 可以执行的脚本
SKILL.md 包含主要说明并且是必需的。其他文件是可选的,让你构建更强大的技能:Claude 要填写的模板、显示预期格式的示例输出、Claude 可以执行的脚本或详细的参考文档。从你的 SKILL.md 中引用这些文件,以便 Claude 知道它们包含什么以及何时加载它们。
3.2 配置技能
Skill中的技能通过 SKILL.md 顶部的 YAML 前置元数据和随后的 markdown 内容进行配置。
技能内容类型
技能文件可以包含任何说明,但思考你想如何调用它们有助于指导包含的内容
allowed-tools 字段定义 skill 可以在没有用户批准的情况下使用哪些工具,类似于 Claude 的 allowed-tools。
您可以使用通配符来限定权限范围,例如,Bash(git:) 只允许 git 子命令,而 Bash(npm:) 允许所有 npm 操作。skill-creator skill 使用 “Read,Write,Bash,Glob,Grep,Edit” 来赋予它广泛的文件和搜索能力。
Glob其实不是一个独立的“工具”,而是一种 通配符/模式匹配机制,它在很多编程语言和工具里都被用来查找文件或路径
model 字段定义 skill 可以使用哪个模型。它默认继承用户会话中的当前模型。对于代码审查等复杂任务,skills 可以请求更强大的模型,例如 Claude Opus 或其他 OSS 中文模型。如果你知道就知道。
version 字段(例如,version: “1.0.0”)是用于跟踪 skill 版本的元数据字段,从 frontmatter 解析,但主要用于文档和 skill 管理目的。
3.2 SKILL提示词内容
Claude 在调用 skill 时收到的实际提示词。这是您定义 skill 的行为、指令和工作流的地方。编写有效 skill 提示词的关键是保持专注并使用渐进式披露:在 SKILL.md 中提供核心指令,并引用外部文件以获取详细内容。
---
# Frontmatter 在此处
---
# [简短目的陈述 - 1-2 句]
## 概述
[此 skill 的功能、何时使用、提供什么]
## 先决条件
[所需工具、文件或上下文]
## 指令
### 步骤 1:[第一个操作]
[命令式指令]
[如需要,提供示例]
### 步骤 2:[下一个操作]
[命令式指令]
### 步骤 3:[最后操作]
[命令式指令]
## 输出格式
[如何构建结果]
## 错误处理
[失败时该做什么]
## 示例
[具体使用示例]
## 资源
[如果捆绑,引用 scripts/、references/、assets/]- 使用
{baseDir}作为路径,永远不要硬编码绝对路径,如 /home/user/project/ - 使用命令式语言(“分析代码以…”)而不是第二人称(“您应该分析…”)
- 引用外部文件以获取详细内容,而不是嵌入所有内容
references/ 目录
references/ 目录存储 Claude 在引用时读入其上下文的文档。这是文本内容——markdown 文件、JSON schemas、配置模板或 Claude 完成任务所需的任何文档。
#### 1.4 学习框架文档
**加载并阅读以下参考文件:**
- **MCP 最佳实践:** [📋 查看最佳实践](./reference/mcp_best_practices.md) - 所有 MCP 服务器的核心指南
**对于 Python 实现,还要加载:**
- **Python SDK 文档:** 使用 WebFetch 加载 `https://raw.githubusercontent.com/modelcontextprotocol/python-sdk/main/README.md`
- [🐍 Python 实现指南](./reference/python_mcp_server.md) - Python 特定的最佳实践和示例
**对于 Node/TypeScript 实现,还要加载:**
- **TypeScript SDK 文档:** 使用 WebFetch 加载 `https://raw.githubusercontent.com/modelcontextprotocol/typescript-sdk/main/README.md`
- [⚡ TypeScript 实现指南](./reference/node_mcp_server.md) - Node/TypeScript 特定的最佳实践和示例当 Claude 遇到这些指令时,它使用 Read 工具:Read({baseDir}/references/mcp_best_practices.md)。内容被加载到 Claude 的上下文中,提供详细信息而不会使 SKILL.md 变得混乱。
assets目录
assets/ 目录包含 Claude 按路径引用但不加载到上下文中的模板和二进制文件。将其视为 skill 的静态资源——HTML 模板、CSS 文件、图像、配置样板或字体。
使用 {baseDir}/assets/report-template.html 的模板作为报告结构。
引用 {baseDir}/assets/diagram.png 的架构图。4. 常见Skill 模式
4.1 脚本自动化
将计算任务卸载到scripts/目录中的Python脚本或Bash脚本skill 提示词告诉 Claude 执行脚本并处理其输出。
skill.md Instructions ----> Python/Bash script ----> Deterministic Logic ----> Output---->Claude Process在目标目录上运行 scripts/analyzer.py:
`python {baseDir}/scripts/analyzer.py --path "$USER_PATH" --output report.json`
解析生成的 `report.json` 并呈现发现。4.2 读写-处理-写入
用于文件转换和数据处理
最简单的模式——读取输入,按照指令转换,写入输出。用于格式转换、数据清理或报告生成。
4.3 搜索-分析-报告
使用 Grep 搜索代码库中的模式,读取匹配文件以获取上下文,分析发现,并生成结构化报告。或者,搜索企业数据存储以获取数据,分析检索到的数据以获取信息,并生成结构化报告。
## 分析过程
1. 使用 Grep 查找相关代码模式
2. 读取每个匹配的文件
3. 分析漏洞
4. 生成结构化报告4.4 命令链执行
用例: 具有依赖关系的多步骤操作。
执行一系列命令,其中每个步骤都依赖于前一个步骤的成功。常见于类似 CI/CD 的工作流。

- 向导式多步骤工作流
- 基于模板的生成
- 迭代细化
- 上下文聚合
5. 实际案例
- 顶部(必读):使用场景、触发条件
- 中部(流程):具体工作步骤
- 底部(参考):API文档,详细说明
- 帮我整理Downloads文件夹
**执行流程**
1. 扫描 Downloads 文件夹
2. 识别文件类型
3. 创建分类文件夹
**输出结果**超简洁的SKILL类型
----
name:
description:
----
适用场景:简单指令,规则列表
模板:
# 技能标题
执行任务时,遵循以下规则:
1. 规则1
2. 规则2
3. 规则3
## 注意事项
- 注意事项1
- 注意事项2
- 注意事项3实际案例;explaining-code
- 流程型(1000-1500字)
适用于场景:多步骤任务,工作流程
---
name:
description:
---
# 技能标题
## 使用场景
- 场景一:
- 场景二:
## 核心功能
1. 功能1
2. 功能2
3. 功能3
## 执行流程
### 阶段1:准备
1. 步骤1
2. 步骤2
### 阶段2:执行
1. 步骤1
2. 步骤2
### 阶段3:验证
1. 步骤1
2. 步骤2
## 示例
### 示例1实际案例:file-organizer,lead-research-assistant
- API/技术类型(1000-2000字)
使用场景:调用外部API,需技术配置
---
name:aip-skill
description:
---
# 技能标题
## 概述
[简要说明这个API的用途和优势]
## 使用场景
- 场景一:
- 场景二:
## 前置要求
### 环境变量6. 文件命名和技巧
6.1 文件命名
- 目录命名
规则:全小写,用连字符分隔
article-translate,file-organizer
YAML name 字段 必须与目录名完全一致
描述字段写作:用第三人称,完整句子
6.2 文件组织策略
- 什么时候创建scripts/?
需要脚本的情况:
- 代码会被反复调用
- 确定性执行结果
- 逻辑复杂
- 什么时候创建references/?
需要文档的情况:
- 需要详细说明
- 需要引用外部文档
- 需要提供上下文
- 什么时候创建assets/?
- 输出模板
- 图片、文字、字体、样式表
- 文件模板