最近我寫了不少關於獨立開發的思考,想著要匯總一下,就把 Mole 從開源 CLI 做到 Mac 付費軟體這一路聊一聊:我當時是怎麼想的,哪些事情做下來真的有用,也許能給正在做自己作品的朋友一些輸入。
去年國慶我在三亞的泳池邊寫了幾百行代碼,做了個 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,也不污染你的時間線。
我做事情喜歡水到渠成,不喜歡短時間急切追求結果,這三個月下來更是這麼覺得。前段時間想到一句話,世界上最好的工作,大概是持續學習的人在自由市場裡,用自己的判斷力、能力和審美持續創造價值,變成他人願意買單的東西。
由於第一次做付費產品,可能也有我思考不周的地方,很歡迎有經驗的朋友幫助指出和建議。上面這些改動其實都不是我想出來的,全是某位用戶的一封郵件或者一個 issue 帶來的,所以一定不要放棄和用戶交流的機會,盡情聽他們吐槽和建議,能給你很多幫助,也讓你更懂你的用戶。
Mole 已上架少數派正版軟體商城,你可以識別下方圖片二維碼購買。
https://sspai.com/post/113843?utm_source=wechat&utm_medium=social







