Hooks 简介

似乎人们对 Hooks 的讨论还不够多。

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

本指南详细介绍了什么是 Hooks、它们的工作原理以及如何利用它们来自动化你的工作流程。

先决条件

开始之前:你需要安装 VS Code Insiders,并设置好 GitHub Copilot 和 GitHub Copilot Chat 扩展并完成登录。

什么是 Hooks?

Hooks 允许你在 Agent 会话期间的特定生命周期点执行自定义 Shell 命令。

Hooks 无需手动运行任务,而是让你定义在响应事件时自动执行的操作。这使它们成为自动化、验证和强制执行工作流程一致性的理想选择。

总体而言,Hooks 通常用于:

  • 自动化重复性任务
  • 强制执行安全或编码规范
  • 在执行前后验证变更
  • 与外部工具集成

生命周期事件(Hooks 的运行位置)

VS Code 支持八种在 Agent 会话期间特定点触发的 Hook 事件:

Hook 事件 触发时机 常见用例
SessionStart 用户提交新会话的第一个 Prompt 初始化资源、记录会话开始、验证项目状态
UserPromptSubmit 用户提交 Prompt 审计用户请求、注入系统上下文
PreToolUse Agent 调用任何工具之前 阻止危险操作、要求审批、修改工具输入
PostToolUse 工具成功执行完成后 运行格式化程序、记录结果、触发后续操作
PreCompact 对话上下文被压缩之前 导出重要上下文、在截断前保存状态
SubagentStart 启动子 Agent 时 跟踪嵌套 Agent 使用情况、初始化子 Agent 资源
SubagentStop 子 Agent 完成任务时 汇总结果、清理子 Agent 资源
Stop(停止) Agent 会话结束 生成报告、清理资源、发送通知

Hooks 依赖于生命周期事件,这些事件决定了它们何时运行。

这些事件充当了 Agent 会话期间的触发点。例如,Hook 可能在会话开始时、提交 Prompt 时或工具完成工作后运行。

选择正确的生命周期事件至关重要,因为它决定了你的自动化操作实际发生的时间。

示例:使用 Prettier 进行自动格式化

Hooks 最实用的示例之一是自动格式化代码。

在这种情况下,配置一个 Hook 在每次文件编辑后运行 Prettier。系统会自动确保一切保持一致,而无需手动格式化文件。

核心理念很简单:一旦定义了操作,它就会在每次满足条件时自动运行,无需人工干预。

创建 Hook

要创建 Hook,你可以使用“Agent 自定义”视图并直接生成一个。

例如,你可以创建一个 Hook 来:

  • 自动运行 Prettier
  • 在工具完成后触发(Post Tool Use)
  • 通过 Shell 脚本执行

Copilot 可以根据你的描述为你生成 Hook,包括必要的配置和命令。

示例:Hook 运行实操

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

创建 Hook 后,你可能需要重新加载环境以激活它。一旦激活,它就会根据你定义的生命周期事件自动运行。

Screenshot of a README file before the Prettier hook formats it

当你进行更改(例如更新 README 文件中的文本)时,Hook 会在后台触发。

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

结果立竿见影:文件无需额外输入即可更新并完成格式化。Hook 会在后台默默为你处理这些工作。

为什么 Hooks 很重要?

Hooks 将自动化提升到了一个新的高度。

与 Prompt、指令甚至技能不同,Hooks 不需要你显式地触发它们。当满足特定条件时,它们会自动运行。

这改变了你的工作方式:

  • 任务在后台自动完成
  • 一致性得到自动强制执行
  • 工作流程变得无缝衔接

Hooks 代表了一种转变:

手动执行 → 事件驱动的自动化

你不再需要要求 AI 做某事,而是定义它应该在何时发生,然后让系统代为处理。

后续计划

Hooks 有助于在无需输入的情况下实现工作流程自动化。

如果你想了解 Hooks、Agents、Skills 和 Instructions 是如何协同工作的,下一步是将它们作为一个完整的系统进行对比研究。

了解更多

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