CleanApp 是一款面向 macOS 的安全、透明、规则驱动卸载工具。它扫描桌面应用与常见开发工具,在删除前捕获应用、包和可执行文件身份,展示将要停止的进程、调用的包管理器和清理的路径,并且只有在用户明确确认后才会执行。
已安装 uv 时,无需克隆仓库、创建虚拟环境或手动安装依赖:
uvx --from git+https://github.com/clawdbot502/clean-cli cleanapp doctor将最后的 doctor 换成 list、rules 或其他子命令即可直接使用。例如,安全预演 Cursor 清理:
uvx --from git+https://github.com/clawdbot502/clean-cli cleanapp remove cursor --dry-runuvx 会在隔离环境中运行 CleanApp,不会把它安装到全局 Python。没有安装 uv 时,请使用下方的手动安装流程。
可以,但运行环境必须满足以下条件:
| 条件 | 要求 |
|---|---|
| 操作系统 | macOS;Windows 和 Linux 不执行扫描或删除 |
| Python | 3.11 或更高版本 |
| 网络 | 首次安装 Python 依赖时需要 |
| 深度清理 | 内置规则支持 ChatGPT、Claude、Cursor、Discord、Docker、iTerm2、Notion、Postman、Slack、Visual Studio Code、Zoom |
| 包管理器 | Homebrew、npm、pnpm、pipx、uv、Cargo、Go 按本机实际安装情况自动检测 |
| 权限 | 普通用户可清理其有权访问的文件;部分系统级 Helper/Daemon 可能受 macOS 权限、ACL 或隐私控制限制 |
仓库包含运行源码、依赖声明、命令入口和全部内置 YAML 规则,不依赖作者电脑中的私有文件、密码或 API Key。Applications、Homebrew formula/cask、npm、pnpm、pipx、uv tool、Cargo、Go 和 YAML 规则来源都进入同一套卸载与残留验证流程。最终的“已清理”结论只覆盖受支持且成功扫描的位置;无法访问的位置、人工复核项、原计划残留路径、进程和失败会分别报告。
git clone https://github.com/clawdbot502/clean-cli.git
cd clean-cli
python3 --version # 必须是 3.11+
python3 -m venv .venv
.venv/bin/python -m pip install --upgrade pip
.venv/bin/python -m pip install -e .
.venv/bin/cleanapp doctor不要跳过 Python 版本检查和 pip 升级。若旧版 pip 报错 setup.py or setup.cfg not found,说明它尚不支持本项目基于 pyproject.toml 和 Hatchling 的 editable install;确认 Python 为 3.11+ 后,重新执行 pip 升级和安装命令。
开发者可安装测试依赖:
.venv/bin/python -m pip install -e '.[dev]'
.venv/bin/python -m pytest.venv/bin/cleanapp --version
.venv/bin/cleanapp rules
.venv/bin/cleanapp list
.venv/bin/cleanapp remove cursor --dry-run
.venv/bin/cleanapp remove cursor也可以直接运行 .venv/bin/cleanapp,通过数字编号选择软件。真实删除前会展示主要卸载计划并询问 Confirm deletion? (Y/N);只有输入 Y 或 y 才会执行。主要卸载尝试完成后,残留扫描 #2 会分别列出“可确认删除”“仅供复核”和“无法验证”项;仅当第二次 y/N 输入为 y 或 Y 时才删除“可确认删除”项。无论第二次是否确认、是否发现候选项或局部删除是否失败,都会执行新的扫描 #3 并报告结果。建议任何软件第一次清理时都先使用 --dry-run。
cleanapp:扫描、编号选择、预览并确认清理。cleanapp scan/cleanapp list:显示检测结果。cleanapp remove NAME:按名称、别名或包标识符清理单个软件。cleanapp doctor:检查 macOS、Python、日志目录、规则和可选包管理器。cleanapp rules:列出内置深度清理规则。cleanapp --version:显示版本。
--dry-run不停止进程、不调用包管理器、不删除文件;它只执行一次当前状态扫描并展示目前可检测到的额外候选项。由于没有做任何修改,dry-run 不会执行移除后的验证扫描。- 系统关键目录、过宽目录、危险通配符和指向系统目录的符号链接会被拒绝。
- 预览会标记当前进程可能无权删除的路径。
- 单项失败不会中断后续清理;权限错误与残留会出现在最终报告和日志中。
- 不建议为了绕过提示而直接以 root 身份运行未经审查的清理。应先检查 dry-run 和具体残留,再为终端授予必要且最小的 macOS 权限。
真实卸载采用三阶段流程:先执行已预览的应用或包管理器卸载,再在受支持的用户、XDG 和 /Library 位置中扫描与目标身份精确关联的残留;如发现可确认归属的残留,会列出清单并再次询问 y/N,最后重新扫描并报告结果。
CleanApp 只枚举受支持目录的直接子项,不递归搜索整个用户目录,也不会进入 Chrome、Safari、Firefox、Edge、VS Code 等其他应用的数据目录。弱匹配仅列为人工复核项,不会因一次 Y 被删除;工具不会自动调用 sudo。
日志默认保存在 ~/Library/Logs/CleanApp/cleanapp.log。完整设计、规则格式、构建方式和已知限制参见 README.zh-CN.md。
仓库 CI 在 macOS 上使用 Python 3.11、3.12、3.13 和 3.14 执行依赖检查、源码编译、测试、wheel 构建,以及从干净 wheel 安装后的 CLI 启动验证。