claude.dev 解读
PlaybooksAddy Osmani2026-10-06约 18 分钟阅读原文 ↗

Claude Code in the cloud: a field guide to cloud sessions

一任务一台 VM 换来并行与可审分支,真正价值在于让会话自己跑检查证明做完

主张
6
审视
6
遗漏
2
  1. 01云会话给每个任务分配一台全新 VM,把仓库克隆到一个新分支上;GitHub 凭据由代理持有,只把仓库级配置带进去。这样换来了互不干扰的并行执行、合盖后也能继续跑的能力,以及一个可以直接审的分支。机器本身不另收费,但和本地会话共用同一份额度,并行几路,额度就快几倍消耗。
  2. 02文章真正可迁移的方法论是让会话自己证明做完了:把任务写成自包含的工单,写清楚错在哪、完成长什么样、用哪条命令证明,演示里的价值大多来自 Claude 真的去跑了这些检查。代价是各会话之间互不知情:要按文件边界拆任务,并且要预期一个会话会报出另一个会话正在修的问题。
  3. 03另外,文中的 bonus credit 领取截止 October 7,而且不能用于 Routines。
怎么读这篇
作者主张 · Addy Osmani我们的审视
01

一任务一台全新 VM

云会话的核心是「一任务一机器」:每个任务一台全新 VM,仓库克隆到新分支,环境的 setup 已预先跑完。

机制拆解

本地会话在三方面绑死在笔记本上:共用同一个 working tree(多个会话会抢文件、抢端口)、用你本人的凭据跑、电脑休眠或断网就停。换成独立 VM 之后,文件、进程、端口天然隔离。文中 docs 会话和 logger 会话各自启动了 API server,互不影响;在同一个 checkout 里,两个 agent 就会撞端口。三个演示会话相隔 16 秒内先后启动,从第一个启动算起,87 秒内全部跑完。

“Each task gets a fresh virtual machine with your repository cloned onto a new branch” ¶5

数字口径

耗时数字的口径不统一。正文说三个会话分别运行了 61、65、72 秒,87 秒指的是从第一个会话启动到全部完成;图注里写的则是 65、62、87 秒。而且其中三分之一到一半多的时间花在从 prompt 重建仓库上,VM 冷启动和 setup 缓存未命中的时间都没有单独给出。

自己验证自己计时:分别记录 VM 就绪、setup 完成、分支可审这三个时刻;setup script 改动之后的首个会话(缓存要重建)和缓存命中后的会话各测一次。
02

隔离的代价是互不知情

隔离有代价:并行的会话彼此看不到,所以要按文件边界拆任务,按合理顺序合并分支,并且接受重复诊断。

机制拆解

logger 会话提交时有一个测试没过。它重跑缓存测试八次,失败五次,自己追到了 flaky-test 会话正在修的同一个竞态,提出了同样的修法。但因为不在自己的任务范围内,它没有动缓存,只在总结里说明测试套件不干净。分支冲突时,要等一个分支合并后,再给下一个会话追加 rebase 指令。

“Split parallel tasks along file boundaries, merge the branches in a sensible order” ¶18

这一点暂无对应的审视。

03

网络 None 不等于不外流

安全边界靠代理和一次性 VM 实现,但网络开到 None 也不等于数据出不去。

机制拆解

GitHub token 留在 VM 外面的代理里,会话只拿到一个短期凭据,而且只能推到它自己的工作分支。不受信任的代码跑在一次性 VM 里,旁边没有 SSH key、cloud CLI 会话和浏览器 profile。网络有 None、Trusted、Custom、Full 几档,所有出站流量都经代理并记录主机名。但 Claude Code 本身还要请求 Anthropic API,数据仍可能从这条路出去,会话也照样能推送到自己的分支。

“Even at None, Claude Code still sends requests to the Anthropic API” ¶48

遗漏

数据合规一笔带过:会话 transcript 由 Anthropic 存储,保留多久取决于套餐和模型改进设置;网络开到 None 时,数据仍可能经模型 API 流出。只提到开启 Zero Data Retention 的组织会关闭云会话。

04

配置以仓库为界

配置的可移植性以仓库为界:仓库里的 CLAUDE.md、rules、skills、agents、commands 会随仓库进 VM,用户级的 ~/.claude 留在本机。

机制拆解

VM 从 GitHub 克隆仓库,只能看到仓库里的东西。团队需要的技能和命令要提交到仓库的 .claude/ 下,项目级 MCP 写进 .mcp.json,测试命令写进 CLAUDE.md。setup script 以 root 身份在 Claude Code 启动前运行,跑完的结果会做成快照缓存;SessionStart hook 则让本地和云端执行同样的安装步骤。

“The repository's Claude config comes along. Your personal one doesn't.” ¶22

遗漏

