mcpField
C
cleanmymac

cleanmymac

github.com/fengyiqicoder生产力1184 次安装22 周前更新
代码仓库

关于 cleanmymac

cleanmymac 是用于清理磁盘的技能,将文件发现、安全分类和删除分为独立步骤。它把项目分为自动安全、需审核和禁止触碰,并支持交互审核及可选的定期运行。

主要功能

  1. 01扫描文件夹并分类路径
  2. 02按安全级别划分三类
  3. 03批量删除自动安全项目
  4. 04交互审核指定项目
  5. 05提供启发式建议和定期计划

适用场景

  1. 01查找占用磁盘空间的大文件夹
  2. 02批量清理可再生成的缓存
  3. 03删除前审核应用数据
  4. 04设置定期清理计划

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/fengyiqicoder/cleanmymac --skill cleanmymac

安装后在 Claude Code 中输入/cleanmymac确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

advisor-heuristics/
ai_models.sh
ide_workspaces.sh
ios_backups_old.sh
large_misc.sh
media_caches.sh
orphaned_app_support.sh
stale_node_modules.sh
stale_python_envs.sh
vm_disks.sh
modules/
_template.sh
adobe.sh
android_studio.sh
apfs_snapshots.sh
arc.sh
brave.sh
brew.sh
bun.sh
cargo.sh
chrome.sh
chromium.sh
claude_app.sh
cocoapods.sh
composer.sh
conan.sh
cursor_caches.sh
cursor_full.sh
dart_server_cache.sh
diagnostic_reports.sh
discord.sh
dns_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
  • ❌ 绝不触碰外部/网络卷——仅限 /
  • ❌ 不要将中高风险模块称为“可安全删除”——它们被列入审核层是有原因的

需要提醒的风险信号

  1. 🚨 未知项总量 >50 GB——有大量未分类数据;删除前应深入检查
  2. 🚨 单个未知文件夹 >10 GB——几乎总是值得调查(虚拟机、AI 模型、废弃项目依赖项)
  3. 🚨 单个审核项目 >5 GB——暂停并再次确认用户确实想删除它
  4. 🚨 清理后可用空间 <5 GB——建议用 diskmap 深入检查 ❓ unknown
  5. 🚨 Docker / Xcode 正在运行——docker prune 会跳过运行中的容器;DerivedData 可能被锁定。建议先退出
  6. ⚠️ diskmap 的 TCC 权限被拒绝——显示“真实大小 ≥ X GB”这一行,并告知用户如需获取真实总量,可在系统设置中授予“完全磁盘访问权限”
  7. ⚠️ 审核层包含 >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 分支。

参考资料

评论

支持 Markdown