扩展能力

Claude Code 的远程会话与桥接能力

终端在本地,不代表执行一定在本地

从很多人的直觉看,Claude Code 是一个本地终端工具。
但源码很清楚地表明,它已经内建了不少远程能力:

  • remote session
  • direct connect
  • bridge / remote-control
  • SSH 相关流程

这意味着它的 UI、执行位置和会话位置可以分离。

Claude Code 界面参考

先看入口层就知道这不是边缘功能

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,

看到这一组字段,基本可以确定两件事:

  1. 远程能力已经不是一次性请求,而是长期连接状态
  2. 系统要处理连接、活跃、重连、桥接、环境 ID 等完整生命周期

为什么 Claude Code 要做远程

因为现实工程环境经常不是“本地终端 + 本地仓库 + 本地执行”这么简单。

常见需求包括:

  • 在远程容器里运行
  • 在服务器环境里执行工具
  • 用本地 UI 控制远程 Agent
  • 将任务交给远端继续跑

这些需求一旦出现,本地 REPL 就不够了。

这会带来什么架构复杂度

一旦引入远程能力,系统立刻要处理:

  • 本地状态和远程状态同步
  • 远程任务数统计
  • 连接掉线与重连
  • 权限判断在本地还是远端
  • 消息流如何适配回本地 UI

这就是为什么远程相关代码会分散在:

  • main.tsx
  • remote/*
  • hooks/useRemoteSession.ts
  • BridgeDialog
  • 各类 session manager

远程会话和桥接不是一回事

一个直观理解是:

  • Remote Session:会话运行在远端
  • Bridge / Remote Control:本地会话和外部控制通道桥接
加载图表中...

两者都属于“本地 UI 和执行位置分离”的范畴,但语义不完全相同。

小结

Claude Code 的远程会话与桥接能力说明了一点:

它正在从“本地终端工具”扩展成“本地 UI + 多执行环境”的混合系统。

这一步非常关键,因为它决定了 Claude Code 不只是个人开发玩具,而可以进入更复杂的真实环境。