Mole 出 Mac 版后,用户教会了我做产品

11 小时 49 分钟前
 tw93

最近我写了不少关于独立开发的思考,想着要汇总一下,就把 Mole 从开源 CLI 做到 Mac 付费软件这一路聊一聊,我当时是怎么想的,哪些事情做下来真的有用,也许能给正在做自己作品的朋友一些输入。

Mole 的官网是 mole.fit,CLI 在 GitHub 开源,可以先去玩一玩。

去年国庆我在三亚的泳池边写了几百行代码,做了个 Mac 清理的命令行工具 Mole CLI 开源到 GitHub 上,本来只想给自己和同事用。结果不到一年收了 60K star ,陆续发了 50 多个版本,121 位来自全球各地的开发者提交过代码,解决掉近 800 个功能建议和 Bug 。

其实我一直没太意识到用的人有多少,直到有一次,因为在 README 上挂了两张用 Vercel 加速的图片,流量把账单跑超了,欠了 Vercel 80 刀。当时才反应过来,桌面端可以做了。

之前收到最多的一类邮件来自国外用户,大意都差不多:我父母也用 Mac ,我妹妹也用,但他们不会开终端,能不能做一个不用敲命令就能用的版本。这件事拖了挺久,主要是觉得 CLI 本身还没到成熟的地步。等 CLI 跑了大半年,哪些能删、删到什么程度算安全,心里有底了才开始做桌面版,做到自己敢天天用了才发出去。当天晚上十点发布,那一夜通知一直在响,法国、德国各种币种都有,后来为了睡觉把邮箱通知关了。后面几个月一直在加东西,等于是一批用户先掏了钱,再陪着我把它做完。CLI 没有任何变化,照旧开源免费,也会一直更新,付费的只有桌面版。

AI 多出来的三类垃圾

桌面版做出来之后,我自己用得最多的反而是清理,因为我这台 Mac 真的快被 AI 撑爆了。我几乎全天开着 Claude Code 和 Codex 写东西,一开始没在意,后来才发现 AI 留下的垃圾跟以前的软件很不一样,大概是三类。

第一类是编译产物,这个不新鲜,但 AI 把量级放大了。以前一天手写几百行代码编译三五次,现在一个下午让 agent 跑十几轮,每轮都要编译一次。Rust 项目的 target 、前端的 .next 和 dist 、Xcode 的 DerivedData 增长很快,我自己有一次清出 86G ,全是这些东西。第二类是 AI 工具自己留下的旧版本,Claude Code 、Cursor Agent 、GitHub Copilot 这几个命令行工具都是自动更新的。更新方式是把新版本整个下载到一个新的版本目录,一个版本约 250MB ,旧的不会删,几个月下来这里积着十几个再也用不到的版本。第三类是模型文件,Ollama 和 LM Studio 拉下来的模型、HuggingFace 的缓存,常常几十 G 。

前两类 Mole 会清,第三类不碰。后来我慢慢把这件事想成三档,扫到的每样东西先归个类,再决定它默认要不要勾上。第一档可再生,HTTP 缓存、GPU 缓存、编译产物和多数日志都算,相关的 App 退出了、路径也明确,就可以清。第二档重建代价高,包管理器的注册缓存、本地模型权重、iOS 的 DeviceSupport 都能重建,但要花网络和时间,得让用户自己过一眼。第三档不可替代,聊天记录、邮件库、照片图库、手上正做着的项目状态都在里面,我觉得这些东西就不该放进一键清理的列表。

这三档压成同一份「安全可删」的清单当然省事,代价是替用户把决定做了。清理页的十类项目就是按这个顺序排的,可再生的缓存排在最前面,越往下越需要自己看一眼。

target 、build 、dist 、__pycache__、DerivedData 这些删掉以后重新编译一次就回来了,代价是几分钟 CPU 。node_modules 、Pods 、venv 、vendor 看着也是依赖目录,但删了必须重新联网下载,在高铁上或者飞机上想跑一下项目就只能干等。这两类看着差不多,很容易一起当垃圾清掉,Mole CLI 早期就是这样,后来专门把所有下载类的目录从 Mac 版的清理列表里摘了出去。

