清出被缓存吃掉的空间
以前:知道 ~/Library/Caches 很大,但不敢整个删。
- 你点「开始扫描」
- Tidy按 App 缓存、日志、开发工具、AI 工具、浏览器、设计工具、通讯工具、安装包分组列出每一项与体积,正在运行的应用单独标出并说明关掉后还能再清多少
- 结果勾选后移入废纸篓,界面给出本次释放的容量;记录同时写进 operations.log
开源 · macOS · Rust + Tauri 2
Tidy 是 Mole 的开源 macOS 桌面端。清理、卸载、优化、磁盘分析都先把完整候选清单摆在你面前;你勾了什么,它就只删什么——工程上做不到多删一个文件。
macOS 11+Universal(Intel 与 Apple 芯片)中文 / English版本 0.1.0 · 17 MB
0.1.0 是第一个公开版本。安装包已用 Developer ID 签名并通过 Apple 公证,打开时不会出现「无法验证开发者」。应用会检查自身更新,也会发送匿名使用统计——两者都能在设置里关掉,采集了什么见隐私说明。历史版本
clippy.toml 通过 disallowed-methods 禁用了 mole-core::sink 以外所有 std::fs::remove_*。整个 workspace 里只有 sink 里存在一处 #[allow],新增删除行为必须走 DeletionPlan。
plan_* 命令扫描后把预览存进 PlanStore,execute_plan 只接受 (plan_id, 你勾选的子集)。确认之后不会重新扫描,界面没有办法执行未曾预览过的内容。
删除通过 NSFileManager 移入废纸篓。operations.log 与 deletions.log 的写入格式由 golden test 钉住,与 Mole CLI 逐字节一致,mo history 能同时读到两边的记录。
产品界面
卸载页列出这台机器上的每一个应用与它占的空间;展开任意一行,就能看到这个应用留下的全部文件。你勾选的那一份,就是最终会被移入废纸篓的全部——确认之后不会重新扫描。
典型流程
以前:知道 ~/Library/Caches 很大,但不敢整个删。
以前:拖进废纸篓,Application Support、容器、LaunchAgent 全留着。
以前:逐个打开应用点「检查更新」。
以前:从网上抄一串不知道会改什么的命令。
五个模块
按来源分组的可回收空间。
卸载、更新、登录项三个子页。
一次有边界的维护任务集合。
整盘或当前目录的空间树图。
这台 Mac 现在在忙什么。
语言、白名单、历史记录。
安全边界
这不是文案约定,而是代码结构:每个会删东西的功能都构造 DeletionPlan,最终只能经由唯一的 sink 执行。白名单检查、会话标记、日志、进度上报因此不可能在不同功能之间跑偏。
共享状态在 ~/.config/mole,操作与删除历史在 ~/Library/Logs/mole。仓库里没有任何分析、埋点或崩溃上报代码。窗口的 CSP 是 default-src 'self'。
更新扫描会访问 Apple 的 bundle ID 查询接口、应用自己的 Sparkle feed、GitHub release API,并读取本机 Homebrew 的输出。一次扫描 15 分钟后过期,更新按钮只携带后端签发的不透明 ID。
app_protection_data.sh 由 build.rs 解析成 Rust 常量,出现任何无法识别的行会直接让构建失败(fail-closed)。名单的 DATA_SHA256 显示在「关于」一栏,可以核对。
特权助手的 in-helper 二次校验与「祖先目录可变则拒绝」逻辑已经在仓库里,但 SMAppService/XPC 传输尚未发布,因此系统范围的操作会直接以 requires_admin 拒绝,不会退回到 shell 提权。
获取方式
多数人下载 DMG 就够了。想亲自确认它到底删什么的话,源码在 github.com/rambocode/tidy 的 desktop/ 目录,需要 Rust stable 与 Node ≥ 20。
git clone https://github.com/rambocode/tidy.git
cd tidy/desktop
# 后端测试
cargo test --workspace
cargo clippy --workspace -- -D warnings
# 运行桌面应用
cd ui && npm install && npx tauri dev
已知情况:mole-core 的 dangerous_paths_corpus_all_rejected 测试依赖父仓库的对抗性用例文件;在只包含 desktop/ 的检出里这一个测试会失败,属于预期。
常见问题
能。下载 0.1.0 的 DMG(17 MB,Universal,同时支持 Intel 与 Apple 芯片,需要 macOS 11 或更新版本)。安装包用 Developer ID 签名并通过 Apple 公证,首次打开不会被拦。应用也会自己检查更新。
用户范围的删除全部通过 NSFileManager 移入废纸篓,可以从废纸篓恢复。系统范围的操作目前不会执行,而是以 requires_admin 拒绝,所以不存在「悄悄删掉系统文件」的路径。每次操作都会写入 ~/Library/Logs/mole。
仓库里没有分析、埋点或崩溃上报代码,窗口 CSP 限定为 default-src 'self'。唯一的对外请求发生在你主动检查软件更新时:Apple 的 bundle ID 查询接口、应用自己的 Sparkle feed、GitHub release API。
Tidy 是 Mole 的桌面端,安全层是 CLI 那一套逻辑的 Rust 移植。对外产品名用 Tidy,内部 crate 名、兼容事件和共享日志仍然叫 Mole。operations.log 与 deletions.log 逐字节兼容,mo history 能同时读到两边的记录。
界面会写明原因:unchanged(目标不存在或已经是健康状态)、apps_running(先关掉对应应用)、probe_failed(无法证明这一步是安全的)、requires_admin(需要尚未发布的特权助手)、skipped(在白名单里或被其它安全条件挡下)。被禁用的控件会保留标签并说明原因,而不是只把它变灰。
目前不支持。适配层是 mole-macos,依赖 NSFileManager 废纸篓与 macOS 的特权助手模型,暂时没有其它平台的实现。
反馈
0.1.0 刚发布,还没有积累公开的用户评价,所以这里不会摆任何推荐语。反馈渠道是 GitHub Issues:贴上你看到的拒绝原因(probe_failed、requires_admin 等)和 ~/Library/Logs/mole 里对应的那几行,比描述现象更容易定位。