[ PROMPT_NODE_24886 ]
高级钩子用法
[ SKILL_DOCUMENTATION ]
# 高级钩子用例
本参考指南涵盖了用于复杂自动化工作流的高级钩子模式和技术。
## 多阶段验证
结合命令钩子和提示词钩子进行分层验证:
{
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "bash ${CLAUDE_PLUGIN_ROOT}/scripts/quick-check.sh",
"timeout": 5
},
{
"type": "prompt",
"prompt": "Deep analysis of bash command: $TOOL_INPUT",
"timeout": 15
}
]
}
]
}
**用例:** 先进行快速确定性检查,随后进行智能分析。
**quick-check.sh 示例:**
bash
#!/bin/bash
input=$(cat)
command=$(echo "$input" | jq -r '.tool_input.command')
# Immediate approval for safe commands
if [[ "$command" =~ ^(ls|pwd|echo|date|whoami)$ ]]; then
exit 0
fi
# Let prompt hook handle complex cases
exit 0
命令钩子快速批准明显安全的命令,而提示词钩子则分析其余所有情况。
## 条件钩子执行
根据环境或上下文执行钩子:
bash
#!/bin/bash
# Only run in CI environment
if [ -z "$CI" ]; then
echo '{"continue": true}' # Skip in non-CI
exit 0
fi
# Run validation logic in CI
input=$(cat)
# ... validation code ...
**用例:**
- CI 与本地开发环境的不同行为
- 项目特定验证
- 用户特定规则
**示例:为受信任用户跳过某些检查:**
bash
#!/bin/bash
# Skip detailed checks for admin users
if [ "$USER" = "admin" ]; then
exit 0
fi
# Full validation for other users
input=$(cat)
# ... validation code ...
## 通过状态进行钩子链式调用
使用临时文件在钩子之间共享状态:
bash
# Hook 1: Analyze and save state
#!/bin/bash
input=$(cat)
command=$(echo "$input" | jq -r '.tool_input.command')
# Analyze command
risk_level=$(calculate_risk "$command")
echo "$risk_level" > /tmp/hook-state-$$
exit 0
bash
# Hook 2: Use saved state
#!/bin/bash
risk_level=$(cat /tmp/hook-state-$$ 2>/dev/null || echo "unknown")
if [ "$risk_level" = "high" ]; then
echo "High risk operation detected" >&2
exit 2
fi
**重要:** 这仅适用于顺序钩子事件(例如 PreToolUse 后接 PostToolUse),不适用于并行钩子。