适用面偏向托管在 GitHub 上的代码仓库:GitLab 和 Bitbucket 仓库只能上传 bundle,推不回去;VM 只有大约 4 vCPUs、16 GB 内存、30 GB 磁盘。

05

价值来自会话自我验证

演示里的价值大多来自会话能自己跑检查;环境配置的意义,就是给它跑验证的条件。

机制拆解

flaky-test 的 prompt 写明了证明方式:测试套件连跑至少 30 次。会话实际跑了 40 次,0 失败。docs 会话启动 server,对每个端点跑一遍 curl,找出旧文档的五处错误。第四个会话真的运行了代码,发现了时间窗口边界上的 bug。VM 的 CPU 不占你的机器,长测试放在一条命令里跑,只算一轮对话的用量,所以可以要求更彻底的证明。

“Without that, you review changes nobody has run.” ¶60

可复现性

竞态修复的证据可以复现,但失败率前后对不上:原文开头说大约每四次失败一次,logger 会话重跑八次却失败了五次。推断:这可能和 logger 改动后请求路径的时序有关。文中没有解释,40 次 0 失败的样本量也有限。

自己验证在本地复现 TtlCache.get 的竞态,在原始代码和加了 logger 改动的代码上各跑足够多次,统计失败率;修复后按文中建议跑 200 次,看是否稳定为 0。
06

不另收费≠不耗额度

「不另收费」只是说机器不另算钱,用量照样从你的额度里扣:并行就是按倍数消耗额度。

机制拆解

云会话和其他 Claude Code 用量共用同一份额度,Claude 的每一轮对话都计入。五个并行会话消耗额度的速度大约是一个会话的五倍。Routines 另有每小时上限,projects 每天最多新开 200 个线程。

“five sessions use them about five times as fast as one” ¶75

数字口径

文章说机器不另收费,但没有给出任何一个演示会话实际消耗了多少 token 或多少额度。并行五倍消耗只是一个比例,读者无法据此估算真实成本;logger 会话为别人的 bug 做重复诊断,也耗掉了额度。

自己验证跑一个云会话之前和之后,各在 /usage 里记一次读数;再用同一任务在本地跑一次做对照,比较两者的额度消耗。

作者没有直接谈到这一点。

厂商视角

作者站在厂商一侧:演示仓库 tidepool 是自造的小型 Node API,三个问题都是边界清楚、靠测试就能验证的小问题,四个会话也全部成功,没有展示失败或跑偏的会话。文中 bonus credit 的领取截止日(October 7)还带有促销的紧迫感。

自己验证拿一个自己的真实仓库,选一个已知 flaky、但根因不明显的问题,用同样的工单式 prompt 跑一次,记录是否找到根因、是否只改测试不改代码、总结里有没有如实报告残留问题。
01

机制聚焦

一次云会话的完整链路

每个任务独占一台一次性 VM,GitHub 凭据留在代理那边,最后交回一个可以直接审的分支。

  1. 01多端发起浏览器、手机、Desktop、终端、Slack 或 routine
  2. 02全新 VM仓库克隆到 claude 分支,setup 已预先跑完
  3. 03auto 模式执行Claude Code 在 VM 内自主改代码、跑检查
  4. 04双代理出网GitHub 代理持有令牌,安全代理按 allowlist 放行
  5. 05交回分支结果落在分支上,可直接开 pull request
依据原文 ¶19 ↗
02

核心观点

01

一任务一台全新 VM

云会话的核心是「一任务一机器」:每个任务一台全新 VM,仓库克隆到新分支,环境的 setup 已预先跑完。

机制拆解

本地会话在三方面绑死在笔记本上:共用同一个 working tree(多个会话会抢文件、抢端口)、用你本人的凭据跑、电脑休眠或断网就停。换成独立 VM 之后,文件、进程、端口天然隔离。文中 docs 会话和 logger 会话各自启动了 API server,互不影响;在同一个 checkout 里,两个 agent 就会撞端口。三个演示会话相隔 16 秒内先后启动,从第一个启动算起,87 秒内全部跑完。

Each task gets a fresh virtual machine with your repository cloned onto a new branch¶5 ↗

02

隔离的代价是互不知情

隔离有代价:并行的会话彼此看不到,所以要按文件边界拆任务,按合理顺序合并分支,并且接受重复诊断。

机制拆解

logger 会话提交时有一个测试没过。它重跑缓存测试八次,失败五次,自己追到了 flaky-test 会话正在修的同一个竞态,提出了同样的修法。但因为不在自己的任务范围内,它没有动缓存,只在总结里说明测试套件不干净。分支冲突时,要等一个分支合并后,再给下一个会话追加 rebase 指令。

Split parallel tasks along file boundaries, merge the branches in a sensible order¶18 ↗

03

网络 None 不等于不外流

安全边界靠代理和一次性 VM 实现,但网络开到 None 也不等于数据出不去。

