用途:这是一个 macOS 磁盘审计与清理技能。触发场景包括操作者表示“磁盘满了”“看看能删什么”“做个系统分析”,系统大版本更新后盘点残留,或在向客户申请空间、把环境迁移到另一台机器前做空间评估。技能明确不用于删除操作者已经点名的具体文件——那属于一句话任务,不是审计。其交付物是按风险分级、含路径与实测大小的报告,删除前必须获得明确批准;由操作者决策,代理只负责测量和提议。
主要能力:技能要求先测量再表态,强调 stat 给出逻辑大小而 du 给出已分配块大小,在装有 Docker、虚拟机与稀疏文件的 Mac 上差异巨大(如 Docker.raw 逻辑 60 GB、实际 12.4 GB;iCloud 占位文件逻辑 8 GB、实际 0 GB,删除既不释放空间还会触发远端备份下载)。所有进入报告的大小一律用 du -sk 测量,并给出避免重复统计 /System/Volumes/Data、正确处理含空格路径的命令示例。基础扫描覆盖磁盘容量、系统版本、本地快照、Time Machine 目标、Docker 空间占用、项目内 node_modules/.next/dist,以及各类缓存目录。
分类方式:技能把候选清理项分为四块——A 可再生成(缓存与索引,只损失首次运行时间)、B 已过期(结束的基准测试、被取代的 state.db 副本、旧日志、已克隆仓库的压缩包)、C 可选(实验用虚拟环境、构建产物、中间视频、孤立 git 包,需花功夫恢复)、D 用户决策(Docker、虚拟机、node_modules、个人内容)。每行报告需带确切路径、实测大小与恢复代价。
判断细节:技能提供了识别废弃项目的做法——同一天大规模扫描会刷新 mtime,因此不能只看 mtime,要排除 package.json、锁文件、README、AGENTS.md、CLAUDE.md、CONTRIBUTING.md、tsconfig.json、.gitignore 与 *.tsbuildinfo,取最后一次提交与代码文件修改时间中较晚者;删除 node_modules 前要用 launchctl list 与 lsof 检查服务是否仍在监听端口(文档举例:某项目 76 天无提交,但其 node_modules 因服务监听 :7777 而不可或缺)。活跃项目的 .next 不删。技能还列出 macOS 更新后残留的检查顺序,以及“看似垃圾实则不能动”的清单(如 /System/Volumes/Preboot、正在使用的密封系统快照、xcode-select 指向的 CommandLineTools、Apple 不建议删除的 receipts),并用 [ -w ] 逐条判断是否真的需要 sudo。
使用方式:按“测量—扫描—分类—核实—出报告”的流程执行。每个候选清理项都要实际验证路径存在、大小准确、且依赖方仍在引用(用 rg 在技能目录中搜索);最终产出为 ~/.hermes/reports/ 下的自包含 HTML 报告,在对话中给出结论与数字,长表格放入 HTML。删除脚本随报告提供,含只列出路径的“第 0 步”演练,使用逐一列出的绝对路径,禁用通配符与 find -delete,执行需显式批准。
限制与注意事项:du 名义大小不等于实际释放空间(文档记录 23.2 GB 名义删除仅释放 15 GB,部分因 Bun 硬链接其缓存存储、部分为簇开销与系统缓存);删除后要验证工具仍可用、state.db 完好、临时目录存在(只清空内容不删目录);删除运行中服务的数据目录可能毫无效果;应保守承诺并前后对比 df;~/Library/Mobile Documents 的 du 结果会失真;du ~/projects 可能耗时数分钟;没有 sudo 则无法审计部分系统目录,需在报告脚注中说明。macOS 更新本身不留下可删的安装包或快照,不要承诺这条路径。