
起初看到 GitHub 上的 claude-watch 项目,我心里也犯嘀咕:用 Apple Watch 去控制 Claude Code?这听起来更像一个炫技的极客玩具。
直到我点开那段演示视频,想法彻底变了。
视频里,一位开发者坐在电脑前,Claude Code 正自动修改着代码。这时,他手腕上的手表轻轻一震,表盘弹出一条请求:“允许编辑此文件吗?” 他抬手点了下“Yes”。
Claude 继续执行。片刻之后,手表再次震动,这次屏幕上显示了一个动态问题:“你希望使用哪个框架?” 并列出四个选项。他直接在手表上做出了选择。
整个过程,他的双手甚至没有碰触键盘。
我突然意识到:这并非玩具。它的价值在于,将 Claude Code 的交互从固定的终端窗口中解放了出来。
它究竟解决了什么问题?

claude-watch 是一个基于 MIT 协议的开源项目,作者是 shobhit99。项目发布仅三天,就获得了数百个 Star,足以说明它击中了开发者的某个痛点。
它的核心功能非常聚焦:
- 在 Apple Watch 上实时显示 Claude Code 的终端输出(无论是 Read、Edit、Bash 还是 Grep 操作的结果)。
- 当 Claude 需要获取权限时(如编辑文件、执行命令),手表会震动并弹出提示,你可以直接在手腕上批准或拒绝。
- 遇到
AskUserQuestion 这类需要动态选择的情况,选项会以可点击列表的形式呈现在手表上。
- 支持语音输入,对着手表说话就能向 Claude 发送指令。
说白了,当你离开电脑去接水、休息时,Claude 在后台持续工作。一旦它需要你的决策,手表会成为你的第一线通知中心,你再也不必寸步不离地守着终端屏幕。
架构解析:三组件协同工作
整套系统的架构由三个关键部分组成,通过 HTTP 和 Apple 的 WCSession 串联。
WCSession
Apple Watch <===============> iPhone <=======> Mac
(SwiftUI) sendMessage (Relay) HTTP Bridge Server
transferUserInfo SSE (Node.js)
|
HTTP Hooks | PTY stdin
v
Claude Code Session
1. Bridge Server (运行在 Mac 上)
这是一个 Node.js 服务,它通过 Claude Code 官方的 HTTP Hooks 机制监听所有事件。每当 Claude 执行一个工具(读文件、改代码、跑命令),Bridge Server 都会收到通知,然后通过 Server-Sent Events (SSE) 将事件实时推送给手机和手表客户端。
2. iPhone App (中继)
这是一个用 SwiftUI 编写的中继应用。它通过 Bonjour 服务自动发现局域网内的 Bridge Server,并使用一个 6 位数的配对码进行连接。它负责显示终端输出和权限请求,并通过 WCSession 将这些信息转发给配对的 Apple Watch。
3. watchOS App (手表端)
手表端的应用同样基于 SwiftUI 开发。它可以直接通过 Wi-Fi 连接 Bridge Server(也支持 Bonjour 发现)。其核心作用是实时显示终端输出、弹出权限审批卡片,并处理语音输入。
权限审批:最实用的场景落地

用过 Claude Code 的开发者都知道,其工作流中最大的中断点就是频繁的权限请求:“可以编辑这个文件吗?”、“可以执行这条命令吗?”。你必须时刻关注终端,等待提示,然后输入 y 并回车确认。
如果你走开一会儿,回来可能发现 Claude 已经“发呆”了好几分钟,就为了等你的一个“y”。
claude-watch 的权限审批流程设计精妙地解决了这个痛点:
- Claude Code 触发
PermissionRequest,通过 HTTP Hook 发送给 Bridge Server。
- Bridge Server 立即阻塞住对该 Hook 的 HTTP 响应(最长可等待10分钟),同时将权限请求通过 SSE 推送到手表。
- 手表震动,屏幕上弹出审批卡片,提供“Yes”、“Yes All”、“No”等选项。
- 你在手表上做出选择,该决定通过 HTTP 请求发回 Bridge Server。
- Bridge Server 将决定结果返回给 Claude Code,Claude 随即继续执行。
这里“阻塞等待”的设计是关键。它不是简单地异步通知你“有个请求待处理”,而是让 Claude Code 的执行线程真正暂停,直到收到来自你手腕的明确指令。这完美模拟了在终端前输入 y 并回车的行为。
动态交互:在手腕上完成选择

