Agent Skills 从入门到实战:给 AI Agent 装上「技能包」

18 阅读13分钟

本文面向 AI Agent 初学者,系统讲解 Agent Skills 的概念、原理与实战写法,并以一个完整的 Code Review Skill 为例,带你走完「写 Skill → 安装 → 使用 → 发布」的全流程。
读完你会发现:你不是在“写 prompt”,你是在给 Agent 安装一个可复用的“职业技能证书”。🎓

Gemini_Generated_Image_r26w0hr26w0hr26w.png


TL;DR(给赶时间的你)⚡

  • Agent Skills 是什么:一种开放标准,用一个 SKILL.md 把“领域知识 + 工作流 + 可执行脚本”打包成可复用能力。
  • 为什么有用:把你反复对 AI 说的那套“正确姿势”固定下来,下次直接用,不再做“重复劳动的搬运工”。
  • 怎么运行:靠“渐进式加载”,启动只读 frontmatter(很省 token),命中时再按需加载全文与资源/脚本。

目录🧭

  1. 概念篇:Agent Skills 是什么
  2. 原理篇:它是怎么运行的
  3. 实战篇:写一个真实的 Skill
  4. 安装与使用
  5. 进阶与生态
  6. 总结
  7. 配套资源

一、概念篇:Agent Skills 是什么

1.1 从一个痛点说起

你有没有遇到过这种情况:每次让 AI 帮你做代码审查,它给的格式都不一样,有时候是流水账,有时候是大段废话,永远不是你想要的那种「按严重程度分级、附上修改建议」的规范报告?

或者每次部署项目,你都要手动告诉 AI「先检查环境变量、再跑单测、再构建镜像」,重复输入同一套上下文,烦不烦?

Agent Skills 就是为了解决这个问题而生的。

它让你把这些「重复的专业经验」打包成一个可复用的「技能包」,Agent 下次遇到相关任务,直接调用,不用你再重新解释。(是的,你终于可以把“复读机”这个岗位外包给文件系统了。)

1.2 一句话定义

Agent Skills 是一种开放标准,通过 SKILL.md 文件将领域知识、工作流程和可执行脚本打包成模块化能力,供 AI Agent 动态加载和使用。

1.3 和几个容易混淆的概念的区别

这是初学者最容易搞混的地方,直接上对比表(把“它到底是什么”一次讲清楚):📌

概念是什么解决什么问题作用范围
Agent SkillsSKILL.md 文件包封装可复用的工作流和领域知识跨对话、跨会话持久生效
MCP连接外部工具的协议让 Agent 能调用外部服务(数据库、API)工具层,定义连接方式
Prompt / System Prompt一次性指令文本单次任务的临时指导单次对话,不可复用
Custom Instructions用户偏好设置定义 Agent 的行为风格和语气全局生效,偏向个性化
LangGraph Skill(框架概念)Graph 中的一个 Node定义 Agent 的处理逻辑单元代码层,开发者使用

💡 一个形象的类比
MCP 是 Agent 的「USB 接口」,让它能插上各种外部工具;
Agent Skills 是 Agent 的「操作手册」,告诉它怎么用这些工具完成特定任务。
两者是互补关系,而不是竞争关系。

1.4 从 Claude 专属到开放标准

timeline
    title Agent Skills 发展时间线
    2025年10月 : Anthropic 在 Claude Code 内部引入 Skills 概念
    2025年12月18日 : Anthropic 将 Agent Skills 发布为开放标准
                   : agentskills.io 上线
    2026年1月 : OpenAI Codex CLI 支持 Skills
             : GitHub Copilot 宣布支持
    2026年2月 : Cursor、Gemini CLI、Windsurf 等相继跟进
             : 支持平台超过 26 个
    2026年3月 : OpenClaw(龙虾)等 AI Agent 工具全面兼容
             : 社区 Skill 数量突破 5000+

关键结论:这不是 Claude 的私有功能,而是整个 AI Agent 生态的通用标准。 🌍
你写的 Skill,在 Claude Code、OpenClaw、Cursor、GitHub Copilot 里都能用。(一稿多投,但完全不水。)

1.5 当前支持平台全景

