# AI Mac 清理工具：模型该决定什么，不该决定什么

> 排序和归属可以是概率性的，删除这个决定不行。cc-cleaner、DevCleaner、agent skill 和 Mole 各自把这条线划在哪，以及哪一个对得上你磁盘的实际情况。

Published: 2026-08-20 | Updated: 2026-08-22

「AI Mac 清理工具」这个说法指向两种产品，一种是里面塞了个模型的清理应用，卖点是建议给得有多聪明；另一种是来收空间的，过去一年 Claude Code、Cursor、Ollama 和它们的缓存悄悄占走了不少磁盘，它管的就是这一摊。2026 年搜这个词的人多数想要第二种，但第一种得先回答，因为它决定了第二类工具该信到什么程度。

## 第一部分：模型到底在做哪一步决定

清理这条链路至少有四步，一款打着 AI 旗号的清理器，说的是它在其中某一步上用了模型：

1. **枚举。** 走一遍磁盘量出大小，`du` 干的就是这个活，不掺判断。
2. **归属。** 判断每条路径属于哪个应用或哪套工具链。
3. **排序和解释。** 从四千个候选里挑出值得看的十二个，再用一句话说清每个是什么。
4. **决定并删除。** 判断哪些能安全删掉，然后删。

第 2 步和第 3 步是真的模糊，模型在这两处帮得上忙。第 4 步换了一类问题，模型不是干这个的。关于 AI 清理器的争论，几乎每一场吵的都是厂商说的到底是哪一步。

### 模型真正管用的地方

难就难在归属这一步。假设你发现 `~/Library/Application Support/Foo Labs` 占了 3 GB，磁盘上却没有一个叫 Foo Labs 的应用。能拿到的证据又弱又散：目录自带的 plist 里有一小段 bundle 标识符，`~/Library/HTTPStorages` 里有一项前缀对得上，`~/Library/Saved Application State` 下躺着一个 `.savedState` 包，`/var/db/receipts` 里还有一份安装记录。按名字对着找立刻就不灵，因为厂商这边写 `Foo Labs`，那边写 `com.foolabs.editor`；手写一份目录表，排在前面的几百款还能覆盖住，再往后就断崖式失效。这正是模型比规则强的地方，信号一大堆，单拿哪个都定不了案，长尾又长到没人有耐心编完。

排序也一样，一次扫描给出四千条路径、六十 GB，这不是结果，是又扔给你一个问题。解释更简单，把 `~/Library/Caches/com.apple.nsurlsessiond` 翻成一句人话，本来就是翻译活。把模型用在这三件事上，并且明说用在哪，这样的工具宣传的是真功能。

### 为什么最后一道闸必须是确定性的

删不删这个决定要靠三样东西，模型一样都给不了。

**确定性。** 同一块盘、同一个版本，每次都要给同一个答案。把温度调成零也换不来这一条，提示词里带着这台机器的内容，多装一个应用，文件列表就变了，决定挂在哪几个 token 上也跟着变。一条规则在这台机器上成立、在同事那台上不成立，它就不叫安全规则。

**事前可审。** 保护清单就是一组路径前缀，一分钟能读完，两个版本之间还能做一次 diff。权重加提示词读不出一份「哪些会被拒」的名单，边界在哪，只有撞上去了才知道。

**事后可审。** 确定性规则删错了东西，留下的是一个能复现的 bug，路径在这里，放行它的那一行在这里，挂掉的那个测试也在这里。模型删错了，留下的只有一段对话记录，修法是改提示词，改完它对其他情况有什么影响，没人量过。

出错的代价也不对称。排序排差了，顶多多划几屏；把 `~/.claude/projects` 删错了，丢的是全部对话记录。所以问题不在 AI 好不好，而在于沿着这条链路中间划一刀，错了顶多多看两眼的那半边交给概率，错了会丢数据的那半边交给确定性。