模型是这里面最重的一类,几十 G 重下一遍是灾难,而且通用清理工具就算想帮你删也删不对。Ollama 把模型拆成一堆按哈希命名的块,多个模型可能共用同一块,ollama rm 会先算清楚还有没有别人在引用才敢释放。你从文件系统上直接删掉一个看着很大的块,很可能把另一个模型弄坏。这种引用关系只有工具自己清楚。

所以 ~/.ollama/models~/.cache/huggingface 这类路径在代码里是写死的保护名单,扫描阶段根本不会出现,只在磁盘分析那边显示占用大小,模型本身交回给 Ollama 、LM Studio 自己管。

还有一类东西比模型更不能动,是 AI 的会话记录。~/.codex/sessions~/.claude/projects~/.grok/sessions 里存的是你和 AI 几个月甚至一年的完整对话,里面有当时的思路、被否掉的方案、每一处为什么这么改的原因,删掉就真的没了,说起来比代码本身还珍贵。所以这几个路径在 Mole 里永远不会清,放了多久没动过都一样,同样受保护的还有 memories 、plans 、skills 和生成的图片。

这些保护名单不是一开始就想好的,基本都是踩出来的。最蠢的一次是 com.apple.e5rt.e5bundlecache,名字里带 Caches ,位置也在缓存目录下,怎么看都是缓存,其实它是苹果神经引擎编译好的模型。CLI 早期真把它当缓存清了,用户那边所有用到识别功能的 App 全挂,一直到重启才好。从那以后我养成一个习惯,看到名字里带 cache 的目录,先在心里过三个问题,谁写的,重启之后谁会去读它,万一删错了怎么找回来。有一个答不上来我就不动它。

先看一眼再删

这类工具好不好,我不太看能清多少,主要看删之前让不让你看清楚。

Mole 清理的时候是先扫描,逐项列出来,每一项显示具体是什么、在哪、占多少,拿不准的默认不勾选,确认完再删,删的时候优先进废纸篓,后悔了还能找回来。扫描和清理全程在本机完成,文件和结果都不会上传。代价是慢,多了一步确认,赶时间的时候会嫌它啰嗦,但我还是想让它宁可漏删也不误删。

卸载走的是同一套逻辑,选中一个 App ,Mole 会把它散在系统各处的东西一起翻出来,逐项标上路径和大小,上面这张图里 Claude 本体只有 781MB ,~/Library/Application Support/claude 却有 7.67 GB ,真正占空间的从来不是应用包本身。登录项和后台服务也放在同一页,不用再去系统设置里一个个找。

举个例子,macOS 系统更新下载下来的安装包,也就是 /macOS Install Data 那个目录,经常十几个 G ,看着是完美的清理目标。但系统可能还等着用它把更新装完,删早了机器就起不来。所以它在 Mole 里是默认不勾选的审阅项,前面叠了三道门,系统里有更新等着装就整行隐藏,安装包最近 14 天里动过就隐藏,安装相关进程还在运行也隐藏,哪个信号读不出来,就当它有风险,直接不显示。

真到执行删除那一刻,root 权限的脚本还会把这几项检查重新跑一遍,不通过就非零退出,不会出现「报告说清了 12G 其实一个字节没动」这种事。

我自己判断一款清理工具好不好,有个很土的办法。装同一个厂商的两款产品,只卸掉其中一款,看它会不会把两款共用的 Application Support 父目录或者 group 容器也列进去。列进去了,说明它是按名字匹配的,不是按归属判断。归属都说不清的工具,我不太敢让它批量删东西。

平时他不会来打扰你

一次清出 86G 不是靠删几个日志凑出来的,卸载 Claude 的时候能从系统各处翻出比应用本体大十倍的东西。该找的它都会去找,只是不会主动来打扰你。

装了之后它不会隔三差五弹个通知提醒你该清理了,也不会扫完之后跳出来说你的电脑有多危险。你想清的时候打开它,不想的时候它就跟不存在一样。

界面上也是同一个想法,扫描没结束就不进结果页,等一下就能好的事连加载提示都不给,要等一阵才出现一个正在忙的动画,完成页也提前留好空间,结果出来的时候窗口不会跳一下。这些规定都很琐碎,合起来就是它用起来稳的原因。

