本篇是macOS 适配版针对 Warp 终端用户优化。​ 在 Warp 里让 Claude 跑任务切到其他应用做自己的事。任务完成时 terminal-notifier 自动弹出 macOS 原生通知你不需要盯着终端等。一、环境说明系统macOS终端Warp通知方式macOS 原生通知中心通过osascript调用​ macOS 没有notify-send我们使用terminal-notifier来发送系统通知——它能直接调用 macOS 的通知中心弹出系统级通知和你收到 iMessage、微信消息时看到的弹窗一样。二、先聊聊 Warp 的自带通知​ 在动手写 Hook 之前有件事值得了解Warp 本身就有任务完成通知功能。2.1 默认配置​ 打开 Warp 的设置Cmd ,→Notifications你会看到Send notification when a command takes longer than X seconds命令执行超过指定秒数后发通知Only when Warp is in the background只在 Warp 不在前台时通知也就是说对于长时间任务跑完提醒我这个需求Warp 开箱即用就能搞定——你甚至不需要写 Hook。2.2 为什么还要写 Hook​ 因为 Hook 能做到 Warp 自带通知做不到的事自定义通知内容Warp 只能告诉你命令执行完了Hook 能告诉你重构完成共修改 12 个文件多渠道推送同时发到桌面弹窗 Slack 日志文件按条件过滤只对特定类型的通知做处理如果 Warp 自带通知够用可以跳过这个场景。如果你想要更丰富的通知体验继续往下。三、实践过程3.1 第一步创建项目结构​ 如果你还没在 Mac 上搭 demo 环境先创建mkdir-pscriptsmkdir-p.claudecd/demo前置依赖确保装了jq和terminal-notifier。Mac 上如果没装brew install jq terminal-notifier3.2 第二步写脚本​ 创建scripts/notify.sh#!/bin/bash# ① 从 JSON 中提取通知内容INPUT$(cat)MESSAGE$(echo$INPUT|jq-r.message // Claude Code 任务完成)# ② 调用 terminal-notifier 发送 macOS 系统通知terminal-notifier-titleClaude Code-message$MESSAGE-soundGlass几个细节terminal-notifier是一个专门在命令行发送 macOS 通知的开源工具需要通过 Homebrew 安装brew install terminal-notifier。sound name Glass会播放一个提示音。macOS 内置的提示音还有Ping、Pop、Purr等你可以换成自己喜欢的。去掉-sound参数则静默通知。通知弹窗会在屏幕右上角显示几秒后自动消失也会保留在 macOS 通知中心里从右上角往下滑可以查看历史通知。3.3 第三步手动测试​ 在 Warp 里打开一个 tabCmd T运行cddemoecho{message:重构完成共修改 12 个文件}|bashscripts/notify.sh​ 你应该能在屏幕右上角看到一条 macOS 系统通知标题是 “Claude Code”内容是 “重构完成共修改 12 个文件”并且听到 “Glass” 提示音。如果没看到通知检查一下系统设置 → 通知 → Script Editor确保通知样式不是无建议选横幅或提醒专注模式如果开了勿扰模式通知会被静默再测一下默认值echo{}|bashscripts/notify.sh​ 应该弹出 “Claude Code 任务完成”。3.4 第四步写配置创建.claude/settings.json如果已有其他 hook 配置把Notification字段加进去{hooks:{Notification:[{hooks:[{type:command,command:bash scripts/notify.sh}]}]}}3.5 第五步验证​ 在 Warp 里新开一个 tab启动 Claude Codecd~/Play/Hooks/demo claude​ 给 Claude 一个稍复杂的任务帮我创建一个完整的 Node.js 计算器模块包含 add、subtract、multiply、divide 四个函数每个函数都要有参数校验和 JSDoc 注释再写一个 index.js 统一导出​ 发完后立刻Cmd Tab切到其他应用。如果一切正常任务完成时你会在屏幕右上角看到通知弹窗。四、注意事项​ ⚠️避免和 Warp 自带通知重复。如果你同时开了 Warp 的通知和 Hook 通知完成任务时会收到两条通知。建议二选一只用 Hook 通知Warp 设置 → Notifications → 关闭通知。好处是通知内容更丰富。只用 Warp 通知不配置 Notification hook。好处是零配置。当然也可以两个都开着双重提醒绝对不会漏掉。