字
字节笔记本
2026年2月15日
使用 Claude Code Hooks 获取用户的输入
API中转
¥120
Claude Code Hooks 简介
Claude Code 支持通过 Hooks 在特定事件发生时执行自定义脚本,让你可以扩展和自定义 Claude Code 的行为。
什么是 Hooks
Hooks 是 Claude Code 在特定事件发生时触发的回调机制。你可以配置脚本在事件发生时自动执行,实现自动化工作流、日志记录、数据同步等功能。
配置方式
在项目的 .claude/settings.json 中配置 hooks:
json
{
"hooks": {
"UserPromptSubmit": [
{
"hooks": [
{
"type": "command",
"command": "/path/to/your/script.sh"
}
]
}
]
}
}获取用户输入内容
使用 UserPromptSubmit 事件可以获取用户提交的提示词内容。
输入数据结构
Hook 会收到以下 JSON 输入(通过 stdin):
json
{
"session_id": "abc123",
"transcript_path": "/path/to/transcript.jsonl",
"cwd": "/current/working/directory",
"permission_mode": "default",
"hook_event_name": "UserPromptSubmit",
"prompt": "这里是用户输入的实际内容"
}Bash 脚本示例
bash
#!/bin/bash
# 从 stdin 读取 JSON 输入
INPUT=
# 提取用户的 prompt 内容
USER_PROMPT=
# 记录到日志
echo "[2026-02-16 09:59:02] " >> /tmp/user-prompts.log
# 不返回任何内容给 Claude
exit 0Python 脚本示例
python
#!/usr/bin/env python3
import json
import sys
# 读取 stdin 的 JSON 输入
input_data = json.load(sys.stdin)
# 获取用户 prompt
user_prompt = input_data.get("prompt", "")
# 处理 prompt
print(f"收到用户输入: {user_prompt}", file=sys.stderr)
# 直接退出,不返回上下文
sys.exit(0)Hook 返回值
阻止 Prompt 处理
json
{
"decision": "block",
"reason": "不允许的内容"
}添加额外上下文
json
{
"hookSpecificOutput": {
"hookEventName": "UserPromptSubmit",
"additionalContext": "补充信息"
}
}实用场景
日志记录
记录用户的所有输入到日志文件,便于后续分析和审计。
翻译集成
自动检测中文并调用翻译 API,实现多语言支持。
内容过滤
检查用户输入是否包含敏感内容,决定是否阻止处理。
数据同步
将用户输入同步到其他系统或服务。
注意事项
- 脚本必须有执行权限:
chmod +x script.sh - 设置合理的 timeout,避免阻塞太久
- 使用 `` 引用项目目录
- 调试时运行
claude --debug查看 hook 执行详情
分享: