---
title: "Skills、Hooks、Plugins"
description: "区分 Copilot skills、hooks 和 plugins：哪些是能力包，哪些是生命周期控制，哪些是分发载体。"
verifiedAt: "2026-05-06"
---

Skills（技能包）、Hooks（生命周期钩子）、Plugins（插件）都能扩展 Copilot，但职责完全不同：

- **Skill** 教 Copilot 如何完成一类专业任务（"会做什么"）。
- **Hook** 在 agent 生命周期的固定节点执行 shell 命令（"什么时候必须做"）。
- **Plugin** 把 skills、hooks、custom agents、MCP servers 等打包分发（"怎么发给团队"）。

不要把它们混成一个"高级功能"入口。商业项目里，职责混乱比功能缺失更危险。

> [!WARNING]
> Skills 可能引用脚本和资源，Hooks 会执行命令，Plugins 可能安装一整组能力。把它们当代码审查，不要当普通文档审查。

## 1. 先做选择

```mermaid
flowchart TD
    Need["定制需求"] --> Always{"每次请求都要遵守?"}
    Always -->|是| Instructions["Custom instructions"]
    Always -->|否| Repeat{"是否重复调用同一任务?"}
    Repeat -->|否| Prompt["普通 Chat prompt"]
    Repeat -->|是| Multi{"是否需要脚本、示例、资源?"}
    Multi -->|否| PromptFile["Prompt file"]
    Multi -->|是| Skill["Agent skill"]
    Skill --> Lifecycle{"是否必须在固定生命周期执行?"}
    Lifecycle -->|是| Hook["Hook"]
    Lifecycle -->|否| Share{"是否要跨团队安装更新?"}
    Hook --> Share
    Share -->|是| Plugin["Plugin"]
    Share -->|否| Local["项目内维护"]

    style Skill fill:#dcfce7,stroke:#16a34a,stroke-width:2px
    style Hook fill:#fef3c7,stroke:#d97706,stroke-width:2px
    style Plugin fill:#dbeafe,stroke:#2563eb,stroke-width:2px
```

简单判断：

- 只是规则：用 custom instructions。
- 只是重复 prompt：用 prompt file。
- 有多文件说明、脚本、示例、资源：用 skill。
- 需要强制阻止、记录、格式化、审批：用 hook。
- 需要安装、更新、分发一组能力：用 plugin。

## 2. Agent Skills

VS Code 官方定义的 Agent Skills 是一组文件夹：里面可以有 instructions、scripts、examples 和 resources。Copilot 会在相关任务里加载它们，用来完成特定能力。

适合做 skill 的场景：

- 测试工作流：包含测试命令、样例、失败排查脚本。
- 安全审计：包含检查清单、敏感路径、报告模板。
- 文档发布：包含 frontmatter 规范、截图流程、链接检查脚本。
- 迁移任务：包含分阶段步骤、验证命令、回滚策略。

VS Code 默认支持这些位置：

- 项目级：`.github/skills/`
- 项目级：`.claude/skills/`
- 项目级：`.agents/skills/`
- 个人级：`~/.copilot/skills/`
- 个人级：`~/.claude/skills/`
- 个人级：`~/.agents/skills/`

一个 skill 目录至少要有 `SKILL.md`。如果 `SKILL.md` 想让 Copilot 使用旁边的脚本或示例，必须在正文里用相对链接引用出来，否则 agent 可能不会加载。

## 3. Hooks

Hooks 适合做确定性控制。VS Code hooks 目前处于 Preview；GitHub Copilot CLI 也提供 hooks 能力。核心思想一致：在 agent session 的某些生命周期点执行你定义的 shell 命令。

典型用途：

- `PreToolUse`：命令执行前检查 allowlist，阻止危险路径。
- `PostToolUse`：文件编辑后跑 formatter、lint 或日志记录。
- `UserPromptSubmit`：记录用户请求，或注入可审计上下文。
- `SessionStart`：创建会话记录，检查项目状态。
- `PreCompact`：在上下文压缩前保存关键状态。
- `Stop` / `SubagentStop`：会话或子 agent 结束时做收尾记录。

