Appearance
Claude Code Web 版
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 在 Anthropic 管理的云端基础设施上运行任务,通过 claude.ai/code 访问。会话在关闭浏览器后仍持续,可随时通过 Claude 移动 App 监控。
本文覆盖:
GitHub 认证
云端会话需要访问你的 GitHub 仓库以克隆代码和推送分支。两种方式:
| 方式 | 工作原理 | 适合场景 |
|---|---|---|
| GitHub App | 在 Web 快速入门 时安装 Claude GitHub App,按仓库授权 | 需要明确的逐仓库授权 |
/web-setup | 在终端运行 /web-setup,将本地 gh CLI token 同步到 Claude 账号 | 已经在用 gh 的个人开发者 |
两种方式都可用。/schedule 会检查是否有任一方式配置,没有则提示运行 /web-setup。
注意:Auto-fix PR 需要 GitHub App(用于接收 PR webhook)。用 /web-setup 连接后想启用 Auto-fix,需要在对应仓库安装 App。
Team/Enterprise 管理员可以在 claude.ai/admin-settings/claude-code 的 Quick 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 | ✗ | 在你机器上,不在仓库 |
| 只在用户设置中启用的插件 | ✗ | 改为在仓库的 .claude/settings.json 中声明 |
用 claude mcp add 添加的 MCP 服务器 | ✗ | 写入本地用户配置,不是仓库。改用 .mcp.json |
| 静态 API Token 和凭证 | ✗ | 暂无专用 secrets 存储。见下文 |
| AWS SSO 等交互式认证 | ✗ | 不支持,需要浏览器登录 |
注意:目前没有专用 secrets 存储。环境变量和 Setup 脚本对能编辑该环境的人可见——如需在云端使用 secrets,请考虑这一可见性。
预安装工具
| 类别 | 包含内容 |
|---|---|
| Python | Python 3.x + pip、poetry、uv、black、mypy、pytest、ruff |
| Node.js | 20、21、22(via nvm),npm、yarn、pnpm、bun¹、eslint、prettier、chromedriver |
| Ruby | 3.1、3.2、3.3 + gem、bundler、rbenv |
| PHP | 8.4 + Composer |
| Java | OpenJDK 21 + 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 已安装,但在云端代理下包获取有已知兼容问题。在云端会话中运行 check-tools 命令查看精确版本(该命令只在云端会话中存在)。
处理 GitHub Issues 和 PR
云端会话内置 GitHub 工具,Claude 可以直接读取 Issues、列出 PR、获取 Diff、发布评论,无需任何额外配置。这些工具通过 GitHub 代理认证,token 不会进入容器。
gh CLI 不预安装。如需用到 gh release、gh workflow run 等内置工具未覆盖的命令,在 Setup 脚本中安装并认证。
关联 Artifact 到会话
每个云端会话在 claude.ai 上有一个 Transcript URL,会话可以从 CLAUDE_CODE_REMOTE_SESSION_ID 环境变量读取自己的 ID。可以用这个在 PR body、commit message、Slack 或生成的报告中放置可追溯的链接:
bash
echo "https://claude.ai/code/${CLAUDE_CODE_REMOTE_SESSION_ID}"运行测试、启动服务和添加包
Claude 会作为处理任务的一部分来运行测试。只需在提示词中要求,比如"修复 tests/ 中失败的测试"或"每次修改后运行 pytest"。像 pytest、jest 和 cargo test 等测试运行器由于预装而开箱即用。PostgreSQL 和 Redis 已预装但默认不运行。在会话期间让 Claude 启动它们即可:
service postgresql start
service redis-server startDocker 支持运行容器化服务。让 Claude 运行 docker compose up 来启动你的项目服务。拉取镜像的网络访问受环境的访问级别限制,且受信任的默认列表包含 Docker Hub 等常见镜像仓库。如果你的镜像很大或拉取很慢,可将 docker compose pull 或 docker compose build 添加到你的 Setup 脚本中。拉取的镜像会保存在缓存环境中,因此每个新会话都会在磁盘上保留它们。缓存仅存储文件,不保存运行中的进程,所以 Claude 仍需要在每个会话中启动容器。要添加未预装的包,使用 Setup 脚本。脚本的输出会被缓存,因此在那里安装的包在每个会话开始时都可用,无需每次重新安装。你也可以要求 Claude 在会话中途安装包,但这些安装不会带入其他会话。
资源限制
云端会话的大致上限(可能变化):
- 4 vCPU
- 16 GB RAM
- 30 GB 磁盘
需要大量内存的任务(大型构建、内存密集测试)可能失败或被终止。超出这些限制的工作负载,使用 Remote Control 在自己的硬件上运行 Claude Code。
配置环境
环境控制网络访问、环境变量和 Setup 脚本。可从 Web 界面或终端管理:
| 操作 | 方式 |
|---|---|
| 添加环境 | 选择当前环境打开选择器,再选 Add environment |
| 编辑环境 | 选择环境名旁边的设置图标 |
| 归档环境 | 打开环境编辑,选择 Archive |
设置 --remote 的默认环境 | 在终端运行 /remote-env |
环境变量使用 .env 格式(每行一个 KEY=value),值不要用引号包裹(引号会作为值的一部分存储):
NODE_ENV=development
LOG_LEVEL=debug
DATABASE_URL=postgres://localhost:5432/myappSetup 脚本
Setup 脚本是在新云端会话启动时、Claude Code 启动前运行的 Bash 脚本。用于安装预装环境中没有的依赖、配置工具或预取所需内容。脚本以 root 身份在 Ubuntu 24.04 上运行。
在环境设置对话框的 Setup script 字段中输入脚本。示例(安装 gh CLI):
bash
#!/bin/bash
apt update && apt install -y gh- Setup 脚本只在创建新会话时运行,恢复已有会话时跳过
- 脚本退出非零则会话启动失败,非关键命令后追加
|| true避免偶发安装失败阻断会话
环境缓存
Setup 脚本会在你首次在该环境中启动会话时运行。完成后,Anthropic 会对文件系统进行快照,并将该快照作为后续会话的起点重用。新会话启动时,磁盘上已经包含了你的依赖项、工具和 Docker 镜像,且会跳过 Setup 脚本步骤。这保证了即使脚本安装庞大的工具链或拉取容器镜像,启动速度也依然很快。缓存会捕获文件,而不是正在运行的进程。Setup 脚本写入磁盘的任何内容都会保留下来。但它启动的服务或容器不会保留,因此需要通过向 Claude 发出请求或使用 SessionStart hook 为每个会话单独启动它们。当你更改环境的 Setup 脚本或允许的网络主机,以及缓存过期(约 7 天后)时,Setup 脚本会再次运行以重建缓存。恢复现有的会话时,绝不会重新运行 Setup 脚本。你不需要手动启用缓存或管理快照。
Setup 脚本 vs SessionStart Hooks
| Setup 脚本 | SessionStart Hooks | |
|---|---|---|
| 附属于 | 云端环境 | 仓库 |
| 配置位置 | 云端环境 UI | 仓库 .claude/settings.json |
| 运行时机 | 没有缓存环境可用时,Claude Code 启动前 | 每次会话启动(含恢复),Claude Code 启动后 |
| 作用范围 | 仅云端环境 | 本地和云端均运行 |
用 Setup 脚本安装云端需要但本机已有的内容(如语言运行时、CLI 工具);用 SessionStart Hook 处理本地和云端都应运行的项目配置(如 npm install)。
用 SessionStart Hook 安装依赖
在仓库的 .claude/settings.json 中添加 SessionStart Hook:
json
{
"hooks": {
"SessionStart": [
{
"matcher": "startup|resume",
"hooks": [
{
"type": "command",
"command": "\"$CLAUDE_PROJECT_DIR\"/scripts/install_pkgs.sh"
}
]
}
]
}
}在 scripts/install_pkgs.sh 中用 CLAUDE_CODE_REMOTE 变量跳过本地执行:
bash
#!/bin/bash
if [ "$CLAUDE_CODE_REMOTE" != "true" ]; then
exit 0
fi
npm install
pip install -r requirements.txt
exit 0SessionStart Hooks 在云端的限制:
- 无法只在云端运行(需要手动检查
CLAUDE_CODE_REMOTE) - 需要网络访问(None 级别下会失败)。Trusted 级别下的默认白名单已涵盖 npm、PyPI、RubyGems 和 crates.io。
- 所有出向流量经过安全代理,Bun 等工具有已知兼容问题
- 增加了启动延迟:每次启动或恢复会话时都会运行 hook,这与受益于环境缓存的 Setup 脚本不同。为了保持脚本快速,请在重新安装依赖前先检查其是否已存在。
如果需要为后续的 Bash 命令保留环境变量,请将它们写入 $CLAUDE_ENV_FILE。详情请参阅 SessionStart hooks。目前尚不支持将基础镜像替换为自己的 Docker 镜像。请使用 Setup 脚本在提供的镜像上安装所需的内容,或者通过 docker compose 将你的镜像作为容器与 Claude 并行运行。
网络访问
每个环境指定一个访问级别,可以追加自定义允许域名。默认为 Trusted。
访问级别
| 级别 | 出向连接 |
|---|---|
| None | 不允许任何出向网络访问 |
| Trusted | 仅允许白名单域名:包注册表、GitHub、云 SDK |
| Full | 任意域名 |
| Custom | 自定义白名单,可选择是否包含默认域名 |
GitHub 操作通过独立代理处理,不受此设置影响。
允许特定域名
选择 Custom 网络访问级别,在 Allowed domains 字段中每行一个域名:
api.example.com
*.internal.example.com
registry.example.com使用 *. 匹配通配符子域名。勾选 Also include default list of common package managers 保留默认 Trusted 域名。
GitHub 代理
所有 GitHub 操作经过专用代理服务,透明处理所有 git 交互:
- 在沙箱内部,git 客户端使用范围限定的凭证,代理验证并转换为你的实际 GitHub Token
- 将 git push 限制为当前工作分支
- 在安全边界内支持克隆、fetch 和 PR 操作
安全代理
所有出向互联网流量经过 HTTP/HTTPS 安全代理,提供恶意请求防护、速率限制和内容过滤。
Web/终端间迁移
这些工作流需要 Claude Code CLI 并使用相同的 claude.ai 账号登录。
从终端发起 Web 任务
用 --remote 标志从命令行创建云端会话:
bash
claude --remote "修复 src/auth/login.ts 中的认证 bug"这会在 claude.ai 创建新的云端会话。会话克隆当前目录的 GitHub remote 的当前分支——先 push 本地提交,因为 VM 从 GitHub 克隆而不是从本机克隆。--remote 一次处理一个仓库,任务在云端运行,你可以继续本地工作。
用 /tasks 检查进度,或在 claude.ai 或 Claude 移动 App 上直接与会话交互。
技巧
本地规划,远程执行:
bash
# 在计划模式中协作制定方案
claude --permission-mode plan
# 满意后 commit、push,启动云端会话执行
claude --remote "执行 docs/migration-plan.md 中的迁移计划"并行运行多个任务:
bash
claude --remote "修复 auth.spec.ts 中不稳定的测试"
claude --remote "更新 API 文档"
claude --remote "将 logger 重构为结构化输出"每个 --remote 创建独立的云端会话,用 /tasks 监控全部。
发送未托管在 GitHub 的本地仓库
从未连接 GitHub 的仓库运行 claude --remote 时,Claude Code 会自动打包本地仓库上传到云端会话(包含所有分支的完整历史,以及已追踪文件的未提交变更)。强制使用此模式(即使已连接 GitHub):
bash
CCR_FORCE_BUNDLE=1 claude --remote "运行测试套件并修复所有失败"打包仓库限制:
- 必须是有至少一次 commit 的 git 仓库
- 打包大小不超过 100 MB(超出会依次降级为只打包当前分支,再到单次快照)
- 未追踪的文件不包含(先
git add再打包) - 从 bundle 创建的会话若未配置 GitHub 认证,无法推送回 remote
从 Web 迁移到终端
将云端会话拉到本地继续:
--teleport:claude --teleport打开交互选择器,或claude --teleport <session-id>直接恢复/teleport:在已有 CLI 会话中运行/teleport(或/tp)/tasks:运行/tasks查看后台会话,按tteleport- Web 界面:点击 Open in CLI 复制命令
Teleport 时,Claude 会验证仓库、fetch 并 checkout 云端会话的分支,并加载完整对话历史到终端。
注意:--teleport 和 --resume 不同——--resume 从本机本地历史恢复对话,不列出云端会话;--teleport 拉取云端会话及其分支。
Teleport 前提条件
| 要求 | 说明 |
|---|---|
| 干净的 Git 状态 | 工作目录无未提交变更(需要时提示 stash) |
| 正确的仓库 | 必须在相同仓库的 checkout 中运行,不能是 fork |
| 分支可用 | 云端会话的分支必须已推送到 remote |
| 相同账号 | 必须使用相同的 claude.ai 账号 |
--teleport 不可用时:Teleport 需要 claude.ai 订阅认证。如果通过 API Key、Bedrock、Vertex AI 或 Foundry 认证,运行 /login 切换到 claude.ai 账号。如果已用 claude.ai 登录但仍不可用,可能是组织禁用了云端会话。
管理会话
会话显示在 claude.ai/code 侧边栏。可查看变更、分享给队友、归档完成的工作或永久删除。
管理上下文
云端会话支持产生文本输出的内置命令。打开交互终端选择器的命令(如 /model、/config)不可用:
| 命令 | 云端可用 | 备注 |
|---|---|---|
/compact | ✓ | 压缩对话释放上下文,支持可选的保留重点(如 /compact keep the test output) |
/context | ✓ | 显示当前上下文窗口内容 |
/clear | ✗ | 从侧边栏开始新会话 |
自动压缩在上下文窗口接近容量时自动运行(与 CLI 相同)。通过环境变量设置 CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=70 在 70% 容量时提前压缩(默认约 95%)。
查看变更
每个会话显示 +42 -18 样式的变更统计。点击打开 Diff 视图,可在特定行添加内联注释,随下一条消息发给 Claude。
分享会话
Enterprise/Team 账号:Private 或 Team 可见性,Team 模式对组织成员可见,默认启用 GitHub 仓库访问验证。
Max/Pro 账号:Private 或 Public 可见性,Public 对所有登录 claude.ai 的用户可见。分享前检查会话是否含有敏感内容(代码、私有仓库凭证等)。
Claude in Slack 会话自动设为 Team 可见性。
归档会话
悬停在侧边栏会话上,选择归档图标。归档的会话从默认列表隐藏,可通过筛选归档会话查看。
删除会话
永久删除会话及其数据,不可撤销。两种方式:
- 侧边栏:筛选归档会话,悬停并选择删除图标
- 会话菜单:打开会话,选择标题旁下拉菜单,选择 Delete
Auto-fix PR
Claude 可以监视 PR,自动响应 CI 失败和代码审查评论。启用方式:
- 在 Web 创建的 PR:打开 CI 状态栏,选择 Auto-fix
- 从终端:在 PR 分支上运行
/autofix-pr,Claude Code 自动检测 PR、创建 Web 会话并开启 Auto-fix - 从移动 App:直接告知 Claude 要 auto-fix PR
- 任意已有 PR:粘贴 PR URL 到会话并告知 Claude 开启 auto-fix
Claude 如何响应 PR 活动
启用 Auto-fix 后,Claude 接收 PR 的 GitHub 事件(新评论、CI 检查失败),对每个事件进行调查:
- 明确的修复:有把握且不与早期指令冲突时,Claude 直接修改、推送并解释
- 模糊的请求:评论可以有多种解读或涉及架构决策时,先询问再行动
- 重复或无需操作的事件:在会话中记录并跳过
Claude 可能以你的 GitHub 账号回复评论线程(每条回复都标注为来自 Claude Code,让审查者知道是 Agent 写的)。
安全与隔离
- 隔离虚拟机:每个会话在独立 Anthropic 管理 VM 中运行
- 网络访问控制:默认限制访问,可以禁用(但禁用后 Claude Code 仍可与 Anthropic API 通信,数据可能离开 VM)
- 凭证保护:git 凭证、签名密钥等不在沙箱中,通过安全代理使用范围限定的凭证处理认证
- 安全分析:代码在隔离 VM 中分析和修改,然后再创建 PR
故障排查
对于对话中出现的运行时 API 错误,如 API Error: 500、529 Overloaded、429 或 Prompt is too long,请参阅错误参考。这些错误及其修复方法在 CLI 和桌面应用中是共通的。以下部分专门讨论云端会话特有的问题。
创建会话失败
如果新会话启动失败并提示 Session creation failed 或停滞在配置阶段,这意味着 Claude Code 无法分配云端环境。
- 检查 status.claude.com 查看是否有云端会话故障。
- 稍后重试,因为容量是按需配置的。
- 确认你的仓库可访问。私有仓库需要已安装 GitHub App 并拥有该仓库的访问权限,或者通过
/web-setup同步了ghtoken。参见 GitHub 认证选项。
远程控制会话过期或拒绝访问
--teleport 和云端会话一样,通过同样的远程控制会话基础设施进行连接,因此认证和会话过期错误会显示 Remote Control 的提示词。你可能会看到 Remote Control session has expired 或 Access 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 用量共享账号速率限制,并行任务按比例消耗更多配额
- 仓库认证:Web 到终端的会话迁移需要使用相同账号认证
- 平台限制:仓库克隆和 PR 创建只支持 GitHub(包括 Team/Enterprise 的 GitHub Enterprise Server)。GitLab、Bitbucket 等平台可以通过本地 bundle 发送,但会话无法推回 remote
相关文档
- Ultraplan — 在云端会话中草拟计划,并在浏览器中审查
- Ultrareview — 在云端沙箱中运行深度的多 agent 代码审查
- 定时任务 — 按计划、API 调用或 GitHub 事件自动化工作
- Hooks 配置 — 在会话生命周期事件中运行脚本
- 设置参考 — 完整配置选项
- 安全机制 — 隔离保证和数据处理
- 数据使用政策 — Anthropic 如何保留云端会话数据
常见问题
Q: Claude Code Web 版和本地运行有什么区别?
Web 版在 Anthropic 管理的云端 VM 上运行,会话关闭浏览器后继续运行,可从移动 App 监控。本地版在你自己的机器上运行,能访问本地文件系统和工具,无需 GitHub 连接。两者可以通过 --remote 和 --teleport 无缝迁移。
Q: 云端会话能访问我本地的文件和配置吗?
只能访问提交到 git 仓库的内容(CLAUDE.md、.claude/settings.json、.mcp.json 等)。用户级 ~/.claude/CLAUDE.md、本地安装的 MCP 服务器等不会进入云端会话。
Q: Auto-fix PR 会自动合并代码吗?
不会。Auto-fix 只是在 CI 失败或收到审查评论时让 Claude 调查并推送修复,不会自动合并 PR。你仍然需要手动审查 Claude 的修改并决定是否合并。