只要配置得足够收敛,在手机上批准 Claude Code 的操作是相当安全的:只有你配对过的手机能回复,手机只能回复 Claude Code 本来就会向你显示的 prompt,而且不管手机怎么回复,你的 deny 规则依然有效。真正的风险来自人为和实际使用:在小屏幕上批准了没细看的命令、别人拿着你已解锁的手机,以及项目信息经过中继服务并显示在锁屏上。设计良好的远程批准工具能限制前一类风险;后一类则靠几项设置由你自己管理。
01远程批准的工作原理
Claude Code 有一个名为 PermissionRequest 的 hook 事件,在 Claude Code 即将请求你授权使用某个工具时触发。hook 可以返回 allow 或 deny 的决定,Claude Code 就会直接采用,而不必等你在 terminal 里回答。远程批准工具正是利用这个 hook:把请求发到你的手机,等待,再返回你的回复。PermissionRequest 指南里有具体的 JSON。
这一设计有三个对安全很关键的特性,都出自 Anthropic 的 hooks 文档:
- 只有本该弹出 prompt 时才会触发。如果你的权限模式或 allow 规则已经放行某个操作,就不会产生请求。远程批准不会让 Claude 获得比你坐在键盘前时更大的权限。
- deny 规则始终优先。hook 返回
allow也绕不过你设置中的 deny 规则。如果你 deny 了Read(./.env),手机上点一下也无法让 Claude 读取它。 - hook 以你的身份运行。命令型 hook 拥有你完整的用户权限。你安装为 hook 的任何程序都能读取和修改你账户可访问的一切。所以选择什么工具本身就是安全的一部分,而不只是手机的问题。
02风险及其应对
别人替你回复
最坏的情况是,非你本意的人或设备批准了某个操作。限制手段如下:
- 配对。手机只能回复与它配对过的电脑。在 Claude Code Notifier 中,配对通过二维码或有效期 24 小时的 6 位数字码完成,每台电脑最多配对三部手机。
- 撤销。
ccn devices会列出与电脑配对的手机,ccn devices revoke <name>可移除其中一部。ccn forget会从服务器上清除这台电脑及其所有配对。 - 手机锁屏。任何拿着你已解锁手机的人都能回复。把手机当作通往电脑上 Claude Code 会话的钥匙,务必设置密码或生物识别锁。
批准了没看清的操作
在手机上,很长的 shell 命令很容易一扫而过。以下习惯会有帮助:
- 点 allow 之前先把整条命令读完。如果不能一眼确定没问题,就先 deny,回头再到 terminal 里看。
- 凡是会改动项目之外状态的操作,比如
git push、部署或安装包,优先选仅允许一次,而不是本次会话内允许。 - 在设置里用
ask规则拦住高风险命令,用deny规则保护密钥,这样危险情况由你冷静时写好的规则决定,而不是排队时随手一点。语法见权限模式指南。
你其实就在电脑前
如果你坐在电脑前时请求也推到了手机上,就会有两方(你和你的手机)回答同一个 prompt。Claude Code Notifier 会检测你是否在电脑前:如果你在最近 30 秒内打过字,就不会等手机,terminal 照常询问。如果你不在,terminal 会等待手机的回复,最长等到你设定的上限,一旦你碰了键盘就立即停止等待。空闲检测在电脑本地完成,结果从不上传。
项目信息会离开你的电脑
要把请求展示给你,就必须把请求详情发到手机上。这是任何 Claude Code 手机通知方案在隐私上的取舍,自己搭的也一样。对于 Claude Code Notifier,按其隐私政策所述:
- 没有账号。每台电脑和手机都用一个随机 ID 标识。
- 通知可能包含:项目名称和文件夹路径、Claude 的消息或它提出的问题、你的 prompt 开头部分;对于权限请求,还包括工具名称及其输入摘要,比如 shell 命令或文件路径(最多 200 个字符)。
- 发往哪里:经由 TouchTap 运行在 Cloudflare 上的中继服务器,另有一个精简版本发给 Apple 或 Google 用于推送。项目文件夹路径不会发给 Apple 或 Google。
- 保存多久:服务器会在 48 小时内删除通知及你的回复。中继服务器不存储你的 IP 地址。
- 传输过程:与服务器的所有通信都使用 TLS(HTTPS 和 WSS)。中继服务器为投递会持有通知内容,所以这是传输加密,而非端到端加密。
- 不出售:数据不会被出售,也不会用于广告。
在电脑上,ccn 的凭据是一个随机 token。默认存放在 macOS 钥匙串或 Windows 凭据管理器中,在 Linux 上则存在只有你的用户账户可读的文件里;用 ccn config set credential_store 可在系统钥匙串和文件之间切换。
如果你处理的是保密代码,隐私政策本身也建议你考虑手机通知是否合适,以及每台电脑要开启哪些类型的通知。你可以在命令行或手机 App 里,按电脑分别关闭 notify_on_done、notify_on_permission 或 notify_on_question。
锁屏显示的内容太多
带有命令或客户项目名称的横幅,任何瞄一眼你手机的人都能看到。iPhone 和 Android 都可以设置在解锁前隐藏通知预览,可针对所有 App 或单个 App。iPhone 上在“设置”>“通知”中。Android 上在锁屏通知设置里,通常是一个隐藏敏感内容的选项。
03自己搭建远程审批
你可以用 PermissionRequest hook 加聊天机器人或推送服务自己实现远程审批。但这样你其实是在做一套认证系统:必须只有你能回复,旧的回复不能作用于新请求,卡住的请求也不能让会话一直挂着。在公共共享推送服务器上,topic 名称是唯一挡住陌生人的东西,所以要像密码一样对待它。ntfy 以及 Telegram、Slack 或 Discord 的指南介绍的是仅通知的方案,因为它们无法批准任何操作,风险要小得多。
04来自他人仓库的 hook
还有一个风险适用于所有 hook,而不仅是审批。hook 可以提交在项目的 .claude/settings.json 里。在交互式会话中,Claude Code 会在你接受该文件夹的工作区信任对话框之前暂不运行 hook,所以信任一个仓库前先看看它的 .claude/ 文件。而在 claude -p 和 SDK 运行中没有这个对话框,文件夹会被视为可信,提交进来的 hook 会直接运行。对不是你写的代码做脚本化运行时,请传入 --settings '{"disableAllHooks": true}'。
05Claude Code Notifier 的定位
Claude Code Notifier 是由 TouchTap Ltd 开发的独立工具,并非由 Anthropic 开发、认可或赞助。它的命令行工具 ccn 以 Claude Code hook 的形式运行在 Mac、Windows 和 Linux 上,配套的 iPhone 和 Android App 可以让你选择仅允许一次、本次会话内允许或拒绝。ccn 在 GitHub 上公开源码,安装前你可以确切看到作为 hook 运行的是什么。配置方法见手机审批指南。
06常见问题
手机审批能绕过我的 deny 规则吗?
不能。无论 hook 返回什么,Claude Code 都会执行 deny 规则。远程审批只能回答 Claude Code 本来就会弹出的 prompt。
Claude Code Notifier 是端到端加密的吗?
不是。与中继服务器之间的流量使用 TLS,服务器会在 48 小时内删除通知和回复。中继服务器在投递期间持有内容,另有一个精简版本发给 Apple 或 Google 用于推送。
手机丢了怎么办?
在每台电脑上运行 ccn devices 列出已配对的手机,再用 ccn devices revoke <name> 移除丢失的那台。在此之前,只能靠手机自身的锁屏防止别人代你回复。
我的代码会离开电脑吗?
ccn 不会上传你的文件。通知只携带展示请求所需的信息:项目名称和文件夹、Claude 的消息或问题、你的 prompt 开头部分,以及所涉及命令或文件的简短摘要。Claude 的消息可能引用代码,所以在敏感项目上,把不需要的通知类型关掉。