用途
disk-cleaner 是一个磁盘空间管理技能,当用户要扫描磁盘空间、找出可安全删除的缓存/编译产物/安装包、或交互式释放空间时使用。它扮演磁盘空间管理专家的角色,帮助用户找出可以安全删除的文件和目录,释放磁盘空间。
主要能力
该技能支持解析扫描范围、全量并行扫描、生成清理报告与编号菜单、执行清理以及验证结果。
扫描范围解析方面:如果用户传入路径参数,逐个解析为绝对路径,只扫描这些路径及其子目录;如果用户没有传入参数,以当前工作目录和用户主目录为起点做探索。代码根目录通过项目标记发现,例如 .git、Cargo.toml、package.json、pyproject.toml、go.mod、pnpm-workspace.yaml、bun.lockb。探索时跳过明显不该递归的大目录:Library、.Trash、node_modules、target、.git、应用数据缓存目录。最终输出去重后的绝对路径列表,命名为“扫描根目录”。
全量并行扫描覆盖以下类别:磁盘概况与主目录一级占用、隐藏目录占用、Rust target 编译缓存、node_modules 依赖、.next 构建缓存、包管理器缓存(uv/bun/gradle/npm/rod/pre-commit/huggingface/puppeteer/pnpm-store)、Library/Caches 大户、Application Support 大户、Downloads 安装包与废纸篓、大的 .git 目录(仅供参考)、Docker 占用。
使用方式
用户传入的参数(如有)为 $ARGUMENTS,将其视为用户指定的扫描范围。用户没有传入参数时,不假设代码一定在某个固定目录,先从当前工作目录和用户主目录做有边界的探索,找出真实存在的项目根目录,再基于这些目录扫描。
扫描流程分为五步:
第一步:解析扫描范围。确定本次扫描根目录,后续所有代码相关扫描都必须基于这些根目录。不要硬编码 ~/Desktop/code、~/Developer、~/Projects 等目录;只有探索结果中真实出现的目录才可作为扫描根目录。后续命令中先把扫描根目录写入 scan_roots=(...) 数组;不要原样执行模板里的占位路径。
第二步:全量并行扫描。一次性并行执行所有扫描(每个一个 Bash 调用),包括磁盘概况、隐藏目录、Rust target、node_modules、.next、包管理器缓存、Library/Caches、Application Support、Downloads 与废纸篓、大 .git 目录、Docker 占用。
第三步:生成清理报告 + 编号菜单。汇总所有扫描结果,按磁盘概况、扫描根目录、可清理项目(按释放空间排序,分为高价值、中等价值、仅供参考三类)输出,并给出预计可释放空间和选择提示。
第四步:执行清理。用户选择编号后,按类别并行执行删除。删除命令必须使用绝对路径(/Users/xxx/...),不要用 ~ 或 $HOME。缓存目录删除必须精确到子目录,避免 hook 拦截顶层隐藏目录。
第五步:验证。运行 df -h /,输出清理前后对比表,报告释放了多少空间。
适用场景
适用于需要扫描磁盘空间、找出可安全删除的缓存/编译产物/安装包、或交互式释放空间的场景。典型可清理项包括 Rust target 编译缓存、包管理器缓存、Library/Caches、node_modules(不活跃项目)、Downloads 安装包等。
限制与安全规则
绝不删除用户文档、照片、代码源文件;绝不删除 .git 目录(只报告大小供参考);绝不删除当前工作目录下的 target/ 或 node_modules/;只删除缓存、编译产物、安装包等可恢复的内容;删除后运行 df -h / 报告释放了多少空间;删除命令使用绝对路径,缓存目录精确到子目录级别;代码相关扫描和删除只能使用第一步解析出的扫描根目录,不要临时编造常见代码目录。
注意事项:用中文输出所有信息;扫描时最大化并行执行(所有扫描一步完成),减少等待时间;如果遇到权限问题,先用 chmod -R u+w 尝试,不要用 sudo;du 对大目录可能很慢,给所有 Bash 调用设置 timeout: 120000。