底下要做的事情本来就不好预测,这时候加动画帮不上忙,还是得流程本身够可靠。我不希望一个维护工具需要人一直盯着,发起任务,等它完成,再拿回屏幕就够了,不用老闪着灯提醒你来看它。

无障碍也算在里面,朗读顺序、键盘操作、焦点稳不稳,和看上去安不安静是同一件事。系统开启「减少动态效果」之后,行星会停止装饰性旋转,状态变化也减少空间移动,任何操作都不依赖用户看懂动画。

让 70 岁的老爷爷也能用

以前我做东西基本只考虑身边同事和朋友用得顺不顺手。这次从 CLI 做到桌面端才发现,要让一个 70 岁的老爷爷也用得上,中间要过的事情多得多,也有意思得多。下面这些都是从这三个月的用户邮件里翻出来的,我最大的收获几乎都在这里。

有位快 70 岁的英国用户,说他犯了一个老年时刻,把 Mole 又买了一遍,「第二笔钱就当做送你,谢谢这个出色的工具,帮我省下了比 CleanMyMac 多得多的英镑」。我建议他退款或者把多出来的授权送人,他去问了一圈,第二天回我「我邻居没人用 Mac ,我 Bluesky 上的关注者也没有,这一轮算我请你」。收到这样的信,我会觉得必须把产品做得更好,才对得起这份信任。

一位美国用户纠正了我一个关于地区习惯的错误想法。我一直以为美国人看温度就得用华氏,所以美区默认给了华氏,他说:「美国人在所有技术相关的场景都用摄氏度,只有天气和体温例外。我装上 Mole 看到 110 ,吓了一跳。Apple 给美国人看的规格也是摄氏度,fastfetch 、neofetch 在美式系统上默认也是摄氏度。建议保留华氏切换,但所有地区默认摄氏度。」后来就改成了默认摄氏可切华氏。他还追了一封聊定价,说我给的那个数字读起来不像刻意定的价,像是从别的货币换算过来的,又补了一句「我说外来不是指反华,而是人们希望感觉到作者理解他们」。说实话那个价格就是我拍脑袋定的,做产品之前从没认真想过定价这件事,被一个素不相识的用户当面点出来,挺不好意思的,原来一个价格数字也会影响用户的决策。

一位视力轻度障碍的用户说:「看起来是个很不错的 App ,可惜我用不了,它似乎把深色模式写死了。我系统设成浅色,也只用浅色模式的 App 。」 Mole 只做深色其实是个刻意的决定,菜单栏面板像 HUD 一样浮在壁纸上,深色玻璃眩光更少,也不用多一个主题开关。但这个理由对他不成立,我一直觉得自己在无障碍上做得挺认真,却完全没想到浅色模式本身也是一种无障碍需求。这封信收到有一阵了,Mole 到现在还是只有深色,浅色一直排在列表上没做完。一个说自己在意无障碍的产品,把一位明确说了用不了的用户晾到现在,这件事我一直有点过意不去。

还有一位德国大学的讲师来申请教育授权,说这「不仅是对我个人的支持,也是一种有意义的教育层面的支持」。原来还有国外的老师在课堂环境里用我的产品,这是我没预料到的用法。一位匈牙利的医生则给了最真实的差评,「说实话,这个价格对一个免费应用也能做到的事情来说有点高了」。这条我一点都不觉得刺耳,不同国家购买力差别很大,他不是在抱怨,是在帮我定位问题。

Mole 里我自己最喜欢的几个功能,起源其实都不是我想到的。AirPods 快没电时会收到一条提醒,是做电池健康那阵子加的,我一直没遇到这个场景,直到某天下午真的收到了,很贴心又不打扰。屏幕常亮做了三种不同的行为,也是用户提醒之后才补的,周末突然出门,AI Coding 那边可以继续跑,帮我省下不少异步的时间。状态里能看到 iPhone 的电量,这一块之前不太好实现,后来也找到了办法。这些都是用户告诉我要加的,加完之后我自己受益最多。

其实我一直手工回邮件