Hook 的风险也更高：

- 命令会在本机或开发环境执行。
- 错误配置可能影响每一次 agent session。
- hook 输出可能把敏感信息带回上下文。
- preview 能力的配置格式和行为可能变化。

上线前至少验证：命令可重复运行、失败路径可解释、日志不含密钥、受保护路径不会被绕过。

## 4. Plugins

Plugin 是分发载体。GitHub 官方 CLI 文档把 plugin 定义为可安装包，可以包含 skills、custom agents、hooks、MCP server configurations 等组合；VS Code 的 agent plugins 也用于从 marketplace 安装预打包的 chat customizations。

适合做 plugin 的场景：

- 公司级工程规范包。
- 多仓库共用的测试和发布工具。
- 包含 skill、hook、MCP server 的完整工作台。
- 需要安装、更新、卸载、版本管理的能力集合。

不适合一上来就做 plugin 的场景：

- 还在试验 prompt。
- 只有一个很小的 workflow。
- 没有 owner、版本号和回滚计划。
- 插件来源不可信或无法审查。

Plugin 里可能包含 hooks 和 MCP servers，它们能运行本机代码或连接外部系统。安装前必须检查发布者、manifest、脚本、权限、网络目标和更新机制。

## 5. 商业级落地顺序

推荐顺序：

1. 先写最小 instructions。
2. 把重复任务沉淀成 prompt files。
3. 当 prompt file 需要脚本、示例、资源时，升级成 skill。
4. 当必须强制执行校验、日志、阻断或审批时，加入 hook。
5. 当需要跨团队安装和更新时，打成 plugin。

每一步都要保留删除路径。扩展能力不是越多越好；能被审计、验证、回滚的能力才适合上线。

<details>
<summary>深读：为什么 hook 不能替代 skill</summary>

Skill 是告诉 agent 怎么完成任务；hook 是在固定时机执行命令。前者解决知识和流程复用，后者解决确定性控制。

如果你用 hook 写一大段业务逻辑，后续维护会变成隐藏自动化；如果你用 skill 假装阻止危险命令，模型仍可能绕过。两者应该互补，而不是互相替代。
</details>

## 本章自检

上线前逐项检查：

1. 这个能力有没有明确 owner 和版本？
2. 它是否只在合适入口加载，而不是污染所有请求？
3. 它是否可能执行 shell 命令、访问网络或读取敏感文件？
4. 它是否有最小权限和失败策略？
5. 它是否能用一个真实任务证明有效？
6. 它是否能被卸载、禁用或回滚？

通过标准：每个 skill、hook、plugin 都能说明职责、触发条件、风险边界和验证证据。

## 官方来源

- [Use Agent Skills in VS Code](https://code.visualstudio.com/docs/copilot/customization/agent-skills) —— VS Code 官方 Agent Skills 定义、位置和 `SKILL.md` 格式。
- [Agent hooks in Visual Studio Code](https://code.visualstudio.com/docs/copilot/customization/hooks) —— VS Code 官方 hooks 说明和 Preview 边界。
- [Agent plugins in VS Code](https://code.visualstudio.com/docs/copilot/customization/agent-plugins) —— VS Code 官方 agent plugins 说明。
- [Comparing GitHub Copilot CLI customization features](https://docs.github.com/en/enterprise-cloud@latest/copilot/concepts/agents/copilot-cli/comparing-cli-features) —— GitHub 官方 CLI 定制能力对比。

## 接下来去哪

<Cards>
  <Card title="Prompt Files" description="回到更轻量的重复任务入口。" href="/docs/github-copilot/official/06-context-customization/prompt-files" />
  <Card title="MCP 与外部工具" description="当任务需要外部系统数据和动作时再接 MCP。" href="/docs/github-copilot/official/07-mcp" />
</Cards>
