# 用 Claude Code 或 Codex 安全地给 Mac 清理空间

> 让 Claude Code、Codex 或 Cursor 帮你找出 Mac 被什么占满，又不让它直接跑 rm，装好 Mole skill，先用 --dry-run 预览，你同意后再删，最后查日志核对。

Published: 2026-10-21

现在越来越多人打开 Claude Code 或 Codex，直接输入一句「磁盘快满了，帮我看看是什么占的」。这件事交给 Agent 其实很合适，它能一口气读完上百个目录，认出 `~/Library/Developer/Xcode/DerivedData` 是编译产物、`~/Library/Containers/com.tencent.xinWeChat` 是微信聊天记录，再用大白话讲给你听。真正有风险的是下一步，同一个 Agent 根据自己读到的 `du` 结果拼出一条 `rm -rf`，直接在你的用户目录里执行，这条命令没有预览，不进废纸篓，删了什么也没有任何记录。

这篇讲一种更稳的分工，Agent 负责读和解释，带预览的清理工具负责删，中间由你点头。这里用的工具是 Mole 的免费命令行版 Mole CLI，以及它的官方 Agent skill，这个 skill 会教 Claude Code、Codex、Cursor 等 Agent 怎么正确地用 Mole。换成别的工具，只要它有 dry run，下面这套习惯一样适用。

## 为什么不该让 Agent 用 rm 删文件

