Skip to content

clawdbot502/clean-cli

Repository files navigation

CleanApp CLI

CleanApp 是一款面向 macOS 的安全、透明、规则驱动卸载工具。它扫描桌面应用与常见开发工具,在删除前捕获应用、包和可执行文件身份,展示将要停止的进程、调用的包管理器和清理的路径,并且只有在用户明确确认后才会执行。

一条命令运行(推荐)

已安装 uv 时,无需克隆仓库、创建虚拟环境或手动安装依赖:

uvx --from git+https://github.com/clawdbot502/clean-cli cleanapp doctor

将最后的 doctor 换成 listrules 或其他子命令即可直接使用。例如,安全预演 Cursor 清理:

uvx --from git+https://github.com/clawdbot502/clean-cli cleanapp remove cursor --dry-run

uvx 会在隔离环境中运行 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 规则来源都进入同一套卸载与残留验证流程。最终的“已清理”结论只覆盖受支持且成功扫描的位置;无法访问的位置、人工复核项、原计划残留路径、进程和失败会分别报告。

从 GitHub 安装

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);只有输入 Yy 才会执行。主要卸载尝试完成后,残留扫描 #2 会分别列出“可确认删除”“仅供复核”和“无法验证”项;仅当第二次 y/N 输入为 yY 时才删除“可确认删除”项。无论第二次是否确认、是否发现候选项或局部删除是否失败,都会执行新的扫描 #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 启动验证。

License

MIT

About

A safe, transparent, rule-driven macOS application uninstaller

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages