[ PROMPT_NODE_24888 ]
钩子迁移指南
[ SKILL_DOCUMENTATION ]
# 从基础钩子迁移到高级钩子
本指南展示了如何从基础命令钩子迁移到高级基于提示词的钩子,以获得更好的可维护性和灵活性。
## 为什么要迁移?
基于提示词的钩子具有以下优势:
- **自然语言推理**:大模型理解上下文和意图
- **更好的边缘情况处理**:适应意外场景
- **无需 Bash 脚本**:编写和维护更简单
- **更灵活的验证**:无需编程即可处理复杂逻辑
## 迁移示例:Bash 命令验证
### 之前(基础命令钩子)
**配置:**
{
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "bash validate-bash.sh"
}
]
}
]
}
**脚本 (validate-bash.sh):**
bash
#!/bin/bash
input=$(cat)
command=$(echo "$input" | jq -r '.tool_input.command')
# Hard-coded validation logic
if [[ "$command" == *"rm -rf"* ]]; then
echo "Dangerous command detected" >&2
exit 2
fi
**问题:**
- 仅检查精确的 "rm -rf" 模式
- 无法捕获如 `rm -fr` 或 `rm -r -f` 等变体
- 漏掉其他危险命令 (`dd`, `mkfs` 等)
- 无上下文感知
- 需要 Bash 脚本知识
### 之后(高级提示词钩子)
**配置:**
{
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "prompt",
"prompt": "Command: $TOOL_INPUT.command. Analyze for: 1) Destructive operations (rm -rf, dd, mkfs, etc) 2) Privilege escalation (sudo) 3) Network operations without user consent. Return 'approve' or 'deny' with explanation.",
"timeout": 15
}
]
}
]
}
**优势:**
- 捕获所有变体和模式
- 理解意图,而非仅仅是字面字符串
- 无需脚本文件
- 易于添加新标准
- 上下文感知决策
- 拒绝时提供自然语言解释