Claude Code Web 版:云端任务、GitHub 连接、Auto-fix PR 全配置指南

Claude Code on the web 在 claude.ai/code 上运行 Anthropic 管理的云端基础设施,会话在关闭浏览器后仍持续运行,可通过 Claude 移动 App 监控。支持从终端用 --remote 启动云端任务、用 --teleport 将云端会话拉回本地,以及 Auto-fix PR(自动响应 CI 失败和代码审查评论)。云端环境预装了 Python、Node.js、Ruby、Go、Rust、Docker、PostgreSQL、Redis 等主流工具。

Claude Code on the web 通过 claude.ai/code 访问,在 Anthropic 管理的云端 VM 中运行任务。会话在关闭浏览器后仍会持续,你可以通过 Claude 移动 App 监控它们。

刚接触 Claude Code on the web?从 Get started 开始连接 GitHub 账号并提交第一个任务。

本文覆盖:

GitHub 连接配置

云端会话需要访问你的 GitHub 仓库来克隆代码和推送分支。有两种授权方式:

方法 工作原理 最佳适用场景
GitHub App Web 快速入门 过程中授权 Claude GitHub App。 从浏览器开始使用;团队需要使用 Auto-fix
/web-setup 在终端运行 /web-setup,将本地的 gh CLI token 同步到你的 Claude 账号。 已经在使用 gh 的个人开发者

无论使用哪种方法,云端会话可以访问已连接 GitHub 账号能看到的任何仓库,不仅仅是安装 Claude GitHub App 的仓库。安装 App 是为了启用 PR webhooks 实现 Auto-fix,并非会话级别的访问控制。要限制团队从云端会话能访问的仓库,应在 GitHub 自身进行限制,例如限制已连接 GitHub 账号的团队或仓库成员身份。

两种方法都可以用。/schedule 会检查是否已配置任一方式,如果没有配置,会提示你运行 /web-setup。关于 /web-setup 的详细步骤,请参阅 Connect from your terminal

GitHub App 是 Auto-fix 的必要条件,Auto-fix 使用 App 来接收 PR webhooks。如果你通过 /web-setup 连接,之后又需要 Auto-fix,需要在这些仓库上安装 App。

团队和企业管理员可以在 claude.ai/admin-settings/claude-code 使用“快速 web 设置”开关来禁用 /web-setup

启用了 零数据保留 的组织无法使用 /web-setup 或其他云端会话功能。

云端环境详解

每个会话在一个全新的、由 Anthropic 管理的 VM 中运行,并自动克隆你的仓库。本节介绍会话启动时有哪些资源可用,以及如何自定义。

云端会话中会带入什么

云端会话从仓库的全新克隆开始。已提交到仓库的代码和文件可用,但在你本机安装或配置的内容不会带入。

云端会话中可用 原因
仓库中的 CLAUDE.md 克隆的一部分
仓库中的 .claude/settings.json hooks 克隆的一部分
仓库中的 .mcp.json MCP 服务器 克隆的一部分
仓库中的 .claude/rules/ 克隆的一部分
仓库中的 .claude/skills/.claude/agents/.claude/commands/ 克隆的一部分
.claude/settings.json 中声明的插件 在会话启动时从你声明的市场安装。需要网络访问才能连接市场源
你的用户级 ~/.claude/CLAUDE.md 存储在你的机器上,不在仓库内
仅在用户设置中启用的插件 用户级别的 enabledPlugins 存储在 ~/.claude/settings.json 中。应该在仓库的 .claude/settings.json 中声明
你用 claude mcp add 添加的 MCP 服务器 那些命令会写入本地的用户配置文件,而非仓库。请改用 .mcp.json 声明服务器
静态 API Token 和凭证 尚无专用的秘密存储。见下文
AWS SSO 等交互式认证 不支持。SSO 需要基于浏览器的登录,无法在云端会话中运行

为了让配置在云端会话中可用,将其提交到仓库。目前尚没有专用的秘密存储。环境变量和 setup 脚本都存储在环境配置中,任何能够编辑该环境的人都可以看到。如果你在云端会话中需要秘密信息,可以将其添加为环境变量,但要注意其可见性。

预安装工具

云端会话预装了常见的语言运行时、构建工具和数据库。按类别汇总如下:

类别 包含内容
Python Python 3.x with pip, poetry, uv, black, mypy, pytest, ruff
Node.js 20、21、22(通过 nvm 管理),附带 npm、yarn、pnpm、bun¹、eslint、prettier、chromedriver
Ruby 3.1、3.2、3.3,附带 gem、bundler、rbenv
PHP 8.4 with Composer
Java OpenJDK 21 with Maven 和 Gradle
Go 最新稳定版,支持模块管理
Rust rustc 和 cargo
C/C++ GCC、Clang、cmake、ninja、conan
Docker docker、dockerd、docker compose
数据库 PostgreSQL 16、Redis 7.0
工具 git、jq、yq、ripgrep、tmux、vim、nano

