🔔 完整配置教程
让 Claude Code 和 Codex CLI 任务完成时自动发送撩人通知!
支持 macOS 15+ (Sequoia),完美解决系统通知权限限制问题。
📋 目录
前置要求
- ✅ macOS 15+ (Sequoia)
- ✅ Python 3
- ✅ Claude Code 或 Codex CLI 已安装
- ✅ 下载文件到本地
代码文件: notify_on_finish.py
Step 1: 创建快捷指令
⚠️ 为什么需要这步?
macOS 15 限制了命令行工具发送系统通知的权限,必须通过「快捷指令」来发送通知。这是苹果的安全策略,我们只能乖乖配合~
操作步骤
-
打开快捷指令 App
- 使用 Spotlight(
⌘ + 空格)搜索「快捷指令」 - 或在「启动台」中找到「快捷指令」
- 使用 Spotlight(
-
创建新快捷指令
- 点击左上角 + 按钮
-
搜索并添加「显示通知」动作
- 在右侧搜索框输入「通知」
- 选择「显示通知」
-
配置动作参数(关键步骤!)
- 点击通知正文的输入框
- 选择「快捷指令输入」变量(带蓝色标签的那个)
- ⚠️ 不要手动输入文字!必须选择变量!
-
重命名快捷指令
- 点击顶部标题,修改为:
AI打工仔凌凌七向您报道! - 这个名字必须完全一致,否则脚本找不到
- 点击顶部标题,修改为:
-
保存并退出
配置截图参考
你的快捷指令应该看起来像这样:
┌─────────────────────────────────────────────────────┐
│ AI打工仔凌凌七向您报道! │
├─────────────────────────────────────────────────────┤
│ 📥 从「无处」接收「任一」输入 │
│ 如果没有输入:继续 │
├─────────────────────────────────────────────────────┤
│ 🔔 显示 [快捷指令输入的信息] 通知 │
└─────────────────────────────────────────────────────┘
Step 2: 配置 Claude Code
Claude Code 使用 settings.json 配置文件,通过 Stop Hook 在任务完成时触发通知。
配置文件位置
~/.claude/settings.json
配置内容
编辑 ~/.claude/settings.json,添加以下内容:
{
"hooks": {
"Stop": [
{
"hooks": [
{
"command": "python3 /你的路径/notify_on_finish.py",
"type": "command"
}
],
"matcher": ""
}
]
}
}
配置说明
| 字段 | 说明 |
|---|---|
hooks.Stop | 定义任务停止时执行的钩子 |
command | 通知脚本的完整路径(必须用绝对路径) |
type | 固定为 "command" |
matcher | 匹配规则,留空表示匹配所有 |
配置截图参考
快速配置命令
# 1. 创建配置目录
mkdir -p ~/.claude
# 2. 获取脚本绝对路径
SCRIPT_PATH="$(pwd)/notify_on_finish.py"
echo "脚本路径: $SCRIPT_PATH"
# 3. 创建配置文件(如果不存在)
if [ ! -f ~/.claude/settings.json ]; then
cat > ~/.claude/settings.json << EOF
{
"hooks": {
"Stop": [
{
"hooks": [
{
"command": "python3 $SCRIPT_PATH",
"type": "command"
}
],
"matcher": ""
}
]
}
}
EOF
echo "✅ 配置文件已创建: ~/.claude/settings.json"
else
echo "⚠️ 配置文件已存在,请手动编辑添加 hooks 配置"
fi
Step 3: 配置 Codex CLI
Codex CLI 使用 config.toml 配置文件,通过 notify 字段配置通知命令。
配置文件位置
~/.codex/config.toml
配置内容
编辑 ~/.codex/config.toml,添加以下行:
notify = ["python3", "/你的路径/notify_on_finish.py"]
完整配置示例
notify = ["python3", "/你的路径/notify_on_finish.py"]
配置说明
| 字段 | 说明 |
|---|---|
notify | 任务完成时执行的命令数组 |
| 第一个元素 | Python 解释器路径 |
| 第二个元素 | 通知脚本的完整路径(必须用绝对路径) |
配置截图参考
快速配置命令
# 1. 创建配置目录
mkdir -p ~/.codex
# 2. 获取脚本绝对路径
SCRIPT_PATH="$(pwd)/notify_on_finish.py"
# 3. 追加 notify 配置(如果不存在)
if ! grep -q "^notify" ~/.codex/config.toml 2>/dev/null; then
echo "" >> ~/.codex/config.toml
echo "notify = [\"python3\", \"$SCRIPT_PATH\"]" >> ~/.codex/config.toml
echo "✅ notify 配置已添加到: ~/.codex/config.toml"
else
echo "⚠️ notify 配置已存在,请手动检查"
fi
测试验证
测试快捷指令
shortcuts run "AI打工仔凌凌七向您报道!" -i "测试通知:你好主人!"
如果看到通知弹出,说明快捷指令配置成功!
测试 Claude 格式通知
echo '{"hook_event_name":"Stop","cwd":"'$(pwd)'"}' | python3 notify_on_finish.py
测试 Codex 格式通知
echo '{"type":"agent-turn-complete","success":true}' | python3 notify_on_finish.py
测试失败状态通知
echo '{"hook_event_name":"Stop","cwd":"'$(pwd)'","success":false}' | python3 notify_on_finish.py
通知样式预览
通知会根据来源和状态显示不同样式:
| 来源 | 状态 | 样式示例 |
|---|---|---|
| Claude | 完成 | 🟣 Claude [项目名] |
| Claude | 失败 | 🔴 Claude [项目名] |
| Codex | 完成 | ⚡ Codex [项目名] |
| Codex | 失败 | ❌ Codex [项目名] |
通知内容会随机选择一条撩人的文案,比如:
- 「主人!活干完啦,求表扬求摸头求抱抱~」
- 「叮咚!您的代码已出炉,比主人还香~」
- 「搞定!给主人比个心 ❤️ mua~」
常见问题
Q: 通知没有弹出?
-
检查快捷指令名称是否正确
shortcuts list | grep "AI打工仔凌凌七向您报道" -
检查脚本路径是否正确
ls -la /你的路径/iterm-notify/notify_on_finish.py -
启用调试日志
NOTIFY_DEBUG_LOG=/tmp/notify.log python3 notify_on_finish.py cat /tmp/notify.log
Q: 终端在前台时不想收到通知?
在配置中添加环境变量:
Claude Code (~/.claude/settings.json):
{
"env": {
"NOTIFY_SUPPRESS_WHEN_TERMINAL_ACTIVE": "1"
}
}
Q: 重启电脑后需要重新配置吗?
不需要! 所有配置都是持久化的:
- ✅ 快捷指令保存在系统中
- ✅ Claude/Codex 配置保存在配置文件中
- ✅ 脚本文件不会消失
Q: 支持哪些终端?
目前支持以下终端的前台检测:
- iTerm2
- macOS Terminal
- Alacritty
- kitty
- Hyper
- Warp
- WezTerm
🎉 配置完成!
现在,每当 Claude Code 或 Codex CLI 完成任务时,你都会收到一条撩人的通知啦!
如果遇到问题,欢迎提 Issue 或者直接骂代码(老王最喜欢骂代码了)。
作者:AI打工仔凌凌七 License:MIT