⌚ 在 Apple Watch 上批准 Claude Code / Codex 的危险操作,任务完成自动提醒 | Approve your AI coding agent's risky actions from your Apple Watch, get buzzed when tasks finish
# Add to your Claude Code skills
git clone https://github.com/ghy196830-del/agent-watch-approveGuides for using ai agents skills like agent-watch-approve.
Last scanned: 6/17/2026
{
"issues": [
{
"file": "README.md",
"line": 206,
"type": "remote-install",
"message": "Install command (remote install script piped to a shell — review the source before running): \"curl | sh\"",
"severity": "low"
}
],
"status": "PASSED",
"scannedAt": "2026-06-17T09:02:40.883Z",
"npmAuditRan": true,
"pipAuditRan": true,
"promptInjectionRan": true
}agent-watch-approve is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by ghy196830-del. ⌚ 在 Apple Watch 上批准 Claude Code / Codex 的危险操作,任务完成自动提醒 | Approve your AI coding agent's risky actions from your Apple Watch, get buzzed when tasks finish. It has 101 GitHub stars.
Yes. agent-watch-approve passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/ghy196830-del/agent-watch-approve" and add it to your Claude Code skills directory (see the Installation section above).
agent-watch-approve is primarily written in Python. It is open-source under ghy196830-del on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh agent-watch-approve against similar tools.
No comments yet. Be the first to share your thoughts!
AI 在干活,你在摸鱼;危险操作抬腕一点,任务跑完手表喊你。
让 Claude Code 和 Codex 的危险操作推送到你的 Apple Watch / iPhone 上审批, 任务完成自动通知 —— 全程不用回终端。 安卓 / Wear OS / 鸿蒙(兼容模式)同样支持:一个开关切到 ntfy 载体,连 Pushcut 都不用装(见「不止苹果」一节)。
| Claude Code 的通知 | Codex 的通知 |
|---|---|
| 🦀 Claude 待批准 / 🦀 任务已完成 | 🤖 Codex 待批准 / 🤖 任务已完成 |
▶️ 完整介绍视频(30 秒) —— 点开即播(备用:仓库内文件)
| 危险命令,先问过你 | Codex CLI 同样支持 | 连改它自己都要批准 |
| 跑完了,抬腕就知道 | 额度烧完,立刻知道 | 拦不住的,也提醒你 |
myagent_8f3k2j9x);watch_approve.py / watch_done.py / watch.env(由 watch.env.example 复制)放进一个固定目录,填好 key / topic;python watch_approve.py --doctor —— 逐项检查配置、Pushcut(key/设备名/通知名)、ntfy 收发,最后真发一条测试通知到你手机/手表;python watch_approve.py --print-claude-config / --print-codex-config 打印已转义好绝对路径的配置片段,粘进 ~/.claude/settings.json / ~/.codex/hooks.json,重启 agent,跑条危险命令测试。每步细节见下文「十分钟上手」;哪里不顺,先跑 --doctor,再看「排错」。
(安卓 / Wear OS 用户:第 1 步换成装 ntfy app,免 Pushcut,走「📱 不止苹果」一节。)
跑长任务时,agent 时不时停下来问一句「可以执行吗?」——你必须守着终端。这个项目把这件事搬到手腕上:
rm -rf、git push --force、提权、出沙箱……)推送到手表,带 ✅ 允许 / ❌ 拒绝 / 🖥️ 终端查看 按钮,点一下,结果秒回 agent(「终端查看」= 退回终端慢慢看再决定);两个 Python 脚本,只用标准库、零依赖,并且全程 fail-safe:配置缺失 / 网络挂了 / 超时,一律退回 agent 自己的终端审批,绝不卡死你的任务。
sequenceDiagram
participant A as Claude Code / Codex
participant H as watch_approve.py
participant P as Pushcut 云
participant W as ⌚ Apple Watch
participant N as ntfy.sh
A->>H: 危险操作,触发 hook
H->>P: 触发通知(注入 ✅/❌ 按钮)
P->>W: 限时通知,直达手表
W->>N: 点按钮 → 后台请求发布 allow/deny
N-->>H: hook 从 stream 读到结果
H-->>A: 放行 / 拒绝
pip install)http://127.0.0.1:7890PUSHCUT_NOTIF),标题/正文/按钮都不用配——hook 会动态覆盖;myagent_8f3k2j9x(无需注册)。把 watch_approve.py、watch_done.py、watch.env 放进一个固定目录,例如 C:\Users\你\watch-hooks\(macOS/Linux 如 ~/watch-hooks/):
git clone https://github.com/ghy196830-del/agent-watch-approve.git
cp agent-watch-approve/watch_approve.py agent-watch-approve/watch_done.py ~/watch-hooks/
cp agent-watch-approve/watch.env.example ~/watch-hooks/watch.env # 然后填入你的 key/topic
为什么要
watch.env? hook 子进程的环境变量取决于「谁启动了 agent」,Codex 还不会把 自己配置里的 env 传给 hook。脚本启动时会读同目录的watch.env兜底(只填补缺失项, 真实环境变量优先),这样从 VS Code、终端、任何地方启动 agent 都能工作。
懒人方式:python watch_approve.py --print-claude-config 会打印一段已填好当前脚本绝对路径、
转义好 Windows 反斜杠的配置,直接合并进 ~/.claude/settings.json(全局)或项目的
.claude/settings.json 即可。也可以手动改 examples/claude/settings.example.json。重启 Claude Code 生效。
关键就两块:PreToolUse(审批)+ Stop(完成提醒),matcher 用 "*" 配合 danger-only(见下文「自动驾驶」)。
懒人方式:python watch_approve.py --print-codex-config 打印现成片段,存为 ~/.codex/hooks.json。
也可以手动改 examples/codex/hooks.example.json。
Codex 的三个专属注意点(都踩过坑了):
PermissionRequest 事件,不是 PreToolUse。 Codex 只在自己要弹审批时(提权 / 出沙箱 / 联网等)触发它,hook 回 allow/deny;不回应就走正常终端审批——语义和手表审批严丝合缝。
(新版 Codex 的 PreToolUse 也支持 allow/deny,可用于日志/策略检查,但它不对应「Codex 要问你了」这个时机,实测旧版还拦不到新 shell 通道,不建议作为本项目的审批主链路。)/hooks → 找到这两条 hook → review & trust。codex exec(非交互模式)永远不会触发 PermissionRequest(它的 approval policy 是 never)。测试审批请用交互式会话;Stop 完成提醒在 exec 下正常触发。# 一键体检:配置占位符、Pushcut key/设备名/通知名、ntfy 收发回环,最后发条测试通知
python ~/watch-hooks/watch_approve.py --doctor
macOS / Linux(bash/zsh):
# Claude 风格(PreToolUse):
echo '{"hook_event_name":"PreToolUse","tool_name":"Bash","tool_input":{"command":"rm -rf /tmp/x"}}' \
| python ~/watch-hooks/watch_approve.py
# Codex 风格(PermissionRequest):
echo '{"hook_event_name":"PermissionRequest","tool_name":"Bash","tool_input":{"command":"git push --force"}}' \
| python ~/watch-hooks/watch_approve.py --agent codex
# 完成提醒:
python ~/watch-hooks/watch_done.py < /dev/null
Windows(PowerShell)原生写法 —— JSON 用 here-string 最稳,引号不用转义(管道里别放中文, 编码会被 PowerShell 5.1 弄花,见「排错」):
@'
{"hook_event_name":"PreToolUse","tool_name":"Bash","tool_input":{"command":"rm -rf /tmp/x"}}
'@ | python C:\Users\你\watch-hooks\watch_approve.py
@'
{"hook_event_name":"PermissionRequest","tool_name":"Bash","tool_input":{"command":"git push --force"}}
'@ | python C:\Users\你\watch-hooks\watch_approve.py --agent codex
'' | python C:\Users\你\watch-hooks\watch_done.py # 完成提醒
手表上点 ✅ 允许,第一条会立刻输出 permissionDecision: "allow",第二条输出
decision: {"behavior": "allow"}(Codex 格式,脚本按事件自动切换)。
⚠️ 开了 danger-only(默认推荐配置)后,要用危险命令测试——
echo hello按设计不弹通知。
watch.env.example 默认是安全档:危险操作上手表,其余退回 agent 自己的正常审批
(WATCH_DANGER_ONLY=1 + 非危险 ask)。想升级成「危险才打扰,其余全自动」,
把 example 里这行的注释去掉即可:
WATCH_DANGER_ONLY=1 # 只有命中危险清单的操作才上手表
WATCH_NONDANGER_DECISION=allow # 其余静默放行(不弹手表、不弹终端)← 取消注释进入自动驾驶
配合 Claude Code 的 "matcher": "*":所有工具调用都过 hook,非危险的(读文件、搜索、MCP……)
静默放行,只有真正危险的才震你手腕。为什么不用白名单 matcher?——白名单永远会漏掉下一个新工具
(WebSearch、新 MCP……),漏掉的会退回终端弹窗,你的手表永远收不到。
内置危险清单覆盖:rm -rf、sudo、git push --force、git reset --hard、dd、mkfs、
chmod 777、shutdown、kill、DROP/TRUNCATE TABLE、DELETE FROM、curl | sh、
docker rm/prune、terraform destroy、kubectl delete、PowerShell Remove-Item -Recurse -Force 等。
WATCH_DANGER_EXTRA 可追加,WATCH_DANGER_REGEX 可整体替换。
⚠️ 代价要心里有数:
allow模式下,危险清单没逮到的操作会无确认直接执行。 危险正则是唯一关卡,按自己的口味扩充它。
手表上看到的不是命令原文,而是一句人话 + 目标文件名,例如:
🗑️ 删除文件夹:node_modules ⚠️ git 强制推送:main 📝 修改文件:app.py、readme.md
防 agent「自改 hook」:脚本自身所在目录默认已受保护(WATCH_PROTECT_SELF=1,
规范化绝对路径比较):任何对 watch_approve.py / watch.env 的写操作强制上手表
(🛡️ 改 hook 脚本),agent 想偷偷解除你的管控?先过你手腕这关。WATCH_PROTECT_PATHS
可再追加别的目录(子串匹配)。已知边界:shell 重定向(echo x > 脚本)绕得过此规则,
但默认危险清单里的写盘类命令仍会兜住一部分。
Claude Code 和 Codex 的订阅都有用量窗口,烧完直接给你停活——人在摸鱼,任务在后台默默死掉是最惨的。 这件事也搬上手表了,两边机制不同(都实测过):
StopFailure hook 上(回合因 API 错误终止时代替 Stop 触发)。
限额错误(error=rate_limit)→「🚦 Claude 额度已用完」+ 重置时间(从错误文案里抽出
resets 1:10am (Asia/Shanghai) 这类信息);其它 API 错误 →「⚠️ 任务异常终止」+ 错误类型。rate_limits,含
used_percent 和重置时间),用量 ≥ WATCH_LIMIT_WARN_PCT(默认 90%)时,完成通知自动变成
「⚠️ Codex 额度已用 NN%」+ 重置时间——在烧干之前就提醒你省着点用。WATCH_LIMIT_SOUND,默认 problem),和普通完成提醒一耳朵区分。接线:Claude 在 settings.json 的 hooks 里加一段 StopFailure(示例已含);Codex 无需额外接线(复用已有的 Stop)。
同时开几个 Claude Code / Codex 窗口?两件事已经内置:
不想要?WATCH_UNIQUE_TOPIC=0 回到共享 topic,WATCH_SHOW_CWD=0 去掉 📁 行。
注意:app 里手配静态按钮(`PUSHCUT_DYNAMIC_ACT