关于 cleanmymac
cleanmymac 是用于清理磁盘的技能,将文件发现、安全分类和删除分为独立步骤。它把项目分为自动安全、需审核和禁止触碰,并支持交互审核及可选的定期运行。
主要功能
- 01扫描文件夹并分类路径
- 02按安全级别划分三类
- 03批量删除自动安全项目
- 04交互审核指定项目
- 05提供启发式建议和定期计划
适用场景
- 01查找占用磁盘空间的大文件夹
- 02批量清理可再生成的缓存
- 03删除前审核应用数据
- 04设置定期清理计划
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ fengyiqicoder/ cleanmymac --skill cleanmymac安装后在 Claude Code 中输入/cleanmymac确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
advisor-heuristics/ai_models.shide_workspaces.shios_backups_old.shlarge_misc.shmedia_caches.shorphaned_app_support.shstale_node_modules.shstale_python_envs.shvm_disks.shmodules/_template.shadobe.shandroid_studio.shapfs_snapshots.sharc.shbrave.shbrew.shbun.shcargo.shchrome.shchromium.shclaude_app.shcocoapods.shcomposer.shconan.shcursor_caches.shcursor_full.shdart_server_cache.shdiagnostic_reports.shdiscord.shdns_cache.sh详细介绍
CleanMyMac
架构 — 发现 vs 判断 vs 操作
三个独立层。切勿混为一谈。
| 层 | 功能 | 脚本 | 可撤销? |
|---|---|---|---|
| 发现 | 从任意路径(默认为 $HOME)遍历文件系统树。对每个直接子项,将路径与判断注册表进行匹配并添加注释。类似 OmniDiskSweeper,但内置分类功能。 | diskmap.sh | 不适用(只读) |
| 判断 | 51 个清理模块和一个硬编码的禁止触碰列表共同构成注册表。对于任意路径,它都会判断:该路径是自动安全/需要审核/禁止触碰/未知? | lib-registry.sh(由 diskmap 和 autoclean 使用) | 不适用 |
| 操作 | 删除。自动安全项批量运行。审核项逐项交互处理。禁止触碰项和未知项需要用户明确选择加入。 | autoclean.sh、execute.sh | 缓存可重新生成;审核项一经删除便无法恢复 |
工作流
阶段 1 — 使用 diskmap 进行发现(默认)
~/.claude/skills/cleanmymac/scripts/diskmap.sh
输出:所有 ≥ 2 GB 的文件夹,自动深入到可分类的具体项目,并分为三个层级(没有“未知”——diskmap 通过注册表和启发式规则自动分类):
| 图标 | 层级 | 含义 |
|---|---|---|
| ✅ | auto_safe | 缓存/构建产物(匹配注册表或缓存名称启发式规则)。可批量删除,不会产生影响。 |
| ⚠️ | review | 其他所有内容(应用数据、沙盒应用、AI 模型权重、备份)。逐项决定。 |
| 🔒 | never_touch | 用户数据、操作系统文件、iCloud、Mail、Messages、Keychain、SSH/GPG/AWS。受保护。 |
若要深入查看特定路径:
diskmap.sh <path> # e.g. diskmap.sh ~/Library
diskmap.sh / --top 20 # full-disk view (some TCC denials expected)
diskmap.sh --threshold 500M # surface anything ≥ 500 MB
diskmap.sh --json # JSON output for parsing
⚠️ 强制输出规则 — 原样粘贴 diskmap 输出
向用户展示扫描结果时,必须将 diskmap 输出原样粘贴到单个围栏代码块(text … )中。不要:
- ❌ 重新排版为 Markdown 表格
- ❌ 将项目拆分到自定义子类别中(“AI 类/应用类/开发类”)
- ❌ 删除列、删除行或更改列顺序
- ❌ 在 diskmap 已输出的内容上添加自己的表情符号/颜色/图标
- ❌ 截断路径或重命名模块
diskmap 输出就是标准界面。它是固定宽度文本,包含三个部分(✅ AUTO-SAFE / ⚠️ NEEDS REVIEW / 🔒 NEVER-TOUCH),每行一个项目,格式为 SIZE | WHAT IT IS | WHERE。用户明确要求使用这种布局——必须逐字节保留。
代码块后,最多可以补充一句简短的下一步建议(例如“建议先清理 27.7 GB 安全项 → autoclean.sh --auto-safe --yes”)。不要添加更复杂的内容。
阶段 2 — 使用 autoclean 执行操作
用户了解整体情况后,询问希望使用哪种模式:
~/.claude/skills/cleanmymac/scripts/autoclean.sh # scan modules + show 3-tier breakdown
~/.claude/skills/cleanmymac/scripts/autoclean.sh --auto-safe --yes # delete auto-safe in bulk (recommended)
~/.claude/skills/cleanmymac/scripts/autoclean.sh --review # interactive per-item for medium/high
~/.claude/skills/cleanmymac/scripts/autoclean.sh --all # both
--review 模式会逐一引导用户处理每个中/高风险模块:显示名称 + 大小 + 内容说明 + 删除后的影响,然后提示 [d]elete / [k]eep / [q]uit。
阶段 3 — 深入查看未知项(可选)
如果 diskmap 显示较大的 ❓ 未知文件夹,建议进一步查看:
diskmap.sh ~/.cursor # for example, if .cursor was big and unclassified
diskmap.sh ~/Library/Containers
如果文件夹中的数据可安全重新生成(例如某个新 AI 工具的缓存),建议向注册表添加模块——提交 PR,包含 src/modules/<name>.sh 和白名单条目。
阶段 4 — Smart Advisor(可选,互为补充)
advisor.sh 会运行 9 项特定启发式检查,用于处理 diskmap 无法仅凭路径自动分类的内容(例如任意项目中的旧 node_modules、过期的 conda 环境、已下载的聊天媒体文件)。当 diskmap 显示的未知文件夹符合这些模式时,可使用它。
~/.claude/skills/cleanmymac/scripts/advisor.sh --interactive
阶段 5 — 安排计划(可选)
询问:“要不要设置每周自动清理,无需你每次确认?”
~/.claude/skills/cleanmymac/scripts/schedule.sh
交互式设置:选择频率(每周/每两周/每月/自定义)和范围。大多数用户会选择每周 + 仅清理安全项。
阶段 6 — 最终报告
- 释放的字节数(自动安全项 + 审核项合计)
- 已审核项目(保留数与删除数)
- 计划状态
- 用户未进一步查看的最大未知项——列出并建议贡献模块
不该做的事
- ❌ 绝不在用户提出要求后,未先向其展示内容(深入检查)就删除
❓ unknown路径 - ❌ 未获得针对每个项目的明确同意,绝不删除审核层中的任何内容
- ❌ 绝不直接运行
rm -rf——所有删除操作都必须通过safe_rm(受白名单限制) - ❌ 绝不以任何理由绕过白名单
- ❌ 未经
--with-sudo授权,绝不使用sudo - ❌ 绝不运行
docker volume prune(构建时已禁止) - ❌ 绝不触碰
🔒 never_touch列表:~/Documents、~/Desktop、~/Pictures、~/Movies、~/Music、~/Library/Mobile Documents(iCloud)、~/Library/Mail、~/Library/Messages、~/Library/Keychains、~/.ssh、~/.gnupg、~/.aws - ❌ 绝不触碰浏览器的
Cookies、Login Data、History、Bookmarks、Preferences - ❌ 绝不触碰外部/网络卷——仅限
/ - ❌ 不要将中高风险模块称为“可安全删除”——它们被列入审核层是有原因的
需要提醒的风险信号
- 🚨 未知项总量 >50 GB——有大量未分类数据;删除前应深入检查
- 🚨 单个未知文件夹 >10 GB——几乎总是值得调查(虚拟机、AI 模型、废弃项目依赖项)
- 🚨 单个审核项目 >5 GB——暂停并再次确认用户确实想删除它
- 🚨 清理后可用空间 <5 GB——建议用 diskmap 深入检查 ❓ unknown
- 🚨 Docker / Xcode 正在运行——
docker prune会跳过运行中的容器;DerivedData 可能被锁定。建议先退出 - ⚠️ diskmap 的 TCC 权限被拒绝——显示“真实大小 ≥ X GB”这一行,并告知用户如需获取真实总量,可在系统设置中授予“完全磁盘访问权限”
- ⚠️ 审核层包含 >5 GB 的 iOS 备份——备份无法自动恢复;请确认两次
语言/i18n
所有脚本都会根据 $LANG 自动检测语言(zh* → 中文,其他值 → 英文)。如果用户用中文与你交流,但其 shell 的 $LANG 为 en_US.UTF-8(macOS 上很常见),磁盘报告就会显示为英文——这不合适。
解决方法:运行任何脚本之前,将 CLEAN_MY_MAC_LANG 导出为与对话语言一致的值。这会始终优先于 $LANG:
CLEAN_MY_MAC_LANG=zh ~/.claude/skills/cleanmymac/scripts/autoclean.sh
CLEAN_MY_MAC_LANG=en ~/.claude/skills/cleanmymac/scripts/diskmap.sh
此覆盖设置会通过 lib.sh 导出的 MAC_LANG 传递给所有下游脚本。翻译字典位于 references/i18n.sh——以英文源字符串为键,采用 gettext 风格。添加字符串时:在调用处用 $(i18n "English literal") 包装,并在 _i18n_zh 下添加一个 case 分支。
参考资料
- whitelist.txt —
safe_rm允许触碰的路径 - whitelist.md — 白名单说明
- safety-rules.md — 每个脚本都会强制执行的不变规则
- cleanup-catalog.md — 每个模块的用途、大小和恢复方式
- i18n.sh — 翻译字典(添加新语言 = 新建
_i18n_<code>函数和分发分支)