DSCC
主页 / guides / hooks

钩子

钩子是 DSCC 在工具调用前后执行的 shell 命令。在 settings.hooks.PreToolUse[]settings.hooks.PostToolUse[] 中声明(shell 命令数组,config.rs:568–572)。

事件

定义在 crates/runtime/src/hooks.rs:8–21

事件 触发时机
PreToolUse 工具执行前
PostToolUse 工具返回后

Stdin 载荷

每个钩子从 stdin 读取 JSON(hooks.rs:118–126):

{
  "hook_event_name": "PreToolUse",
  "tool_name": "bash",
  "tool_input": {...},
  "tool_input_json": "{...}",
  "tool_output": null,
  "tool_result_is_error": false
}

环境变量

在钩子运行前设置(hooks.rs:169–178):

变量 是否出现
HOOK_EVENT 总是
HOOK_TOOL_NAME 总是
HOOK_TOOL_INPUT 总是(JSON)
HOOK_TOOL_IS_ERROR 总是
HOOK_TOOL_OUTPUT PostToolUse

退出码

来自 hooks.rs:164–213

退出码 效果 stdout 含义
0 放行 信息性消息
2 拒绝 拒绝理由
其他 警告并继续
信号 警告并继续

Shell

系统 调用方式
Unix /bin/sh -lc(hooks.rs:76–103)
Windows cmd /C(hooks.rs:76–103)

示例 · 拒绝 rm -rf /

{
  "hooks": {
    "PreToolUse": [
      "if [ \"$HOOK_TOOL_NAME\" = \"bash\" ] && echo \"$HOOK_TOOL_INPUT\" | grep -q 'rm -rf /'; then echo 'refusing rm -rf /' >&2; exit 2; fi"
    ]
  }
}

相关