URL:     https://linuxfr.org/users/tw93/journaux/de-mole-cli-a-mole-for-mac-ce-que-j-ai-appris
Title:   De Mole CLI à Mole for Mac : ce que j’ai appris
Authors: tw93
Date:    2026-09-12T12:37:08+02:00
License: CC By-SA
Tags:    slop et spam
Score:   -13


![Couverture — From Mole CLI to Mole for Mac](https://cdn.tw93.fun/blog/pic/mole-mac-cover-en.png)

![Mole for Mac — cinq outils / statut](https://mole.fit/img/en/status.webp)

Ces derniers temps, j’ai accumulé beaucoup de réflexions sur le développement indie. J’ai voulu les rassembler : voici l’histoire du passage de Mole, d’un CLI open source à une app Mac payante. Ce que je pensais à l’époque, et ce qui a vraiment compté.

> Mole vit sur [mole.fit](https://mole.fit), et le CLI est open source sur GitHub. N’hésitez pas à l’essayer d’abord.

Pendant les vacances de la Fête nationale l’an dernier, assis au bord d’une piscine à Sanya, j’ai écrit quelques centaines de lignes de code. C’est devenu Mole CLI, un nettoyeur en ligne de commande pour Mac, que j’ai mis sur GitHub surtout pour moi et quelques collègues. En moins d’un an : 60K étoiles, une cinquantaine de versions, du code de 121 développeurs partout dans le monde, et près de 800 demandes de fonctionnalités et bugs fermés.

Je n’avais vraiment aucune idée de combien de gens l’utilisaient. Puis, un mois, deux images hébergées sur Vercel dans le README ont dépassé le quota de bande passante et m’ont fait devoir 80 dollars. C’est là que j’ai compris qu’une version bureau valait la peine.

Les mails les plus fréquents venaient d’utilisateurs hors de Chine, et disaient à peu près la même chose. Mes parents utilisent un Mac. Ma sœur aussi. Aucun des deux n’ouvrira un terminal. Pourriez-vous faire une version qu’ils puissent juste cliquer ? J’ai tardé longtemps, surtout parce que le CLI ne me semblait pas encore abouti. Je n’ai commencé le bureau qu’après que le CLI ait tourné presque un an, quand je savais quoi supprimer sans danger et jusqu’où aller, et je ne l’ai sorti que lorsque je l’utilisais moi-même tous les jours. Sortie à dix heures du soir. Les notifications ont continué pendant la nuit, paiements de France, d’Allemagne et d’ailleurs ; j’ai coupé les alertes mail pour dormir. Les mois suivants, j’ai continué d’ajouter des choses. Un groupe de gens a payé d’abord, puis est resté pendant que je finissais. Rien n’a changé côté CLI : il reste open source, gratuit et mis à jour. Seule l’app bureau est payante.

## Trois types de déchets laissés par l’IA

![Clean](https://mole.fit/img/en/clean.webp)

![Data kinds](https://mole.fit/img/blog/cleaner-data-kinds.webp)

![Ollama](https://mole.fit/img/blog/ai-model-store.webp)

![Analyze](https://mole.fit/img/en/analyze.webp)


Après la sortie de la version bureau, la fonction que j’ai le plus utilisée a été le nettoyeur, parce que mon Mac n’arrêtait pas d’avertir qu’il manquait d’espace. J’ai Claude Code et Codex qui tournent une bonne partie de la journée, et j’ai remarqué que les fichiers laissés par l’IA ne ressemblent plus à ceux d’avant.

Il y a surtout trois choses. La plus évidente : les artefacts de build. Autrefois on écrivait à la main quelques centaines de lignes par jour et on compilait trois ou cinq fois. Maintenant un agent enchaîne une dizaine de tours en un après-midi, et chaque tour compile. Les `target` Rust, `.next` et `dist` côté front, DerivedData d’Xcode : tout grossit vite. J’ai une fois libéré 86 Go d’un coup, entièrement de ça. Ensuite, les vieilles copies des outils IA eux-mêmes. Claude Code et Cursor Agent se mettent à jour en silence en téléchargeant toute la nouvelle version, environ 250 Mo chacune, et laissent les anciennes. Après quelques mois, une douzaine de versions traînent. Puis les modèles locaux tirés via Ollama ou LM Studio, qui mangent facilement des dizaines de gigaoctets.

Tout ramasser dans une seule liste « sûr à supprimer » est certes plus simple, mais au prix de décisions à haut risque prises à la place de l’utilisateur. Maintenant je traite ces données selon le coût pour les récupérer. Quand un candidat est scanné, on détermine d’abord à qui il appartient avant de décider s’il est coché par défaut.

Pour les builds, la plupart des logs, les caches HTTP et GPU, les supprimer veut dire recompiler ou rafraîchir une page : le prix est quelques minutes de CPU. Tant que l’app propriétaire a quitté, on peut cocher par défaut. Mais `node_modules`, `Pods` et `venv` sont différents. Ils ressemblent à des dossiers de dépendances, or les supprimer impose de tout retélécharger, et dans un avion ou un train on reste bloqué. Les deux se confondent facilement. Mole CLI l’a fait au début ; plus tard j’ai sorti tous les dossiers « téléchargement uniquement » de la liste de nettoyage de l’app Mac. L’utilisateur doit d’abord les regarder.

Les modèles sont le plus lourd ici, et retélécharger des dizaines de gigas prend longtemps. Un nettoyeur générique ne pourrait pas les supprimer correctement même s’il le voulait. Ollama découpe un modèle en blocs nommés par hash, et plusieurs modèles peuvent partager le même bloc. Supprimer d’office un gros bloc depuis le système de fichiers peut casser un autre modèle. Seul l’outil connaît ces relations.

Donc `~/.ollama/models` et `~/.cache/huggingface` sont en dur dans une liste protégée. Ils n’apparaissent jamais au scan, seulement dans l’analyseur de disque comme une taille, et les modèles restent sous la gestion d’Ollama et LM Studio.

Il y a encore plus intouchable que les modèles : l’historique des chats IA. `~/.codex/sessions`, `~/.claude/projects` et `~/.grok/sessions` gardent des mois, parfois un an, de conversations complètes. Votre réflexion du moment, les approches rejetées, la raison de chaque changement. Supprimer, c’est perdu, et d’une certaine façon ça vaut plus que le code. Ces chemins ne sont jamais nettoyés dans Mole, peu importe depuis combien de temps ils n’ont pas bougé ; la même protection couvre memories, plans, skills et images générées.

Cette liste protégée n’a pas été conçue d’avance. Elle a surtout été apprise à la dure. La plus bête : `com.apple.e5rt.e5bundlecache`. Le nom dit Caches, il vit dans le dossier cache, tout le désigne comme un cache — or c’est là qu’Apple Neural Engine garde les modèles compilés. Le CLI l’a vidé comme un cache au début, et chaque app de reconnaissance a cassé chez ces utilisateurs jusqu’au redémarrage. Depuis, dès que je vois un dossier avec « cache » dans le nom, je me pose trois questions. Qui l’écrit ? Qui le relit après un reboot ? Si je me trompe, comment je le récupère ? Si je ne peux pas répondre à l’une d’elles, je ne touche pas.

## Montrer avant de supprimer

![Uninstall](https://mole.fit/img/en/uninstall.webp)

![Attribution](https://mole.fit/img/blog/leftover-attribution.webp)


Ce qui m’importe le plus dans un outil comme celui-ci, ce n’est pas combien il peut libérer. C’est s’il vous laisse d’abord voir.

Mole scanne, puis liste chaque élément : ce que c’est, où il vit, quelle taille. Tout ce qui est incertain est décoché par défaut. Vous confirmez, puis ça supprime, de préférence vers la Corbeille pour pouvoir changer d’avis. Scan et nettoyage se font entièrement sur votre machine ; aucun fichier ni résultat ne sort. Le coût : c’est plus lent, une étape en plus, et ça paraît pointilleux les jours où on veut juste en finir. Je préfère encore qu’il en rate un plutôt qu’il en efface un de trop.

La désinstallation suit la même logique. Vous choisissez une app, Mole ramène tout ce qu’elle a éparpillé dans le système, chaque élément avec chemin et taille. Sur la capture ci-dessus, Claude lui-même fait 781 Mo tandis que `~/Library/Application Support/claude` fait 7,67 Go — c’est souvent le cas : le paquet de l’app n’est jamais ce qui prend de la place. Éléments de connexion et services d’arrière-plan sont sur la même page, sans fouiller Réglages Système.

Prenez les charges utiles de mise à jour macOS, le dossier `/macOS Install Data`. Souvent plus de dix gigas, et ça a l’air parfait à vider. Mais le système peut encore en avoir besoin pour finir l’installation ; le retirer trop tôt peut laisser la machine incapable de démarrer. Donc c’est un élément « revue seule » dans Mole, décoché par défaut, derrière trois portes. S’il y a une mise à jour système en attente, la ligne est masquée. Si quelque chose dans la charge a été écrit dans les 14 derniers jours, masquée. Si un processus d’installateur tourne encore, masquée. Si l’un de ces signaux ne peut pas être lu, c’est traité comme risqué et ça n’apparaît pas du tout.

Au moment de la suppression, l’helper root rejoue tous ces contrôles et sort en non-zéro si l’un échoue, pour ne pas se retrouver avec un rapport qui prétend avoir libéré 12 Go sans avoir touché un octet.

J’ai une façon rustique de juger un nettoyeur. Installez deux produits du même éditeur, désinstallez-en un seul, et voyez si l’outil propose le dossier parent Application Support ou le conteneur de groupe qu’ils partagent. S’il le fait, il matche sur des noms plutôt que de raisonner sur la propriété. Je ne suis pas à l’aise de laisser un outil supprimer en lot quoi que ce soit s’il ne peut pas me dire à qui appartient quoi.

## Il ne vient pas vous chercher

![Menubar](https://mole.fit/img/en/menubar.webp)


Il regarde partout où il doit, il ne vient juste pas vous chercher.

Il ne poppera pas tous les quelques jours pour rappeler qu’il est temps de nettoyer, et il ne finira pas un scan en annonçant à quel point votre ordinateur est en danger. Ouvrez-le quand vous voulez nettoyer quelque chose. Le reste du temps, autant qu’il ne soit pas installé.

L’interface suit la même idée. La page de résultats n’apparaît qu’une fois le scan terminé ; une courte attente n’affiche aucun spinner, et seule une attente plus longue fait apparaître une animation de travail ; l’écran de fin réserve son espace à l’avance pour que la fenêtre ne saute pas à l’arrivée du résultat. Chacune de ces règles est petite ; ensemble, elles expliquent pourquoi l’app se sent stable.

Le travail en dessous est imprévisible par nature, et l’animation ne corrige pas ça. Ce qui le corrige, c’est la fiabilité du flux lui-même. Je ne veux pas d’un outil de maintenance à surveiller. Je veux lancer une tâche, la laisser finir, puis revenir aux résultats sans une lumière clignotante qui demande sans cesse mon attention.

Pareil pour l’accessibilité. Ordre de lecture, clavier, stabilité du focus : rien de tout cela n’est séparé du calme visuel. Avec Réduire les mouvements activé, les planètes arrêtent leur rotation décorative et les changements d’état bougent moins dans l’espace ; rien de ce que vous faites ne dépend de comprendre une animation.

## Construire pour quelqu’un dans la soixantaine-soixante-dix

Autrefois je construisais en pensant seulement à ce qui était pratique pour les gens autour de moi. Passer d’un CLI à une app bureau m’a appris qu’être utilisable pour quelqu’un dans la soixantaine ou la soixantaine-dix demande bien plus — et c’est bien plus intéressant. Tout ce qui suit vient de trois mois de mails utilisateurs, et c’est là que j’ai le plus appris.

Un utilisateur britannique vers la fin de la soixantaine a écrit qu’il avait eu un « senior moment » et acheté Mole deux fois. « Considérez le second paiement comme un cadeau. Merci pour cet excellent outil ; il m’a fait économiser bien plus de livres que CleanMyMac. » J’ai suggéré un remboursement, ou de donner la licence en trop. Il a demandé autour de lui et a répondu le lendemain : « Aucun de mes voisins n’utilise de Mac, ni mes abonnés Bluesky. Ce tour est pour moi. » Recevoir une lettre comme ça donne l’envie de rendre le produit digne de cette confiance.

Un utilisateur américain a corrigé une idée fausse que j’avais sur les habitudes régionales. J’avais cru que les Américains voulaient Fahrenheit, donc c’était le défaut US. Il a écrit : « Les Américains utilisent Celsius dans tout contexte technique. Seuls la météo et la température corporelle sont en Fahrenheit. J’ai installé Mole, vu 110, et j’ai eu une frayeur. Apple publie les specs US en Celsius, et fastfetch comme neofetch passent en Celsius par défaut sur les systèmes américains. Gardez le bascule Fahrenheit, mais mettez tout le monde en Celsius par défaut. » C’est maintenant Celsius par défaut, Fahrenheit disponible. Il a suivi aussi sur le prix. Le chiffre que j’avais choisi ne sonnait pas comme un prix délibéré, plutôt comme une conversion depuis une autre devise. Puis : « Quand je dis foreign, ce n’est pas anti-Chine. Les gens veulent sentir que l’auteur les comprend. » Honnêtement, ce prix était improvisé. Je n’avais jamais sérieusement pensé au pricing avant de vendre quoi que ce soit ; qu’un inconnu le pointe était un peu gênant. Je n’avais pas réalisé que le chiffre du prix lui-même façonne la décision.

Un utilisateur avec une légère déficience visuelle a écrit : « Ça a l’air d’une très belle app. Dommage que je ne puisse pas l’utiliser ; elle semble forcer le mode sombre. Mon système est en clair et je n’utilise que des apps en mode clair. » Mole uniquement sombre était un choix délibéré. Le panneau de barre de menus flotte sur le fond d’écran comme un HUD, le verre sombre éblouit moins, et ça évitait un sélecteur de thème. Mais ce raisonnement ne tient pas pour lui. Je me disais prendre l’accessibilité au sérieux, et il ne m’était jamais venu que le mode clair est lui-même un besoin d’accessibilité. Ce mail est arrivé il y a un moment. Mole est toujours sombre uniquement, et le mode clair est encore sur la liste. Un produit qui prétend se soucier de l’accessibilité a laissé attendre aussi longtemps quelqu’un qui a dit clairement qu’il ne peut pas l’utiliser — ça me gêne.

Un enseignant d’une université allemande a écrit pour une licence éducative, la décrivant comme « non seulement un soutien pour moi personnellement, mais un soutien significatif au niveau éducatif ». Je ne savais pas que des enseignants l’utilisaient en classe. Un médecin en Hongrie a laissé le mauvais avis le plus honnête que j’aie eu : « Pour être franc, c’est un peu cher pour quelque chose qu’une app gratuite peut aussi faire. » Celui-là ne pique pas du tout. Le pouvoir d’achat varie énormément entre pays ; il ne se plaignait pas, il m’aidait à situer un problème.

Mes fonctionnalités préférées dans Mole ne viennent pas de moi. L’alerte batterie faible pour AirPods est sortie du travail sur la santé batterie ; je n’avais jamais rencontré le cas jusqu’à un après-midi où elle a vraiment sonné — attentionné sans être bruyant. Keep Screen On a pris trois comportements différents après qu’un utilisateur ait signalé ce qui manquait. Maintenant, si je sors le week-end, la session de coding IA continue, ce qui m’épargne beaucoup d’attente. Voir le niveau de batterie de l’iPhone dans le statut a été dur un moment ; il y a eu une voie. Les utilisateurs m’ont demandé de construire tout ça, et c’est moi qui en ai le plus profité.

## Je réponds encore à chaque mail moi-même

Questions de support, remboursements et réinitialisations de licence font bien moins de 1 % des utilisateurs. Une demi-heure de script automatiserait tout, et je n’ai pas écrit ce script. Les traiter un par un est le seul moyen de sentir ce que les gens veulent vraiment, pourquoi ils se font rembourser, et où le produit les a mis mal à l’aise. Ce n’est souvent pas dans la première phrase. Mon seuil pour automatiser : trois choses à la fois — la question revient, la réponse est stable, je comprends les exceptions. Jusque-là, je préfère répondre à chacun. Ça marche encore : je n’ai rien dépensé en marketing, la croissance est surtout de bouche à oreille, les remboursements sont sous 0,8 %. Bon nombre d’acheteurs étaient d’abord de longs utilisateurs du CLI.

Je n’ai pas non plus construit de ticketing, de plateforme support ni de base de connaissances avant le lancement. Les ingénieurs aiment monter d’abord la machinerie de support parce que c’est du travail familier, et l’IA qui le compresse en une demi-journée facilite de commencer trop tôt. Construire prend une demi-journée, maintenir c’est du long terme, et personne n’en a encore besoin. Le jour où la boîte laisse tomber des demandes, où les délais de réponse deviennent flous, ou où la même question reçoit deux réponses différentes — là un nouveau système est vraiment nécessaire. L’IA réduit le temps de construction à quelques jours, mais parler aux gens n’est pas déléguable, sinon faire un produit cesse d’être intéressant. Traiter chaque mail soi-même, c’est ainsi que la confiance s’accumule.

## Quelques choses qui ont vraiment aidé

![Trois portes produit](https://tw93.fun/images/blog/mole-product-gates.svg)


Écrire du code n’est en fait qu’une petite part. Le vrai temps va à comprendre où est la douleur, comment rendre usable sans manuel, et comment le mettre devant les bonnes personnes. Faire chaque étape soi-même n’a rien à voir avec seulement écrire du code.

Pour un nettoyeur, ce qu’on ne supprime pas compte bien plus que ce qu’on supprime — d’où ces listes protégées. Beaucoup d’idées de fonctionnalités sont bonnes, mais si elles ne collent pas à ce que Mole est censé être, je les garde dehors. Sinon ça devient un tas, et un cauchemar à maintenir.

Il faut une feuille de route approximative en tête pour savoir quelles demandes refuser. Si un logiciel n’a besoin d’aucun manuel pour qu’on le prenne en main, il passe. J’ai décliné plein de jolies suggestions dès qu’elles menaçaient de rendre l’app plus bruyante ou plus complexe. Si un Mac user sur cent la trouve utile, ça suffit.

Une fonctionnalité doit passer trois portes avant d’atteindre la roadmap. Pas de timers, écouteurs ou coût d’échantillonnage toujours actifs tant que l’utilisateur n’est pas dans cette fonction. Pas d’élargissement de l’helper privilégié ni de nouvelle permission système pour une petite commodité. Pas de nouveau réglage quand un défaut sensé existe. Ce n’est pas un principe universel pour tout logiciel : c’est une règle que Mole s’est donnée. Chaque travail toujours actif, privilège et configuration de plus est une chose de plus dont les utilisateurs doivent vous faire confiance.

Je n’ai jamais stocké pour une grosse release. Je vise de sortir quelque chose chaque semaine, ce qui fait avancer les problèmes utilisateurs et maintient l’aller-retour. Chaque release, mise à jour et annonce est une bonne excuse pour parler aux gens, et donne à ceux qui ont raté les précédentes un moyen de savoir ce que vous faites.

Maintenant que l’IA écrit du code, le temps gagné est exactement ce qu’il faut passer à comprendre ce dont les gens ont besoin. Discuter un problème, regarder proprement les données, écrire un texte clair dès la première lecture. Je ne regrette pas les tokens, tant qu’ils font une différence que les utilisateurs sentent.

Mole est mondial depuis le premier jour, et je publie plus en anglais qu’en chinois. Ce qui m’a frappé : le monde est grand, les utilisateurs sont dispersés, et ils sont prêts à vous faire confiance dès le départ. Les gens qu’on a aidés en passant deviennent souvent des utilisateurs plus tard, parce qu’il y avait quelque chose de réel entre vous. Je n’ai jamais payé pour de la promo non plus. Les posts sur X ont un pic d’attention qui s’estompe vite ; ce qui est posté sur YouTube continue d’être vu bien plus longtemps, et si la chose est bonne et que quelqu’un la recommande, elle y reste vivante longtemps.

J’ai passé pas mal de temps sur les données. Mettre côte à côte ventes, trafic, commentaires, motifs de remboursement et issues GitHub fait apparaître plein d’angles morts que je n’aurais pas vus, et montre exactement où les gens s’en vont.

Le dernier point est l’état d’esprit. Courir après le nombre de followers juste pour vendre rend anxieux. Poster le vrai processus, les erreurs et les mises à jour montre qu’on construit vraiment quelque chose, et la confiance suit naturellement. Avec tant de bruit surpromettant en ce moment, personne ne prête attention s’il ne vous fait pas confiance. Rester honnête et jouer le long jeu mène bien plus loin.

## Pourquoi cinq planètes

![Journey](https://mole.fit/img/journey-poster.jpg)


Mole for Mac a cinq parties : Clean, Apps, Optimize, Analyze et Status. Chacune a une planète dans l’interface. Clean est la Terre, Apps Mars, Optimize Mercure, Analyze Jupiter, Status le Soleil. Ça vient d’aimer le mouvement des planètes enfant, et de WebGL comme première chose que j’ai vraiment voulu apprendre après le front-end il y a dix ans. Les deux se sont rencontrés. J’ai changé les textures de planètes plus de dix fois et en ai tiré beaucoup de la NASA avant de trancher. Sens de rotation, vitesse et vol à la fin suivent le comportement des vrais corps.

Rien de tout cela n’était obligatoire. Un élément de barre de menus avec un bouton Clean aurait marché. Mais il y a déjà assez de cyber-déchets générés par l’IA, et plutôt que de dépenser des tokens pour empiler une autre interface qui « tourne juste », je préfère faire quelque chose de plaisant. Ça ne gaspille pas mes tokens et ça ne pollue pas votre fil.

J’aime que les choses arrivent à leur rythme, et j’essaie de ne pas forcer le calendrier. Ces trois derniers mois n’ont fait que le renforcer. Construire quelque chose que j’aime utiliser et que d’autres acceptent de payer, c’est déjà une très bonne place.

Le CLI est gratuit et open source sur GitHub, et l’app Mac est sur [mole.fit](https://mole.fit).

C’est la première fois que je vends quelque chose, donc j’ai certainement manqué des choses, et tout conseil est le bienvenu. En regardant en arrière, les changements qui ont le plus façonné ça venaient tous d’un mail ou d’une issue. Écouter les gens se plaindre a franchement été la plus grande aide.

---

Version anglaise : https://tw93.fun/en/2026-08-16/mole-mac.html  
Version chinoise : https://tw93.fun/2026-08-16/mole-mac.html  
Produit : https://mole.fit