机制拆解

GitHub token 留在 VM 外面的代理里,会话只拿到一个短期凭据,而且只能推到它自己的工作分支。不受信任的代码跑在一次性 VM 里,旁边没有 SSH key、cloud CLI 会话和浏览器 profile。网络有 None、Trusted、Custom、Full 几档,所有出站流量都经代理并记录主机名。但 Claude Code 本身还要请求 Anthropic API,数据仍可能从这条路出去,会话也照样能推送到自己的分支。

Even at None, Claude Code still sends requests to the Anthropic API¶48 ↗

04

配置以仓库为界

配置的可移植性以仓库为界:仓库里的 CLAUDE.md、rules、skills、agents、commands 会随仓库进 VM,用户级的 ~/.claude 留在本机。

机制拆解

VM 从 GitHub 克隆仓库,只能看到仓库里的东西。团队需要的技能和命令要提交到仓库的 .claude/ 下,项目级 MCP 写进 .mcp.json,测试命令写进 CLAUDE.md。setup script 以 root 身份在 Claude Code 启动前运行,跑完的结果会做成快照缓存;SessionStart hook 则让本地和云端执行同样的安装步骤。

The repository's Claude config comes along. Your personal one doesn't.¶22 ↗

05

价值来自会话自我验证

演示里的价值大多来自会话能自己跑检查;环境配置的意义,就是给它跑验证的条件。

机制拆解

flaky-test 的 prompt 写明了证明方式:测试套件连跑至少 30 次。会话实际跑了 40 次,0 失败。docs 会话启动 server,对每个端点跑一遍 curl,找出旧文档的五处错误。第四个会话真的运行了代码,发现了时间窗口边界上的 bug。VM 的 CPU 不占你的机器,长测试放在一条命令里跑,只算一轮对话的用量,所以可以要求更彻底的证明。

Without that, you review changes nobody has run.¶60 ↗

06

不另收费≠不耗额度

「不另收费」只是说机器不另算钱,用量照样从你的额度里扣:并行就是按倍数消耗额度。

机制拆解

云会话和其他 Claude Code 用量共用同一份额度,Claude 的每一轮对话都计入。五个并行会话消耗额度的速度大约是一个会话的五倍。Routines 另有每小时上限,projects 每天最多新开 200 个线程。

five sessions use them about five times as fast as one¶75 ↗

03

批判性审视

厂商视角

作者站在厂商一侧:演示仓库 tidepool 是自造的小型 Node API,三个问题都是边界清楚、靠测试就能验证的小问题,四个会话也全部成功,没有展示失败或跑偏的会话。文中 bonus credit 的领取截止日(October 7)还带有促销的紧迫感。

自己验证拿一个自己的真实仓库,选一个已知 flaky、但根因不明显的问题,用同样的工单式 prompt 跑一次,记录是否找到根因、是否只改测试不改代码、总结里有没有如实报告残留问题。
数字口径

耗时数字的口径不统一。正文说三个会话分别运行了 61、65、72 秒,87 秒指的是从第一个会话启动到全部完成;图注里写的则是 65、62、87 秒。而且其中三分之一到一半多的时间花在从 prompt 重建仓库上,VM 冷启动和 setup 缓存未命中的时间都没有单独给出。

自己验证自己计时:分别记录 VM 就绪、setup 完成、分支可审这三个时刻;setup script 改动之后的首个会话(缓存要重建)和缓存命中后的会话各测一次。
数字口径

文章说机器不另收费,但没有给出任何一个演示会话实际消耗了多少 token 或多少额度。并行五倍消耗只是一个比例,读者无法据此估算真实成本;logger 会话为别人的 bug 做重复诊断,也耗掉了额度。

自己验证跑一个云会话之前和之后,各在 /usage 里记一次读数;再用同一任务在本地跑一次做对照,比较两者的额度消耗。
可复现性

竞态修复的证据可以复现,但失败率前后对不上:原文开头说大约每四次失败一次,logger 会话重跑八次却失败了五次。推断:这可能和 logger 改动后请求路径的时序有关。文中没有解释,40 次 0 失败的样本量也有限。

自己验证在本地复现 TtlCache.get 的竞态,在原始代码和加了 logger 改动的代码上各跑足够多次,统计失败率;修复后按文中建议跑 200 次,看是否稳定为 0。
遗漏

数据合规一笔带过:会话 transcript 由 Anthropic 存储,保留多久取决于套餐和模型改进设置;网络开到 None 时,数据仍可能经模型 API 流出。只提到开启 Zero Data Retention 的组织会关闭云会话。

遗漏

适用面偏向托管在 GitHub 上的代码仓库:GitLab 和 Bitbucket 仓库只能上传 bundle,推不回去;VM 只有大约 4 vCPUs、16 GB 内存、30 GB 磁盘。

本篇未覆盖(3)
风格