Hooks 介紹

似乎沒有人對 Hooks 進行足夠的討論。

但它們可能是目前 VS Code 中最強大的功能之一。

本指南將詳細解析什麼是 Hooks、它們如何運作,以及如何利用它們來自動化您的工作流程。

先決條件

開始之前:您需要安裝 VS Code Insiders,並完成 GitHub Copilot 和 GitHub Copilot Chat 擴充功能的設定與登入。

什麼是 Hooks?

Hooks 允許您在代理程式(agent)工作階段的特定生命週期點執行自訂 Shell 指令。

Hooks 不再需要手動執行任務,而是讓您定義在事件發生時會自動執行的動作。這使其成為自動化、驗證及確保工作流程一致性的理想選擇。

總體而言,Hooks 通常用於:

  • 自動化重複性任務
  • 強制執行安全或編碼標準
  • 在執行前後驗證變更
  • 與外部工具整合

生命週期事件(Hooks 的執行時機)

VS Code 支援八種 Hook 事件,會在代理程式工作階段的特定時間點觸發:

Hook 事件 觸發時機 常見用途
SessionStart 使用者提交新工作階段的第一個提示(prompt)時 初始化資源、記錄工作階段開始、驗證專案狀態
UserPromptSubmit 使用者提交提示時 稽核使用者請求、注入系統內容
PreToolUse 代理程式呼叫任何工具之前 阻擋危險操作、要求審核、修改工具輸入
PostToolUse 工具成功完成後 執行格式化工具、記錄結果、觸發後續動作
PreCompact 對話內容壓縮之前 匯出重要內容、在截斷前儲存狀態
SubagentStart 子代理程式(Subagent)啟動時 追蹤巢狀代理程式使用情況、初始化子代理程式資源
SubagentStop 子代理程式完成任務時 彙整結果、清理子代理程式資源
Stop (停止) SessionStop 代理程式工作階段結束時

生成報告、清理資源、發送通知

Hooks 依賴生命週期事件,這些事件決定了它們何時執行。

這些事件在代理程式工作階段中充當觸發點。例如,Hook 可能在工作階段開始、提交提示時或工具完成工作後執行。

範例:使用 Prettier 自動格式化

選擇正確的生命週期事件至關重要,因為它定義了您的自動化實際上何時發生。

Hooks 最實用的範例之一是自動格式化程式碼。

在這種情況下,設定一個 Hook 在每次檔案編輯後執行 Prettier。系統會確保一切保持一致,而無需手動格式化檔案。

建立 Hook

核心概念很簡單:一旦定義了動作,它就會在每次觸發時自動執行,無需人工介入。

要建立 Hook,您可以使用「代理程式自訂」(Agent Customizations)檢視並直接產生一個。

  • 例如,您可以建立一個 Hook 來:
  • 自動執行 Prettier
  • 在工具執行完成後觸發(post tool use)

透過 Shell 指令碼執行

範例:Hook 實際運作

Screenshot of a hook configuration that runs Prettier automatically after a tool completes

Copilot 可以根據您的描述為您產生 Hook,包括必要的設定和指令。

Screenshot of a README file before the Prettier hook formats it

建立 Hook 後,您可能需要重新載入環境以啟用它。一旦啟用,它就會根據您定義的生命週期事件自動執行。

Screenshot of the README file after the Prettier hook automatically formats it

當您進行變更(例如更新 README 檔案中的文字)時,Hook 會在背景觸發。

為什麼 Hooks 很重要

結果是即時的:檔案在無需額外輸入的情況下被更新並格式化。Hook 會默默地為您處理這些工作。

Hooks 將自動化提升到了另一個層次。

與提示(prompts)、指令(instructions)或技能(skills)不同,Hooks 不需要您明確觸發它們。當符合條件時,它們會自動執行。

  • 這改變了您的工作方式:
  • 任務在背景執行
  • 自動強制執行一致性

工作流程變得順暢無阻

Hooks 代表了從「手動執行」到「事件驅動自動化」的轉變。

您不再需要要求 AI 做某事,而是定義它應該何時發生,並讓系統處理剩下的工作。

下一步規劃

Hooks 有助於在不需要人為介入的情況下自動化工作流程。

如果您想了解 Hooks、代理程式、技能和指令如何共同運作,下一步就是將它們作為一個完整的系統來進行比較。

深入了解

© . This site is unofficial and not affiliated with Microsoft.