答疑、退款、重置激活码这些事加起来不到用户量的 1%,花半小时写个脚本就能全自动,但我没写。只有自己一封封处理过,才能感觉到用户到底要什么、为什么退款、哪里让他不舒服,而那经常不是他第一句话问的东西。我给自动化定的门槛是三件事都成立,问题反复出现,答案已经稳定,例外也都摸清楚了,在那之前我宁愿一封封回。目前这样还有效,我没花钱做营销,增长基本来自口碑,退款率低于 0.8%。买的人里有不少是先用了很久 CLI 的老用户。

发布之前我也没有搭工单系统、客服平台和知识库。工程师喜欢先把这套支撑系统搭起来,因为那是熟悉的工作,AI 又把它压缩到半天,更容易让人过早动手,可是搭起来只要半天,维护却是长期的事,而且暂时根本用不到。等哪天收件箱开始丢请求、看不清响应时间,或者同一个问题得到了不同回答,那才是真正需要新系统的时候。AI 让这个产品的很多部分成为可能,但和人的交流不能用 AI 代替,不然就没什么意思了,它能提效,却很难提升彼此的感情和信任,这或许也是 AI Coding 出来的产品保持人味的一个途径。

这几件事,我觉得做下来很有用

做产品这件事,我感觉代码能力大概只占三成。更花心思的是怎么把自己的痛点和大部分用户的痛点接上,做出一个好用又不用学的东西,还有怎么把它推到该看到的人面前,让人觉得多亏有它解决了一个大问题。产品工程师大概等于用研、产品、工程师、运营、数据、商业这几类角色的综合体。

不做什么远比做什么重要,放到一个会删你文件的工具上,这句话就变成了不删什么,前面那些写死的保护名单其实都是从这条来的。大一刚入门的时候很幸运看了不少讲工程师修炼的书,如无必要勿增实体、至繁归于至简这两句慢慢渗进了我的生活、工作和代码里,做产品之后感受更深。好产品和一般产品的区别,很大程度上就在于会不会决定哪些东西不做。有些功能本身很好,但不在这条主线上,我就不放进来,不然很容易变成功能堆砌,也不好维护。

另一个感受是脑袋里得装着往后半年的路线,清楚知道每一个版本该加什么、哪些是伪需求、哪个功能该放在用户顺手的地方。对普通用户来说,不用看说明书就能上手的那个才算好。Mole 的定位是 Mac 系统维护的安静守护者,有不少朋友建议过挺好的功能,我都婉拒了。我的目标也很简单,每一百位 Mac 用户里有一位愿意留下 Mole ,它就已经足够有用。

现在一个功能进路线图之前要过三道门:用户没点进这个功能就不能有常驻的定时器、监听器和采样开销,不能为一点小便利去扩大特权助手或者新增系统权限,有合理默认值的时候不能加设置项。这不是所有软件的通用原则,是 Mole 给自己定的规矩,常驻的工作、特权和配置每多一样,用户就得多信任你一点。

我基本没攒过大招,尽量做到每周都发一版,这样用户的问题能及时解决,也能跟人有来有回地聊。每次发布、更新、宣发其实都是一次很好的沟通机会,也让之前没看到消息的人知道你在做什么。

AI 时代代码壁垒越来越小,更需要把控的是怎么把 Token 刚好花在解决用户问题上。多花我不太介意,但要花在实处,比如把需求讨论透,把数据挖下去找到真问题,把文案写得让人一看就懂,这些地方值得花。Token 在我看来属于投资,投资也得讲收益。

Mole 从第一天就是全球化的,英文内容也发得比中文多。这段时间的感受是世界很大,用户很广,而且他们从一开始就愿意信任你。你顺手帮过的人,后来很可能就成了你的用户,因为彼此有过真实的来往。我也没花钱做过推广,X 上的脉冲很高但时效一般,反而有些东西发到 YouTube 之后衰减非常慢,只要东西够好,有人推荐,能在上面活很久。

数据这块我花的时间比想象中多,销量分维度分时间去看,再结合流量数据、用户评论、跟用户来往的所有记录、退款的原因,开源那边还有全部 issue ,这些都是很宝贵的资源,能帮我发现特别多自己不知道的问题,也能看清销售的漏斗到底断在哪一环。

