扩展能力
Claude Code 的远程会话与桥接能力
终端在本地,不代表执行一定在本地
从很多人的直觉看,Claude Code 是一个本地终端工具。
但源码很清楚地表明,它已经内建了不少远程能力:
- remote session
- direct connect
- bridge / remote-control
- SSH 相关流程
这意味着它的 UI、执行位置和会话位置可以分离。

先看入口层就知道这不是边缘功能
main.tsx 里直接有这些导入:
import { createRemoteSessionConfig } from './remote/RemoteSessionManager.js';
import { createDirectConnectSession, DirectConnectError } from './server/createDirectConnectSession.js';
这说明远程能力不是后面某个插件临时加的,而是入口层就正式考虑的运行形态。
先看远程能力关系图
加载图表中...
状态层已经明确建模了远程状态
在初始化 AppState 的时候,可以看到一整组远程字段:
remoteSessionUrl: undefined,
remoteConnectionStatus: 'connecting',
remoteBackgroundTaskCount: 0,
replBridgeEnabled: fullRemoteControl || ccrMirrorEnabled,
replBridgeExplicit: remoteControl,
replBridgeOutboundOnly: ccrMirrorEnabled,
replBridgeConnected: false,
replBridgeSessionActive: false,
replBridgeReconnecting: false,
replBridgeConnectUrl: undefined,
replBridgeSessionUrl: undefined,
replBridgeEnvironmentId: undefined,
replBridgeSessionId: undefined,
replBridgeError: undefined,
看到这一组字段,基本可以确定两件事:
- 远程能力已经不是一次性请求,而是长期连接状态
- 系统要处理连接、活跃、重连、桥接、环境 ID 等完整生命周期
为什么 Claude Code 要做远程
因为现实工程环境经常不是“本地终端 + 本地仓库 + 本地执行”这么简单。
常见需求包括:
- 在远程容器里运行
- 在服务器环境里执行工具
- 用本地 UI 控制远程 Agent
- 将任务交给远端继续跑
这些需求一旦出现,本地 REPL 就不够了。
这会带来什么架构复杂度
一旦引入远程能力,系统立刻要处理:
- 本地状态和远程状态同步
- 远程任务数统计
- 连接掉线与重连
- 权限判断在本地还是远端
- 消息流如何适配回本地 UI
这就是为什么远程相关代码会分散在:
main.tsxremote/*hooks/useRemoteSession.tsBridgeDialog- 各类 session manager
远程会话和桥接不是一回事
一个直观理解是:
- Remote Session:会话运行在远端
- Bridge / Remote Control:本地会话和外部控制通道桥接
加载图表中...
两者都属于“本地 UI 和执行位置分离”的范畴,但语义不完全相同。
小结
Claude Code 的远程会话与桥接能力说明了一点:
它正在从“本地终端工具”扩展成“本地 UI + 多执行环境”的混合系统。
这一步非常关键,因为它决定了 Claude Code 不只是个人开发玩具,而可以进入更复杂的真实环境。