claude code运行完后弹出提示,防止摸鱼过头

今天突然发现,让claude code 后台改代码然后我去逛L站,逛着逛着就忘了,所以写了一个很简单的hook,等他回答完成后弹出提示,如下所示:我的是windows。
改一下个人用户目录下的 .claude/settings.json即可:

"hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "cmd /c msg * \"Claude Code 回答完成!\""
          }
        ]
      }
    ]
  }

如果想调用系统通知可以用下面的:

 "hooks": {
    "Stop": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "powershell -Command \"& {[Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType=WindowsRuntime] | Out-Null; $template = [Windows.UI.Notifications.ToastNotificationManager]::GetTemplateContent([Windows.UI.Notifications.ToastTemplateType]::ToastText01); @($template.GetElementsByTagName('text'))[0].AppendChild($template.CreateTextNode('ClaudeCode运行完成!')) | Out-Null; [Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier('ClaudeCode通知').Show([Windows.UI.Notifications.ToastNotification]::new($template));}\""
          }
        ]
      }
    ]
  },

57 个赞

太权威了,建议弹出窗口加上 站内佬友的NSFW随机壁纸,不关闭就社死

20 个赞

哈哈哈哈,权威

1 个赞

佬,这个ssh远程链接,好像就弹不出了吧?

1 个赞

ssh 的话,换成 beep,可能会好一些。

1 个赞

那可真是太社死了啊。。 :rofl:

2 个赞

好的,研究一下

emmm 这么做有啥用

1 个赞

可太有用了,等ai回答的时候可以干点别的事,回答完毕弹窗提示你

不过使用win的系统通知可能会更优雅,但我也不知道什么调用

1 个赞

mark

1 个赞

不知道还是可以问ai, 安装BurntToast后可以在powershell调用系统通知

更新了一下,让ai写了一手

1 个赞

瞎搞,摸鱼怎么能够分心呢,该打啊 :tieba_033:

1 个赞

我亲你一口,这样能提高效率 :face_blowing_a_kiss:
我再给你一拳,我摸鱼时间变少了 :enraged_face: :oncoming_fist:

1 个赞

Mac 版

.claude/settings.json 文件里添加

"hooks": {
  "Stop": [
    {
      "hooks": [
        {
          "command": "/bin/bash ~/.claude/notify_on_finish.sh",
          "type": "command"
        }
      ],
      "matcher": "*"
    }
  ]
}
notify_on_finish.sh
#!/bin/bash

# Claude Code 任务完成通知脚本
# 适用于 macOS 系统

# 读取 Claude Code 传递的 JSON 数据
INPUT=$(cat)

# 如果需要调试,可以取消下面的注释来查看 JSON 数据
# echo "$INPUT" > ~/.claude/debug_notification.json

# 使用 grep 和 sed 提取 session_id(不依赖 jq)
SESSION_ID=$(echo "$INPUT" | grep -o '"session_id":"[^"]*"' | sed 's/"session_id":"//' | sed 's/"//')

# 获取临时文件中的提示内容
if [ -f "/tmp/claude_code_session_${SESSION_ID}_prompt" ]; then
    MESSAGE=$(cat "/tmp/claude_code_session_${SESSION_ID}_prompt")
else
    MESSAGE="Claude Code 任务已完成"
fi

# 限制消息长度,避免通知过长
MESSAGE=${MESSAGE:0:100}
if [ ${#MESSAGE} -eq 100 ]; then
    MESSAGE="$MESSAGE..."
fi

# 发送 macOS 通知
osascript -e "display notification \"$MESSAGE\" with title \"Claude Code\" subtitle \"任务已完成\""
7 个赞

再给一个Mac的方案, 使用terminal-notifier, 可以做到自定义提示音和文字, 以及指定点击通知后打开的窗口

确保安装了terminal-notifier之后, 配置settings.json, 可以全局配置, 也可以项目内配置

具体配置参考
"hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "command": "terminal-notifier -title \"Claude Code\" -message \"任务已完成✅\" -sound Funk -group \"Claude Code\" -activate 'com.todesktop.230313mzl4w4u92'",
            "type": "command"
          }
        ],
        "matcher": "*"
      }
    ]
  }

参数说明:

  • title: 大标题
  • message: 提示信息
  • sound: 音频文件, 来源 /System/Library/Sounds, 只需要写文件名
  • group: 分组ID, 只会显示同一个group下的最后消息
  • activate: 点击通知后激活的app, 后面的是包名, 在xxx.app/content/plist中, CFBundleIdentifier字段对应的值, 我现在配置的是cursor, 鬼知道为啥叫这个
  • appIcon: 理论上是可以自定义通知的图标, 但是我没有成功, 大手子可以试试看怎么配置

PS: 另外还有Codex的配置, 可参考

6 个赞

十分感谢!非常实用!

笑了appIcon我也没成

非常实用 :+1:

没做过任何配置,从最初用 claude code 就有这个提醒,而且还会提醒出来需要做什么 :rofl:

看来是 claude code 对 iTerm2 自带了额外处理 :rofl:

1 个赞