1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
title: "Claude Code Remote Control 的结构解析:尚未开放的隐藏 API"
date: 2026-02-27T18:00:00+01:00
draft: false
slug: "claude-code-remote-control-hidden-api"
slug_en: "claude-code-remote-control-hidden-api"
description: "Anthropic 宣布了适用于 Claude Code 的 Remote Control 功能。我们研究了 bridge API、WebSocket、磁盘上的痕迹,以及为什么直到 2026 年 2 月,这项功能仍未对所有 Max 用户开放。"
tags: ["claude-code", "anthropic", "api", "websocket", "remote-control", "逆向工程"]
categories: ["观点"]

translation:
  hash: ""
  last_translated: ""
  notes: |
    - "grifo": 比喻 "开启访问权限" / "关闭访问权限"("tap/faucet")。不要翻译成“格里芬”。
    - "culo al aire": 意思是“被抓个现行” / “暴露”。在此语境下并不粗俗。
    - "dicho en cristiano": 意为“用简单的话说”。无宗教含义。
    - "chapuza": 意为“临时解决方案” / “粗糙的修复”。非贬义,指快速或简陋的解决方案。
    - "barra del bar": 比喻“随意讨论”。不是指字面上的“酒吧吧台”。
    - "mola": 西班牙俚语,意为“很酷/很棒”。翻译为 “很酷” 或类似的词。
    - "pinta": 此处意为“看起来像”,而不是 “一品脱”。
---

2026 年 2 月 25 日,Anthropic 宣布了针对 Claude Code 的 *Remote Control* 功能。构思是这样的:你在终端启动 Claude Code,然后拿着手机躺在沙发上,通过 claude.ai 继续你的会话。无需 SSH。无需 *tmux*。也不需要远程终端窗口。

听起来很酷,对吧?

但实际上,当我在终端输入 `/rc` 激活后,它给了我一个 URL。我打开手机,登录进去... 然后 claude.ai 提示我 "this feature is not active in your organization"(此功能尚未在您的账户中启用)。2026 年 2 月,我订阅的是 Max 5x 账户,每月按时付款。但什么都没用。

于是,我决定做任何理性人都会做的事:反编译 API,弄清楚后台到底发生了什么。

## 什么是 Remote Control(官方说法)

本质上:它是一个连接本地 CLI 和 claude.ai 网页的桥梁。Claude Code 的 CLI 仍在你的机器上运行(可以访问你的代码、终端和文件),但你可以通过任何浏览器查看它、批准 *tool calls*,并发送消息。

Anthropic 将它作为一项 "*research preview*"(研究预览)推出,仅面向 Max 用户。官方的期望是,你可以启动一个长任务(`/rc` + 提示词),关上笔记本电脑,去健身房,然后通过手机查看任务进度。

然而,正如我们接下来要讨论的,现实要微妙得多。

## 我们发现的底层真相

当你运行 `/rc` 时,Claude Code 会在后台做很多事情。而且,这些行动会留下大量的痕迹——在 JSONL 文件中、在 *debug logs* 里、在 API 响应里。让我们逐一拆解。

### 1. Bridge API

CLI 首先通过 Anthropic 的 API 注册一个 "*环境*":

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_idenvironment_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 读取的那个文件)中,会出现一条新事件:

1
2
3
4
5
6
{
  "type": "bridge_status",
  "subtype": "bridge_status",
  "bridgeUrl": "https://claude.ai/code/session_01SjBW...",
  "slug": "rapid-frozen-basilisk"
}

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 技术质量很高。WebSocketpolling 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 和痕迹吧。当全面开放的那天到来时,你会很感激当时做下的这些准备工作的。