graph LR
    %% ===== 开放标准(最左)=====
    subgraph 开放标准
        direction TB
        SPEC["🌐 Agent Skills 规范<br/>agentskills.io"]
    end

    %% ===== 编辑器 / 编程工具 =====
    subgraph 编辑器 / 编程工具
        direction TB
        CC["🤖 Claude Code<br/>参考实现 ✅"]
        CUR["⚡ Cursor ✅"]
        COP["🐙 GitHub Copilot ✅"]
        VSC["💻 VS Code ✅"]
        WIN["🌊 Windsurf ⚠️ 部分"]
    end

    %% ===== AI Agent 平台 =====
    subgraph AI Agent 平台
        direction TB
        OC["🦞 OpenClaw ✅"]
        COD["🧠 OpenAI Codex ✅"]
        GEM["✨ Gemini CLI ✅"]
        AMP["🎯 Amp ✅"]
    end

    %% ===== 国内生态 =====
    subgraph 国内生态
        direction TB
        YD["🐟 网易有道龙虾 ✅"]
        AC["🦀 AutoClaw ✅"]
    end

    %% ===== 连接关系 =====
    SPEC --> CC
    SPEC --> CUR
    SPEC --> COP
    SPEC --> VSC
    SPEC --> WIN
    SPEC --> OC
    SPEC --> COD
    SPEC --> GEM
    SPEC --> AMP
    SPEC --> YD
    SPEC --> AC

二、原理篇:它是怎么运行的

2.1 一个 Skill 长什么样

最小化的 Skill 结构非常简单(简单到你甚至可以用它来练习“少即是多”):🧩

my-skill/
├── SKILL.md          # 必须,主入口
├── scripts/          # 可选,可执行脚本
│   └── helper.py
└── resources/        # 可选,参考资料
    └── checklist.md

SKILL.md 分为两个部分:

---
name: code-review          # 触发命令:/code-review
description: >
  对代码进行规范审查,输出结构化报告。
  Use when: 用户要求 code review、审查代码、检查代码质量时触发。
---

# Code Review 指令

你是一位资深工程师,请按照以下规范对代码进行审查...
(这里是详细的指令内容)
  • --- 之间的部分是 YAML frontmatter,控制触发方式
  • 下面的 Markdown 正文是 实际指令,Agent 激活后才读取

2.2 核心机制:渐进式加载(Progressive Disclosure)

这是 Agent Skills 最精妙的设计,解决了「Skills 太多会撑爆 context window」的问题。🧠➡️📦

sequenceDiagram
    participant U as 用户
    participant A as Agent
    participant FS as 文件系统

    Note over A,FS: 启动阶段(每个 Skill 只消耗 ~100 tokens)
    A->>FS: 扫描 skills 目录
    FS-->>A: 返回所有 SKILL.md 的 frontmatter(name + description)
    Note over A: Agent 建立 Skill 索引,知道「有哪些技能」

    Note over U,A: 用户发起请求
    U->>A: "帮我 review 这段代码"
    A->>A: 匹配 description,命中 code-review Skill

    Note over A,FS: 按需加载阶段
    A->>FS: bash 读取 code-review/SKILL.md 完整内容
    FS-->>A: 返回详细指令(< 5k tokens)

    A->>FS: 按需读取 resources/checklist.md
    FS-->>A: 返回审查清单

    A->>FS: 执行 scripts/format_report.py
    FS-->>A: 返回脚本输出结果(代码本身不进 context!)

    A->>U: 输出规范化的 Code Review 报告

三级加载模型总结:

阶段加载内容Token 消耗时机
第一级frontmatter(name + description)~100 tokens/个Agent 启动时
第二级SKILL.md 完整指令< 5k tokensSkill 被触发时
第三级resources 文件 / scripts 输出按需指令中引用时

💡 这意味着你可以同时安装几十个 Skills,而不用担心 context 爆炸。(你的 token 终于不用为“全量加载”缴税了。)💸

2.3 两种触发方式

flowchart LR
    subgraph 手动触发
        U1["用户输入 /code-review"] --> S1["直接加载对应 Skill"]
    end

    subgraph 自动触发
        U2["用户输入:帮我审查这段代码"] --> M["Agent 扫描所有 Skill 的 description"]
        M --> |"匹配成功"| S2["自动加载 code-review Skill"]
        M --> |"无匹配"| D["正常回复,不加载 Skill"]
    end