最后一条更像是我自己的做法。抱着很深的功利心去把账号做上去,人是会焦虑的,我更愿意把它当成一个品牌来建设,我自己就是这个品牌本身。我的思考、想法、产品更新、见解、交流、评论,都是在给这个品牌加信任值。信任这个东西在当今虚假又繁荣的 AI 世界里尤其重要,说着非常牛逼、点进去感觉一般的东西已经把大量用户的预期拉低了很多,就算你真有一个好产品,没有信任照样得不到关注。这件事可以做得非常长期,你在互联网上待多久,这个品牌就会活多久,是你生命周期最长的产品。

为什么是五颗行星

Mole 桌面版目前是清理、卸载、优化、磁盘分析、硬件状态五块,界面上每一块对应一颗行星,清理是地球,卸载是火星,优化是水星,分析是木星,状态是太阳。这和我小时候喜欢看各种行星运行有关系,加上十年前学会前端之后第一个特别想学的就是 WebGL ,正好凑到了一起。行星的贴图我换了不下 10 次,从 NASA 官网下了很多才挑定,转的方向、转速、完成之后的飞行效果也都照着真实的天体来。

这部分完全可以不做,做个菜单栏点一下清一下的小工具也能用。但 AI 产生的赛博垃圾已经够多了,与其拿 Token 再堆一个能跑就行的界面,我还是想做个舒服一点的东西出来,不浪费我的 Token ,也不污染你的时间线。

我做事情喜欢水到渠成,不喜欢短时间急切追求结果,这三个月下来更是这么觉得。前段时间想到一句话,世界上最好的工作,大概是持续学习的人在自由市场里,用自己的判断力、能力和审美持续创造价值,变成他人愿意买单的东西。

CLI 在 GitHub 上开源免费,Mac 桌面版在官网 mole.fit

由于第一次做付费产品,可能也有我思考不周的地方,很欢迎有经验的朋友帮助指出和建议。上面这些改动其实都不是我想出来的,全是某位用户的一封邮件或者一个 issue 带来的,所以一定不要放弃和用户交流的机会,尽情听他们吐槽和建议,能给你很多帮助,也让你更懂你的用户。

9582 次点击
所在节点    分享创造
237 条回复
lovedebug
11 小时 48 分钟前
感谢分享~ 之前推上就看到博主的分享。很有价值,期待更多的作品和分享
tw93
11 小时 47 分钟前
@lovedebug 谢谢喜欢!
chenpei466
11 小时 47 分钟前
点赞
tw93
11 小时 45 分钟前
@chenpei466 哈哈 相互交流
hidie
11 小时 44 分钟前
感谢分享,我经常在推上看你的文章
cns
11 小时 44 分钟前
太用心了,值得购买
zfyime
11 小时 44 分钟前
很好的产品 之前一直用的腾讯柠檬清理
装上 Mole 后立马删了腾讯的
ren7346
11 小时 43 分钟前
桌面端很不错 点赞
tw93
11 小时 41 分钟前
@hidie 老朋友 突然发现我没有发 V2EX 然后就补充到这里了
tw93
11 小时 41 分钟前
@cns 感谢!
iyuanyi
11 小时 40 分钟前
牛逼 plus ,你的 cli 版偶尔在用
tw93
11 小时 40 分钟前
@zfyime 欢迎给我反馈各种建议和 bug
tw93
11 小时 40 分钟前
@ren7346 强迫症产物
tw93
11 小时 38 分钟前
@iyuanyi 感谢! Cli 也一直在持续迭代,更简洁,GUI 更精致一点,有更多功能
Mystery0
11 小时 38 分钟前
感谢,cli 很好用❤️
Rorysky
11 小时 38 分钟前
mole 有 windows / linux 版?
tw93
11 小时 37 分钟前
@Rorysky 有计划 windows 不过会稍微慢一点 先把 mac 做到最好
tw93
11 小时 37 分钟前
@Mystery0 谢谢喜欢 cli 适合我们程序员简洁化
lucas1213
11 小时 37 分钟前
点赞,对于我有些贵暂时还是用 CLI 吧
JL1990
11 小时 35 分钟前
分享的内容对我很有帮助

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/1239372

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX