钩子专为需要细粒度控制 Cascade 行为的高级用户和企业团队设计。使用它需要具备基本的 shell 脚本知识。
你可以实现什么
- 日志记录与分析:跟踪每次文件读取、代码更改、执行的命令、用户提示或 Cascade 响应,用于合规和用量分析
- 安全控制:阻止 Cascade 访问敏感文件、运行危险命令或处理违反策略的提示
- 质量保证:在代码修改后自动运行 lint 工具、格式化工具或测试
- 自定义工作流程:与问题跟踪系统、通知系统或部署流水线集成
- 团队标准化:在你的组织内统一执行编码标准和最佳实践
钩子如何工作
- 接收上下文 (有关当前执行操作的详细信息) ,以 JSON 格式通过标准输入传入
- 执行你的脚本——Python、Bash、Node.js 或任何可执行程序
- 返回结果,通过退出码和输出流返回
2 退出来阻止该操作。因此,前置钩子非常适合用于实现安全策略或执行验证检查。
配置
系统级
- macOS:
/Library/Application Support/Windsurf/hooks.json - Linux/WSL:
/etc/windsurf/hooks.json - Windows:
C:\ProgramData\Windsurf\hooks.json
用户级
- Devin Desktop IDE:
~/.codeium/windsurf/hooks.json - JetBrains Plugin:
~/.codeium/hooks.json
工作区级
- 位置:工作区根目录中的
.windsurf/hooks.json
来自这三个位置的钩子会合并。如果同一钩子事件在多个位置都已配置,所有钩子都会按顺序执行:system → user → workspace。
基本结构
pre_read_code 同时指定了 macOS/Linux 命令和 Windows PowerShell 命令。post_write_code 钩子仅指定了 command,因此它会在 macOS/Linux 上运行,并在 Windows 上自动切换为 PowerShell。
配置选项
跨平台行为
command 和 powershell 字段让你可以在同一份配置中为不同平台定义合适的命令。这对于同时使用 macOS/Linux 和 Windows 的团队尤其有用。
关于
working_directory 参数:- 在多仓库工作区中,默认位置是当前正在处理的仓库根目录
- 相对路径从默认位置 (工作区或仓库根目录) 开始解析
- 支持绝对路径
- 不支持使用
~展开主目录
钩子事件
通用输入结构
在下面的示例中,为简洁起见,省略了这些通用字段。钩子事件主要分为十二种类型:
pre_read_code
file_path 也可能是目录路径。
post_read_code
file_path 也可能是目录路径。
pre_write_code
post_write_code
pre_run_command
post_run_command
pre_mcp_tool_use
post_mcp_tool_use
pre_user_prompt
show_output 配置选项对此钩子不生效。
post_cascade_response
response 字段包含自上次用户输入以来 Cascade 响应中的 Markdown 格式内容。其中包括 planner 响应、工具操作 (文件读取、写入、命令) 以及 Cascade 执行的任何其他步骤。它还包含哪些规则被触发的信息。有关如何解析规则使用情况,请参阅跟踪已触发规则示例。
show_output 配置选项不适用于此钩子。
post_cascade_response_with_transcript
post_cascade_response。不同的是,此钩子不会直接以内联方式提供 Markdown 摘要,而是将完整的对话转录 (从对话开始时算起) 写入本地 JSONL 文件,并提供该文件路径。
用例:企业级审计与合规日志记录、跟踪 AI 生成的贡献、将转录内容提供给外部可观测性或分析工具
输入 JSON:
transcript_path 指向位于 ~/.windsurf/transcripts/{trajectory_id}.jsonl 的一个 JSONL 文件。每一行都是一个 JSON 对象,表示对话中的一个步骤,包含 type 和 status 字段,以及该步骤特有的数据。例如:
0600 权限写入。Devin Desktop 会自动将 transcripts 目录限制为 100 个文件,并按修改时间删除最旧的文件。
show_output 配置选项不适用于此钩子。
下表展示了 post_cascade_response 和 post_cascade_response_with_transcript 钩子之间的主要区别:
post_setup_worktree
.env 文件或其他未跟踪文件复制到 worktree 中,安装依赖,运行初始化脚本
环境变量:
输入 JSON:
退出码
请注意,如果
show_output 为 true,用户可以在 Cascade UI 中看到钩子生成的所有标准输出和标准错误。
用例示例
记录 Cascade 的所有操作
log_input.py):
限制文件访问
block_read_access.py):
阻止危险命令
block_dangerous_commands.py):
拦截违反组织政策的提示
block_bad_prompts.py):
记录 Cascade 响应
log_cascade_response.py):
跟踪已触发的规则
track_rules.py):
Always On- 始终启用的规则Model Decision- 将规则说明展示给模型,由模型决定是否应用的规则Manual- 在用户输入中通过 @ 明确提及的规则Global- 来自global_rules.md的全局规则Glob- 因访问匹配 glob 模式的文件而触发的规则
这里记录的是哪些规则被呈现给了模型,或因文件访问而被触发,但并不表示模型实际遵循了某条规则。对话中近期已经展示过的规则会被去重,可能不会立即再次出现。
编辑后运行代码格式化工具
format_code.sh):
配置 worktree
.windsurf/hooks.json) :
hooks/setup_worktree.sh):
最佳实践
安全
- 验证所有输入:绝不要在未经验证的情况下信任输入的 JSON,尤其是涉及文件路径和命令时。
- 使用绝对路径:始终在钩子配置中使用绝对路径,以避免歧义。
- 保护敏感数据:避免记录 API key 或凭据等敏感信息。
- 检查权限:确保你的钩子脚本具有适当的文件系统权限。
- 部署前审计:将任何钩子命令和脚本加入配置前,都要先审查。
- 隔离测试:在主开发机器上启用钩子之前,先在测试环境中运行。
性能注意事项
- 保持钩子高效:过慢的钩子会影响 Cascade 的响应速度。尽量将执行时间控制在 100 毫秒以内。
- 使用异步操作:对于非阻塞钩子,可考虑以异步方式将日志写入队列或数据库。
- 尽早过滤:在脚本开头检查 action 类型,避免不必要的处理。
错误处理
- 始终验证 JSON:使用 try-catch 块,妥善处理格式不正确的输入。
- 正确记录错误:将错误写入
stderr,以便在启用show_output时能够看到。 - 安全地失败:如果你的钩子遇到错误,请考虑是应该阻止该 action,还是允许其继续执行。
测试你的钩子
- 从日志记录开始:先实现一个简单的日志记录钩子,借此了解数据流。
- 使用
show_output: true:在开发过程中启用输出,以查看你的钩子在执行什么操作。 - 测试拦截行为:验证退出码 2 是否会在前置钩子中正确拦截操作。
- 检查所有代码路径:在脚本中同时测试成功和失败两种情况。
企业级分发
- 云端仪表板 - 通过 Devin Desktop 仪表板中的团队设置配置钩子
- 系统级文件 - 通过 MDM 或配置管理工具部署钩子
云端仪表板配置
- Enterprise 套餐
TEAM_SETTINGS_UPDATE权限
- 在 Devin Desktop 仪表板中前往 团队设置
- 找到 Cascade Hooks 部分
- 以 JSON 格式输入你的钩子配置
- 保存更改
合并多个团队配置时,钩子会按 action 合并,而不是相互覆盖。这意味着所有适用团队配置中的钩子都会一起运行。
系统级文件部署
hooks.json 配置文件部署到以下操作系统对应的位置:
macOS:
/usr/local/share/windsurf-hooks/) 。
系统级钩子的优先级高于用户级和工作区钩子,最终用户在没有 root 权限的情况下无法将其禁用。
MDM 和配置管理
- Jamf Pro (macOS) - 通过配置描述文件或脚本部署
- Microsoft Intune (Windows/macOS) - 使用 PowerShell 脚本或策略下发
- Workspace ONE、Google Endpoint Management 以及其他 MDM 解决方案
- Ansible、Puppet、Chef、SaltStack - 利用你现有的基础架构自动化能力
- 自定义部署脚本 - Shell 脚本、PowerShell,或你常用的工具
验证与审计
重要:系统级钩子完全由你的 IT 或安全团队负责管理。Devin Desktop 不会在系统级路径下部署或管理文件。请确保你的内部团队按照你的组织的政策处理部署、更新和合规要求。
团队项目的工作区钩子
其他资源
- MCP 集成:详细了解 Devin Desktop 中的 Model Context Protocol
- 工作流程:了解如何将钩子与 Cascade 工作流程 结合使用
- 分析:通过 团队分析 跟踪 Cascade 用量

