目录
Remote Control 是这样一个功能:从手机或浏览器连上正跑在你自己机器上的 Claude Code 会话,接着刚才的进度继续操作。官方的说法是这样的——“在办公桌前开始一项任务,然后挪到沙发上用手机接着做,或者换一台电脑在浏览器里接着做”(Continue local sessions from any device with Remote Control)。
这里真正需要记住的只有一件事。Claude 从头到尾都跑在你自己的机器上。代码的执行和文件的访问始终留在手边。手机和 claude.ai 是窥看那个本地会话的一扇窗,而不是它运行的地方。
📌 本文的依据:功能行为、可用的套餐、默认值,都是对照 Anthropic 官方文档(Remote Control / Platforms and integrations / Data usage / Advanced setup)核实过的。依赖版本的行为都标注了所需版本。Trusted Devices 还处在测试阶段。
1. Remote Control 是什么——真正在跑的不是云,而是你手边的电脑
听到“让 AI 从手机上做开发”,多数人脑子里浮现的是云端某处启动一个容器的画面。Remote Control 的设计恰好反过来。计算和文件都不挪窝,只挪你操作的位置。
这个差别直接决定了它能做什么。官方列出来的是以下四条。
整个本地环境都能照常用
文件系统、MCP 服务器、工具、项目配置全都照常有效。在手机上敲 @,补全出来的是你本地项目里的路径。
两块屏幕可以同时用
对话,以及子智能体和工作流的进度,都会在所有已连接的设备之间同步。终端、浏览器还是手机,敲进去的都汇入同一条对话。
可以发照片和文件
照片会直接作为消息的一部分被读取。其他文件则由 Claude Code 下载到你手边的机器上,再以 @ 引用的形式递进去。
扛得住中断
笔记本睡眠了、网断了都不要紧,机器回来之后会自动重连。这段空档里子智能体和工作流的更新会排进队列,连上的那一刻投递过来。
最后这一条的作用比听上去大。“上车前让它跑一个构建,下车后收结果”这种用法,中途钻个隧道也不会散架。
用它需要满足的条件
| 条件 | 内容 |
|---|---|
| 套餐 | Pro / Max / Team / Enterprise。API 密钥用不了。Team 和 Enterprise 上默认关闭,要等 Owner 在管理后台把开关打开 |
| 认证 | 用 /login 登录 claude.ai。claude setup-token 或 CLAUDE_CODE_OAUTH_TOKEN 这类长期令牌连不上——因为它们只有发起模型请求这一项权限 |
| 接入的 API | 必须直连 api.anthropic.com。Amazon Bedrock / Google Cloud's Agent Platform / Microsoft Foundry 都用不了。把 ANTHROPIC_BASE_URL 指向别的主机同样不行(v2.1.196 及以上) |
| 环境变量 | DISABLE_TELEMETRY / DO_NOT_TRACK / CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC / DISABLE_GROWTHBOOK 都会让功能开关的评估停下来,只要设了其中任何一个就用不了 |
| 工作区信任 | 在项目目录里执行一次 claude,把信任对话框过掉。在主目录里做的话信任不会被保存,所以一定要从项目那一侧开始 |
⚠️ 第四条关于环境变量的条件最容易漏掉。出于隐私考虑设了 DO_NOT_TRACK 的人不在少数,而恰恰是它导致你被告知“该功能未在你的账号上启用”。这是典型的那种很难联想到是自己配置所致的情形,执行 claude doctor 就能看出卡在了哪一项判定上。
2. 从远处干活的路子有四条——哪几条用的是自己的电脑
Claude Code 提供了好几种“人不在终端前也能继续干活”的手段,而第一个岔路口在于:哪些跑在你手边的机器上,哪些跑在云上。按这个轴重新读一遍官方的平台对比表,结果是这样。
| 手段 | 触发方式 | Claude 运行的地方 | 适合的用途 |
|---|---|---|---|
| Remote Control | 连上一个正在运行的会话 | 你自己的电脑(CLI / VS Code) | 给进行中的工作掌舵、审批 |
| Dispatch | 从手机发一项任务过去 | 你自己的电脑(桌面应用) | 人不在时整件甩出去 |
| Channels | 来自 Telegram、Discord 等的事件 | 你自己的电脑(CLI) | 对 CI 失败之类的外部事件做出反应 |
| Claude Code on the web | 在 claude.ai/code 提交任务 | Anthropic 的云 | 手边没有环境的活儿、并行执行 |
上面三种跑的都是你自己的电脑。所以它们够得着只存在于本地的资产——没有克隆到别处的仓库、要穿过公司内网才能访问的数据库、装好的工具链、部署用的密钥。云端会话在原理上做不到的事情,就落在这里。
有时候云根本不是一个选项
容易被忽视的是,仓库托管在哪里,会替你砍掉一部分选项。官方的限制条款里写着——克隆仓库和创建拉取请求需要 GitHub,GitLab、Bitbucket 这类非 GitHub 的仓库可以作为本地 bundle 送过去,但结果没法推回远端。
如果你用的是自建 Git 服务器或公司内部的 GitLab,那么“从外面干活”实际可选的就只剩 Remote Control 和 Dispatch 两个。这不是口味问题,是配置替你定下来的。
3. 怎么开始——三个入口,以及如何取舍
CLI 有三种启动方式,按“是想把一个会话带走,还是想接住好几个”来选。
① 把正在聊的这段对话原样带走
如果你已经在 Claude Code 的会话里了,这一条就够了。
/remote-control
官方的描述是“开启一个承接当前对话历史的 Remote Control 会话”。可以简写成 /rc,传参数就成了会话名(/remote-control 文章校对)。“活儿干到一半要出门”这件事,最短的答案就是它。VS Code 扩展里也能用同一条命令。
② 一开始就带着远程启动
claude --remote-control "项目名"
启动出来的是一个附带远程连接的普通交互式会话。可简写为 --rc。在终端里能敲,从手机上也能发。
③ 服务器模式——接住多个会话
claude remote-control
进程作为服务器常驻,等着远程接入。按一下空格键会显示二维码,用手机相机扫一下就直接连上了。
| 选项 | 效果 |
|---|---|
--name "..." |
决定在 claude.ai 的会话列表里显示的名字 |
--spawn worktree |
给每个会话单独切一个 git worktree(需要 git 仓库)。默认的 same-dir 会让所有会话共用同一个工作目录,所以改到同一个文件就会冲突。运行期间可以用 w 键切换 |
--spawn session |
只接受单个会话,拒绝后续的接入 |
--capacity N |
并发会话数的上限(默认 32) |
--continue / --session-id |
把已停止的服务器上的会话叫回来(v2.1.200 及以上) |
从手机上打开
连接方式有三种。在浏览器里打开会话 URL、扫二维码、从 Claude 应用的列表里挑。在移动应用里,导航栏的“Code”就是会话列表,Remote Control 的会话会用一个电脑图标加一个绿色圆点标出来。
如果还没装应用,在 Claude Code 里执行 /mobile 会弹出用于下载的二维码(iOS / Android)。
💡 二维码不是认证,只是一条近路。不扫也行,从应用的列表里按会话名挑,到的是同一个地方。决定访问权的不是“知不知道 URL”,而是“这是谁的账号”——这一点放在第7章讲。
要是每次都得连一遍嫌烦
自动连接默认关闭,只有显式启动时才生效。想一直连着,就用 /config 里的 Enable Remote Control for all sessions,或者把配置文件里的 remoteControlAtStartup 设成 true。
这里有一处设计得很妙的不对称。写在项目配置(.claude/settings.json)里的 false 会被尊重,但 true 会被忽略。这是为了不让一个签入仓库的文件,擅自替所有打开这个仓库的人开启 Remote Control。
4. 手机这一侧能做什么、不能做什么
连上的设备会原样收到终端里正在发生的一切。不过斜杠命令这边划了一条线。
✅ 手机和 Web 上能用
/compact /clear /context /usage /recap /exit
写成带参数的形式的话:/model sonnet /effort high /rename /fast /color/mcp(v2.1.166 及以上)、/config key=value(v2.1.181 及以上)、/autocompact 500k(v2.1.221 及以上)
❌ 仅限本地
/plugin /resume 等,只有在终端 UI 里才成立的那些。加了参数也不管用。
用来切换对话的 /resume 只能在本地,这在实际使用中很有分量——想换一段对话,就得回到电脑前。
在终端里会弹出选择器或滑块的命令,在手机上换成了传参数的形式。也就是说,不要单敲 /model,而要写成 /model sonnet。
能回答权限提示——这才是重头戏
实际用起来最管用的一条,是权限提示和提问会被转发到手机上。官方明确写着“会一直开着,直到你回答为止”。一个长任务卡在等审批、干等你到家的那段时间,就这么消失了。
不过别的种类的对话框是有期限的。权限提示和提问以外的——比如安全拒绝之后弹出的模型选择——会默认等 5 分钟然后关掉,以“什么都不做”的默认值继续往下走。可以用 dialogExpiry 调整或关闭(v2.1.224 及以上)。
改了模型和 effort,能留多久
| 操作 | 生效范围 |
|---|---|
| 在设备的模型选择界面里挑 | 仅限当前会话 |
发送 /model <名字> |
新会话的默认值也跟着变(和在终端里敲是一样的) |
| 挑一个 effort 级别 | 仅限当前会话。如果用 CLAUDE_CODE_EFFORT_LEVEL 钉死了,这次修改会被拒绝(v2.1.234 及以上) |
同样是“改模型”,从 UI 里挑还是发一条命令,留存的时长并不一样。路上顺手切到轻量模型,结果连默认值一起改掉了——事故就是这么来的。
5. 它怎么把你叫回来——推送通知
Remote Control 生效期间,Claude 会发推送通知过来。官方的说法是,通常在长任务结束时,或者需要你做个判断才能继续时发送。你也可以在提示词里写 notify me when the tests finish 这样的话来显式索要。
配置只有 /config 里的两个开关,没有按事件细分的设置。
Push when Claude decides
由 Claude 自行判断发出的主动通知。长任务完成属于这一类。
Push when actions required
权限提示和提问。用来让你察觉它停下来了的通知。
有一处很贴心的行为:你正在用终端的时候,它不会发推送。除此之外,把 CLAUDE_CLIENT_PRESENCE_FILE 指向一个标记文件(v2.1.181 及以上),只要那个文件还在,通知就会被跳过——设成解锁屏幕时创建、锁屏时删除,那么“在别的窗口里干活但人就在电脑前”的那段时间也能一并噤声。
📱 收不到通知时的老套路:如果 /config 里显示 No mobile registered,在手机上打开一次 Claude 应用就会刷新推送令牌。iOS 上专注模式和通知摘要会拖慢投递,Android 上则是电池优化,这些也要一并确认。
6. 原理——为什么不用开端口也能连上
说到从外面操作家里的电脑,第一件该警惕的事是开入站端口。把 SSH 暴露到外网就成了暴力破解的靶子,VNC 也一样。Remote Control 在结构上避开了这一点。
官方的描述很干脆——“你本地的 Claude Code 会话只发出站 HTTPS 请求,绝不在你的机器上开放入站端口”。
① 注册
本地的 claude 向 Anthropic API 把自己注册上去
② 轮询
由它主动去取有没有活儿派下来
③ 中转
手机连上来之后,服务器在两者之间转发消息
所有通信都经由 Anthropic API,并受到与普通 Claude Code 会话相同的 TLS 保护。连接使用多个短命凭据,每一个都只限定于单一用途,并且可以独立吊销。
和传统手段的对比
| 方式 | 入站端口 | 路由器设置 | 在本地执行 |
|---|---|---|---|
| 直接开放 SSH | 需要 | 端口转发 | ✅ |
| VNC / 远程桌面 | 需要 | 需要 | ✅ |
| Remote Control | 不需要 | 不需要 | ✅ |
| 云端会话 | 不需要 | 不需要 | ❌ |
作为穿透 NAT 的副产品,路由器设置、固定 IP、DDNS 全都不需要。老家的电脑也好,公司内网里的机器也好,只要出站通信能出得去就连得上。
7. 安全——门只有一道,那就是你的账号
没有入站端口,网络这一侧的攻击面几乎消失了。那么风险去哪了?转移到账号上了。
二维码不是认证
有些讲解把这件事说错了,但二维码并不是认证的一环。连接方式是“打开 URL / 扫二维码 / 从应用的列表里挑”三种,既然能从列表里挑,二维码就只是个缩短流程的东西。
那么守着这道门的是什么?官方在自动连接那一节里这样写——“自动连接用的是你本人的 claude.ai 账号登录,因此它开出的会话只会出现在你自己账号的 Claude 应用里,不会给任何其他人访问权”。会话是绑在账号上的,而不是取决于谁知道那个 URL。
而且“门只有一道”这件事,从官方自己的措辞里也读得出来。Trusted Devices 的说明里写着“把 Remote Control 的访问权绑定到已知设备和一次近期的认证上,而不只是一个已登录的账号”。反过来说,默认的那道门恰恰就是“已登录的账号”这一道。
一道门也不算弱,以及这依赖于什么
入口不是常设的
只在会话运行期间存在。把进程停掉,它就没了。这不是一扇能被 24 小时盯着撬的门
长期令牌连不上
CI 用的 CLAUDE_CODE_OAUTH_TOKEN 就算泄露,也没法拿来做远程操作。权限是切开的
一道门的强度就是整体的强度
如果光靠密码就能登进去,防御就只值一个密码。这里弱,别的都白搭
于是该做的事收敛成了一件——给 claude.ai 设置通行密钥(passkey)。密钥绑定在设备上,能抗钓鱼,而且生物信息本身不会交给 Anthropic(保存下来的只有公钥,以及显示名、平台、注册时间这类基本元数据)。如果是 Team 或 Enterprise,还能用 Trusted Devices 在整个组织范围内强制要求已注册设备加上 18 小时以内的登录。
对话记录会保存在服务器上
有一点得老老实实写出来。连接期间,会话的完整记录——你的消息、Claude 的回复、工具的执行内容——会保存在 Anthropic 的服务器上。这是为了跨设备同步,以及断线之后能恢复。它不是端到端加密的。
| 账号 | 保留期限 |
|---|---|
| Free / Pro / Max(用于模型改进:开) | 5 年 |
| Free / Pro / Max(关) | 30 天 |
| Team / Enterprise / API | 30 天 |
设置随时可以在 claude.ai 的隐私设置里改。实行零数据保留(ZDR)的组织,压根就无法启用 Remote Control。
公平起见还要补一句,普通的 Claude Code 本来就把所有提示词和输出都发给了 API,对话记录也早已以明文躺在本地的 ~/.claude/projects/ 里(默认 30 天,可用 cleanupPeriodDays 修改)。Remote Control 新增的部分是“为了同步,服务器那一侧也留下了一份实体”。
手机丢了怎么办
最快也最可靠的做法,是在电脑上把 claude 进程停掉。入口本身就没了。在此基础上再改密码并退出登录。如果用了 Trusted Devices,在账号设置的 Trusted devices 里把那台设备删掉,凭据会立刻失效。
手机那一侧并没有常驻着一把“通往电脑的钥匙”。应用的登录状态就是全部,所以锁屏和通行密钥本身就构成了防御。
实际使用中真正咬人的风险
⚠️ 剩下的两个风险都不在技术上,而在运用上。
① 在小屏幕上,你读不完自己正在批准的那条命令的全文。能在手机上答复权限提示是最大的好处,但也正因为如此,才会有人在路上一目十行地按下“允许”。在握着生产环境密钥的会话里尤其如此。
② 一旦和跳过权限的模式叠在一起,看门的就没了。把省略权限提示的用法和远程操作叠加起来,等于从外面去碰一个连一道审批闸门都没有的东西。只选其中一样,才是安全的那一侧。
另外,用 --sandbox 做隔离是个可选项,但原生 Windows 上不支持沙箱(WSL 2 则可以)。取决于你的配置,可能得按“这道保险用不上”来打算。
想彻底禁止的话,可以用 disableRemoteControl 设置把它关掉。管理员也可以从托管设置里按设备禁用。
8. 连不上、掉线时的原因排查
错误信息会相当具体地指名原因。把有代表性的几条整理如下。
| 症状 | 原因与处理 |
|---|---|
| 提示需要 claude.ai 订阅 | 当前是 API 密钥认证。先取消 ANTHROPIC_API_KEY,再执行 claude auth login |
| 提示需要完整作用域的令牌 | 你用的是 setup-token 一类的长期令牌。它只能用于模型请求,所以要用 claude auth login 重来一遍 |
| 提示该功能未在账号上启用 | 多半是改套餐之后缓存还是旧的。执行 claude auth logout → login。claude doctor 能看出卡在了哪一项判定上 |
| 提示需要功能开关评估 | DISABLE_TELEMETRY 那一组四个变量里设了其中之一。信息里会指名是哪个变量,所以 shell 环境和 settings.json 的 env 块都要看一遍 |
| 提示不是经由 Anthropic API | 要么是 Bedrock / Foundry 之类的供应商设置,要么是 ANTHROPIC_BASE_URL 指向了别的主机 |
掉线之后,该不该重连
这一块官方明确写了“先读原因再判断”。连接失败时会显示理由,而在下面这三种情形里,平时那句“执行 /remote-control”的指引是被刻意省略掉的。
别的设备把它抢走了
只有想抢回来的时候才重新执行
在别的设备上结束或归档了
重新执行会把已归档的也重新打开
服务器找不到这个会话
有可能是从别的设备上删除了
网络断了的时候,模式不同行为也不同
这一段不知道的话会犯迷糊。机器醒着但够不着网络的状态一直持续下去的话——
- 服务器模式:大约 10 分钟后放弃,进程退出。重新执行
claude remote-control开一个新会话 - 交互式会话:可以就这么在本地继续干活。只要故障还在,Claude Code 就会一直重试,网络回来之后它自己会重连
另外,用 Ctrl+C 停掉服务器的话,会话在大约 4 小时内还叫得回来(claude remote-control / --continue / --session-id)。超过之后就只能重新开了。
💡 要在远程机器上用,就在 tmux 或 screen 里启动。官方也明确写着,断开 SSH 会让进程死掉、会话变成离线。在“服务器上的 Claude Code 从手机操作”这种配置里,这是必须遵守的规矩。
9. 和 Dispatch 怎么分工
两者都是“跑的是你自己的电脑”,所以很容易混。分水岭在于出门之前要不要做准备。
| 观点 | Remote Control | Dispatch |
|---|---|---|
| 事前准备 | 需要(先在电脑上启动) | 不需要(配对过之后,想起来随时就能发) |
| 从哪里开始 | 电脑那一侧。手机之后再汇入 | 手机那一侧 |
| 电脑这一侧的入口 | CLI / VS Code 扩展 | 桌面应用 |
| 对话的结构 | 一条对话在所有设备之间同步 | 向常驻的对话提要求,另外生出一个会话 |
| 套餐 | Pro / Max / Team / Enterprise | 仅 Pro / Max |
| 适合的场合 | 给进行中的工作掌舵、审批 | 人不在时整件甩出去 |
这不是二选一。从外面丢活儿进来就用 Dispatch,离开座位之前先连上就用 Remote Control,这样并用才自然。Dispatch 的细节和安全界线,整理在专文里。
总结
- Remote Control 是“不挪执行的地方,只挪操作的地方”的功能。本地的文件、MCP、工具照常可用
- 只走出站 HTTPS,不开入站端口。路由器设置和固定 IP 都不需要,攻击面比把 SSH 暴露到外网小得多
- 二维码不是认证,只是近路。访问权由“这是谁的账号”决定,而不是“知不知道 URL”
- 门只有一道,就是 claude.ai 账号。所以设置通行密钥是第一优先。Team 和 Enterprise 还能用 Trusted Devices 把设备和生物识别绑上
- 连接期间,完整会话记录会保存在服务器上。保留期限按是否用于模型改进分成 5 年和 30 天
- 只在本地进程活着的时候有效。要在远程机器上用,就在
tmux/screen里启动 - 剩下的实务风险不在技术而在运用——在小屏幕上按下批准。握着生产环境密钥的会话里尤其要留神
FAQ
Q1. 桌面应用里也能用吗?
官方列为启动方式的是 CLI 和 VS Code 扩展,没有写从桌面应用开始的步骤。另一方面,文档里既有“设置 > Claude Code > Enable remote control by default”这个开关在桌面应用里也有的说法,也有在 Claude Desktop 里恢复一段曾经开着 Remote Control 的对话,会重新连上已有会话的说法。先去设置界面看一眼,没有再用 CLI,这样最稳。
Q2. 在桌面应用里推进的对话,能从 CLI 接手吗?
很有可能可以。官方明确写着 VS Code 扩展、JetBrains 插件、桌面应用都会写入 ~/.claude/,而对话保存在 ~/.claude/projects/。流程是在同一个目录里执行 claude --resume、选中那段对话,然后执行 /remote-control。
Q3. 我的 Node.js 版本很旧,还能装 CLI 吗?
能装。原生安装器不使用 Node.js——Windows 上就是在 PowerShell 里执行 irm https://claude.ai/install.ps1 | iex。npm 版要求 Node.js 22 及以上,但它本体同样是原生二进制,旧 Node 上只会冒一个 EBADENGINE 警告,安装本身照样能完成。
Q4. 电脑睡眠了会怎样?
会话会变成离线,但机器一恢复,Claude Code 就会自动重连。这段空档里子智能体和工作流的状态更新会排进队列,恢复之后投递过来。不过如果是把进程本身结束掉了(关掉终端、退出 VS Code),几秒之内就会显示为离线,需要手动把它叫回来。
Q5. 同时能连几个会话?
交互式会话是一个进程对应一个远程会话。想用一个进程接住多个,就用服务器模式(claude remote-control)。默认上限是 32 个会话,可以用 --capacity 改。
Q6. 多个会话会不会把同一个文件搞坏?
在默认的 --spawn same-dir 下,所有会话共用同一个工作目录,所以改到同一个文件就会冲突。指定 --spawn worktree 之后,会给按需开出的每个会话分配专属的 git worktree(需要 git 仓库)。运行期间也可以用 w 键切换。
Q7. 能从手机上用 /resume 换到别的对话吗?
不能。/resume 是仅限本地的命令,加了参数也不管用。另外,如果在终端那一侧用 /resume 切换了对话,已连接的设备不会收到切换后的历史和标题,但新消息会双向流向终端里打开着的那段对话。
Q8. 和 Claude Code on the web 有什么区别?
执行的地方不同。两者用的都是 claude.ai/code 的界面,但 Remote Control 在你的机器上执行,所以本地的 MCP 服务器、工具、项目配置都还有效。Claude Code on the web 在云上执行,因此手边没有环境也能跑,代价是够不着本地的资产。
Q9. 经由公司的代理或 LLM 网关也能用吗?
用不了。只要 ANTHROPIC_BASE_URL 指定了 api.anthropic.com 以外的主机就无法使用(v2.1.196 及以上)。经由企业版 Claude apps gateway 的登录同样不在范围内。有零数据保留之类合规设置的组织也无法启用。
相关文章
- 从手机驱动自己电脑的“Dispatch”,安全性到底如何——本文的 Dispatch 那一侧
- Claude Code 的 agent view 与“dispatch”——同名的另一个功能
- 子智能体和智能体团队的区别——远程操作时也会同步进度的对象