Skip to content

About

Control Claude Code from your iPhone. Tauri bridge + Expo React Native.

Resources

Code of conduct

Contributing

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

Agent Watch Logo

Agent Watch Platform

从 iPhone 远程控制 Claude Code。
查看终端输出、审批权限请求、发送命令 — 一切尽在掌中。

License: MIT Platform Tauri 2 Expo 54

English | 中文


这是什么?

Agent Watch Platform 是 Agent Watch 的平台化演进版本,将 Mac 上的 Claude Code 会话状态通过本地 Bridge 推送到 iPhone,并支持在手机端进行权限审批和命令发送。

 iPhone (Expo RN)  <──── SSE ────>  Mac Bridge (Tauri)
   Bonjour 发现          HTTP          系统托盘常驻
   权限审批             Hooks            |
   终端预览                              v
                                  Claude Code 会话

核心功能

  • 实时终端输出 — 在 iPhone 上查看 Claude Code 的实时操作(读取、编辑、执行命令等)
  • 权限审批 — 在手机上审批 Claude 的操作请求(编辑文件?执行命令?)
  • 多会话管理 — 同时追踪多个 Claude Code 会话
  • 自动发现 — Bonjour/mDNS 局域网自动发现,无需手动输入 IP
  • 系统托盘 — Bridge 后台常驻,最小化到 macOS 菜单栏

架构

项目由两个应用组成:

🖥 Bridge — macOS 桌面端

基于 Tauri 2 + Rust (axum) 的桌面应用,功能包括:

  • HTTP + SSE 服务(端口 7860–7869)
  • 系统托盘常驻 + 一键安装 Claude Code Hooks
  • mDNS 广播 (_claude-watch._tcp)
  • 6 位配对码 + Token 安全认证
  • 与 Phase 1 Node Bridge 完全协议兼容

📱 Mobile — iOS 客户端

基于 Expo 54 + React Native 0.81 的 iPhone 应用:

  • Bonjour 自动发现 Bridge
  • SSE 实时事件流 + 断线重连(指数退避)
  • Zustand 状态管理
  • Expo Router 文件式路由
  • 权限审批(9 分钟倒计时)+ 多会话隔离

快速开始

环境要求

组件 最低版本
macOS 13.0+
Node.js 20.19+
Rust 1.70+
Xcode 16+(iOS 构建)
Claude Code 2.1+

1. 克隆仓库

git clone https://github.com/anthropics/agent-watch-platform.git
cd agent-watch-platform

2. 安装依赖

make setup

或分别安装:

make setup-bridge    # Bridge: npm + cargo
make setup-mobile    # Mobile: npm

3. 检查环境

make doctor

4. 启动 Bridge(Mac 端)

make dev-bridge

Bridge 启动后会在菜单栏显示系统托盘图标,并自动广播 mDNS 服务。

5. 构建并运行 iOS 客户端

make dev-mobile-ios

注意: 本项目使用原生模块(zeroconf、netinfo),需要开发构建,不支持 Expo Go。

6. 配对

  1. 打开 iPhone 上的 Agent Watch — 自动发现局域网内的 Bridge
  2. 输入 Bridge 界面上显示的 6 位配对码
  3. 连接成功!

7. 正常使用 Claude Code

在终端中启动 Claude Code,所有操作将实时推送到 iPhone。

项目结构

claude-watch-platform/
├── apps/
│   ├── bridge/                # Tauri macOS 桌面应用
│   │   ├── src/               # React 仪表板(Vite)
│   │   ├── src-tauri/
│   │   │   └── src/
│   │   │       ├── server.rs  # axum HTTP/SSE 路由
│   │   │       ├── hooks.rs   # Claude Code Hooks 管理
│   │   │       └── lib.rs     # Tauri 入口 + 托盘
│   │   └── package.json
│   │
│   └── mobile/                # Expo React Native iOS 应用
│       ├── app/               # Expo Router 路由页面
│       │   ├── pairing.tsx    # 配对流程
│       │   ├── dashboard.tsx  # 会话列表
│       │   └── session/       # 终端详情 + 命令输入
│       ├── src/
│       │   ├── services/      # Bridge/SSE/Discovery 服务
│       │   ├── stores/        # Zustand 状态管理
│       │   ├── hooks/         # 自定义 Hooks
│       │   └── components/    # UI 组件
│       └── package.json
│
├── Makefile                   # 统一构建命令
├── LICENSE
├── CONTRIBUTING.md
└── README.md

常用命令

命令 说明
make setup 安装所有依赖
make dev-bridge 启动 Bridge 开发模式
make dev-mobile 启动 Expo 开发服务器
make dev-mobile-ios 在 iOS 模拟器运行
make build-bridge 构建 Bridge(.dmg/.app)
make build-mobile 构建 Mobile(EAS)
make test 运行所有测试
make lint 运行所有 Linter
make doctor 检查环境依赖
make clean 清理构建产物

工作原理

事件流(Mac → iPhone)

  1. Claude Code 执行工具(如编辑文件)
  2. PostToolUse HTTP Hook 触发,POST 到 Bridge
  3. Bridge 通过 SSE 推送事件到所有已连接客户端
  4. iPhone 接收 SSE 事件,渲染为终端输出

权限流(Mac → iPhone → Mac)

  1. Claude Code 遇到权限提示(如 "是否编辑此文件?")
  2. PermissionRequest Hook 触发 — Bridge 阻塞响应
  3. Bridge 推送 permission-request SSE 事件到 iPhone
  4. 用户在 iPhone 上选择允许/拒绝
  5. Bridge 将决定返回给 Claude Code — 会话继续或停止

Claude Code Hooks

Bridge 自动在 ~/.claude/settings.json 安装以下 Hooks:

Hook 事件 用途 是否阻塞
PostToolUse 捕获工具输出 否
PreToolUse 捕获工具调用 否
PermissionRequest 转发权限提示 是(最长 10 分钟)
Stop 检测 Claude 结束响应 否
Notification 空闲/权限通知 否

与原版 Agent Watch 的关系

本项目是 Agent Watch 的平台化演进:

特性 Agent Watch(原版) Agent Watch Platform
Bridge Node.js 脚本 Tauri + Rust 桌面应用
iOS 客户端 SwiftUI 原生 Expo React Native
watchOS ✅ 支持 🚧 计划中
安装 Hooks 手动运行脚本 一键安装(Tauri GUI)
后台运行 需保持终端打开 系统托盘常驻
跨平台潜力 仅 Apple 生态 Expo 可扩展 Android

故障排查

iPhone 显示 "Bridge not found"

  • 确保 Bridge 已启动(菜单栏应有托盘图标)
  • 确认 iPhone 与 Mac 在同一局域网
  • 检查防火墙是否阻止了端口 7860-7869

iPhone 显示 "Connection failed"

  • 执行 curl http://127.0.0.1:7860/status 检查 Bridge 是否正常
  • iPhone 和 Mac 必须在同一 LAN

权限提示未出现

  • 检查 Hooks 是否已安装:查看 ~/.claude/settings.json
  • 确保 Bridge 日志显示 "Hook: PermissionRequest received"
  • 确认 iPhone 已连接 Bridge(绿色状态点)

参与贡献

欢迎参与贡献!请阅读 CONTRIBUTING.md 了解详情。

许可证

本项目基于 MIT 许可证 开源。

About

Control Claude Code from your iPhone. Tauri bridge + Expo React Native.

Resources

Code of conduct

Contributing

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages