Windows:
mkdir "%USERPROFILE%\.deepv\hooks"macOS/Linux:
mkdir -p "$HOME/.deepv/hooks"Windows:
copy "D:\Projects\dvcode\DeepVCode\.deepvcode\hooks\hook-template.bat" "%USERPROFILE%\.deepv\hooks\test-hook-logger.bat"macOS/Linux:
cp "/Users/yourname/Projects/dvcode/DeepVCode/.deepvcode/hooks/hook-template.sh" "$HOME/.deepv/hooks/test-hook-logger.sh"
chmod +x "$HOME/.deepv/hooks/test-hook-logger.sh"Windows:
{
"hooks": {
"AfterTool": [
{
"hooks": [
{
"type": "command",
"command": "cmd /c %USERPROFILE%\\.deepv\\hooks\\test-hook-logger.bat",
"timeout": 5000
}
]
}
]
}
}macOS/Linux:
{
"hooks": {
"AfterTool": [
{
"hooks": [
{
"type": "command",
"command": "$HOME/.deepv/hooks/test-hook-logger.sh",
"timeout": 5000
}
]
}
]
}
}macOS/Linux:
chmod +x "$HOME/.deepv/hooks/test-hook-logger.sh"Windows:
type "%USERPROFILE%\.deepv\hooks\hook_log.txt"macOS/Linux:
cat "$HOME/.deepv/hooks/hook_log.txt"DeepV Code 支持在系统的关键生命周期节点触发钩子。以下是所有支持的事件类型:
SessionStart: 会话初始化完成时触发。SessionEnd: 会话结束(用户退出、超时或错误)时触发。PreCompress: 聊天记录压缩前触发(当上下文过长时)。
BeforeAgent: Agent 主循环开始前触发。支持阻止执行。AfterAgent: Agent 主循环结束后触发。可以获取完整的请求和响应数据。
BeforeModel: 发送请求给 LLM 之前触发。支持修改请求内容。AfterModel: 收到 LLM 响应之后触发。支持修改响应内容。BeforeToolSelection: LLM 进行工具选择之前触发。
BeforeTool: 工具执行之前触发。AfterTool: 工具执行之后触发。Notification: 工具需要权限确认时触发。
钩子脚本通过 环境变量 和 标准输入 (stdin) 接收数据。
所有钩子都会收到以下环境变量:
DEEPV_SESSION_ID: 当前会话 IDDEEPV_HOOK_EVENT: 触发的事件名称(如BeforeModel)DEEPV_TIMESTAMP: 触发时间戳
钩子脚本可以通过读取标准输入 (stdin) 获取详细的上下文数据。数据格式为 JSON。
示例数据结构:
{
"session_id": "session_12345",
"hook_event_name": "BeforeTool",
"tool_name": "read_file",
"tool_input": {
"path": "/path/to/file.txt"
},
"cwd": "/current/working/directory"
}| 事件 | 特有数据字段 | 说明 |
|---|---|---|
BeforeTool / AfterTool |
tool_name, tool_input |
工具名称和参数 |
AfterTool |
tool_response |
工具执行结果 |
BeforeModel |
model, contents |
模型名称和请求内容 |
AfterModel |
model, response |
模型名称和响应内容 |
BeforeAgent |
prompt |
用户的输入提示词 |
AfterAgent |
prompt, response |
用户输入和 AI 响应 |
SessionStart |
source |
启动来源 (startup, resume) |
SessionEnd |
reason |
结束原因 (exit, error, timeout) |
某些钩子允许脚本通过输出特定的 JSON 来修改 DeepV Code 的行为。
脚本输出 JSON:
{
"action": "modify_request",
"modifications": {
"contents": [...] // 新的请求内容
}
}脚本输出 JSON:
{
"action": "stop",
"reason": "安全策略拦截:检测到敏感关键词"
}脚本输出 JSON:
{
"action": "modify_response",
"modifications": {
"response": {...} // 新的响应对象
}
}matcher 是一个字段,用来指定钩子仅在特定工具执行后触发。支持三种匹配方式:
只在执行指定工具时触发:
{
"hooks": {
"AfterTool": [
{
"matcher": "read_file",
"hooks": [
{
"type": "command",
"command": "cmd /c %USERPROFILE%\\.deepv\\hooks\\test-hook-logger.bat",
"timeout": 5000
}
]
}
]
}
}效果:只在执行 read_file 工具后触发钩子
使用正则表达式匹配多个工具:
{
"matcher": "read_.*",
"hooks": [...]
}效果:匹配所有以 read_ 开头的工具(read_file, read_many_files, read_lints)
使用正则表达式的选择符:
{
"matcher": "^(read_file|write_file|replace)$",
"hooks": [...]
}效果:只在执行 read_file、write_file 或 replace 工具后触发
省略 matcher 字段表示匹配所有工具:
{
"hooks": [...]
}效果:任何工具执行后都会触发钩子
| 场景 | Matcher | 说明 |
|---|---|---|
| 所有文件操作 | .*file.* |
匹配名称包含 "file" 的工具 |
| 所有读取操作 | read_.* |
匹配所有 read_ 开头的工具 |
| 所有写入操作 | ^(write_file|replace)$ |
精确匹配写入工具 |
| Shell 命令 | run_shell_command |
仅在执行 shell 时触发 |
| 搜索操作 | (search_file_content|google_web_search) |
匹配搜索工具 |
| Web 操作 | web_.* |
匹配所有 web_ 开头的工具 |
| 任何工具 | (省略) | 不写 matcher 字段 |
核心内置工具(21 个):
read_file- 读取文件内容write_file- 写入文件内容replace- 替换文件内容(编辑)delete_file- 删除文件
list_directory- 列出目录内容glob- 按模式查找文件
search_file_content- 在文件中搜索文本(使用正则表达式)read_lints- 读取代码检查诊断
lint_fix- 自动修复代码检查错误read_many_files- 一次读取多个文件
run_shell_command- 执行 shell 命令
web_fetch- 从 URL 获取内容google_web_search- Google 网络搜索
ppt_outline- 管理 PowerPoint 大纲ppt_generate- 生成 PowerPoint 演示文稿
save_memory- 保存信息到长期记忆todo_write- 管理待办事项task- 任务/工作流管理(VSCode 插件模式下禁用)
use_skill- 激活和加载技能list_available_skills- 列出可用技能get_skill_details- 获取技能详细信息
动态工具:
- MCP 服务器工具:从配置的 MCP 服务器动态发现
- 格式:
{serverName}__{toolName} - 例如:
context7__search来自 Context7 MCP 服务器
- 格式:
- 命令行发现工具:从
toolDiscoveryCommand配置发现
{
"hooks": {
"AfterTool": [
{
"description": "所有文件读取操作",
"matcher": "^(read_file|read_many_files)$",
"hooks": [...]
},
{
"description": "所有文件修改操作",
"matcher": "^(write_file|replace|delete_file)$",
"hooks": [...]
},
{
"description": "所有搜索操作",
"matcher": "^(search_file_content|google_web_search)$",
"hooks": [...]
},
{
"description": "Shell 命令",
"matcher": "run_shell_command",
"hooks": [...]
},
{
"description": "所有工具(不指定 matcher)",
"hooks": [...]
}
]
}
}{
"hooks": {
"SessionStart": [
{
"hooks": [{ "type": "command", "command": "echo 'Session Started' >> session.log" }]
}
],
"BeforeAgent": [
{
"hooks": [{ "type": "command", "command": "python check_policy.py" }]
}
],
"AfterTool": [
{
"matcher": "^(write_file|replace)$",
"hooks": [{ "type": "command", "command": "git add . && git commit -m 'Auto commit'" }]
}
],
"SessionEnd": [
{
"hooks": [{ "type": "command", "command": "echo 'Session Ended' >> session.log" }]
}
]
}
}| 操作 | Windows | macOS/Linux |
|---|---|---|
| 主目录变量 | %USERPROFILE% |
$HOME |
| 创建目录 | mkdir "%USERPROFILE%\.deepv\hooks" |
mkdir -p "$HOME/.deepv/hooks" |
| 拷贝模板 | copy src dst |
cp src dst |
| 权限设置 | 无需 | chmod +x |
| 查看日志 | type file |
cat file |
| 命令写法 | "cmd /c %USERPROFILE%\\.deepv\\hooks\\script.bat" |
"$HOME/.deepv/hooks/script.sh" |