Le dossier technique
Ce que Quotum lit sur votre machine
Une application qui lit votre Trousseau et vos fichiers d'identifiants doit dire lesquels, pour quoi faire, et où part le résultat. Cette page nomme chaque source, chaque adresse et chaque cadence — et donne les commandes qui permettent de la contredire.
Relevé daté du 30 septembre 2026, établi en lisant le code de Quotum à cette date. Les numéros de ligne cités bougent au premier commit qui ajoute une ligne au-dessus ; le classement, lui, tient. Les commandes de la section 06 sont là pour le vérifier plutôt que pour nous croire.
01 Ce qu'elle affiche, ligne par ligne
Un pourcentage nu est ambigu. Chaque compte du panneau porte donc, à droite de son nom, l'âge de sa mesure — parce qu'un chiffre mesuré il y a trois heures ne vaut pas un chiffre mesuré à l'instant ; sur un compte replié sous « En recharge », cet âge s'affiche au survol et se lit à VoiceOver —, puis une ligne par fenêtre de quota que son fournisseur publie : la durée de la fenêtre, une jauge de dix cases dont les cases pleines disent ce qui reste, la part utilisée et l'heure à laquelle elle se recharge.
Toutes les fenêtres d'un compte s'écrivent sur son plateau. La plus courte qu'il publie tient la première ligne, en gros — 5 heures chez Claude, chez Codex 5 heures ou 7 jours selon la formule, le mois chez Cursor —, les autres suivent, plus discrètes. Aucune fenêtre n'est inventée : un fournisseur qui n'en publie qu'une n'a qu'une ligne. L'heure de recharge s'écrit sous sa forme la plus courte : l'heure seule dans la journée, précédée du jour jusqu'à six jours, la date au-delà.
| Compte | Fenêtre | Jauge | Ce qui est écrit |
|---|---|---|---|
| Travail · Max20 | 5 h | 22 % utilisé · 11:41 La fenêtre courte, en gros, sur le plateau du compte. |
|
| Travail · Max20 | 7 j | 74 % utilisé · sam. 09:01 Une fenêtre plus longue, sur le même plateau, plus discrète. Il en reste moins de la moitié : la jauge passe à l'ambre. |
|
| Perso · Max20 | 5 h | 91 % utilisé · dans 25 min Une seule case : la braise. L'âge, « mesuré il y a 2 h », s'écrit plus appuyé : passé une heure, c'est le chiffre qui a le plus de chances d'avoir changé. |
|
| Veille · Max20 | 5 h | épuisé jusqu'à 10:21 Aucune case pleine, contour rouge : c'est ce que « épuisé » veut dire, pas une valeur inventée. |
|
| Équipe · Team | — | — | Pas encore de mesure Pas de jauge du tout. Une jauge vide annoncerait un compte à sec, et personne ne l'a constaté. |
Un compte dont le jeton a expiré écrit « Reconnexion nécessaire » sous son nom, sans jauge : un jeton expiré ne dit rien du quota, et le compte peut être plein. Un compte refusé pour quota sans qu'aucune fenêtre soit publiée garde en revanche une jauge vide, sans durée, et « épuisé », l'heure de retour écrite sous son nom : sans cette jauge, le compte le plus vide passerait pour un compte jamais mesuré.
02 Ce qu'elle lit sur le disque et au Trousseau
Quotum ne vous demande aucun mot de passe et n'ouvre aucune session. Il relit les identifiants que les outils en ligne de commande ont déjà posés sur la machine, chacun là où son outil le range.
| Outil | Où l'identifiant est lu |
|---|---|
| Claude | Trousseau, élément |
| Warp | Trousseau, éléments |
| Codex |
|
| Windsurf |
|
| Cursor | La base |
| Codebuff |
|
| Augment |
|
| opencode |
|
| Grok |
|
Une vérification qui n'ouvre rien, avant tout suivi
Pour vous dire si un outil a laissé sa connexion sur ce Mac, la feuille « Ajouter un compte » vérifie
seulement que ces fichiers existent, sans les ouvrir, avant même que vous
activiez le suivi : ~/.local/share/devin/credentials.toml,
~/Library/Application Support/Windsurf/User/globalStorage/state.vscdb,
~/Library/Application Support/Devin/User/globalStorage/state.vscdb,
~/Library/Application Support/Cursor/User/globalStorage/state.vscdb,
~/.config/manicode/credentials.json, ~/.augment/session.json,
~/.local/share/opencode/auth.json et ~/.grok/auth.json — ou là où
$XDG_DATA_HOME, $GROK_AUTH_PATH et $GROK_HOME les
déplacent. Elle regarde aussi si la variable GROK_DEPLOYMENT_KEY est posée, sans
en garder ni en transmettre la valeur. Aucun contenu n'est lu, le Trousseau n'est pas
interrogé, et rien ne part sur le réseau. Un fichier présent ne dit donc pas que la connexion
vaut encore : seule une mesure, une fois l'outil suivi, permet à Quotum de dire un compte connecté.
Et six sources lues sans qu'aucun outil soit suivi
Celles-ci ne dépendent pas du suivi d'un outil : Quotum les lit à chaque mesure, outils suivis ou non, y compris sur une installation neuve. Aucune ne sert à interroger un fournisseur.
~/.claude.json— l'objetoauthAccount, qui nomme le compte connecté à Claude Code. Aucun jeton n'y figure : il sert à poser la mesure du Trousseau sur la bonne ligne.~/.claude/cc-proxy.url,~/.claude/cc-proxy.secretet leurs équivalents~/.codex-comptes/— où joindre les proxys locaux, quand ils sont installés. Le fichier de secret en est un, d'identifiant : Quotum le pose dans le chemin de l'adresse qu'il interroge, et ne le transmet que sur la boucle locale de votre machine.~/Applicationset le fichierLocal Statede Chrome — quelles applications de compte existent, et à quel profil de navigateur chacune est rattachée.ps -axo command— lesquelles de ces applications tournent en ce moment, pour écrire « Passer à l'application » plutôt que « Lancer ».<données de l'app>/plan-usage-history.json— l'historique de consommation que Claude Code écrit lui-même à côté de sa configuration. Aucun jeton n'y figure.<CODEX_HOME>/sessions/AAAA/MM/JJ/rollout-*.jsonl— les journaux de session du CLI Codex, dont Quotum ne lit que la fin, à la recherche des en-têtes de quota que le serveur y a laissés. ⚠️ Ces fichiers sont les transcriptions de vos sessions : nous les ouvrons pour y chercher un pourcentage, rien n'en sort de la machine, et nous préférons vous le dire plutôt que de le taire parce qu'aucun jeton n'y figure.
Ce qu'elle écrit au Trousseau
Un seul élément, qu'elle crée elle-même : « Quotum — essai », service
app.quotum.mac.essai ; son nom suit la langue de l'application au moment où elle le crée (« Quotum — trial » en anglais), le service ne change pas. Il porte la date de début de l'essai et le code de 32 octets
tiré au hasard qui l'ouvre, et rien d'autre ; il n'est pas synchronisé avec iCloud, et il reste
après la suppression de l'application, pour qu'effacer les préférences ne relance pas l'essai.
Le supprimer en plus des préférences ne le relance pas non plus : la marque qu'Apple garde pour
ce Mac l'en empêche — section 05. Aucun élément d'un autre outil n'est écrit ni modifié.
Le jeton ne fait que transiter. Il est lu, posé dans l'en-tête d'une
requête, et rien d'autre : il n'est recopié dans aucun fichier, inscrit dans aucun journal
et gardé dans aucun cache. La session réseau est déclarée ephemeral, son cache
est mis à nil et sa politique ignore tout cache local — ce qui se vérifie en
une commande, section 06.
03 Où elle se connecte — toutes les adresses, énumérées
La commande grep -rn 'https\?://' Sources/ rend chaque ligne du code source où
figure une adresse. Elles sont toutes reprises ci-dessous, classées en trois familles.
Nous ne donnons pas leur nombre exprès : un décompte figé sur une page
repérimerait au premier commit, alors que la liste, elle, se compare ligne à ligne. Une
adresse que vous trouveriez et qui ne serait dans aucun des trois tableaux serait précisément
ce qu'il faut nous signaler.
A · Les lignes où l'application se connecte elle-même
| Ligne | Adresse | Ce qui s'y joue |
|---|---|---|
| QuotaAnthropic.swift:75 | https://api.anthropic.com | Les fenêtres de quota du compte Claude, et le profil qui le nomme. |
| QuotaCodex.swift:48 | https://chatgpt.com | La fenêtre de quota du compte ChatGPT. |
| QuotaWindsurf.swift:59 | https://server.codeium.com | Le quota Windsurf. L'hôte peut venir du fichier de l'utilisateur ; il n'est alors accepté que sous |
| QuotaCursor.swift:288 | https://cursor.com | Le cycle mensuel de Cursor et sa dépense à la demande. |
| QuotaWarp.swift:197 | https://app.warp.dev/graphql/v2 | Le cycle de Warp. |
| QuotaCodebuff.swift:138 | https://www.codebuff.com | Le bloc de cinq heures et la semaine de Codebuff. |
| QuotaOpencode.swift:153 | https://opencode.ai | La consommation opencode. |
| QuotaGrok.swift:240 | https://cli-chat-proxy.grok.com | Les crédits Grok. |
| LecteurProxy.swift:17 | http://127.0.0.1:8787 | Le statut du proxy Claude, sur votre propre machine. Rien ne sort de l'ordinateur. |
| LecteurProxy.swift:25 | http://127.0.0.1:8788 | Le statut du proxy Codex, même chose. |
| AdressesLicences.swift:9 | https://licences.quotum.app | Le service des licences de l'éditeur, à deux routes : |
| AdressesLicences.swift:5 | https://quotum-licences-test.brickback.workers.dev | Le même service en mode d'essai. Cette ligne n'existe dans le programme que s'il est compilé avec la condition |
Les deux ports de boucle locale ne peuvent pas devenir autre chose. Leur
adresse est lue dans un fichier du disque, et rien dans le format d'une URL n'empêcherait
cette ligne de nommer une machine distante. Le code n'accepte donc que trois écritures —
127.0.0.1, ::1, localhost — et refuse le reste sans
avoir à l'imaginer. C'est une liste de ce qui est admis, pas une liste de ce qui est
interdit : celle-ci laisserait toujours passer la forme qu'on n'aurait pas prévue.
B · Les lignes qu'un navigateur ouvre, et que l'application n'interroge jamais
Ce sont les destinations des commandes « Ouvrir claude.ai », « Ouvrir cursor.com » et consorts. Elles partent au navigateur que vous avez choisi. Quotum ne leur adresse aucune requête et ne lit rien de ce qu'elles répondent.
| Lignes | Adresses | Ce qui s'y joue |
|---|---|---|
| Compte.swift:40, 41, 45–51 | claude.ai · chatgpt.com · devin.ai · cursor.com · app.warp.dev · www.codebuff.com · augmentcode.com · opencode.ai · grok.com | La page d'accueil de chaque outil, une par fournisseur. |
| Compte.swift:124, 125 | claude.ai/download · chatgpt.com/download | Où récupérer l'application de bureau, proposé quand elle n'est pas installée. |
| VueFinEssai.swift:13, 14 | quotum.app/fr/achat · quotum.app/pricing | La page d'achat de ce site, en français si l'application vous parle français, en anglais dans toute autre langue. Le bouton qui la propose, à la fin de l'essai, l'ouvre dans votre navigateur par défaut. |
C · Les lignes qui ne sont pas des destinations
| Lignes | Texte | Ce que c'est |
|---|---|---|
| VueReglages.swift:687 | https://exemple.test | Une URL jetable, jamais ouverte : elle sert à demander à macOS quels navigateurs sont installés, pour peupler le menu des réglages. Le domaine |
| QuotaGrok.swift:87, 89, 101 | https://auth.x.ai::… · https://accounts.x.ai/sign-in | Des portées OAuth, c'est-à-dire des étiquettes comparées à celles du fichier local pour savoir de quelle connexion vient un jeton. Elles ressemblent à des adresses ; aucune n'est jointe. |
| IdentifiantsCodex.swift:159 | https://api.openai.com/auth | Le nom d'une rubrique à l'intérieur du jeton de Codex, lu sur la machine : c'est là qu'il nomme le compte auquel il appartient. Une étiquette en forme d'adresse ; aucune requête n'y part. |
| QuotaAugment.swift:9, 160, 161 | dans des commentaires | De la documentation : la forme de l'adresse de tenant, et le piège de barre finale mesuré en l'écrivant. |
| QuotaWindsurf.swift:312 | dans un commentaire | Un contre-exemple d'attaque, cité pour expliquer pourquoi vérifier le seul schéma d'une URL ne suffit pas. |
Une destination que cette commande ne montre pas
Augment. Son adresse n'est écrite nulle part dans le code : elle est lue
dans ~/.augment/session.json, sous la forme
https://<tenant>.api.augmentcode.com, et n'est acceptée que si elle
reste sous le domaine augmentcode.com. Un grep des adresses ne
peut donc pas la faire apparaître — et c'est la raison pour laquelle nous vous donnons cette
liste au lieu de vous laisser conclure qu'une commande suffit à tout établir.
04 À quelle cadence
Un cycle de mesure part au lancement de l'application, à chaque ouverture du panneau, quand vous demandez une actualisation, après la création d'un compte, et quand vous changez les outils suivis — puis toutes les cinq minutes. Cet intervalle se règle dans les réglages entre une, cinq et quinze minutes ; il ne descend pas sous la minute, par sobriété et non parce qu'un fournisseur l'imposerait.
Et aucun outil n'est interrogé tant que vous n'en suivez aucun. Aucun des neuf n'est suivi à l'installation, et chacun se choisit séparément : à l'installation, aucun jeton n'est lu et aucune requête ne part vers un fournisseur. Seules la vérification des mises à jour et la requête qui ouvre l'essai au premier lancement, qui ne dépendent pas de ce choix, et, une fois par Mac après l'achat, l'activation de la licence interrogent le serveur de l'éditeur — section 05. Ce qui suit décrit donc le cycle d'un outil que vous avez choisi de suivre.
Un cycle, au maximum, c'est :
- deux requêtes vers
api.anthropic.com— la consommation et le profil, lancées ensemble ; - une requête vers chacun des huit autres fournisseurs ;
- deux lectures de boucle locale, qui ne quittent pas l'ordinateur.
« Au maximum » est le mot important. Chaque lecteur cherche d'abord son identifiant sur la machine, et ne part sur le réseau que s'il l'a trouvé. Sur un ordinateur où Cursor n'est pas installé, aucune requête ne part vers Cursor — pas une requête vide, pas un appel qui échoue : rien. De même quand le Trousseau est verrouillé ou qu'une lecture est empêchée. Un parc de deux outils fait donc deux ou trois requêtes par cycle, pas dix.
05 Ce qui ne part nulle part
Aucune de vos mesures, aucun de vos noms de comptes, aucun de vos jetons ne sont envoyés à l'éditeur de Quotum. Il n'existe aucun compte à créer, aucune mesure d'audience dans l'application — celle du site est décrite dans les mentions légales —, aucun rapport d'incident automatique. Ce que l'application mesure reste sur la machine qui l'a mesuré.
Trois exceptions, et elles sont réelles. Quotum interroge le flux de mises à jour de l'éditeur pour savoir s'il existe une version plus récente — c'est ce qui permet à une copie déjà installée d'être prévenue. Rien d'autre n'y remonte : ni compte, ni mesure, ni statistique. Au premier lancement, il ouvre l'essai. Et, une fois par Mac après l'achat, il active la licence. Les deux paragraphes suivants les décrivent. Écrire « il n'y a pas de serveur de l'éditeur » serait faux, et nous ne l'écrivons pas.
L'essai, ouvert par Apple
Au premier lancement, Quotum envoie une requête à licences.quotum.app/essai : un
code tiré au hasard sur ce Mac, et un jeton qu'Apple délivre à ce Mac par DeviceCheck, un
service d'Apple — éphémère, à usage unique, et que seul Apple sait lire. Rien d'autre : ni
numéro de série, ni nom de machine, ni mesure. Le code tient en 32 octets ; il est écrit dans
les préférences et dans l'élément « Quotum — essai » avant que la requête parte. Elle ne porte
aucun cookie et ne suit aucune redirection. Le service des licences transmet le jeton à Apple,
qui garde pour chaque Mac la marque d'un essai déjà servi ; si elle est absente, le service la
pose et rend un ticket signé, vérifié ensuite sur ce Mac, hors ligne : plus aucune requête pour
l'essai. Si elle est déjà posée, l'essai ne s'ouvre pas. Si le service ne répond pas, la même
requête repart d'elle-même une minute plus tard, puis à intervalles doublés, six heures au
plus, tant qu'il reste du temps d'essai ; en attendant, aucun compte n'est mesuré. Sans la
réponse d'Apple, pas d'essai. Dans une machine virtuelle, où DeviceCheck n'existe pas, rien ne
part.
Le code de cette requête est dans Sources/Quotum/Donnees/EssaiEnLigne.swift, et
ce que le service en garde — l'empreinte SHA-256 du code, jamais le code, et deux dates,
trente jours, sans votre adresse IP — est dans le document Vie privée.
L'activation, une fois par Mac
Quand vous choisissez « Activer ce Mac », Quotum envoie une seule requête, à
licences.quotum.app/activer : votre clé de licence, la moitié publique d'une clé
que la puce de sécurité de ce Mac crée pour l'occasion, et une signature qui prouve que la
requête vient de ce Mac. Rien d'autre : ni numéro de série, ni nom de machine, ni mesure. La
moitié publique tient en 65 octets, la signature en 64. La requête ne porte aucun cookie et
ne suit aucune redirection. La réponse est un certificat
d'activation, vérifié ensuite sur ce Mac, hors ligne : plus aucune requête pour la licence. Si
le service ne répond pas, la même requête repart d'elle-même une minute plus tard, puis à
intervalles doublés, six heures au plus, pendant sept jours au plus après le geste « Activer
ce Mac » ; ensuite, plus rien ne part sans un nouveau geste.
Le code de cette requête est dans Sources/Quotum/Donnees/ActivationEnLigne.swift,
et ce que le service en garde — l'identifiant de la licence, l'empreinte de la clé publique et la date,
400 jours, sans votre adresse IP — est dans le document Vie privée.
La seule chose que Quotum écrive sur un compte
Tout le reste est en lecture. Une seule fonction écrit quelque part : consommer un crédit de réinitialisation du quota Codex d'un compte ChatGPT. Elle n'est pas réversible — une réinitialisation dépensée est perdue. Ces crédits sont offerts par OpenAI ou gagnés par parrainage, et valables trente jours.
Elle a deux chemins, et aucun ne part tout seul d'un outil que vous ne suivez pas : sans consentement de mesure, aucun quota n'est mesuré, et rien ne peut donc conclure qu'un compte est à sec.
- À la main, depuis le tiroir d'un compte. Le bouton écrit ce que la dépense coûte avant de la proposer, et rien ne part sans une seconde confirmation.
- Sans demander, si vous l'avez activé. Ce réglage-là est éteint par défaut, il ne s'active qu'après un avertissement qui dit que la dépense pourra avoir lieu la nuit ou en votre absence, et chaque réinitialisation qu'il dépense vous est annoncée par une notification.
Dans les deux cas, les mêmes conditions : un compte ChatGPT, un crédit restant, un épuisement que le serveur a constaté — jamais déduit d'un pourcentage, jamais confondu avec un jeton expiré —, une mesure d'au plus dix minutes, et une échéance de retour encore devant.
06 Vérifier soi-même, sans nous croire
⚠️ Le code de Quotum n'est pas publié au 30 septembre 2026 : le dépôt qui le porte est privé. Ces commandes s'exécutent à sa racine, et ne se rejouent donc que par qui y a accès. Nous les donnons avec ce qu'elles rendent aujourd'hui.
| Affirmation | Commande | Ce qu'elle rend |
|---|---|---|
| Aucun paquet téléchargé, une seule bibliothèque tierce | grep -c '\.package(' Package.swift | 0 Aucun paquet n'est tiré d'un dépôt distant à la compilation. Une seule bibliothèque tierce est embarquée : Sparkle, le cadre de mise à jour, déposée sous forme binaire dans |
| Session réseau sans cache | grep -n ephemeral Sources/Quotum/Donnees/Outils.swift | 65: … URLSessionConfiguration.ephemeral Les lignes voisines posent aussi |
| Les adresses, toutes | grep -rn 'https\?://' Sources/ | Chacune des lignes rendues figure dans l'un des trois tableaux de la section 03, commentée. Nous n'annonçons pas de total : c'est la liste qui se compare, pas un chiffre. Une ligne qui n'y serait pas est ce qu'il faut nous signaler. |
07 Les neuf outils lus
Les fenêtres diffèrent d'un fournisseur à l'autre, et leur durée n'est presque jamais publiée. Quotum affiche celles que chaque fournisseur expose, sans les convertir dans une unité commune qui n'existe pas.
| Outil | Fenêtres publiées | Plusieurs comptes |
|---|---|---|
| Claude | 5 h et 7 j | oui |
| Codex | 7 j, et 5 h selon la formule | oui |
| Windsurf | quotidienne et hebdomadaire | oui |
| Cursor | cycle mensuel | oui |
| Warp | cycle | une ligne |
| Codebuff | bloc de 5 h et hebdomadaire | une ligne |
| Augment | cycle de facturation | une ligne |
| opencode | selon le fournisseur | une ligne |
| Grok | énumérées | une ligne |
Avant d'acheter, lisez aussi l'avertissement. Relire les identifiants qu'un outil a posés sur la machine n'est prévu par aucun des neuf fournisseurs. Ce que cela engage est écrit sur la page d'achat, juste au-dessus du bouton.