description 字段是自动触发的关键,它相当于 Skill 的「触发词词典」,写得越精准,Agent 越能准确识别何时该用它。

2.4 Skill vs Prompt 的本质区别

graph LR
    subgraph "没有 Skill(每次都不一样)"
        P1["你:帮我 review 代码"] --> R1["AI:随机格式\n随机深度\n随机风格"]
    end

    subgraph "有 Skill(稳定可预期)"
        P2["你:帮我 review 代码"] --> SK["触发 code-review Skill"]
        SK --> R2["AI:按固定模板\n分级输出\n统一标准"]
    end

三、实战篇:写一个真实的 Skill

3.1 选题:Code Review Skill

为什么选这个场景?

  • 每个开发者都有这个需求
  • 没有 Skill 时,AI 的审查结果质量不稳定
  • 逻辑清晰,适合展示 Skill 的核心价值
  • 可以结合 resources/scripts/ 展示完整结构

我们想要实现的效果:

每次让 Agent 做代码审查,自动按以下结构输出:

## Code Review Report

### 🔴 严重问题(必须修复)
### 🟡 一般建议(建议修复)
### 🟢 优化建议(可选)
### ✅ 亮点(做得好的地方)
### 📊 总评分:X/10

3.2 目录结构设计

code-review/
├── SKILL.md              # 主指令
├── resources/
│   ├── checklist.md      # 审查清单(不同语言/场景的检查项)
│   └── examples/
│       ├── good.py       # 好的代码示例(供 AI 参考)
│       └── bad.py        # 有问题的代码示例
└── scripts/
    └── format_report.py  # 格式化最终报告输出

3.3 编写 SKILL.md

---
name: code-review
description: >
  对代码进行专业的规范审查,输出结构化分级报告。
  Use when: 用户提到 code review、代码审查、审查代码、检查代码、
  review this、帮我看下这段代码、代码有没有问题 时自动触发。
invocation:
  user-invokable: true       # 支持 /code-review 手动触发
  model-invokable: true      # 支持自动触发
---

# Code Review Skill

你是一位拥有 10 年以上经验的资深软件工程师,专注于代码质量、安全性和可维护性。

## 你的工作流程

1. 首先读取 `resources/checklist.md`,了解本次审查的检查维度
2. 逐条分析用户提交的代码
3. 执行 `scripts/format_report.py` 格式化最终报告

## 审查维度

请从以下维度对代码进行评估:

- **正确性**:逻辑是否正确,边界条件是否处理
- **安全性**:是否存在注入、越权、敏感信息泄露等风险
- **性能**:是否存在明显的性能瓶颈或不必要的资源消耗
- **可读性**:命名是否清晰,注释是否合理
- **可维护性**:耦合度是否合理,是否遵循 SOLID 原则
- **测试覆盖**:是否有测试,测试是否充分

## 输出格式

严格按照以下 Markdown 格式输出,不要偏离:

```markdown
## 📋 Code Review Report

**文件**:{filename}
**语言**:{language}
**审查时间**:{datetime}

---

### 🔴 严重问题(必须修复)
> 影响功能正确性、存在安全漏洞、可能导致生产事故

| # | 位置 | 问题描述 | 修复建议 |
|---|------|---------|---------|
| 1 | Line XX | ... | ... |

### 🟡 一般建议(建议修复)
> 影响代码质量、可维护性,但不影响当前功能

| # | 位置 | 问题描述 | 修复建议 |
|---|------|---------|---------|

### 🟢 优化建议(可选)
> 性能优化、代码简化,锦上添花

| # | 位置 | 建议描述 |
|---|------|---------|

### ✅ 亮点
- 列举代码中做得好的地方,积极反馈

### 📊 综合评分

| 维度 | 评分 | 说明 |
|------|------|------|
| 正确性 | X/10 | |
| 安全性 | X/10 | |
| 性能 | X/10 | |
| 可读性 | X/10 | |
| **综合** | **X/10** | |
```

## 注意事项

- 每条问题必须给出**具体的行号或代码片段**,不允许模糊描述
- 修复建议要给出**可执行的代码示例**,而不仅仅是文字描述
- 语气专业但友善,像资深同事在做 PR review,而不是批评
- 如果代码太长,优先关注核心逻辑,标注「仅审查了核心部分」

3.4 编写 resources/checklist.md