<figure class="blog-diagram">
  <img src="https://mole.fit/img/blog/cleaner-decision-halves.webp" width="1360" height="454" loading="lazy" alt="一条清理流水线被切成两半：枚举、归属、排序和解释在概率的那一侧，答错了顶多多看两眼；保护清单和删除决定在确定性的那一侧，答错了会丢数据。">
  <figcaption>这条线分的不是聪明工具和笨工具，是「错了只浪费几屏」和「错了会丢文件」这两半。</figcaption>
</figure>

### Mole 站在哪一边

[Mole](https://mole.fit/zh/) 不带模型，也不做推理。一条路径能不能成为删除候选，看一份固定的阻止前缀清单，这份清单编译进了应用里，写着 `.ollama/models`、`.lmstudio/models`、`.cache/huggingface`、`.cache/torch`、`.claude/projects`、`.codex/sessions`、`.grok/sessions` 和 `Library/Caches/com.apple.e5rt.e5bundlecache` 这些条目。另一半交给用户自己编辑，就是个纯文本文件，`cat ~/.config/mole/whitelist` 直接能读。免费的 [Mole CLI](https://github.com/tw93/Mole) 以 GPL-3.0 开源，用的是同一份清单，执行它的代码都在明处。

最后那个条目就是这场争论的缩影。`com.apple.e5rt.e5bundlecache` 躺在 `~/Library/Caches` 里，名字里写着 cache，任何一条启发式规则都会判它可删。里面装的是 Apple 神经网络引擎编译好的模型，应用已经把模型加载进去了，这时候清掉它，识别类调用会一直坏到重启机器。它被保护，是因为真有人踩过这个坑，然后补上了那一行。

所以挑这类工具，能用的检验就一个问题，模型干的是四步里的哪一步。答枚举、归属、排序、解释，都可信。答「它来判断什么能安全删除」，就再追一句「清单拿来看看」，没有清单，就没有可审的东西。

## 第二部分：给 AI 工具收拾残局的工具

这才是多数人真正想搜的。这些工具留下的占用有四类，每一类的处理规则都不一样，出事往往就出在把它们混成一堆：

- **工具缓存和日志。** `~/Library/Caches/claude-cli-nodejs`、Cursor 的 Electron 缓存、`~/.claude` 下的遥测与调试目录。可再生，也很无聊。
- **对话记录和项目状态。** `~/.claude/projects`、`~/.codex/sessions`、`~/.grok/sessions`。经常是一次扫描里最让人意外的大头，而且不可替代。
- **旧版命令行工具。** 会自更新的 agent 命令行会把之前的发布版留在原地，Codex 上量下来大约每个版本 300 MB，五个版本叠着就到 1.2 GB，其中只有一个在用。
- **模型权重。** `~/.ollama/models`、`~/.cache/huggingface/hub`、LM Studio 的模型目录。体积远超其他几类，该由下载它们的那个工具来管。

挑工具之前先量一遍：

```
du -sh ~/.claude ~/.codex ~/.ollama/models ~/.cache/huggingface 2>/dev/null | sort -h
```

### Mole，认得这些路径，动手前先让你审一遍

「清理」先扫描，扫完给出一份清单，你确认了它才动手。每一行候选都写清路径、归属和大小，扫描器拿不准的一律不勾选，默认选中的永远是更小的那一份。删除是丢进废纸篓，不是直接 unlink，每次操作都追加进 `~/Library/Logs/mole/operations.log`，那里 `TRASHED` 和 `DELETED` 是两个词。

<figure class="blog-diagram">
  <img src="https://mole.fit/img/en/clean.webp" width="2584" height="1741" loading="lazy" alt="「清理」完成一轮经过审核的清扫，报出释放的空间，并按路径和大小列出产生这些空间的候选项。">
  <figcaption>扫描结束审核界面才出现，不会让你在一份还没建完的清单里挑东西。</figcaption>
</figure>

对 AI 工具链来说，有两个行为格外重要。旧版 agent 命令行的目录会被列出来，正在用的那个版本永远不会进候选，启动器指向哪个目标，先解析出来钉死，跑着的那个版本是被结构挡在外面的，不靠猜版本号。另一个是卸载按归属推断走，不按名字匹配，卸掉某家厂商的一款应用时，同厂另一款还在用的共享 `Application Support` 父目录不会被一起端上来。

做法是：打开「清理」，等扫描结束，展开体积大的那几组，把想留的取消勾选，再执行清理，核对释放出来的空间。扫描免费，每个付费工具还能免费用两次，掏 $19 之前，整套审核流程能先自己走一遍。

### Mole CLI，适合更想待在终端里的人

这是另一款独立的免费产品，GPL-3.0 开源，`brew install mole` 装上。永远先预览：

```
mo clean --dry-run
mo purge --dry-run
```

`mo clean` 管缓存和日志，`mo purge` 针对项目里的旧构建产物，每条破坏性命令都支持 `--dry-run`，能先把完整的路径清单读一遍。它和 Mac 应用共享同一份保护清单、同一份操作日志。去掉那个参数之前记住一个差别，命令行的缓存清理是永久删除，卸载和残留清除仍然走废纸篓。

### cc-cleaner，为这个问题而生的开源终端方案

[cc-cleaner](https://github.com/elexingyu/cc-cleaner) 用 MIT 许可，需要 Python 3.10 以上，`pipx install cc-cleaner` 装。它带 22 个清理器，覆盖 Claude Code、npm、uv、cargo、Docker、Playwright、浏览器缓存，另有一个 AI/ML 模型分组，管的是 Hugging Face、PyTorch、Whisper 和 Ollama。`cc-cleaner status` 打印一张大小表，`cc-cleaner clean` 打开可交互的选择界面，`-n` 是预演。

风险分级写在明处，Safe 项默认清理，Moderate 和 Dangerous 项要加 `--force`，README 把「对话记录、共享仓库」归在 Moderate 这一档。剩下的看源码就知道。Ollama 清理器把整个 `~/.ollama/models` 当一个目录删掉，Hugging Face 清理器对 `~/.cache/huggingface/hub` 和 `datasets` 也一样，Claude 清理器会把 `~/.claude/projects` 下的 `*.jsonl` 对话记录列出来。删除走 `shutil.rmtree` 和 `Path.unlink`，什么都不进废纸篓。安全层是一组写死的系统禁止路径，外加一条要求，每个目标都得在主目录底下，一份人写的确定性清单，本该就是这样。差别在于线划在哪儿，不在于严不严谨，cc-cleaner 把模型仓库和对话记录放在一个参数后面，Mole 是直接拒绝。

### DevCleaner，想用菜单栏应用管同一片地

[DevCleaner](https://devcleaner.app) 是一款 macOS 14 及以上的菜单栏工具，当前版本 1.9.0，覆盖 23 类生态，从 Xcode DerivedData、Gradle 到 npm 和 Docker，Claude、ChatGPT、Cursor、Ollama 和 LM Studio 另有专门的扫描器。Safe 项默认删除，Warning 项「你自己定」，Danger 项永不预选，凭据和会话文件另有一份硬性拒绝清单，应用还在跑的时候要动它的缓存，会先警告一句。核心清理免费，Pro 卖买断或年订阅，具体数字以厂商页面为准。官网没写删除进不进废纸篓，而这恰好是第一次运行前最该问清的一件事。

MacPaw 也放出了一版 CleanMyMac 命令行工具的公开测试版，用 Homebrew cask 装，瞄的是同一批产物。它闭源，仓库只是个问题追踪器，不是源码，行为也明说还在变，所以该读的是它在确认步骤里摆出来的东西，不是任何已发布的说明。

### 让 agent 自己上手清磁盘

最后一条路线是干脆跳过清理工具，让 Claude Code 这类 agent 直接去清磁盘，也可以走某个已发布的清理 skill。这条路的优势是真的，别的工具还给不了，一套布局没人给它编过目录表，agent 照样能推理出来，可能是上个月才发布的框架，一套私有工具链，或者一个只有你会这么摆的主目录。

短处也得说得一样直白。shell 命令是推理时现对着真实文件系统生成的，跑起来之前没有一个人审过。不主动要求，就没有预演。影响面是整个主目录，一个变量恰好为空，拼出来就是一条 `rm -rf`，这种翻车方式历史很久了。第一部分说的在这里全都适用，只是安全网被撤了，决定是概率的，还直接接在最后一道闸上。

四道护栏，几乎不花什么成本：

- **让它去驱动一个带预览参数的工具，而不是自己拼删除命令。** 有个公开的 Claude Code skill 包住了 `mo` 命令行，`mo clean` 之前必须先跑一次 `mo clean --dry-run`，把完整的预演输出打出来，再要你手打确认。agent 负责挑目标，确定性的工具负责删。
- **永远不要在权限设置里预先放行 `rm`。** 每条删除命令单独批准，要读的是路径本身，不是它给的那句概述。
- **把废纸篓设成默认落点。** Homebrew 的 `trash`，或者 `mv` 到 `~/.Trash`，能让每一次失误都还有的救。
- **限定作业范围。** 一次只指一个目录，要求它事前跑 `du -sh`、事后跑 `df -h`，让它说的释放量是量出来的，不是估出来的。

### 模型仓库属于下载它们的那个工具

这件事不该交给任何通用清理器，上面这几款也一样。Ollama 和 Hugging Face 都维护内容寻址的仓库，模型之间共享数据块，哪个块还有人引用，只有管着仓库的那个工具清楚。用 `ollama ls` 和 `ollama rm <model>`，以及 `hf cache ls` 配合 `hf cache rm model/<repo> --dry-run`。手动删数据块文件为什么会让一个模型断了引用，见[清理 AI 工具残留](https://mole.fit/zh/blog/how-to-remove-ai-tool-leftovers-mac)。

## 横向对比

| 工具 | 是否确定性决策 | 是否预览路径 | 是否可恢复 | 是否保护模型仓库与聊天记录 | 价格 |
|---|---|---|---|---|---|
| Mole for Mac | 固定阻止前缀清单加用户白名单 | 是，每行带路径、归属和大小 | 是，默认进废纸篓，另有操作日志 | 是，永不成为候选 | $19 买断，两台 Mac，终身更新 |
| Mole CLI | 同一份共享保护清单 | 是，每条破坏性命令都有 `--dry-run` | 卸载进废纸篓，缓存清理为永久删除 | 是，同一份清单 | 免费，GPL-3.0 |
| cc-cleaner | 冻结的禁止路径集，且限定在主目录内 | 是，`-n` 预演加可交互选择界面 | 否，用 `shutil.rmtree` 和 `unlink` | 加 `--force` 就能碰到，不是拒绝 | 免费，MIT |
| DevCleaner | 三档风险分级加一份凭据拒绝清单 | 每个扫描器给出大小，Danger 项永不预选 | 未写明，运行前先问清楚 | 模型权重被单列为一类 | 核心免费，Pro 买断或年付 |
| CleanMyMac CLI | 未公布，仓库只是问题追踪器 | 是，删除前有确认 | 未写明 | 未写明 | 公开测试版，条款以厂商为准 |
| 有 shell 权限的 agent | 没有，在推理时才定 | 你要求了才有 | 你强制走废纸篓才有 | 你在提示词里说了才有 | 你的 agent 订阅费 |
| `ollama rm`、`hf cache rm` | 仓库内部的引用计数 | `hf cache rm --dry-run` | 否，但可以重新下载 | 这本身就是那份保护 | 免费 |

## 把边界说白

Mole 不做恶意软件处置，不做备份，也替代不了软件自带的卸载器，尤其是那些装了驱动、VPN 组件或系统扩展的。它不删模型权重，也不删 AI 聊天记录，所以那 200 GB 如果整个就是一座模型库，它会在「分析」里把这座库摊开给你看，活交给 Ollama 或 LM Studio 去干。这条边界是有意划的，不是以后要补的缺口。

## 怎么选

**200 GB 的构建产物加十几套工具链。** 体积压在缓存、旧的 `node_modules`、DerivedData 和 Docker 上，跟 AI 没什么关系。先做一轮可审的清扫，或者 `mo clean --dry-run`，剩下那些得用专用命令清的仓库，按[清理开发缓存](https://mole.fit/zh/blog/how-to-clear-dev-caches-mac)来。cc-cleaner 适合当第二遍，前提是先读懂它的风险分级。

**一座很大的本地模型库。** 权重这部分完全不要交给通用清理器，只有 `ollama ls`、`hf cache ls` 和 LM Studio 的 My Models 视图能安全地把共享数据块释放掉。先用磁盘地图找到仓库在哪，再用管它的那个工具去动它。

**刚发现 Cursor 或 Claude Code 在吃盘。** 这是最好办的一种，缓存和日志会重新生成，旧版命令行纯属浪费，只有对话记录不该碰。上面任何一款可审的工具都能应付，逐步操作的版本在[给 AI 编程工具收拾残局](https://mole.fit/zh/blog/how-to-clean-up-ai-coding-tools-mac)。

## 常见问题

### 带 AI 的 Mac 清理工具删得比普通的更安全吗

按现在的证据不是。有两件事模型确实赢过规则，一个找不到主人的目录到底属于哪款应用，四千条候选里哪些值得看，这都是弱信号一大堆的模糊问题。但判断一条路径能不能安全删掉，要的是确定性和一份能审的清单，这两样模型给不了。可以直接问厂商，模型跑的是这条链路里的哪一步，听到「它来判断什么能安全删除」，就当它说的是「请把清单拿出来」。

### 让 Claude Code 来清理 Mac 安全吗

它是最灵活的选项，也是边界最松的一个。命令是推理时生成的，直接跑在主目录上，不主动要求就没有预览。真要这么用，就让 agent 去驱动一个带预演参数的工具，别让它自己拼 `rm -rf`，权限设置里永远不要预先放行 `rm`，删除一律进废纸篓，一次只让它管一个目录。

### Mac 清理工具会删掉我的 Ollama 模型或者 Claude Code 记录吗

完全看是哪款工具，所以这该是最先问的问题。Mole 在删除这道闸上拦下 `~/.ollama/models`、`~/.lmstudio/models`、`~/.cache/huggingface`、`~/.claude/projects`、`~/.codex/sessions` 和 `~/.grok/sessions`，不管放了多久都拦，它们永远不会成为候选。cc-cleaner 把模型目录和 Claude Code 对话记录归在 Moderate 风险，传了 `--force` 就会删掉。风险分级要在第一次运行之前读，不是之后。

### 用了一年 AI 编程工具，空间到底被什么占走了

通常是旧版命令行和对话记录，不是大家以为的缓存。agent 命令行会自更新，每个版本可能留下几百 MB，Codex 上五个版本叠着大约 1.2 GB，其中只有一个在用。`~/.claude/projects` 下的对话记录一直在悄悄堆，是一次扫描里最容易让人意外的一项，也正因为这样，它该被排除在清扫之外，而不是收进来。

## 延伸阅读

- [清理 Mac 上的 Ollama 与 LM Studio 模型](https://mole.fit/zh/blog/how-to-remove-ai-tool-leftovers-mac)，讲内容寻址模型仓库的机制。
- [清理开发缓存又不弄坏构建](https://mole.fit/zh/blog/how-to-clear-dev-caches-mac)，讲包管理器仓库和散落各处的 `node_modules`。
- [给 AI 编程工具收拾残局](https://mole.fit/zh/blog/how-to-clean-up-ai-coding-tools-mac)，一步一步、一条路径一条路径的版本。

---

Canonical HTML page: https://mole.fit/zh/blog/ai-mac-cleaner-tools
Blog index for agents: https://mole.fit/zh/blog/llms.txt
Site index for agents: https://mole.fit/llms.txt