¹ Bun 已安装,但在包获取时存在已知的代理兼容问题

要查看精确版本,可以在云端会话中让 Claude 运行 check-tools 命令。该命令只在云端会话中存在。

处理 GitHub Issues 和 Pull Requests

云端会话包含内置的 GitHub 工具,让 Claude 无需任何配置就能读取问题、列出 PR、获取差异和发布评论。这些工具通过 GitHub 代理 使用你配置的 GitHub 认证方式 进行认证,因此你的 token 永远不会进入容器。

gh CLI 没有预装。如果你需要内置工具未覆盖的 gh 命令,例如 gh releasegh workflow run,你需要自行安装并认证它:

将 `apt update && apt install -y gh` 添加到你的 [setup 脚本](#setup-脚本使用指南)中。



将一个包含 GitHub 个人访问 token 的 `GH_TOKEN` 环境变量添加到你的[环境设置](#配置你的环境)中。`gh` 会自动读取 `GH_TOKEN`,因此无需执行 `gh auth login` 步骤。

将会话与制品关联

每个云端会话在 claude.ai 上都有一个转录 URL,并且会话可以从 CLAUDE_CODE_REMOTE_SESSION_ID 环境变量读取自身的 ID。你可以利用这个 ID,在 PR 正文、提交信息、Slack 帖子或生成的报告中放置一个可追溯的链接,以便审查者打开生成它们的具体运行。

该变量的值使用 cse_ 前缀,而转录 URL 路径使用相同的 ID 但前缀为 session_。构建链接时替换前缀。以下命令可以打印出该 URL:

echo "https://claude.ai/code/${CLAUDE_CODE_REMOTE_SESSION_ID/#cse_/session_}"

运行测试、启动服务和添加包

Claude 在处理任务时会运行测试。在你的提示词中提出要求,例如“修复 tests/ 中失败的测试”或“每次修改后运行 pytest”。由于 pytest、jest 和 cargo test 等测试运行器已预装,开箱即用。

PostgreSQL 和 Redis 已预装但默认不运行。请让 Claude 在会话期间启动它们:

service postgresql start
service redis-server start

Docker 可用于运行容器化服务。让 Claude 运行 docker compose up 来启动项目的服务。拉取镜像的网络访问遵循你环境的访问级别受信任的默认域名包括 Docker Hub 和其他常见镜像仓库。

如果镜像很大或拉取缓慢,请将 docker compose pulldocker compose build 添加到你的 setup 脚本中。拉取的镜像保存在缓存环境中,因此每个新会话都已在磁盘上准备好了。缓存只存储文件,不存储运行中的进程,因此 Claude 仍然需要在每个会话中启动容器。

要添加未预装的包,请使用 setup 脚本。脚本的输出会被缓存,因此你在那里安装的包在每个会话开始时都可用,无需每次重新安装。你也可以让 Claude 在会话中途安装包,但这些安装不会带入其他会话。

资源限制

云端会话运行在近似资源上限下,这些上限可能会随时间变化:

  • 4 vCPU
  • 16 GB 内存
  • 30 GB 磁盘

需要大量内存的任务,例如大型构建或内存密集型测试,可能会失败或被终止。对于超出这些限制的工作负载,请使用 Remote Control 在自己的硬件上运行 Claude Code。

配置你的环境

环境控制网络访问、环境变量以及在会话启动前运行的 setup 脚本。请参阅预安装工具了解无需任何配置即可使用的工具。你可以从 Web 界面或终端管理环境:

操作 方法
添加一个环境 选择当前环境以打开选择器,然后选择 添加环境。在弹出的对话框中配置名称、网络访问级别、环境变量和 setup 脚本。
编辑一个环境 选择显示当前环境名称的云图标以打开选择器,将鼠标悬停在一个环境上,然后点击右侧出现的设置图标。
归档一个环境 打开环境进行编辑,然后选择 归档。归档的环境会从选择器中隐藏,但现有会话会继续运行。
--remote 设置默认环境 在终端运行 /remote-env。如果你只有一个环境,此命令会显示当前配置。/remote-env 只用于选择默认环境;添加、编辑和归档环境请从 Web 界面操作。

环境变量使用 .env 格式,每行一个 KEY=value 对。值不需要用引号包裹,因为引号会作为值的一部分被存储。

NODE_ENV=development
LOG_LEVEL=debug
DATABASE_URL=postgres://localhost:5432/myapp

Setup 脚本使用指南

Setup 脚本是一个 Bash 脚本,在新的云端会话启动时、Claude Code 启动之前运行。使用 setup 脚本来安装依赖、配置工具,或获取会话需要的非预装内容。

脚本以 root 身份在 Ubuntu 24.04 上运行,因此 apt install 和大多数语言包管理器都可以正常工作。

要添加 setup 脚本,请打开环境设置对话框,在 Setup 脚本 字段中输入你的脚本。

此示例安装未预装的 gh CLI:

#!/bin/bash
apt update && apt install -y gh

如果脚本以非零状态退出,会话将无法启动。对非关键命令追加 || true,以避免偶发的安装失败阻塞会话。

保持脚本的总运行时间在约五分钟以内,以便环境缓存能够构建。使用 &wait 并行运行独立的安装。如果某个单个下载无法在五分钟内完成,请将其移动到一个 SessionStart hook 中,让它后台启动。

安装包的 setup 脚本需要网络访问才能连接镜像仓库。默认的 受信任 网络访问允许连接到常见的包镜像仓库,包括 npm、PyPI、RubyGems 和 crates.io。如果你的环境使用 网络访问,脚本将无法安装包。

环境缓存

Setup 脚本会在你首次在某个环境中启动会话时运行。完成后,Anthropic 会对文件系统进行快照,并在后续会话中复用该快照作为起始点。新会话启动时,依赖、工具和 Docker 镜像已经在磁盘上,并且会跳过 setup 脚本步骤。即使脚本安装了大型工具链或拉取了容器镜像,这也能保持快速启动。

缓存捕获的是文件,而不是运行中的进程。Setup 脚本写入磁盘的任何内容都会保留。它启动的服务或容器不会保留,因此请通过让 Claude 在每次会话中启动它们,或使用 SessionStart hook 来启动。

当你更改环境的 setup 脚本或允许的网络主机,并且缓存大约在七天后到期时,setup 脚本会再次运行以重建缓存。恢复现有会话永远不会重新运行 setup 脚本。

你无需手动启用缓存或管理快照。

Setup 脚本 vs. SessionStart hooks

使用 setup 脚本安装云端需要但你的笔记本上已有的内容,例如语言运行时或 CLI 工具。使用 SessionStart hook 进行应在云端和本地都运行的项目设置,例如 npm install

两者都在会话开始时运行,但它们属于不同的地方:

Setup 脚本 SessionStart hooks
附加到 云端环境 你的仓库
配置在 云端环境 UI 仓库中的 .claude/settings.json
运行时机 当没有缓存的环境可用时,在 Claude Code 启动之前 Claude Code 启动之后,在每个会话(包括恢复的会话)中运行
作用范围 仅限云端环境 本地和云端都适用

SessionStart hooks 也可以在本地的用户级 ~/.claude/settings.json 中定义,但用户级设置不会带入云端会话。在云端,只有提交到仓库的 hooks 会运行。

使用 SessionStart hook 安装依赖

要仅在云端会话中安装依赖,请在你的仓库的 .claude/settings.json 中添加一个 SessionStart hook:

{
  "hooks": {
    "SessionStart": [
      {
        "matcher": "startup|resume",
        "hooks": [
          {
            "type": "command",
            "command": "\"$CLAUDE_PROJECT_DIR\"/scripts/install_pkgs.sh"
          }
        ]
      }
    ]
  }
}

创建 scripts/install_pkgs.sh 脚本并使用 chmod +x 使其可执行。CLAUDE_CODE_REMOTE 环境变量在云端会话中被设置为 true,因此你可以用它来跳过本地执行:

#!/bin/bash

if [ "$CLAUDE_CODE_REMOTE" != "true" ]; then
  exit 0
fi

npm install
pip install -r requirements.txt
exit 0

SessionStart hooks 在云端会话中有一些限制:

  • 没有云端专用作用域:hooks 在本地和云端会话中都会运行。要跳过本地执行,请按上述方法检查 CLAUDE_CODE_REMOTE 环境变量。
  • 需要网络访问:安装命令需要连接包镜像仓库。如果你的环境使用 网络访问,这些 hooks 会失败。受信任 级别下的默认白名单涵盖了 npm、PyPI、RubyGems 和 crates.io
  • 代理兼容性:所有出站流量都经过一个安全代理。某些包管理器无法与此代理正确工作。Bun 是一个已知的例子。
  • 增加启动延迟:hooks 在每次会话启动或恢复时运行,这与受益于环境缓存的 setup 脚本不同。通过在重新安装前检查依赖是否已存在,来保持安装脚本的快速性。

要为后续的 Bash 命令持久化环境变量,请写入 $CLAUDE_ENV_FILE。请参阅 SessionStart hooks 了解详情。

尚不支持将基础镜像替换为你自己的 Docker 镜像。请使用 setup 脚本在提供的镜像上安装你需要的内容,或者通过 docker compose 将你的镜像作为容器与 Claude 并行运行。

网络访问配置

网络访问控制着云端环境的出站连接。每个环境指定一个访问级别,你可以通过自定义允许的域名来扩展它。默认为 受信任,允许包镜像仓库和其他白名单域名

要更改环境的网络访问,打开它进行编辑,并使用对话框中的 网络访问 选择器。没有单独的“环境”页面。云图标会出现在你启动云端会话或配置定时任务的任何地方。

MCP 连接器的流量通过 Anthropic 的服务器路由,因此你在会话或定时任务上启用的连接器无需将其主机添加到 允许的域名。连接器是针对每个会话或每个定时任务配置的;移除任何不需要的连接器以限制 Claude 可以访问的工具。这依赖于安全与隔离下提到的同一条 Anthropic 绑定通道。

访问级别

在创建或编辑环境时选择一个访问级别:

级别 出站连接
不允许出站网络访问
受信任 白名单域名:包含包镜像仓库、GitHub、云 SDK
完全 任何域名
自定义 你自己的白名单,可以选择是否包含默认域名

GitHub 操作使用一个独立的代理来处理,不受此设置影响。

允许特定域名

要允许不在受信任列表中的域名,请在环境的网络访问设置中选择 自定义。会出现一个 允许的域名 字段。每行输入一个域名:

api.example.com
*.internal.example.com
registry.example.com

使用 *. 进行通配符子域名匹配。勾选 同时包含常见包管理器的默认列表 以保留受信任的域名以及你的自定义条目,或者取消勾选以仅允许你列出的域名。

GitHub 代理

出于安全考虑,所有 GitHub 操作都通过一个专用的代理服务进行,该服务透明地处理所有 git 交互。在沙箱内部,git 客户端使用自定义的范围限定凭证进行认证。这个代理:

  • 安全管理 GitHub 认证:git 客户端在沙箱内使用一个范围限定的凭证,代理验证该凭证并将其转换为你的实际 GitHub 认证 token
  • 为安全起见,将 git push 操作限制为当前工作分支
  • 在维护安全边界的同时,启用克隆、获取和 PR 操作

安全代理

出于安全和防滥用目的,环境运行在一个 HTTP/HTTPS 网络代理之后。所有出站互联网流量都经过此代理,它提供:

  • 针对恶意请求的保护
  • 速率限制和防滥用
  • 用于增强安全性的内容过滤

默认允许域名

当使用 受信任 网络访问时,默认允许以下域名。标记为 * 的域名表示通配符子域名匹配,因此 *.gcr.io 允许 gcr.io 的任何子域名。

* api.anthropic.com * statsig.anthropic.com * docs.claude.com * platform.claude.com * code.claude.com * claude.ai * github.com * [www.github.com](http://www.github.com) * api.github.com * npm.pkg.github.com * raw\.githubusercontent.com * pkg-npm.githubusercontent.com * objects.githubusercontent.com * release-assets.githubusercontent.com * codeload.github.com * avatars.githubusercontent.com * camo.githubusercontent.com * gist.github.com * gitlab.com * [www.gitlab.com](http://www.gitlab.com) * registry.gitlab.com * bitbucket.org * [www.bitbucket.org](http://www.bitbucket.org) * api.bitbucket.org * registry-1.docker.io * auth.docker.io * index.docker.io * hub.docker.com * [www.docker.com](http://www.docker.com) * production.cloudflare.docker.com * download.docker.com * gcr.io * \*.gcr.io * ghcr.io * mcr.microsoft.com * \*.data.mcr.microsoft.com * public.ecr.aws * cloud.google.com * accounts.google.com * gcloud.google.com * \*.googleapis.com * storage.googleapis.com * compute.googleapis.com * container.googleapis.com * azure.com * portal.azure.com * microsoft.com * [www.microsoft.com](http://www.microsoft.com) * \*.microsoftonline.com * packages.microsoft.com * dotnet.microsoft.com * dot.net * visualstudio.com * dev.azure.com * \*.amazonaws.com * \*.api.aws * oracle.com * [www.oracle.com](http://www.oracle.com) * java.com * [www.java.com](http://www.java.com) * java.net * [www.java.net](http://www.java.net) * download.oracle.com * yum.oracle.com * registry.npmjs.org * [www.npmjs.com](http://www.npmjs.com) * [www.npmjs.org](http://www.npmjs.org) * npmjs.com * npmjs.org * yarnpkg.com * registry.yarnpkg.com * pypi.org * [www.pypi.org](http://www.pypi.org) * files.pythonhosted.org * pythonhosted.org * test.pypi.org * pypi.python.org * pypa.io * [www.pypa.io](http://www.pypa.io) * rubygems.org * [www.rubygems.org](http://www.rubygems.org) * api.rubygems.org * index.rubygems.org * ruby-lang.org * [www.ruby-lang.org](http://www.ruby-lang.org) * rubyforge.org * [www.rubyforge.org](http://www.rubyforge.org) * rubyonrails.org * [www.rubyonrails.org](http://www.rubyonrails.org) * rvm.io * get.rvm.io * crates.io * [www.crates.io](http://www.crates.io) * index.crates.io * static.crates.io * rustup.rs * static.rust-lang.org * [www.rust-lang.org](http://www.rust-lang.org) * proxy.golang.org * sum.golang.org * index.golang.org * golang.org * [www.golang.org](http://www.golang.org) * goproxy.io * pkg.go.dev * maven.org * repo.maven.org * central.maven.org * repo1.maven.org * repo.maven.apache.org * jcenter.bintray.com * gradle.org * [www.gradle.org](http://www.gradle.org) * services.gradle.org * plugins.gradle.org * kotlinlang.org * [www.kotlinlang.org](http://www.kotlinlang.org) * spring.io * repo.spring.io * packagist.org (PHP Composer) * [www.packagist.org](http://www.packagist.org) * repo.packagist.org * nuget.org (.NET NuGet) * [www.nuget.org](http://www.nuget.org) * api.nuget.org * pub.dev (Dart/Flutter) * api.pub.dev * hex.pm (Elixir/Erlang) * [www.hex.pm](http://www.hex.pm) * cpan.org (Perl CPAN) * [www.cpan.org](http://www.cpan.org) * metacpan.org * [www.metacpan.org](http://www.metacpan.org) * api.metacpan.org * cocoapods.org (iOS/macOS) * [www.cocoapods.org](http://www.cocoapods.org) * cdn.cocoapods.org * haskell.org * [www.haskell.org](http://www.haskell.org) * hackage.haskell.org * swift.org * [www.swift.org](http://www.swift.org) * archive.ubuntu.com * security.ubuntu.com * ubuntu.com * [www.ubuntu.com](http://www.ubuntu.com) * \*.ubuntu.com * ppa.launchpad.net * launchpad.net * [www.launchpad.net](http://www.launchpad.net) * \*.nixos.org * dl.k8s.io (Kubernetes) * pkgs.k8s.io * k8s.io * [www.k8s.io](http://www.k8s.io) * releases.hashicorp.com (HashiCorp) * apt.releases.hashicorp.com * rpm.releases.hashicorp.com * archive.releases.hashicorp.com * hashicorp.com * [www.hashicorp.com](http://www.hashicorp.com) * repo.anaconda.com (Anaconda/Conda) * conda.anaconda.org * anaconda.org * [www.anaconda.com](http://www.anaconda.com) * anaconda.com * continuum.io * apache.org (Apache) * [www.apache.org](http://www.apache.org) * archive.apache.org * downloads.apache.org * eclipse.org (Eclipse) * [www.eclipse.org](http://www.eclipse.org) * download.eclipse.org * nodejs.org (Node.js) * [www.nodejs.org](http://www.nodejs.org) * developer.apple.com * developer.android.com * pkg.stainless.com * binaries.prisma.sh * statsig.com * [www.statsig.com](http://www.statsig.com) * api.statsig.com * sentry.io * \*.sentry.io * downloads.sentry-cdn.com * http-intake.logs.datadoghq.com * \*.datadoghq.com * \*.datadoghq.eu * api.honeycomb.io * sourceforge.net * \*.sourceforge.net * packagecloud.io * \*.packagecloud.io * fonts.googleapis.com * fonts.gstatic.com * json-schema.org * [www.json-schema.org](http://www.json-schema.org) * json.schemastore.org * [www.schemastore.org](http://www.schemastore.org) * \*.modelcontextprotocol.io

Web 与终端任务迁移

这些工作流需要 Claude Code CLI 登录到相同的 claude.ai 账户。你可以从终端启动新的云端会话,或者将云端会话拉取到终端以在本地继续。即便关闭笔记本,云端会话仍会持续运行,你可以从任何地方(包括 Claude 移动 App)监控它们。

从 CLI 角度,会话移交是单向的:你可以使用 --teleport 将云端会话拉入终端,但不能将现有终端会话推送到 Web。--remote 标志为当前仓库创建一个新的云端会话。桌面应用提供了一个“继续到”菜单,可以将本地会话发送到 Web。

从终端到 Web

使用 --remote 标志从命令行启动云端会话:

claude --remote "修复 src/auth/login.ts 中的身份验证 bug"

这会在 claude.ai 上创建一个新的云端会话。该会克隆你当前目录的 GitHub 远程仓库的当前分支,因此如果你有本地提交,请先推送,因为 VM 是从 GitHub 克隆而不是你的机器。--remote 一次只处理一个仓库。任务在云端运行,你可以继续本地工作。

--remote 创建云端会话。--remote-control 不相关:它暴露一个本地 CLI 会话供从 Web 监控。请参阅 Remote Control

在 Claude Code CLI 中使用 /tasks 检查进度,或者在 claude.ai 或 Claude 移动 App 上打开会话直接交互。从那里,你可以像其他对话一样指导 Claude、提供反馈或回答问题。

云端任务技巧

本地规划,远程执行:对于复杂任务,先在计划模式下启动 Claude 以协作制定方案,然后将工作发送到云端:

claude --permission-mode plan

在计划模式下,Claude 读取文件、运行命令进行探索,并提议一个方案,而无需编辑源代码。一旦你满意,将方案保存到仓库,提交并推送,以便云端 VM 可以克隆它。然后启动云端会话进行自主执行:

claude --remote "执行 docs/migration-plan.md 中的迁移计划"

这种模式让你控制策略,同时让 Claude 在云端自主执行。

在云端使用 ultraplan 规划:要在 Web 会话中起草和审查方案本身,请使用 ultraplan。Claude 在 Claude Code on the web 上生成方案,同时你可以继续工作,然后在浏览器中对方案部分进行评论,并选择远程执行或将方案发送回你的终端。

并行运行任务:每个 --remote 命令都会创建自己的独立运行的云端会话。你可以启动多个任务,它们都将同时在各自的会话中运行:

claude --remote "修复 auth.spec.ts 中的不稳定测试"
claude --remote "更新 API 文档"
claude --remote "重构日志记录器以使用结构化输出"

在 Claude Code CLI 中使用 /tasks 监控所有会话。当一个会话完成时,你可以从 Web 界面创建 PR,或者 teleport 该会话到你的终端继续工作。

发送未托管在 GitHub 的本地仓库

当你从未连接到 GitHub 的仓库运行 claude --remote 时,Claude Code 会打包你的本地仓库并直接上传到云端会话。打包包括所有分支的完整仓库历史,以及已跟踪文件的任何未提交更改。

当 GitHub 访问不可用时,此回退会自动激活。即使已连接 GitHub,也可以通过设置 CCR_FORCE_BUNDLE=1 强制使用此模式:

CCR_FORCE_BUNDLE=1 claude --remote "运行测试套件并修复所有失败"

打包的仓库必须满足以下限制:

  • 该目录必须是一个至少有 1 次提交的 git 仓库
  • 打包后的仓库大小必须低于 100 MB。较大的仓库会回退为仅打包当前分支,然后回退为工作树的单个压缩快照,仅在快照仍然太大时才会失败
  • 未跟踪的文件不会包含在内;对你希望云端会话看到的文件运行 git add
  • 除非你还配置了 GitHub 认证,否则从打包创建的会话无法推送回远程

从 Web 到终端

使用以下任一方法将云端会话拉取到你的终端:

  • 使用 --teleport:在命令行运行 claude --teleport 使用交互式会话选择器,或运行 claude --teleport <session-id> 直接恢复特定会话。如果你有未提交的更改,系统会提示你先 stash 它们。
  • 使用 /teleport:在现有的 CLI 会话中,运行 /teleport(或 /tp)打开相同的会话选择器,而无需重启 Claude Code。
  • /tasks:运行 /tasks 查看你的后台会话,然后按 t 键 teleport 进入其中一个。
  • 从 Web 界面:选择 在 CLI 中打开 复制一个你可以粘贴到终端的命令。

当你 teleport 一个会话时,Claude 会验证你处于正确的仓库中,从云端会话获取并检出版本,并将完整的对话历史加载到你的终端。

--teleport--resume 不同。--resume 会从本机本地历史重新打开一个对话,并且不列出云端会话;--teleport 会拉取一个云端会话及其分支。

Teleport 前提条件

Teleport 在恢复会话前会检查这些要求。如果任何要求未满足,你会看到错误或被提示解决问题。

要求 详细说明
干净的 git 状态 你的工作目录必须没有未提交的更改。如果需要,Teleport 会提示你 stash 更改。
正确的仓库 你必须从同一仓库(而非 fork)的 checkout 中运行 --teleport
分支可用 来自云端会话的分支必须已推送到远程。Teleport 会自动获取并检出版本。
相同账户 你必须使用与云端会话相同的 claude.ai 账户进行认证。

--teleport 不可用

Teleport 需要 claude.ai 订阅认证。如果你通过 API 密钥、Bedrock、Vertex AI 或 Microsoft Foundry 进行认证,请运行 /login 改用你的 claude.ai 账户登录。如果你已通过 claude.ai 登录,而 --teleport 仍然不可用,你的组织可能已禁用云端会话。

会话管理

会话显示在 claude.ai/code 的侧边栏。从那里,你可以查看更改、与队友分享、归档已完成的工作,或永久删除会话。

管理上下文

云端会话支持产生文本输出的内置命令。打开交互式终端选择器的命令,如 /model/config,不可用。

对于上下文管理,具体来说:

命令 在云端会话中工作 备注
/compact 总结对话以释放上下文。接受可选的聚焦指令,如 /compact keep the test output
/context 显示当前上下文窗口中的内容
/clear 改为从侧边栏开始一个新会话

当上下文窗口接近容量时,自动压缩会自动运行,与 CLI 相同。要更早触发它,在你的环境变量中设置 CLAUDE_AUTOCOMPACT_PCT_OVERRIDE。例如,CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=70 会在 70% 容量时压缩,而不是默认的约 95%。要更改用于压缩计算的有效窗口大小,请使用 CLAUDE_CODE_AUTO_COMPACT_WINDOW

子代理 的工作方式与本地相同。Claude 可以使用 Task 工具生成它们,将研究或并行工作卸载到单独的上下文窗口中,从而保持主对话更轻量。在你的仓库的 .claude/agents/ 中定义的子代理会被自动拾取。Agent 团队 默认关闭,但可以通过在你的环境变量中添加 CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 来启用。

查看更改

每个会话显示一个差异指示器,包含添加和删除的行数,例如 +42 -18。选择它以打开差异视图,在特定行上留下内联评论,并将它们与你的下一条消息一起发送给 Claude。有关包括 PR 创建的完整演练,请参阅 Review and iterate。要让 Claude 自动监控 PR 的 CI 失败和审查评论,请参阅 Auto-fix PR 自动修复

分享会话

要分享会话,根据下面的账户类型切换其可见性。之后,照原样分享会话链接。接收者在打开链接时会看到最新的状态,但他们的视图不会实时更新。

从企业或团队账户分享

对于企业版和团队版账户,两个可见性选项是 私有团队。团队可见性使会话对你的 claude.ai 组织中的其他成员可见。默认情况下,基于连接到接收者账户的 GitHub 账户启用仓库访问验证。你的账户显示名称对所有有权访问的接收者可见。Claude in Slack 会话会自动以团队可见性分享。

从 Max 或 Pro 账户分享

对于 Max 和 Pro 账户,两个可见性选项是 私有公开。公开可见性使会话对任何登录到 claude.ai 的用户可见。

在分享前检查你的会话是否包含敏感内容。会话可能包含来自私有 GitHub 仓库的代码和凭证。默认情况下不启用仓库访问验证。

要要求接收者拥有仓库访问权限,或从分享的会话中隐藏你的姓名,请前往设置 > Claude Code > 分享设置。

归档会话

你可以归档会话以保持会话列表的组织性。归档的会话会从默认会话列表中隐藏,但可以通过筛选归档会话进行查看。

要归档会话,将鼠标悬停在侧边栏中的会话上,然后选择归档图标。

删除会话

删除会话会永久移除会话及其数据。此操作无法撤消。你可以通过两种方式删除会话:

  • 从侧边栏:筛选归档会话,然后将鼠标悬停在要删除的会话上,然后选择删除图标。
  • 从会话菜单:打开一个会话,选择会话标题旁边的下拉菜单,然后选择 删除

系统会要求你在会话被删除前进行确认。

Auto-fix PR 自动修复

Claude 可以监视一个 pull request,并自动响应 CI 失败和审查评论。Claude 订阅了 PR 的 GitHub 活动,当检查失败或审查者留下评论时,Claude 会进行调查,并在修复方案明确时推送修复。

Auto-fix 需要将 Claude GitHub App 安装到你的仓库中。如果尚未安装,请从 GitHub App 页面 安装,或者在设置过程中按提示安装。

根据 PR 的来源和你使用的设备,有几种方法可以开启 auto-fix:

  • 在 Claude Code on the web 中创建的 PR:打开 CI 状态栏并选择 自动修复
  • 从你的终端:在 PR 的分支上运行 /autofix-pr。Claude Code 使用 gh 检测开放的 PR,生成一个 Web 会话,并一步开启 auto-fix。
  • 从移动应用:告诉 Claude 自动修复该 PR,例如“监视这个 PR 并修复任何 CI 失败或审查评论”。
  • 任何现有的 PR:将 PR URL 粘贴到一个会话中,然后告诉 Claude 自动修复它。

Auto-fix 是每个 PR 的开关。要停止监视,请在 Web 会话中打开 CI 状态栏并清除 自动修复 开关,或者告诉 Claude 停止监视该 PR。

Claude 如何响应 PR 活动

当 auto-fix 激活时,Claude 会接收该 PR 的 GitHub 事件,包括新的审查评论和 CI 检查失败。对于每个事件,Claude 会进行调查并决定如何处理:

  • 明确的修复:如果 Claude 对一个修复有信心,并且它与较早的指令不冲突,Claude 会进行更改、推送,并在会话中解释已完成的修复。
  • 模棱两可的请求:如果审查者的评论可能有多种解释,或涉及重大的架构变更,Claude 会在行动前询问你。
  • 重复或无操作事件:如果一个事件是重复的或不需要更改,Claude 会在会话中记录它并继续。

作为解决方案的一部分,Claude 可能会在 GitHub 上回复审查评论线程。这些回复是使用你的 GitHub 账户发布的,因此它们会显示在你的用户名下,但每条回复都会标注为来自 Claude Code,以便审查者知道它是由代理编写的,而不是你亲自编写的。

如果你的仓库使用了由评论触发的自动化,例如 Atlantis、Terraform Cloud 或自定义的、在 issue_comment 事件上运行的 GitHub Actions,请注意 Claude 可以代表你回复,这可能会触发这些工作流。在启用 auto-fix 之前,请审查你仓库的自动化,并考虑为那些 PR 评论可能部署基础设施或运行特权操作的仓库禁用 auto-fix。

安全与隔离

每个云端会话通过多个层与你的机器以及其他会话隔离开:

  • 隔离的虚拟机:每个会话运行在一个隔离的、由 Anthropic 管理的 VM 中。
  • 网络访问控制:默认情况下网络访问受到限制,并且可以禁用。当网络访问被禁用时,Claude Code 仍然可以与 Anthropic API 通信,这可能会允许数据离开 VM。
  • 凭证保护:敏感的凭证,如 git 凭证或签名密钥,永远不在包含 Claude Code 的沙箱内。认证是通过一个安全代理使用范围限定的凭证处理的。
  • 安全分析:在创建 PR 之前,代码在隔离的 VM 中进行分析和修改。

故障排查

对于对话中出现的运行时 API 错误,例如 API Error: 500529 Overloaded429Prompt is too long,请参阅错误参考。这些错误及其修复方法与 CLI 和桌面应用共享。以下部分涵盖特定于云端会话的问题。

会话创建失败怎么办

如果新会话启动失败,显示 Session creation failed 或在配置阶段停滞,意味着 Claude Code 无法分配云端环境。

  • 检查 status.claude.com 是否有云端会话故障。
  • 一分钟后重试,因为容量是按需配置的。
  • 确认你的仓库可访问。连接使用的 GitHub 账户必须有权访问 GitHub 上的仓库,无论是通过 Claude GitHub App 授权,还是通过 /web-setup 同步的 gh token——在仓库上安装 App 不是必需的。请参阅 GitHub 连接配置

Remote Control 会话过期或访问被拒绝

--teleport 通过云端会话使用的相同的 Remote Control 会话基础设施进行连接,因此认证和会话过期错误会显示 Remote Control 的措辞。你可能会看到 Remote Control session expiredAccess denied。连接 token 是短期有效的,并限定在你的账户范围内。

  • 在本地运行 /login 刷新你的凭证,然后重新连接。
  • 确认你已登录到拥有该会话的同一账户。
  • 如果你看到 Remote Control may not be available for this organization,说明你的管理员尚未为你的计划启用远程会话。

环境已过期

云端会话会在非活动期后停止,并且底层环境会被回收。从本地终端看,这表现为 Could not resume session ... its environment has expired. Creating a fresh session instead. 在 Web 上,该会话会在会话列表中被标记为已过期。

claude.ai/code 重新打开会话,以调配一个全新的环境,并恢复你的对话历史。

限制

在将工作流依赖云端会话之前,请考虑以下约束:

  • 速率限制:Claude Code on the web 与你账户中的所有其他 Claude 和 Claude Code 使用共享速率限制。并行运行多个任务会按比例消耗更多的速率限制配额。云端 VM 没有独立的计算费用。
  • 仓库认证:只有当你通过相同账户认证时,才能将会话从 Web 迁移到本地。
  • 平台限制:仓库克隆和 pull request 创建需要 GitHub。团队和企业计划支持自托管的 GitHub Enterprise Server。GitLab、Bitbucket 和其他非 GitHub 仓库可以作为本地打包发送到云端会话,但该会话无法将结果推回远程。
  • 组织 IP 白名单:云端会话从 Anthropic 管理的基础设施(而不是你的网络)调用 Anthropic API。如果你的组织启用了 IP 白名单,每个云端会话都会因认证错误而失败。这同样适用于代码审查定时任务。请联系 Anthropic 支持 将 Anthropic 托管的服务从你组织的 IP 白名单中豁免。

相关资源

  • Ultraplan:在云端会话中起草方案,并在浏览器中审查。
  • Ultrareview:在云端沙箱中运行深度多代理代码审查。
  • 定时任务:按计划、通过 API 调用或响应 GitHub 事件自动化工作。
  • Hooks 配置:在会话生命周期事件中运行脚本。
  • 设置参考:所有配置选项。
  • 安全:隔离保证和数据处理。
  • 数据使用:Anthropic 从云端会话保留的内容。

常见问题

云端会话会自动修复 CI 失败并通过代码吗?

不会。Auto-fix 开启后,Claude 会调查 CI 失败和审查评论,并推送修复代码,但它不会自动合并 PR。你仍然需要手动审查 Claude 的修改并决定是否合并。

云端会话能否访问我本地机器上的文件和凭证?

不能。云端会话只从你的仓库克隆内容开始。你的用户级配置文件(如 ~/.claude/CLAUDE.md)、通过 claude mcp add 添加的本地 MCP 服务器,以及静态 API token 或凭证,都不会带入云端环境。

在云端会话中安装依赖时,Setup 脚本和 SessionStart Hook 有什么区别?

Setup 脚本是环境级别的,仅在首次会话启动时运行(缓存后跳过),适合安装工具链。SessionStart Hook 是仓库级别的,每次会话恢复都会运行,适合项目依赖(如 npm install)。两者都可从受信任的网络访问标准包镜像仓库。