# Code Review 检查清单

## 通用检查项(所有语言)

### 安全性
- [ ] 是否存在 SQL 注入风险
- [ ] 是否存在 XSS 风险(前端代码)
- [ ] 敏感信息(密钥、密码)是否硬编码
- [ ] 是否有适当的输入验证
- [ ] 权限校验是否完整

### 错误处理
- [ ] 异常是否被正确捕获和处理
- [ ] 错误信息是否暴露了敏感细节
- [ ] 是否有兜底处理

### 性能
- [ ] 是否存在 N+1 查询问题
- [ ] 循环内是否有不必要的数据库/API 调用
- [ ] 大数据量处理是否有分页或流式处理

## Python 专项检查

- [ ] 是否使用了类型注解(Type Hints)
- [ ] 是否遵循 PEP 8 规范
- [ ] 是否有不必要的全局变量
- [ ] 上下文管理器(with)是否正确使用
- [ ] f-string 是否优先于 % 格式化

## Java 专项检查

- [ ] 是否存在空指针风险(NPE)
- [ ] 资源是否在 finally 或 try-with-resources 中关闭
- [ ] 集合操作是否线程安全
- [ ] 是否滥用了静态方法

## 并发 / 高并发专项(适用于后端服务)

- [ ] 共享变量是否有适当的同步机制
- [ ] 是否存在死锁风险
- [ ] 连接池配置是否合理
- [ ] 幂等性是否有保证

3.5 编写 scripts/format_report.py

#!/usr/bin/env python3
"""
Code Review 报告格式化脚本
Agent 调用此脚本时,只接收输出结果,脚本本身不进入 context window
"""

import sys
import json
from datetime import datetime


def format_report(review_data: dict) -> str:
    """将 Agent 生成的结构化数据格式化为 Markdown 报告"""
    
    now = datetime.now().strftime("%Y-%m-%d %H:%M")
    filename = review_data.get("filename", "未知文件")
    language = review_data.get("language", "未知语言")
    
    lines = [
        f"## 📋 Code Review Report",
        f"",
        f"**文件**:`{filename}`  ",
        f"**语言**:{language}  ",
        f"**审查时间**:{now}  ",
        f"",
        "---",
        "",
    ]
    
    # 严重问题
    critical = review_data.get("critical", [])
    lines.append("### 🔴 严重问题(必须修复)")
    if critical:
        lines.append("| # | 位置 | 问题描述 | 修复建议 |")
        lines.append("|---|------|---------|---------|")
        for i, item in enumerate(critical, 1):
            lines.append(f"| {i} | {item['location']} | {item['issue']} | {item['fix']} |")
    else:
        lines.append("_无严重问题_ ✅")
    lines.append("")

    # 一般建议
    warnings = review_data.get("warnings", [])
    lines.append("### 🟡 一般建议(建议修复)")
    if warnings:
        lines.append("| # | 位置 | 问题描述 | 修复建议 |")
        lines.append("|---|------|---------|---------|")
        for i, item in enumerate(warnings, 1):
            lines.append(f"| {i} | {item['location']} | {item['issue']} | {item['fix']} |")
    else:
        lines.append("_无一般问题_ ✅")
    lines.append("")

    # 综合评分
    scores = review_data.get("scores", {})
    if scores:
        lines.append("### 📊 综合评分")
        lines.append("")
        lines.append("| 维度 | 评分 |")
        lines.append("|------|------|")
        for dim, score in scores.items():
            lines.append(f"| {dim} | {score}/10 |")
    
    return "\n".join(lines)


if __name__ == "__main__":
    # Agent 通过 stdin 传入 JSON 数据
    try:
        data = json.loads(sys.stdin.read())
        print(format_report(data))
    except json.JSONDecodeError:
        # 如果 Agent 没有传入结构化数据,直接跳过格式化
        print("<!-- format_report: no structured data provided, using raw output -->")

3.6 完整目录结构总览

code-review/
├── SKILL.md                    # ✅ 主指令文件
├── resources/
│   ├── checklist.md            # ✅ 审查清单
│   └── examples/
│       ├── good_example.py     # ✅ 好的代码示例
│       └── bad_example.py      # ✅ 有问题的代码示例
└── scripts/
    └── format_report.py        # ✅ 报告格式化脚本