清理里模糊的那部分正是 Agent 擅长的，比如遍历一棵很大的目录树，判断某个路径属于哪个 App，从四千个候选里挑出最值得看的十二个。但「这个路径能不能删」是另一类问题，它要求每次都给出同样的答案，还要有一份你能逐条核对的清单，这两样模型都给不了，更完整的讨论在[AI Mac 清理工具：模型该决定什么，不该决定什么](https://mole.fit/zh/blog/ai-mac-cleaner-tools)。

落到实际操作上，让 Agent 直接用 shell 命令清理，会少掉四样东西：

1. **预览。** `rm` 一执行就生效，你看到的是一行命令，看不到它展开后的三千个路径。
2. **退路。** 用 `rm` 删掉的文件不经过废纸篓，没有备份的话就找不回来了。
3. **记录。** 下周某个 App 的设置突然没了，你没办法知道是不是那次清理动过它。
4. **不能碰的清单。** 一个名字像缓存的目录，里面可能是登录会话、签名密钥，或者另一个 App 还在写的数据库，Agent 未必知道。

专门做清理的工具本来就带着这四样，Agent 要做的就变成读懂它的输出，然后问你。

## 安装

先用 Homebrew 装 Mole CLI，再装 skill：

```bash
brew install mole
npx skills add tw93/Mole -a claude-code codex cursor -g -y
```

第二条命令会一次给 Claude Code、Codex 和 Cursor 都装上 skill，用不到的 Agent 从命令里删掉就行。如果习惯用 Agent 自己的插件系统，Claude Code 里依次运行 `/plugin marketplace add tw93/Mole` 和 `/plugin install mole@mole`，Codex 里依次运行 `codex plugin marketplace add tw93/Mole` 和 `codex plugin add mole@mole`。以后更新 skill 用 `npx skills update -g -y`。

装完不需要任何配置，下次你问起磁盘空间、想卸载某个 App，或者 Mac 为什么变慢，Agent 会自己加载这个 skill 并照着做。

## skill 给 Agent 定的四条规矩

skill 是一份不长的 Markdown 文件，大部分篇幅是规矩而不是命令，和你的文件安全相关的是这四条：

1. **先读，再动。** Agent 先用只读命令回答问题，磁盘占用看 `mo analyze --json`，内存和 CPU 看 `mo status --json`，以前清理过什么看 `mo history --json`，装了哪些 App 看 `mo uninstall --list`，再加上所有带 `--dry-run` 的预览，这些都不用问你就可以跑。
2. **每次删除前先预览。** 清理之前，Agent 先带上 `--dry-run` 跑一遍，然后把结果讲给你听，一共多大，最大的几组是什么，每一组是直接删除、进废纸篓，还是之后要重新下载才能恢复。
3. **敲下删除命令之前先问你。** 由 Agent 调用时，`mo clean` 一启动就开始删，中间不会再确认，所以同意这一步必须先在对话里完成。「为什么磁盘满了」只是一个问题，不算同意，看完预览之后说「就清这些」才算。
4. **有些步骤留给你自己。** 卸载 App、在列表里勾选、任何需要管理员密码的操作，都留在你自己的终端里做，Agent 只给你准确的命令然后停下，它不会运行 `sudo`，也不会向你要密码。

还有两条小规矩堵住了常见的绕路，Agent 只能用 skill 里列出的命令和参数，没法自己编一个 `--force` 出来，Mole 跳过或保护的路径，Agent 也不能改用 `rm` 硬删，跳过本身就是 Mole 的答案。

## 一次完整的对话是什么样

假设你输入：「Mac 提示磁盘快满了，是什么占的？」

Agent 先跑 `mo --version`，确认面对的是 macOS 版，然后跑 `mo analyze --json`。返回的是你用户目录里占空间大的位置，大小以字节为单位，每项带一个 `scan_status`，取值是 `complete`、`partial` 或 `unavailable`，Mole 认得出是缓存的目录还会标上 `cleanable: true`。最大的两三项，Agent 可能再对它们各跑一次 `mo analyze --json` 看看里面是什么。

接着它会把找到的东西分给能处理的人：

| 找到的东西 | 交给谁 |
| --- | --- |
| App 缓存、日志、已删除 App 的残留 | `mo clean` |
| 项目里的编译产物和依赖目录 | `mo purge` |
| 不再用的已安装 App | `mo uninstall`，由你来运行 |
| 下载文件夹里的安装包 | `mo installer`，由你来运行 |
| 文稿、照片、音乐、虚拟机、iPhone 备份 | 你自己决定，没有哪条 Mole 命令会删它们 |

最后一行和前面几行一样重要。好的回答会告诉你其中 40 GB 是一台 Parallels 虚拟机，然后把决定权留给你，而不是去找一条能把它删掉的命令。

如果你想清理出空间，Agent 会先跑 `mo clean --dry-run`，摘要显示在对话里，每一个候选路径都写进 `~/.config/mole/clean-list.txt`，所以在真正动手之前，你问一句「我的 Slack 聊天记录在不在里面」，它可以直接查给你看。它也会提醒你 `mo clean` 默认会清空废纸篓，很多人是故意把东西留在里面的。只有你说了可以，它才会运行 `mo clean`。

## 哪些事留给你，为什么

**需要管理员权限的部分。** 一部分系统缓存要管理员密码才能清，由 Agent 运行时，`mo clean` 只清用户级的部分，跳过系统级的部分，并在输出里写明。想两部分一起清，Agent 会请你在自己的终端里运行 `mo clean`，Mole 会自己弹出密码输入，一次跑完。它不会先清一半、再让你补另一半，因为第二次运行会重新扫描，把第一次做过的事再做一遍。

**卸载 App。** Agent 可以用 `mo uninstall --list` 找到这个 App，再用 `mo uninstall --dry-run <名字>` 给你看会一起删掉什么，包括 App 本身、它的缓存，以及一份「保留的个人数据」清单，里面的设置和数据默认不删。真正的卸载在没有终端时会直接拒绝，所以 `mo uninstall <名字>` 由你自己来跑，删掉的文件会进废纸篓。以前卸载的 App 还留着东西，可以看[卸载 Mac 应用后如何清理残留文件](https://mole.fit/zh/blog/how-to-remove-leftover-files-after-uninstalling-mac-apps)。

**项目目录。** `mo purge --dry-run` 会列出两类东西，一类是编译产物，离线重新构建就能恢复，另一类是 `node_modules` 这种依赖目录，要重新下载才能恢复。只想清其中几个项目时，Agent 会把 `mo purge` 交给你，它的选择列表可以让你逐个勾选。

## 事后怎么核对

真正跑完之后，Agent 会读命令自己的摘要和 `mo history --json --limit 1`，告诉你删了什么、跳过了什么。跳过的东西它不会再重试，Mole 跳过的通常是正在使用或者被刻意保护的文件。

这份记录还能回答一个通常一周后才冒出来的问题：「那次清理是不是删了我的文件？」直接这样问 Agent 就行，它会在 `mo history --json --limit 200` 里找这个路径以及它下面的所有东西，日期更早的话再去读完整的删除日志。没找到，说明 Mole 没有删除它的记录，这不等于证明它一定没被删，Agent 也应该这样措辞。

想让某个目录以后永远不被清理，让 Agent 把它加入保护就行，它会在你同意后把路径写进 `~/.config/mole/whitelist`，再跑一次 `mo clean --dry-run`，确认这个路径已经不在清单里了。

## 用的不是 Mole 怎么办

skill 是为 Mole 写的，但里面的规矩不是。如果你让 Agent 用别的工具清理，可以在对话一开始先贴上这样一段：

```prompt
删除任何东西之前，先把清单给我看，说清楚哪些进废纸篓、哪些是永久删除。
用工具自带的 dry-run 或预览模式，不要用 rm 或 find -delete，不要运行 sudo。
任何会删文件的命令，都等我说可以再执行，执行完告诉我删了什么、跳过了什么。
```

它没法凭空变出保护清单和操作日志，但至少把预览和决定权放回了该在的地方。不管用什么工具，哪些东西应该留着，可以看[Mac 清理工具永远不该删什么](https://mole.fit/zh/blog/what-mac-cleaners-should-never-delete)和[Mac 上哪些缓存可以安全删除](https://mole.fit/zh/blog/which-mac-caches-are-safe-to-delete)，这两篇按目录逐个讲过。

## 常见问题

### 哪些 AI Agent 能用 Mole 的 skill？

安装命令里写了 Claude Code、Codex 和 Cursor，`npx skills` 也能给其他读取 skill 文件的 Agent 安装。Claude Code 和 Codex 还可以从各自的插件市场安装。Agent 必须能在你的 Mac 上执行命令，所以只能聊天、没有终端的助手跑不了 Mole。

### Agent 会不会不问我就删文件？

skill 要求它只在预览之后、你在对话里同意之后，才运行会删除的命令。但这是给 Agent 的指令，不是一把锁，所以 Agent 自己对 shell 命令的确认提示请保持打开，也不要在它的权限设置里预先放行 `rm` 或 `mo clean`。卸载和需要管理员权限的步骤，Agent 根本跑不了，只能在你的终端里完成。

### 通过 Agent 清理，会比单独用 Mole 删得更多吗？

不会。Agent 跑的就是你自己也能敲的那些 CLI 命令，保护路径和预览都一样，它多做的是阅读和解释，告诉你哪个目录属于哪个 App，该用哪条命令处理，或者哪条都不该用。

### Mole CLI 收费吗？

不收费。Mole CLI 以 GPL-3.0 协议开源，skill 也在同一个仓库里。Mole for Mac 是另一个付费 App，适合更习惯点鼠标的人，Agent 最多只会在一次对话里提一次，而且只在某一步用窗口操作更方便时才提，比如勾选要卸载的 App。

### Windows 上能这样用吗？

能，配合 Mole CLI for Windows 使用，它有自己的一套命令，回收站和管理员权限的规则也不一样。skill 会读 `mo --version`，自动切换到 Windows 的说明。Windows 版的这篇在[用 Claude Code 或 Codex 安全地给 Windows 清理空间](https://mole.fit/windows/blog/use-claude-code-to-clean-up-windows)。

## 延伸阅读

- [AI Mac 清理工具：模型该决定什么，不该决定什么](https://mole.fit/zh/blog/ai-mac-cleaner-tools)，讲模型在清理里哪里帮得上忙、哪里帮不上。
- [怎么清理 Mac 上 AI 编程工具留下的东西](https://mole.fit/zh/blog/how-to-clean-up-ai-coding-tools-mac)，讲 Claude Code、Codex、Cursor 在 Mac 上留下的缓存和会话。
- [Mole CLI 和 Mac 版，该选哪个](https://mole.fit/zh/blog/mole-cli-vs-mac-app)，讲命令行版和 App 版的区别。

---

Canonical HTML page: https://mole.fit/zh/blog/use-claude-code-to-clean-up-mac
Blog index for agents: https://mole.fit/zh/blog/llms.txt
Site index for agents: https://mole.fit/llms.txt
