| |
POST https://api.anthropic.com/v1/environments/bridge
*payload* 包含你的机器信息:
```json
{
"machine_name": "MacBook-Pro-de-Fernando",
"directory": "/Users/fernando/code/tokamak",
"branch": "main",
"git_repo_url": "https://git.frr.dev/frr/tokamak.git"
}
API 的响应会返回一个 environment_id、environment_secret 和你的 organization_uuid。它基本上是在注册:“这台电脑,在这个目录下,运行的这个会话,已经设定为可以远程控制”。
2. WebSocket(不是轮询)
有趣的部分来了。通信并不是基于 HTTP 的轮询,而是一个双向的 WebSocket:
wss://api.anthropic.com/v1/session_ingress/ws/{session_id}
CLI 会打开这个 WebSocket 并保持监听。当你从手机端的 claude.ai 输入内容时,消息会通过 WebSocket 传输到你的本地 CLI。CLI 处理命令(执行工具、读取文件等等),然后通过同一个通道将结果返回。
这不是魔法,但确实很讲究。WebSocket 维持着一个持续的连接,因此延迟几乎可以忽略不计。无需每隔 5 秒问一次“有新消息吗?”。
Anthropic 在内部称这个为 HybridTransport:使用 HTTPS 处理注册和重操作,WebSocket 负责实时通信。
3. 轮询机制的备用方案
除了 WebSocket,系统还有一个备用的轮询 endpoint,以应对 WebSocket 连接断开时的情况:
GET https://api.anthropic.com/v1/environments/{env_id}/work/poll
这是个 fallback(备选方案)。如果 WebSocket 因不稳定的 WiFi、笔记本进入休眠状态等原因断开,CLI 仍然可以通过普通的 HTTP 请求来询问:“有工作项吗?”美国人称这个策略为 Belt and suspenders(安全带与吊带裤,确保双重安全措施)。
4. 磁盘上的痕迹
作为开发工具爱好者,这部分让我最感兴趣。每次使用 /rc 会在以下三个地方留下痕迹:
会话 JSONL 文件(被 Tokamak 读取的那个文件)中,会出现一条新事件:
| |
slug 字段特别有趣:它随机生成三个单词的组合,用来以更人性化的方式标识会话。“rapid-frozen-basilisk”(迅捷冷冻蜥蜴)。名字很有 CIA 行动代号的感觉。
在遥测文件中,会新增一个标志位:
is_claude_code_remote: true
在调试日志中 (~/.claude/debug/{sessionId}.txt),出现了所有内容:
Bridge API request: POST /v1/environments/bridge
Bridge API response: 200 { environment_id: "...", ... }
WebSocket connected: wss://api.anthropic.com/v1/session_ingress/ws/...
这包括与 Bridge API 的每次交互的完整转储:URL、payload、响应和 WebSocket 的状态。简直是逆向工程的天堂。
为什么目前不能用
接下来是现实令人生厌的部分。我刚才描述的所有内容都发生在我运行 /rc 时。CLI 无缝地在 Bridge API 上完成了注册,WebSocket 也成功连接,调试日志里满是痕迹。
但当我试图通过手机连接时,claude.ai 却说不行。
我在 GitHub 上搜索了一下。发现了 几十个问题帖,描述的情况完全一样。“Remote Control not available in my organization”(远程控制功能在我的组织中不可用)。Max 用户,付费账户,全都遇到了同样的问题。
Anthropic 的官方解释是:这是一种 “gradual rollout"(逐步推出)。简单来说就是:他们正在逐步向用户开放,而不是一次性开放。到了 2026 年 2 月,大多数 Max 账户仍然无法使用此功能。
就像在餐馆里看着菜单上的精美图片点了招牌菜,结果服务员告诉你“啊,不好意思,这道菜暂时还不供应”。
在 Remote Control 不可用时你能做什么
接下来是建设性解决思路。尽管你无法通过手机使用 Remote Control,但 API 的存在以及它显示出的痕迹为第三方工具的开发提供了更多可能性。
检测远程会话
JSONL 中的 slug 字段和遥测中的 is_claude_code_remote 标志位,可以用来区分本地会话和远程会话。如果你正在开发类似 Tokamak 的仪表板,可以显示:“此会话在 14:00 到 15:30 期间通过手机控制。”
用 Bridge 数据作为上下文
在 Bridge API 注册过程中包含了 machine_name, directory, branch, git_repo_url 等信息。如果你拥有多台设备或多场会话,Bridge 会自动提供运行每个实例的完整清单。完全免费还支持多设备视图。
WebSocket 作为观察通道
WebSocket 是双向的。目前,Anthropic 使用它将 claude.ai 与 CLI 连接起来。但理论上,第三方客户端也可以连接到相同的通道作为观察者。实时查看消息,而无需介入。可以实现实时的 session replay(会话回放)。
理论上是可以的,但前提是你拥有通过 Bridge API 生成的 environment_secret,而 Anthropic 很可能(也几乎必然)会限制谁能连接。但基础设施已经摆在那里。
这反映了什么?
有两点值得注意。
第一点:Bridge API 技术质量很高。WebSocket 与 polling fallback 的结合,支持旋转的密钥,包含 git 元数据的环境注册,用户友好的会话名称。这不是随便拼凑起来的功能,明显为扩展性做好了准备。
第二点:发布管理值得商榷。在官方博客上高调宣布了一项功能,并且 CLI 已经支持,还会生成运行日志及有效的 URL … 但大多数付费用户却用不了。这种行为只会徒增用户的挫败感。GitHub 上的那些问题帖子也证实了这一点。
这似乎是整个 AI 行业的一个趋势:大量营销造势,实际公开时却方案不成熟、资源不足以支撑所有用户。
总结
Claude Code 的 Remote Control 是一个切实存在的功能,设计精良,是一个优雅的 API。无论是 Bridge API、WebSocket,还是磁盘痕迹——一切都表明,这些技术都是为了长远发展而打造的。
但截至今天,2026 年 2 月 27 日,大多数 Max 用户还是无法使用它。数据已经就绪。API 给出了反馈。CLI 已完成注册并连接成功。而 claude.ai 却让你止步门外。
如果你是拥有这个功能的幸运 Max 用户——恭喜你。但如果没有,也不要灰心。或者像我一样,用一个下午的时间钻研这个你无法使用的 API,至少还可以学到点东西。
如果你正基于 Claude Code 开发工具,那就记下这些 endpoints 和痕迹吧。当全面开放的那天到来时,你会很感激当时做下的这些准备工作的。