四、安装与使用

4.1 安装路径说明

graph TD
    Q{"这个 Skill 是给\n谁用的?"}
    Q --> |"只给我自己用\n所有项目都能用"| G["全局安装\n~/.claude/skills/code-review/"]
    Q --> |"只在当前项目用\n团队共享"| P["项目级安装\n.claude/skills/code-review/"]
    Q --> |"OpenClaw / 其他平台"| O["对应平台路径\n~/.openclaw/skills/ 等"]

路径速查表:

平台全局路径项目路径
Claude Code~/.claude/skills/.claude/skills/
OpenClaw~/.openclaw/skills/.openclaw/skills/
Cursor~/.cursor/skills/.cursor/skills/
GitHub Copilot~/.copilot/skills/.github/skills/
通用跨平台~/.agents/skills/

4.2 在 Claude Code 中安装

方式一:手动安装

# 创建全局 skills 目录(如果不存在)
mkdir -p ~/.claude/skills

# 将你写的 Skill 复制进去
cp -r ./code-review ~/.claude/skills/

# 验证目录结构
ls ~/.claude/skills/code-review/
# 应输出:SKILL.md  resources/  scripts/

方式二:从 GitHub 安装社区 Skill

# 使用官方包管理工具
npx skills add anthropics/code-review

# 或安装社区 Skill
npx skills add username/repo-name

方式三:Claude Code 内直接安装

/plugin add /path/to/code-review

4.3 验证 Skill 已加载

安装完成后,在 Claude Code 中输入:

/code-review

如果 Skill 加载成功,Agent 会提示你提交要审查的代码。

没有Skill时效果截图:

这是没有skill,LLM自由发挥的,没有严谨的格式,分析维度也不够全面.png

有Skill时效果截图:

这是显示暗示LLM用指定skill做code review.png

4.4 实际使用演示

手动触发:

你:/code-review

[提交以下代码]

def get_user(user_id):
    query = "SELECT * FROM users WHERE id = " + user_id
    return db.execute(query)

自动触发:

你:帮我看下这段代码有没有问题

[粘贴代码]

Agent 会自动识别意图,加载 code-review Skill,输出规范报告。

自动调用 skill 截图:

自动调用code review skill2.png

期望输出示例:

## 📋 Code Review Report

**文件**:get_user.py
**语言**:Python
**审查时间**:2026-04-25 10:30

---

### 🔴 严重问题(必须修复)

| # | 位置 | 问题描述 | 修复建议 |
|---|------|---------|---------|
| 1 | Line 2 | SQL 注入漏洞:直接拼接用户输入到 SQL 语句 | 使用参数化查询:`db.execute("SELECT * FROM users WHERE id = ?", (user_id,))` |

### 🟡 一般建议(建议修复)

| # | 位置 | 问题描述 | 修复建议 |
|---|------|---------|---------|
| 1 | Line 1 | 缺少类型注解 | `def get_user(user_id: int) -> dict:` |
| 2 | Line 1 | 无错误处理,用户不存在时会返回 None | 添加 `if not result: raise UserNotFoundError(user_id)` |

### ✅ 亮点
- 函数命名清晰,职责单一

### 📊 综合评分

| 维度 | 评分 |
|------|------|
| 正确性 | 4/10 |
| 安全性 | 2/10 |
| 可读性 | 7/10 |
| **综合** | **4/10** |

4.5 跨平台使用

同一套 Skill 文件,复制到其他平台对应目录即可。以 OpenClaw 为例:

# 复制到 OpenClaw 的 skills 目录
cp -r ~/.claude/skills/code-review ~/.openclaw/skills/

# 或者使用 skillport 工具统一管理
pip install skillport
skillport add ./code-review

五、进阶与生态

5.1 Skill + MCP 组合使用

单独的 Skill 只能提供「指令和知识」,如果 Skill 需要访问数据库、调用 API 或读取文件系统,就需要配合 MCP。🔌

graph LR
    subgraph "code-review Skill"
        SK["SKILL.md\n工作流指令"]
        CK["checklist.md\n审查清单"]
        SC["format_report.py\n格式化脚本"]
    end

    subgraph "MCP Servers(工具层)"
        FS["📁 Filesystem MCP\n读取项目文件"]
        GH["🐙 GitHub MCP\n获取 PR 信息"]
        DB["🗄️ Database MCP\n查询历史记录"]
    end

    U["用户:review 这个 PR"] --> SK
    SK --> |"需要读取文件"| FS
    SK --> |"需要 PR 详情"| GH
    SK --> |"查询历史审查记录"| DB
    SK --> CK
    SK --> SC

