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 定製能力對比。