Mole 如何从 Shell 脚本长成 Mac App
很多年来,我一直留着一份私人的 shell 脚本,唯一工作就是清理 Mac 上的杂物。
我喜欢电脑保持轻快,所以不断打磨它,从 500 行写到 2000 多行,像有些人照料花园一样。2025 年 10 月,磁盘又一次满了。我试了几款知名清理软件,效果都不明显。最后运行自己的脚本,一次清掉几十 GB。
这件事好像值得分享出去。
当时我正在三亚度假,坐在酒店泳池边,决定把脚本做成一款真正的开源命令行工具。它需要一个名字。
鼹鼠是一种会打洞的小动物,前肢很有力,擅长深入地下寻找东西。这正是脚本在做的事:钻进 macOS 容易堆积杂物的角落。所以它叫 Mole。
第一个版本的横幅写着「can dig deep to clean your Mac」,直到今天也没有变。
社区把它变成了什么
最开始只期待它成为一款拥有几百位用户的小工具。六个月后,GitHub 仓库超过 5 万颗星。
比星星更重要的是,用户提交了大约 500 个 issue,告诉我许多从未听说过的清理路径;社区贡献了约 300 个功能 PR;世界各地大约 100 位开发者成为贡献者。
每台开发电脑都会在不同地方留下可丢弃的构建输出,社区绘制出的地图远比我独自完成的更广。
覆盖面扩大也带来更难的一课:每增加一个清理目标,就多出一个破坏性错误可能发生的位置。只有路径清单远远不够。工具需要统一路径保护、受保护位置、活动进程检查、超时、操作前检查,以及锁定所有必须拒绝情况的测试。
社区规模不只是扩大覆盖,也迫使安全模型从一份私人脚本,成长为能够普遍处理风险的系统。
真正让我意识到规模的,是一张账单。
README 中放了两张截图,通过 Vercel 的 CDN 提供。有一周,它们消耗了 60 TB 流量,我因为两张图片欠 Vercel 80 美元。
为什么又做一款 Mac 应用
很早开始,用户就不断写来同一个请求:我的父母想用,我的妹妹想用,但他们永远不会打开终端。
我把这个想法搁置了几个月,因为命令行版还没有成熟到足以支撑桌面版本。到 2026 年春天,它终于可以了。于是我用几个周末完成 Mac 应用,并在 2026 年 5 月 11 日晚发布 Mole for Mac。
最初价格是 9 美元,覆盖两台 Mac,终身更新,作为对一路测试 Mole 用户的早鸟感谢。
应用不能只是一个调用脚本的按钮。图形工具必须分离发现与删除,能够承受取消,解释权限,在扫描结束前保持窗口稳定,并向从未读过 shell 命令的人展示一份可以恢复的计划。
命令行版告诉应用应该寻找什么,应用则迫使整个工作变得可见、可中断。
那五颗行星
应用本可以只是一款带有清理按钮的菜单栏工具,销量大概也不会差。但世界上已经有太多 AI 生成的杂物软件。如果真的要投入 token,我希望它最后成为一个让人舒服地坐在前面的东西,而不是另一件污染时间线的东西。
小时候我很喜欢看行星。十年前刚学前端时,最想学好的第一样东西就是 WebGL,因为想把它们画出来。做这款应用,终于让两件事碰到一起。
五项功能各自得到一颗与工作性格相符的行星:
- 「清理」是地球,山间雨水洗去旧尘。
- 「软件」是火星,红色沙土掩埋旧痕。
- 「优化」是水星,离太阳最近,飞行最快。
- 「分析」是木星,拥有最辽阔的眼睛。
- 「状态」是太阳,从不休眠的光。
纹理来自天文影像,地球以 NASA 的蓝色弹珠为基础。每颗行星都换了十多次,才找到正确的样子。
旋转方向和相对速度参照真实天体,操作完成时的小小飞行效果也是如此。
严格来说,这些东西与鼹鼠没有太大关系。它更像一只小小的地下动物,从洞口抬头望向很大的天空,然后保持安静。
发布那一晚
大约晚上十点,我发布了应用。朋友们转发之后,手机开始每隔十秒左右震动一次,提醒有新的购买。
订单来自法国、德国,还有我从未在收款中见过的货币。iPhone 只是不断显示通知,就变得发热并快速掉电。我关掉邮件提醒去睡觉,第二天早上购买仍在继续。
事实证明,不少人仅仅因为命令行版曾经善待他们,就愿意购买 Mac 应用。
Mac 应用仍有很多空缺。很感谢这么多人愿意为一个漂亮的小玩具付费,也愿意耐心等我慢慢补齐。
我喜欢让事情按自己的节奏成熟,不急着追求结果。Mole 花了很多年,从私人脚本变成开源命令行工具,再变成付费应用。整段过程里,我最珍惜的是长期迭代,以及和世界各地开发者建立的友谊。
这些比销售数字更值得我记住。