在 SKILL.md 中声明允许使用的 MCP 工具:

---
name: code-review
description: 专业代码审查,支持读取本地文件和 GitHub PR
allowed-tools:
  - filesystem:read_file
  - filesystem:list_directory
  - github:get_pull_request
---

5.2 Skill 的自我进化(OpenClaw 特有)

OpenClaw 有一个独特的能力:Agent 可以自己写 Skill 来扩展自己的能力。 (说人话:它会把“这次学到的经验”做成“下次直接用的模板”。)🦞

flowchart TD
    A["用户遇到新任务:\n帮我每天备份桌面文档到 Dropbox"] 
    --> B["Agent 发现没有对应 Skill"]
    --> C["Agent 自主编写代码并调试"]
    --> D["验证成功"]
    --> E["Agent 将成功经验封装成 SKILL.md"]
    --> F["新 Skill 持久化保存\n下次同类任务直接复用"]

5.3 发现和安装社区 Skill

官方 Skill 仓库:

# Anthropic 官方 Skills
npx skills add anthropics/skills

# 安装特定 Skill
npx skills add anthropics/pptx      # PowerPoint 生成
npx skills add anthropics/pdf       # PDF 处理
npx skills add anthropics/xlsx      # Excel 处理

社区资源:

资源地址说明
awesome-agent-skillsgithub.com/VoltAgent/awesome-agent-skills1000+ 社区 Skills
agentskills.ioagentskills.io官方规范文档
skills.shskills.shVercel 维护的包管理器
ClawHubclawhub.ioOpenClaw 专属 Skill 市场

5.4 安全注意事项

⚠️ 重要:Skills 可以执行任意代码,安装前务必做好安全审查。
你是在给 Agent 装技能,不是在给电脑装“惊喜盲盒”。🎁(尽量别惊喜。)

graph TD
    IN["准备安装一个 Skill"] --> Q1{"来源是否可信?\n官方 / 知名开源项目"}
    Q1 --> |"是"| Q2{"是否包含 scripts/?"}
    Q1 --> |"否"| R["❌ 不建议安装\n或在沙箱环境测试"]
    Q2 --> |"否"| OK["✅ 可以安装"]
    Q2 --> |"是"| Q3{"是否审查过脚本内容?\n确认无恶意代码"}
    Q3 --> |"是"| OK2["✅ 可以安装"]
    Q3 --> |"否"| R2["⚠️ 先阅读脚本再决定"]

安全检查清单:

  • 只安装来自可信来源的 Skill(官方仓库、知名开发者)
  • 安装前阅读 scripts/ 目录下的所有脚本
  • 注意 Skill 是否请求了过多的工具权限(allowed-tools
  • 在生产环境使用前,先在隔离环境测试

总结

graph LR
    A((Agent Skills))

    %% 左边(理论)
    A --> B[概念]
    A --> C[核心机制]

    %% 右边(实践)
    A --> D[实战]
    A --> E[生态]
    A --> F[进阶]

    B --> B1[开放标准]
    B --> B2[Anthropic]
    B --> B3[跨平台]

    C --> C1[SKILL.md]
    C --> C2[渐进加载]
    C --> C3[触发机制]

    D --> D1[code-review]
    D --> D2[frontmatter]

    E --> E1[Claude Code]
    E --> E2[Cursor]

    F --> F1[MCP 组合]
    F --> F2[自进化]

核心记忆点:

  • Agent Skills = 给 AI 的「操作手册」,打包专业知识和工作流
  • 本质是一个含有 SKILL.md 的文件夹,门槛极低
  • 渐进式加载保证了 token 效率,可以同时安装几十个
  • 这是跨平台开放标准,写一次,处处可用
  • Skill 和 MCP 是互补关系:Skill 定义「怎么做」,MCP 提供「工具能力」

配套资源

📎 配套资源


如果这篇文章对你有帮助,欢迎点赞收藏,也欢迎在评论区分享你自己写的 Skill 🦞