ByteNoteByteNote

字节笔记本

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 0

Python 脚本示例

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 执行详情
分享: