09 · 指令、Skills、Hooks 怎么分工
解释个人、仓库、组织指令,prompt files、agent skills、hooks、plugins 在 Copilot 体系里的职责边界。
让 Copilot 稳定,不是靠每次 prompt 写得更长,而是把规则、流程和控制放到正确层级。指令(instructions)、提示词文件(prompt files)、技能包(skills)、生命周期钩子(hooks)、插件(plugins)都能影响 Copilot,但它们解决的问题不同——把它们混在一起,最常见的结果是规则到处冲突、agent 行为不可预期。
本章目标:你会区分“规则注入”“任务复用”“能力包”“生命周期命令”和“分发包”,避免把所有扩展能力混成一团。
1. 先看职责图
flowchart TD
Need["要扩展 Copilot"] --> Rule{"每次都要遵守?"}
Rule -->|是| Instructions["Custom instructions"]
Rule -->|否| Repeat{"是否重复任务?"}
Repeat -->|否| Prompt["普通 prompt"]
Repeat -->|是| Assets{"需要脚本/示例/资源?"}
Assets -->|否| PromptFile["Prompt file"]
Assets -->|是| Skill["Agent skill"]
Skill --> Lifecycle{"需要固定生命周期执行?"}
Lifecycle -->|是| Hook["Hook"]
Lifecycle -->|否| Package{"需要跨团队分发?"}
Hook --> Package
Package -->|是| Plugin["Plugin"]
Package -->|否| Local["项目内维护"]
这个图的核心判断是:规则归规则,流程归流程,命令归命令,分发归分发。
五类能力对照表(新手速查)
光看流程图还是抽象。把"团队办公"类比一下:
| 能力 | 团队办公类比 | 加载时机 | 失败影响 | 何时该升级 |
|---|---|---|---|---|
| Custom instructions | 工位墙上的便利贴:永远在视线里 | 每次相关请求自动注入 | 规则错 → Copilot 一直按错的做 | 同一规则在 ≥2 个 prompt 里手抄过,立刻沉淀进 instructions |
| Prompt file | 抽屉里的固定流程清单:要做就取 | 你显式调用 /<name> 时加载 | 单次任务跑偏 | 同一 prompt 用过 ≥3 次,每次都基本一样,沉淀成 prompt file |
| Agent skill | 部门工具箱:含说明 + 脚本 + 示例 | 任务相关时 agent 自动加载 | 加载链断裂 / 脚本路径错 → 安静失败 | prompt file 满足不了,需要附脚本和示例 |
| Hook | 流水线上的检查工位:固定时机执行 | agent 生命周期固定节点(Pre/PostToolUse 等) | 命令报错可能阻断 agent 整个会话 | 必须强制阻断、记录、审批的危险操作(rm / 写敏感路径) |
| Plugin | 外购的能力包:装上就能用 | 安装后按上面四种机制工作 | 来源不可信 → 任意机器执行风险 | 公司多团队复用同一套规则 + 工具 |
新手起步顺序:先写 instructions(10 分钟搞定的便利贴)→ 用一周后把高频 prompt 沉淀成 prompt file → 真有需要脚本时再升 skill → 必须强制控制时才上 hook → 公司级才考虑打 plugin。反过来从 plugin 起步基本都返工。
2. Instructions:长期规则
Custom instructions 适合稳定、长期、广泛适用的项目规则。GitHub 官方响应定制页列出五种来源——personal(个人偏好)、repository-wide(仓库通用,写在 .github/copilot-instructions.md)、path-specific(路径专用,写在 .github/instructions/**)、agent instructions(agent 专用,如 AGENTS.md)、organization instructions(组织级),并说明它们有不同优先级。
适合:
- 项目目录职责。
- 技术栈和版本约束。
- 编码规范、测试命令、审查要求。
- 安全红线和敏感文件边界。
不适合:
- 一次性任务。
- 临时 bug 方案。
- 密钥、账号、客户信息。
- 过期迁移说明。
- 和已有规则冲突的偏好。
3. Prompt files:重复任务
Prompt files 适合复用一类请求,例如:
- “按团队规范写测试。”
- “做一次 API 兼容性审查。”
- “生成 release note 草稿。”
- “按 PR 模板总结变更。”
它比 instructions 更适合任务型内容,因为不会污染每一次 Copilot 请求。任务经常用、但不是每次都要用,就放 prompt file。
4. Skills:能力包
VS Code 官方 Agent Skills 文档把 skill 定义为一组文件夹,里面可以有 instructions、scripts、examples 和 resources。Copilot 会在相关任务里加载它们,帮助完成特定能力。
适合 skill:
- 测试工作流:测试命令、样例、失败排查脚本。
- 安全审计:检查清单、敏感路径、报告模板。
- 文档发布:frontmatter、截图流程、链接检查脚本。
- 迁移任务:阶段步骤、验证命令、回滚策略。
一个 skill 目录至少要有 SKILL.md。如果要用脚本或示例,SKILL.md 必须显式引用它们,否则 agent 可能不会加载。
5. Hooks:生命周期控制
Hook 不是知识包,而是固定时机执行的 shell command。VS Code hooks 当前处于公开预览(public preview),Copilot CLI 也提供 hooks 能力。
典型用途:
PreToolUse:命令执行前检查 allowlist。PostToolUse:文件编辑后跑 formatter、lint 或日志记录。UserPromptSubmit:记录请求或注入可审计上下文。SessionStart:检查项目状态。PreCompact:压缩上下文前保存关键状态。Stop:会话结束时做收尾记录。
Hook 风险更高,因为它真的会执行命令。上线前要验证命令可重复运行、失败可解释、日志不含密钥、受保护路径不能绕过。
6. Plugins:分发载体
Plugin 适合把 skills、custom agents、hooks、MCP server configurations 等组合打包分发。它解决的是安装、更新、卸载、版本管理,不是单个任务提示词。
适合 plugin:
- 公司级工程规范包。
- 多仓库共用测试和发布工作台。
- skill、hook、MCP server 组合能力。
- 需要版本和回滚的团队级分发。
安装 plugin 前,要像审代码一样看 manifest、脚本、权限、网络目标、更新机制和发布者。
7. 落地顺序
推荐顺序:
- 先写最小 instructions。
- 把重复任务沉淀成 prompt files。
- 需要脚本、示例、资源时升级成 skill。
- 必须强制校验、记录、阻断或审批时加入 hook。
- 需要跨团队安装更新时打成 plugin。
不要反过来。刚开始就做 plugin,通常会把还没稳定的 prompt、脚本和权限一起固化。
本章自检
上线前确认:
- 这个能力解决的是规则、任务复用、专业能力、生命周期控制,还是分发?
- 是否有 owner、版本、验证任务和回滚方式?
- 是否会执行 shell 命令、访问网络或读取敏感文件?
- 是否只在合适入口加载?
- 是否能被禁用、卸载或替换?
通过标准:每个扩展能力都能说清职责、触发条件、权限和验证证据。
官方来源
- About customizing GitHub Copilot responses:官方 custom instructions 和 prompt files 边界。
- Use Agent Skills in VS Code:VS Code 官方 Agent Skills 定义、位置和
SKILL.md。 - Agent hooks in Visual Studio Code:VS Code 官方 hooks 和 Preview 边界。
- Agent plugins in VS Code:VS Code 官方 agent plugins 说明。
- Comparing GitHub Copilot CLI customization features:GitHub 官方 CLI 定制能力对比。