只要做到云端只能接触一个 GitHub 仓库、生产服务器只从这个仓库拉取代码,就可以把开发工作交给 Claude Code 云端会话,而不会给生产环境多开一条入口。不过,真正走到这一步,我卡住了好几次。本文是我(本站运营者)于 2026年10月4日在另一个开发项目上开始使用云端会话的记录,并对照官方文档原文重新核实过。
云端能接触的范围
一个 GitHub 仓库
安装 Claude GitHub App 时选择“Only select repositories”,只授权这一个仓库。
生产服务器
只拉取
生产环境用只读密钥获取代码。无论云端还是 GitHub,都拿不到进入生产环境的密钥。
云端环境
每个项目新建一个
使用某个环境的任何人都能读取其中的环境变量。不要把机密信息放进去。
来源:Use Claude Code in the cloud、Configure cloud environments。核对日期:2026年10月4日。工作原理、上手方法和价格请参阅《什么是 Claude Code 云端会话?》。
目录
1. 保护生产环境的架构:生产环境只拉取
我最担心的是,经由 GitHub 会给生产服务器多出一条入口。最后我定下了下面这套架构(这是我自己的选择,并非官方推荐)。箭头表示数据被获取的方向。
- 云端会话编写代码并推送分支(无法进入生产环境)
- →push
- GitHub 私有仓库App 唯一安装的仓库
- ←fetch
- 生产服务器用只读的部署密钥拉取,由人手动执行部署
起初我想沿用另一个仓库的密钥,结果被 GitHub 拒绝,提示“Key is already in use”。根据 GitHub 文档,当该密钥已注册到其他账号或仓库时就会出现这个错误。由于每个仓库各用一把密钥,即使密钥泄露,暴露的也只有那一个仓库。
2. 不用 GitHub 启动时会发送哪些内容
我平时把代码放在自己服务器上的 git 仓库里,所以起初考虑过不用 GitHub 来使用云端会话。根据官方文档,例如在没有远程仓库的仓库中运行 claude --cloud "task description" 时,本地仓库会被打包成一个 bundle 发送到云端。发送的内容如下。
git add)。macOS、Linux、WSL
疑似机密的文件名留在本地
对于 .env、*.tfvars、id_rsa、*.pem 这类名称的文件,未提交的更改会保留在本机,不会发送。
Windows(非 WSL)
不论文件名都会发送
已跟踪文件的未提交更改会原样发送。开始前,请把不想发送的更改 stash 或撤销。
有风险的情况是:用 git 跟踪了包含机密信息的文件并做了修改,以及过去某个时候提交过机密信息。被 .gitignore 排除的 .env 本来就不会被发送。
还有一点:根据官方文档,从 bundle 创建的会话只能推送到“repositories your GitHub connection has push access to”(你的 GitHub 连接拥有推送权限的仓库)。我在文档中没有找到把结果直接送回自建的非 GitHub 仓库的方法。在已经写好操作手册之后,我还是放弃了,在 GitHub 上建了一个私有仓库。
3. 我实际踩过的五个坑
以下是从在 GitHub 上创建私有仓库到真正开始使用之间遇到的问题,每个都按现象、原因、解决方法整理。
1) 仓库没有出现在列表中
2) GitHub App 的安装范围
3) 未安装 App 的组织的仓库也出现了
4) 旧的云端环境还在
5) 我想让它读取本地文件
4. 云端的权限模式有何不同
就在发送之前,我注意到权限模式设为“Accept edits”。从名称看,它像是最激进的模式,但根据官方文档,云端的 Accept edits 相当于本地 Claude Code 的默认模式(Manual)。在云端,所有模式都预先允许编辑文件,所以默认模式只是以这个名称显示。
Accept edits
遇到命令会停下
文件编辑会自动通过。npm install、构建、git push 等命令每次都要等你批准。
Plan
先出计划
在做任何修改之前,先拟定并展示要做什么的计划。
Auto
自己持续推进
不再请求批准,而是由分类器(一种安全检查机制)审查每个操作后继续执行。只有在组织允许且所选模型支持时才会出现。
我希望它在我不管的情况下继续工作,于是切换到了 Auto。注意,在云端无法选择跳过所有检查的模式(bypass permissions),即使在仓库的设置文件中设置了也会被忽略。各模式的详细比较请参阅《Claude Code 权限模式》。
5. 实际花了多少:一条指令用掉 $226
做好以上设置后,我用 Max 套餐的限时额度($250)运行了云端会话。在第一条消息里交给它设计文档和指令,权限模式设为 Auto。之后,我一次也没有跟它对话。中途我查看用量界面,被消耗速度吓了一跳,于是让它停了下来。停下时,额度还剩 $24。如果没有叫停,它会把 $250 全部烧光。
$226
已用额度($250 中,剩余 $24)
676.7k
叫停时的上下文(1M 的 68%)
86%
套餐每周限额已用(所有模型)
来源:我的 Claude Code 用量界面(2026年10月4日,Max 20x 套餐)。每周限额的 86% 包含云端以外的用量。
一条指令下去,到我叫停为止,云端完成了这么多工作(根据我的工作日志)。
为什么消耗这么快
费用不取决于你跟它对话多少次,而取决于Claude 调用模型的次数,以及每次读取多少上下文。自主运行时,每次读取文件、写入文件、运行测试都会触发一次调用,所以即使没有任何对话,调用次数也可能达到数百乃至数千次。官方文档(Manage costs effectively)也指出,费用随上下文大小而增长。
每次调用都会重新读取此前的上下文。即使有缓存,读取也不是免费的:按 Opus 5.5 的缓存读取价格(每百万 token $0.20)计算,读取一次 50 万 token 约需 $0.10。重复 1,000 次就是约 $100(这是我根据单价算出的示例,并未核实这次会话的实际调用次数和模型构成)。它编写的代码和测试另按输出价格计费。
就我在官方文档中能找到的而言,没有限制额度消耗的设置(--max-budget-usd 只适用于非交互式运行,每月支出上限针对的是按量付费的用量额度)。设定停止点的方法只有写进指令或自己叫停。另外,额度用完后,云端会话会和本地使用一样消耗套餐的每周限额。如果在每周限额所剩不多时运行同等规模的任务,就会触及上限,本地 Claude Code 也会受影响。
明细:反复重读与子代理
叫停后,我打开了用量界面的详细明细(这些数字涵盖整个会话,包括我在叫停后让它写的总结)。
8h 33m
模型工作的时间(我亲自操作了 2 分 24 秒)
99%
Opus 占比(Sonnet 1%)
63%
子代理占比(general-purpose 34%、Agent 29%)
来源:我的 Claude Code 用量界面的会话视图(2026年10月4日)。显示费用:$231.09。
我亲自操作的时间只有 2 分 24 秒,其余 8 个多小时都是 Claude 在自行工作。在这段时间里,Opus 主对话和同样运行在 Opus 上的子代理,一遍又一遍地重读越来越长的对话。我让云端会话统计明细时,它报告说:完成一个工具,Sonnet 子代理大约需要 30 次操作,Opus 子代理需要 130 到 230 次操作(这是该会话自己的统计,我没有逐一核实)。
界面上显示的费用($231.09)与我打开该界面时额度的减少量($250 → $18,即 $232)几乎相同。我叫停会话时还剩 $24;之后才打开这个界面,所以那时余额又少了一点。根据官方文档,这个界面上的费用是按 token 数乘以标价得出的估算值。因此,似乎可以认为额度是按 API 标价扣除的(官方文档并未明确写明)。
如果不指定模型,子代理会使用与主对话相同的模型(官方文档:“Create custom subagents”)。主模型是 Opus 时,即使是批量作业,最后也都在 Opus 上运行。
节省费用的方法(按效果从大到小)
- 1. 让子代理使用 Sonnet在指令中写上“run subagents with model: sonnet”。也可以用
CLAUDE_CODE_SUBAGENT_MODEL环境变量更改默认值(它不是机密信息,放进环境里没问题)。 - 2. 保持对话简短(
/compact或新会话)对话越短,每次操作越便宜。如果主题不变,用/compact总结可以在不切换会话的情况下缩短对话(还可以指定要保留的内容,例如“保留测试结果”)。主题改变时,或长时间中断后恢复时,就开一个新会话。如果让它把进度写进交接文档,分段进行也不会丢失任何内容。 - 3. 事先设定停止点写上“基础完成后停下并报告”或“花到 $50 左右时停下并报告”之类的话(没有支出上限的设置,所以要用指令划定界限)。
- 4. 集成工作也交出去让子代理负责测试、提交和推送,减少在冗长昂贵的主对话中进行的工作。
- 5. 减轻验证负担UI 测试只针对刚做好的工具运行,完整测试套件在合并前跑一次。截图每个工具只在桌面宽度和手机宽度各截一次。
- 6. 不需要的工作立即停止中途停止的子代理不会留下任何结果,已经消耗的部分也不会退还。
作为经验法则,并行运行 2 到 3 个。根据云端会话自己的判断,减少并行数只会拉长时间,总费用变化不大。比并行数量更重要的是让每段对话保持简短、每条指令具体明确。
根据官方文档,我是这样考虑 /compact 与新会话的取舍的。/compact 会重读整段对话来生成总结,但在缓存仍然有效时,这次重读大部分来自缓存,所以并不像对话长度看起来那么昂贵(“Prompt caching”)。长时间闲置、缓存过期之后,整段内容会在没有缓存的情况下重读,费用就高了。而新会话不花任何费用,但不会延续之前的内容(“Manage costs effectively”)。总结可能会漏掉细节,所以想保留的内容最好先写进文档。注意,在云端会话中 /compact 可用,但 /clear 不可用;要从侧边栏开始新会话(“Claude Code on the web”)。
下面是我在下一个会话开头粘贴的消息示例(已隐去项目名称)。
请从上次中断的地方继续。
依次阅读 CLAUDE.md → docs/HANDOFF.md → docs/TODO.md,并遵守其中的规则。
本次会话的主题:XX
子代理使用 model: sonnet 运行,最多并行 2-3 个。
预算达到 $XX 时停下并报告。请用简体中文报告。
关于云端会话的上下文总结,云端会自行设置 CLAUDE_AUTOCOMPACT_PCT_OVERRIDE 环境变量,所以把这个变量加进你的环境不会生效。如果想让总结更早触发,请按官方文档的建议使用 CLAUDE_CODE_AUTO_COMPACT_WINDOW 或 /autocompact。
6. 开始前的检查清单
- GitHub 账号连接到 claude.ai 的账号是你想用的那个吗?
- App 范围是否用“Only select repositories”只安装到了需要的仓库?
- 历史过去提交过的机密信息是否还留在仓库历史中?
- 环境是否为这个项目新建了环境?环境变量里是否没有放机密信息?
- 生产环境是否避免了从云端或 GitHub 进入生产环境的任何路径(是否改为由生产环境拉取)?
- 规则是否把反复使用的规则写进了仓库的 CLAUDE.md?
- 权限模式是选择 Auto 让它自行运行,还是选择 Accept edits 逐步确认?
总结
在保护生产环境的同时使用云端会话,归结为三点:云端只接触一个 GitHub 仓库,生产环境用只读密钥从中拉取,部署由人执行。不用 GitHub 也可以开始,但仓库会连同所有分支的历史一起发送;在 Windows 上,已跟踪文件的未提交更改不论文件名都会发送。
我实际卡住的地方有:连接的是另一个 GitHub 账号、App 的范围、遗留的旧环境、看不到本地文件,以及“Accept edits”遇到每条命令都会停下。上面的检查清单可以预防所有这些问题。
费用方面,一条指令自主运行,在我中途叫停之前就用掉了 $226 的限时额度。费用不取决于对话次数,而取决于调用次数和上下文长度。从明细看,大部分来自重读对话,以及与主对话使用同一模型的子代理。让子代理使用 Sonnet,用 /compact 或新会话保持对话简短,并在指令中写明停止点。
常见问题
Q. 不用 GitHub 能试用云端会话吗?
A. 可以。claude --cloud "task description" 会把本地仓库打包发送。仓库须小于 100MB,且至少有一次提交。所有分支的历史都会被发送,官方文档也没有介绍把结果直接送回非 GitHub 仓库的方法。
Q. 列表里出现了我没安装 App 的组织的仓库,是不是有什么泄露了?
A. 如果是公开仓库,就没有。通过 GitHub App 连接时,云端会话可以使用所有公开仓库,所以它们会作为选项出现。私有仓库只有安装了 App 的才能使用。
Q. 可以把 API 密钥放进环境变量吗?
A. 不建议。官方文档警告,使用某个环境的任何人都能读取其中的环境变量,并建议不要把机密信息放在那里。Pro 和 Max 可以改为登记在“API credentials”中,会话无法读取它的值。
Q. 我选了“Accept edits”,但它每遇到一条命令都会停下。
A. 这是设计如此。在云端,所有模式都允许编辑,所以默认模式以“Accept edits”这个名称显示。如果想让命令无需批准就能运行,请选择 Auto(只有在组织允许且模型支持时才会出现)。
Q. 我明明没跟它对话,为什么额度掉得这么多?
A. 因为费用不是由你说话的次数决定的,而是由 Claude 调用模型的次数以及每次读取多少上下文决定的。自主运行时,每次读取文件、写入文件、运行测试都会触发调用,而且上下文会不断增长。我的情况是,一条指令在我中途叫停之前用掉了 $226(第 5 节)。
Q. 限时额度也能这样使用吗?
A. 可以。Pro 和 Max 的额度(Pro 为 $100,Max 为 $250)会自动用于云端会话的用量,在额度用完之前,这部分用量不计入套餐的用量限额。领取截止到美国太平洋时间 10月7日,有效期到 11月4日结束(日本时间 11月5日 16:59)。它不能用于 Projects、Routines、Remote Control 等。详情请参阅官方支持文章和《什么是 Claude Code 云端会话?》。
参考来源
- Claude Code 官方文档:Use Claude Code in the cloud(包括“Send local repositories without GitHub”一节)
- Claude Code 官方文档:Get started with cloud sessions
- Claude Code 官方文档:Configure cloud environments
- Claude Code 官方文档:Permission modes
- Claude Code 官方文档:Manage costs effectively
- Claude Code 官方文档:Create custom subagents
- Claude 帮助中心:Cloud sessions bonus credit promotion
- GitHub Docs:Managing deploy keys、Error: Key already in use
所有官方规格均已于 2026年10月4日对照原文核实。设置记录来自我自己一个项目的单次实践,界面显示内容可能随版本和时间而变化。