1. openCode 快照把 C 盘吃满到底发生了什么如果你最近在用 openCode 写代码某天突然收到系统提示「C 盘空间不足」打开资源管理器一看用户目录下某个隐藏文件夹里塞满了tmp_pack_*文件单个几百 MB 到几 GB 不等加起来几十 GB——恭喜你遇到了 openCode 快照系统的临时文件堆积问题。openCode 的快照能力本质上依赖一个内部 Git 仓库它会在你每次编辑、每次对话触发代码变更时把当前工作区状态打包成一个 Git pack 对象用于实现 undo/redo、代码 diff、版本回溯。问题出在打包过程中如果进程被中断CLI 崩溃、终端窗口调整导致进程被杀、手动 CtrlC、网络请求超时未完成的 pack 文件就会以tmp_pack_*的形式残留在磁盘上。而当前版本的 openCode 没有自动清理这些残留的机制于是它们只增不减。这个场景适合谁三类人最容易被击中一是 Windows 下用 openCode CLI 做日常开发的终端不稳定导致进程频繁中断二是长时间挂着 openCode 跑 Agent 任务的每小时可能产生近 10GB 临时数据三是 C 盘本身就不宽裕、用户目录默认在系统盘的。这篇内容就围绕「定位占用 → 迁移目录 → 统一 Key 通道 → 清理验证」这条线走一遍把临时文件从 C 盘迁出去并且让回收变得可控。2. 先定位快照目录在哪占用从哪来openCode 在 Windows 下的数据目录通常落在用户主目录下路径形如C:\Users\你的用户名\.local\share\opencode或%LOCALAPPDATA%\opencode具体取决于安装方式和版本。快照相关的 Git 仓库和临时 pack 文件一般在这个目录的snapshot或storage子目录里。定位步骤可以这样操作。先打开 PowerShell用一条命令按大小排序找出嫌疑目录# 在用户目录下按大小列出前 20 个目录单位 MB Get-ChildItem -Path $env:USERPROFILE -Directory -Recurse -ErrorAction SilentlyContinue | ForEach-Object { $size (Get-ChildItem $_.FullName -Recurse -File -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum [PSCustomObject]{ Path $_.FullName; SizeMB [math]::Round($size / 1MB, 2) } } | Sort-Object SizeMB -Descending | Select-Object -First 20跑完之后你会看到类似...\.local\share\opencode\snapshot这样的路径排在前面。进去再看一层确认tmp_pack_*和pack-*文件的数量与体积# 统计 tmp_pack_* 文件数量和总大小 $snap $env:USERPROFILE\.local\share\opencode\snapshot Get-ChildItem $snap -Recurse -Filter tmp_pack_* -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum | Select-Object Count, {NTotalGB;E{[math]::Round($_.Sum/1GB,2)}}这一步的意义在于先量化再动手。很多人一看到 C 盘满就乱删结果把正在用的快照仓库也删了undo 历史全丢。你要区分两类文件——tmp_pack_*是未完成打包的残留可以安全清理pack-*是已完成的快照对象删了会丢历史除非你确认不需要回溯。注意清理前先关闭所有 openCode 进程否则文件被占用删不掉或者删到一半进程又写回来。3. TaoToken 前置为什么要在治理临时文件时顺手统一 Key 通道临时文件爆满的根因之一是进程频繁中断而进程中断很多时候和网络请求超时、Key 轮换、多套配置打架有关。如果你同时在用多个模型供应商每个都配一套 Key、一套 base_urlopenCode 在切换时容易卡住甚至崩掉快照打包就被打断tmp_pack_*就留下了。TaoToken 在这里的作用是把 Key 和 API 通道统一成一套。你只需要在 TaoToken 控制台创建一个 API Key然后把 openCode 的模型请求都指向同一个 base_url就不用再维护多份配置。这样做的直接好处是请求路径稳定超时和重试行为一致进程因为网络层抖动而中断的概率下降快照打包被中途打断的情况自然减少。需要提前准备的东西一个 TaoToken 账号在控制台生成 API Key确认你要用的模型名称知道 openCode 的配置文件位置。TaoToken 的 API 入口是https://taotoken.net/api控制台和 Key 管理在官网对应页面。这里不展开注册流程重点放在配置骨架和验证上。4. 可复制的 config.toml 骨架临时目录迁出 C 盘 统一 KeyopenCode 的配置通常放在~/.config/opencode/config.tomlWindows 下是%USERPROFILE%\.config\opencode\config.toml。下面这份骨架做了两件事把快照和缓存目录指向非 C 盘路径把模型请求统一走 TaoToken 通道。# ~/.config/opencode/config.toml # 全局数据目录把快照、缓存从 C 盘迁到 D 盘 # 注意路径用正斜杠或双反斜杠避免转义问题 data_dir D:/opencode-data # 快照系统配置 [snapshot] enabled true # 快照仓库根目录独立于 data_dir 便于单独清理 dir D:/opencode-data/snapshot # 单个快照打包超时秒超时后放弃本次打包减少残留 pack_timeout 30 # 保留最近 N 个快照超出的可手动清理 keep_last 50 # 缓存目录同样迁出 C 盘 [cache] dir D:/opencode-data/cache # 模型供应商统一走 TaoToken 通道 [provider.taotoken] type openai-compatible base_url https://taotoken.net/api api_key sk-你的TaoToken密钥 # 按需填写你要用的模型 models [claude-sonnet-4-5, gpt-4o] # 默认模型指向统一通道 [model] provider taotoken name claude-sonnet-4-5几个关键点解释一下。data_dir是总开关openCode 会把大部分运行时数据放这里指向 D 盘后 C 盘压力立刻减轻。snapshot.dir单独指定快照仓库位置方便你以后只针对这个目录做清理脚本。pack_timeout是缓解残留的实用参数——打包超过 30 秒就放弃而不是无限等待然后被中断留下半个文件。keep_last控制快照保留数量避免历史无限增长。provider 段用的是 openai-compatible 类型base_url 填https://taotoken.net/apiapi_key 填你在 TaoToken 控制台生成的密钥。这样 openCode 的所有模型请求都走同一条通道不再需要为每个模型单独配 Key。提示改完配置后先把旧的 C 盘快照目录整体备份一份再迁移确认新目录工作正常后再删旧的。5. 验证请求与清理前后对比配置改完先验证模型通道是否通。用 openCode 发一个最小请求或者直接用 curl 测 TaoToken 通道curl https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer sk-你的TaoToken密钥 \ -H Content-Type: application/json \ -d { model: claude-sonnet-4-5, messages: [{role: user, content: ping}], max_tokens: 16 }返回里有choices字段就说明通道正常。接着在 openCode 里跑一次会触发快照的操作比如改一行代码再撤销然后去D:/opencode-data/snapshot看是否生成了新的快照文件同时确认 C 盘旧目录不再增长。清理前后对比可以这样记录。清理前先跑一次统计# 清理前统计 C 盘旧快照目录占用 $old $env:USERPROFILE\.local\share\opencode\snapshot $before (Get-ChildItem $old -Recurse -File -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum Write-Host 清理前: $([math]::Round($before/1GB,2)) GB确认 openCode 已关闭后删除tmp_pack_*残留# 只删 tmp_pack_* 残留保留 pack-* 正式快照 Get-ChildItem $old -Recurse -Filter tmp_pack_* -ErrorAction SilentlyContinue | Remove-Item -Force再统计一次对比差值。实测下来一个跑了两周的开发环境tmp_pack_*能占到 30GB 以上清完 C 盘立刻回血。之后每次 openCode 运行新快照都写到 D 盘C 盘不再增长。6. 本篇常见错排查报错一配置文件不生效快照还是写 C 盘。先确认 config.toml 路径对不对Windows 下是%USERPROFILE%\.config\opencode\config.toml不是%APPDATA%。再看 TOML 语法路径里的反斜杠要转义或改用正斜杠。改完重启 openCode 进程配置是启动时读取的。报错二tmp_pack_*删不掉提示文件被占用。说明还有 openCode 进程在跑。用任务管理器结束所有 opencode 相关进程或者Get-Process | Where-Object {$_.Name -like *opencode*} | Stop-Process -Force。删完再重启。报错三TaoToken 请求返回 401。Key 填错或过期。去 TaoToken 控制台重新生成一个注意别把前后空格复制进去。base_url 确认是https://taotoken.net/api不要多加/v1后缀openai-compatible 类型会自动补路径具体以接入文档为准。报错四迁移后 undo/redo 历史丢失。这是因为你只迁了目录没迁数据。正确做法是把旧 snapshot 目录整体复制到新路径再改配置而不是直接改配置指向空目录。报错五快照打包仍然频繁超时。检查pack_timeout是否设得太短大仓库打包本身耗时。另外确认 D 盘是本地盘不是网络盘网络盘写入慢会加剧超时。接入相关的 Key 管理和文档入口建议直接看 TaoToken 的 API Keys 页面和接入文档里面有各语言的完整示例。如果你主要是长期跑编码任务和 AgentCoding Plan 那条线更适合通道稳定性和额度管理都更省心只是临时验证模型通不通用模型对话页面测一下就行。最后说个实用习惯把清理tmp_pack_*做成一个每周跑一次的 PowerShell 脚本配合keep_last参数基本就不会再遇到 C 盘爆满。openCode 的快照功能本身没问题问题在于残留没人管你给它划一块独立的地盘、定一个回收节奏它就老实了。