Skip to content

xue-xiaobao/disk-saver

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

DiskSaver

License: MIT Agent Skills skills.sh Runtime

DiskSaver 让小硬盘多撑一阵:能重建的缓存先清掉,有外置盘就顺手映射;大模型和运行时包可以搬走,聊天记录和浏览器 profile 先不碰。

为什么需要 DiskSaver

内置硬盘升级贵,外置硬盘便宜。就算暂时没有外置盘,清掉可重建缓存也能先救急。问题是手动搬目录很容易出事:有些缓存删了没关系,有些模型重下很慢,有些 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 会先盘点、列清单,确认后才动文件。

1. 清理可重建缓存

用户:我的磁盘快满了,帮我看看哪些缓存能安全清理。

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,可重建缓存
- 前置检查:外置硬盘可写,剩余空间足够

请确认是否执行。

2. 把大目录映射到外置硬盘

用户:把 Hugging Face 模型缓存映射到外置硬盘,但不要重新下载。

Agent:这个目录适合 migrate,不适合 empty-map。
我会先查这些事:
- 外置硬盘是否存在且可写
- 目标目录剩余空间是否足够
- 源目录是否已是 symlink
- 是否有相关进程正在占用

检查完我会列出迁移清单。你确认后,我再移动文件并创建 symlink。
用户:确认执行。

Agent:已完成。
- 原目录内容已迁移到外置硬盘
- 原路径已替换为 symlink
- 状态文件已记录本次映射
- 后续应用仍然访问原路径

3. 自动选择并记住外置硬盘

用户:把这些缓存以后都放到外置硬盘。

Agent:我还没有找到已保存的 DiskSaver target,会先扫描可写外置卷,并给出建议 target,例如:
- <external-root>/disk-saver/<user>/data

确认后我会写入 DiskSaver 配置。下次运行会直接读取这个 target。

DiskSaver 节约了哪些空间?

能省多少取决于你的机器和使用习惯。DiskSaver 优先看这几类目录:

类型 示例 推荐动作 空间收益
包管理器缓存 ~/.cache/uv~/.npm/_cacache、pip cache clean-cacheempty-map 常见为数 GB 到数十 GB
模型缓存 ~/.cache/huggingface、本地 embedding/model cache clean-cacheempty-mapmigrate 常见为数 GB 到数百 GB
浏览器二进制缓存 Playwright、Puppeteer、Camoufox clean-cacheempty-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 会标成 cautionavoid,要求额外确认,或者直接建议跳过。

安全边界

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

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages