实现 Claude Code 任务完成自动通知

2026年06月22日·工具效率·#AI Agent·40次浏览

摘要:本文介绍如何通过编写 Shell 脚本并接入 Claude Code 的 Hook 机制,实现任务完成或等待输入时的飞书自动通知。用户需创建脚本解析 JSON 数据,在设置文件中配置 Notification 和 Stop 事件触发该脚本,从而在远程 Vibe Coding 时无需守候电脑即可接收实时反馈。

实现 Claude Code 任务完成自动通知

前言

书接上回《随时随地 Vibe Coding 及验证》,在远程 Vibe Coding 时,输入命令后,等 Agent 完成的时候,总不能一直守着电脑或手机,那与我们随时编码的初衷相违背。

在上回最后,留了一个悬念,就是让 Claude Code 在任务完成或等待人为输入时,手动通知下我们。

编写 WebHook 脚本

首先,创建一个用于发送 Webhook 的 Shell 脚本(例如命名为 webhook-notify.sh)。该脚本会读取 Claude Code 传入的上下文信息(如项目路径、会话 ID 等),并根据触发的事件类型发送不同的通知内容。在此一样使用飞书的自定义机器人 WebHook。

以下是脚本内容:

bash
#!/bin/bash
# webhook-notify.sh

# 读取 Claude Code 通过标准输入传递的 JSON 数据
INPUT=$(cat)

# 解析 JSON 数据(需确保系统已安装 jq)
if command -v jq >/dev/null 2>&1; then
    session_id=$(echo "$INPUT" | jq -r '.session_id // "unknown"')
    project_dir=$(echo "$INPUT" | jq -r '.cwd // "unknown"')
    hook_event=$(echo "$INPUT" | jq -r '.hook_event_name // "unknown"')
else
    session_id="unknown"
    project_dir=$(pwd)
    hook_event="unknown"
fi

# 提取项目名称
project_name=$(basename "$project_dir")

# 根据事件类型构造不同的消息内容
case "$hook_event" in
    "Notification")
        message="🔔 等待输入:Claude Code 正在等待您的确认或输入。"
        ;;
    "Stop")
        message="✅ 任务完成:Claude Code 已完成当前任务。"
        ;;
    *)
        message="📢 未知事件:$hook_event"
        ;;
esac

# 替换为你的实际 Webhook URL
WEBHOOK_URL="https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxxx"

# 请求数据
full_message=$(cat <<EOF
{
    "msg_type": "interactive",
    "card": {
        "header": {
            "title": {
                "tag": "plain_text",
                "content": "${message}"
            },
            "template": "blue"
        },
        "elements": [
            {
                "tag": "div",
                "text": {
                    "tag": "lark_md",
                    "content": "📁 项目:${project_name} \n🔗 会话:${session_id:0:8}"
                }
            }
        ]
    }
}
EOF
)

echo $full_message

# 发送 POST 请求(异步执行,不阻塞 Claude)
curl -s -X POST "$WEBHOOK_URL" \
  -H 'Content-Type: application/json' \
  -d "$full_message" &

exit 0

把脚本写入到用户目录下的claude目录下,如~/.claude/shell/webhook-notify.sh,然后赋予执行权限。

bash
chmod +x webhook-notify.sh

可以在终端测试发送是否成功:

bash
echo '{"hook_event_name":"Stop","session_id":"test-session-12345","cwd":"/Users/yourname/projects/my-app"}' | /绝对路径/webhook-notify.sh

接入 Claude Code Hook

要实现自动通知,可以利用 Claude Code 的 Notification(需要用户输入/通知时)和 Stop(任务完成时)这两个生命周期事件。

打开用户目录下的 claude 设置文件 ~/.claude/setting.json,补充到hook字段中

json
{
  "hooks": {
    "Notification": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "/绝对路径/webhook-notify.sh",
            "timeout": 10
          }
        ]
      }
    ],
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "/绝对路径/webhook-notify.sh",
            "timeout": 10
          }
        ]
      }
    ]
  }
}

测试执行结果

执行 Claude Code 随便输入 hello,然后等飞书结果

测试 Claude Code
测试 Claude Code

飞书结果
飞书结果