AI 编程教程中文版
官方教程中文版上下文与定制

Skills、Hooks、Plugins

区分 Copilot skills、hooks 和 plugins:哪些是能力包,哪些是生命周期控制,哪些是分发载体。

Skills(技能包)、Hooks(生命周期钩子)、Plugins(插件)都能扩展 Copilot,但职责完全不同:

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

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

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

1. 先做选择

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。

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

深读:为什么 hook 不能替代 skill

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

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

本章自检

上线前逐项检查:

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

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

官方来源

接下来去哪

本页目录