Claude Code 的 AskUserQuestion 功能会弹出带选项的问题,例如:“你想用哪个数据库?”并列出 PostgreSQL、MySQL、SQLite 等。
在传统终端中,你需要输入对应的选项编号。而在 claude-watch 上,这些选项被转换成了可滚动的按钮列表,一目了然,点选即可。这个细节让我确信,作者是深度使用 Claude Code 的开发者,这个项目源于真实的效率诉求,而非单纯的技术展示。
快速上手:5分钟部署指南
前提条件:macOS 系统,安装 Node.js 18+ 和 Xcode 16+,确保 Apple Watch 和 Mac 处于同一 Wi-Fi 网络。
部署步骤清晰简单:
# 1. 安装 Bridge Server 依赖
cd skill/bridge && npm install
# 2. 配置 Claude Code 的 HTTP Hooks
./skill/setup-hooks.sh
# 3. 启动 Bridge Server
node server.js
启动成功后,终端会显示连接信息:
╔═══════════════════════════════════════╗
║ AGENT WATCH BRIDGE ║
╠═══════════════════════════════════════╣
║ Pairing Code: 648505 ║
║ IP Address: 192.168.1.4 ║
║ Port: 7860 ║
╚═══════════════════════════════════════╝
接下来,用 Xcode 打开并编译 iOS 和 watchOS 应用。在 iPhone App 中输入上述配对码,手表端应用会自动通过 Bonjour 发现并连接 Bridge Server。之后,你就可以像往常一样使用 Claude Code,所有的工具调用和请求都会实时同步到手表上。
技术原理:基于官方 Hook 机制
这一点值得特别说明:claude-watch 并非通过 Hack 手段实现,它完全依赖 Claude Code 官方支持的 HTTP Hooks 机制。
那个 setup-hooks.sh 脚本,本质上是向 ~/.claude/settings.json 配置文件注册了一系列钩子:
PostToolUse:捕获工具执行后的输出(文件读写、命令结果)。
PreToolUse:捕获工具调用前的信息。
PermissionRequest:转发权限请求(这是唯一的阻塞式 Hook)。
Stop:检测 Claude 响应结束。
Notification:处理空闲和权限通知。
所有这些 Hook 都是标准的 HTTP POST 端点,Bridge Server 接收后通过 SSE 推送给客户端。这意味着你不需要修改 Claude Code 本体,也无需特定版本,只要 Claude Code 版本在 2.1+ 即可正常使用。
思考:超越手表的价值
这个项目的意义,远不止于让 Apple Watch 多了一个“遥控器”。
它验证了一个重要趋势:AI Agent(智能体)的“人在回路”交互模式,不应被禁锢在终端或聊天窗口内。
试想当前 Claude Code 的典型工作流:打开一个终端,它在里面运行,你在外面盯着,它提问你回答。这本质上仍然是一种需要用户高度集中、同步参与的交互范式。
然而,随着 Agent 能力的增强,单个任务可能持续运行数十分钟甚至更久。要求用户全程守在电脑前显然不现实。
claude-watch 将“决策点”从“必须坐在电脑前”转移到了“只需抬一下手腕”。这小小的一步,为异步、移动化的 AI 协作打开了思路。
当然,项目目前仍处于早期阶段,需要一定的配置门槛(涉及 Swift、Node.js 和多端编译)。但其方向无疑是正确的。下一步,类似的审批和通知机制完全可以扩展到手机推送、Slack 消息乃至其他即时通讯工具中。
当 AI 需要人类干预时,它能通过各种轻量级的渠道触达我们;而我们也可以在任意地点,以最便捷的方式给予反馈。到那时,“人在回路”将真正成为一种无缝、自然的协作体验,而“回路”中的人,也将获得真正的行动自由。
你对这种将AI工作流扩展到可穿戴设备或移动端的想法怎么看?欢迎在 云栈社区 的相关板块分享你的见解与实践。
项目地址:https://github.com/shobhit99/claude-watch ,MIT 开源协议。需要 Apple Watch + Mac + 同一 Wi-Fi 环境。如果没有 Apple Watch,也可以单独使用 iPhone App 作为控制中心。