跳转到主要内容

Documentation Index

Fetch the complete documentation index at: https://docs.devinenterprise.com/llms.txt

Use this file to discover all available pages before exploring further.

Hooks 让你能够在 Agent 生命周期中的特定事件发生时运行自定义逻辑。你可以使用 hooks 来强制执行策略、添加上下文、记录操作、修改权限,或与外部系统集成。 Devin CLI 使用的 hook 格式与 Claude Code hooks 兼容。如果你已经为 Claude Code 配置了 hooks,它们会自动适用于 Devin CLI。

Hooks 有什么作用?

执行策略

阻止危险命令、要求对特定操作进行确认,或限制文件访问。

添加上下文

在调用特定工具时注入额外指示或信息。

触发副作用

在事件发生时执行脚本、发送通知或记录日志。

修改权限

根据具体情况动态授予或限制权限。

快速示例

在你的项目中创建 .devin/hooks.v1.json
{
  "PreToolUse": [
    {
      "matcher": "exec",
      "hooks": [
        {
          "type": "command",
          "command": "./scripts/check-command.sh"
        }
      ]
    }
  ]
}
这会在每次执行 shell 命令前运行 ./scripts/check-command.sh。该脚本会通过 stdin 接收事件数据,并可通过返回非零退出码来阻止该操作。

Hook 事件

Hook 可以响应以下生命周期事件:
事件触发时机
PreToolUse工具执行前
PostToolUse工具完成后
PermissionRequest需要做出权限决策时
UserPromptSubmit用户提交消息时
StopAgent 想要停止时
SessionStart会话开始时
SessionEnd会话结束时
有关各个事件及其可用数据的详细信息,请参阅生命周期 Hook

钩子格式

每个钩子都有一个类型 (commandprompt) 、一个可选的匹配器 (用于匹配钩子事件 tool_name 的正则表达式) ,以及配置:
{
  "PreToolUse": [
    {
      "matcher": "exec",
      "hooks": [
        {
          "type": "command",
          "command": "./scripts/validate.sh",
          "timeout": 10
        }
      ]
    }
  ]
}
Field说明
matcher用于匹配 hook 事件 tool_name 的正则表达式。空字符串或省略 matcher 时,会匹配所有工具名称。
type"command" 表示运行 shell 命令,"prompt" 表示评估 LLM 提示。
command要运行的 shell 命令 (用于 command 类型) 。
prompt要评估的 LLM 提示 (用于 prompt 类型) 。
timeout超时时间 (以秒为单位,可选) 。

命令钩子

命令钩子会执行 shell 命令。事件数据会以 JSON 格式通过 stdin 传入,命令也可以通过 stdout 返回 JSON 来控制执行结果。 输入 (stdin) :
{
  "hook_event_name": "PreToolUse",
  "tool_name": "exec",
  "tool_input": {
    "command": "rm -rf /"
  }
}
输出 (stdout——可选) :
{
  "decision": "block",
  "reason": "Destructive command blocked by policy"
}
输出字段说明
decision"approve""block""deny"
reason显示给 Agent 的说明
DEVIN_PROJECT_DIR 环境变量会自动设置为项目根目录。 内置工具名称以及可匹配的 MCP 工具名称格式,请参阅使用 Matcher

退出代码

代码含义
0成功——hook 正常继续执行
2阻止——操作被拒绝
其他错误——会被记录,但不会阻止

Hooks 的存放位置

Devin CLI 会从以下位置读取 hooks。它们都使用相同的 JSON 格式。

项目级

位置说明
.devin/hooks.v1.json独立的 hooks 文件 (推荐)
.devin/config.json配置文件中的 "hooks"
.devin/config.local.json"hooks" 键 (本地覆盖,已加入 gitignore)
.claude/settings.json"hooks" 键 (Claude Code 格式)
.claude/settings.local.json"hooks" 键 (Claude Code 格式)

用户级 (全局)

位置说明
~/.config/devin/config.json (Windows 上为 %APPDATA%\devin\config.json)用户配置中的 "hooks" 密钥
~/.claude.json"hooks" 密钥 (Claude Code 格式)
~/.claude/settings.json"hooks" 密钥 (Claude Code 格式)
~/.claude/settings.local.json"hooks" 密钥 (Claude Code 格式)
.devin/hooks.v1.json 中,hooks 对象就是整个文件 (无需外层包装密钥) 。在其他所有位置,hooks 都位于设置文件中的 "hooks" 密钥下。
启用 read_config_from.claude 时 (默认启用) ,会加载来自 .claude/ 路径的 hooks。如有需要,你可以在用户配置中禁用此功能。

检查 Hooks

使用 /hooks 斜杠命令,查看当前已加载的所有 Hooks 及其源文件:
/hooks

后续步骤

生命周期钩子

深入了解各类事件及其可用数据。

Claude Code Hooks 文档

钩子格式的完整参考文档。