DiskSaver 让小硬盘多撑一阵:能重建的缓存先清掉,有外置盘就顺手映射;大模型和运行时包可以搬走,聊天记录和浏览器 profile 先不碰。
内置硬盘升级贵,外置硬盘便宜。就算暂时没有外置盘,清掉可重建缓存也能先救急。问题是手动搬目录很容易出事:有些缓存删了没关系,有些模型重下很慢,有些 profile 和聊天记录根本不该碰。DiskSaver 把这件事拆成几步:先盘点,标出风险,列出要做的动作,等用户确认后再清理或映射到外置盘。
它主要做三类事:
clean-cache:适合没有外置盘、只想先救急的场景。清空可重建缓存,保留目录本身。empty-map:适合可重建缓存。先清空原目录,再建立到外置磁盘的 symlink。下次工具重新生成缓存时,内容会直接落到外置盘。migrate:适合不想重新下载的大目录。先把内容搬到外置盘,再用 symlink 保留原路径。
推荐使用 skills CLI 安装:
npx skills add xue-xiaobao/disk-saver --skill DiskSaver也可以手动 clone 到任意本地目录:
git clone git@github.com:xue-xiaobao/disk-saver.git再把 skill 目录链接到你的 Agent skills 目录。下面以 Codex/Claude Code 常见的本地 skills 目录为例:
ln -s "$(pwd)/disk-saver/skills/disk-saver" "$HOME/.agents/skills/disk-saver"如果你的运行时使用其他 skills 目录,把命令里的目标目录换掉即可。安装后,Agent 遇到“磁盘空间不足、清缓存、把目录放到外置硬盘”这类任务时,就可以加载 DiskSaver。
DiskSaver 面向 Agent 使用,用户不需要记命令。你只要说清目标,Agent 会先盘点、列清单,确认后才动文件。
用户:我的磁盘快满了,帮我看看哪些缓存能安全清理。
Agent:我先只读盘点大目录,并按 safe、caution、avoid 分类。
目前看,这些可重建缓存可以处理:
- uv cache,可 clean-cache;有外置盘时适合 empty-map
- Hugging Face cache,需确认是清空重建还是迁移保留
- npm cache,可 clean-cache;有外置盘时适合 empty-map
这一步不会删除或移动文件。要继续生成执行清单吗?
用户:我现在没有外置硬盘,先只清缓存。
Agent:执行前清单如下:
- 操作:clean-cache
- 目录:uv cache、npm cache
- 行为:只清空目录内容,保留目录本身,不创建 symlink
- 风险:safe,可重建缓存
- 影响:之后这些缓存还会重新长回来
请确认是否执行。
用户:我有外置硬盘,确认先处理 uv 和 npm cache。
Agent:执行前清单如下:
- 操作:empty-map
- 目录:uv cache、npm cache
- 行为:清空原缓存目录,在原路径建立到外置硬盘的 symlink
- 风险:safe,可重建缓存
- 前置检查:外置硬盘可写,剩余空间足够
请确认是否执行。
用户:把 Hugging Face 模型缓存映射到外置硬盘,但不要重新下载。
Agent:这个目录适合 migrate,不适合 empty-map。
我会先查这些事:
- 外置硬盘是否存在且可写
- 目标目录剩余空间是否足够
- 源目录是否已是 symlink
- 是否有相关进程正在占用
检查完我会列出迁移清单。你确认后,我再移动文件并创建 symlink。
用户:确认执行。
Agent:已完成。
- 原目录内容已迁移到外置硬盘
- 原路径已替换为 symlink
- 状态文件已记录本次映射
- 后续应用仍然访问原路径
用户:把这些缓存以后都放到外置硬盘。
Agent:我还没有找到已保存的 DiskSaver target,会先扫描可写外置卷,并给出建议 target,例如:
- <external-root>/disk-saver/<user>/data
确认后我会写入 DiskSaver 配置。下次运行会直接读取这个 target。
能省多少取决于你的机器和使用习惯。DiskSaver 优先看这几类目录:
| 类型 | 示例 | 推荐动作 | 空间收益 |
|---|---|---|---|
| 包管理器缓存 | ~/.cache/uv、~/.npm/_cacache、pip cache |
clean-cache 或 empty-map |
常见为数 GB 到数十 GB |
| 模型缓存 | ~/.cache/huggingface、本地 embedding/model cache |
clean-cache、empty-map 或 migrate |
常见为数 GB 到数百 GB |
| 浏览器二进制缓存 | Playwright、Puppeteer、Camoufox | clean-cache 或 empty-map |
常见为数百 MB 到数 GB |
| 浏览器 on-device model | Chrome 等浏览器下载的本地模型包 | migrate |
常见为数 GB |
| Agent/IDE runtime bundle | Claude、AI IDE、语言服务或 VM bundle | migrate |
常见为数 GB 到十几 GB |
| 临时残留 | ShipIt.*、code_sign_clone、明确遗留的构建临时目录 |
cleanup | 视残留情况而定 |
聊天记录、浏览器 profile、数据库、系统关键目录不属于默认清理目标。遇到这些目录,DiskSaver 会标成 caution 或 avoid,要求额外确认,或者直接建议跳过。
DiskSaver 的底线很简单:先看清楚,再动手。
- 没有用户明确确认,不执行删除、移动、清空、创建 symlink、初始化配置等写操作。
- 每次写操作前都要列出清单,包括源目录、目标目录、操作模式、预计大小、风险分类和需要退出的应用。
- 执行 map 前检查外置磁盘是否存在、是否可写、剩余空间是否足够。
- 对正在被进程占用的目录,先跳过或要求用户退出相关应用。
- 没有外置盘时可以用
clean-cache临时释放空间,但缓存之后还会重新长回来。 - 对可重建缓存优先
empty-map,避免 copy-then-delete 造成短时间双倍占用。 - 对用户数据目录保持保守,尤其是聊天记录、浏览器 profile、容器和数据库。
.
├── .gitignore
├── LICENSE
├── README.md
└── skills
└── disk-saver
├── SKILL.md
├── assets
├── references
│ ├── safety-matrix.md
│ └── state-files.md
└── scripts
└── disk_saver.py
6 directories, 7 files
Skill 的入口目录是 skills/disk-saver,展示名是 DiskSaver。
本项目使用 MIT License。