Aller au contenu

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à.

Ce qu'une ligne peut dire, relevé sur la capture ci-contre.
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é.

Le panneau de Quotum, sept comptes de quatre outils, une ligne par fenêtre de quota avec sa jauge de dix cases, et l'âge de chaque mesure.
panneau, 320 × 646 pt, taille réelle

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.

Une source par outil. Aucune n'est écrite : Quotum les ouvre en lecture.
Outil Où l'identifiant est lu
Claude

Trousseau, élément Claude Code-credentials, par /usr/bin/security.

Warp

Trousseau, éléments dev.warp.Warp-Stable et dev.warp.Warp-Stable.tui, par /usr/bin/security.

Codex

~/.codex/auth.json, ou $CODEX_HOME/auth.json.

Windsurf

~/.local/share/devin/credentials.toml, et la base state.vscdb de Windsurf ou de Devin dans ~/Library/Application Support.

Cursor

La base state.vscdb de Cursor dans ~/Library/Application Support, clé cursorAuth/accessToken.

Codebuff

~/.config/manicode/credentials.json.

Augment

~/.augment/session.json.

opencode

~/.local/share/opencode/auth.json, entrée opencode-go.

Grok

~/.grok/auth.json, ou le fichier que désignent $GROK_AUTH_PATH et $GROK_HOME. La variable d'environnement GROK_DEPLOYMENT_KEY, si elle est posée, ne sert que lorsque le fichier ne porte aucune session.

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.

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:75https://api.anthropic.com

Les fenêtres de quota du compte Claude, et le profil qui le nomme.

QuotaCodex.swift:48https://chatgpt.com

La fenêtre de quota du compte ChatGPT.

QuotaWindsurf.swift:59https://server.codeium.com

Le quota Windsurf. L'hôte peut venir du fichier de l'utilisateur ; il n'est alors accepté que sous codeium.com, windsurf.com ou devin.ai.

QuotaCursor.swift:288https://cursor.com

Le cycle mensuel de Cursor et sa dépense à la demande.

QuotaWarp.swift:197https://app.warp.dev/graphql/v2

Le cycle de Warp.

QuotaCodebuff.swift:138https://www.codebuff.com

Le bloc de cinq heures et la semaine de Codebuff.

QuotaOpencode.swift:153https://opencode.ai

La consommation opencode.

QuotaGrok.swift:240https://cli-chat-proxy.grok.com

Les crédits Grok.

LecteurProxy.swift:17http://127.0.0.1:8787

Le statut du proxy Claude, sur votre propre machine. Rien ne sort de l'ordinateur.

LecteurProxy.swift:25http://127.0.0.1:8788

Le statut du proxy Codex, même chose.

AdressesLicences.swift:9https://licences.quotum.app

Le service des licences de l'éditeur, à deux routes : /essai, que EssaiEnLigne.swift y ajoute — l'ouverture de l'essai, au premier lancement —, et /activer, que ActivationEnLigne.swift y ajoute — l'activation de votre licence, une fois par Mac, sur votre geste. Rien d'autre n'y part — section 05.

AdressesLicences.swift:5https://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 LICENCES_TEST, réservée aux copies de développement.

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 .test est réservé et ne se résout nulle part.

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 :

« 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.

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 Tiers/ — grep -c binaryTarget Package.swift rend 1 — et attribuée dans THIRD-PARTY-LICENSES.md. Ne pas confondre avec grep -c dependencies, qui rend 2 : l'une lie l'application à Sparkle, l'autre lie la cible de tests à l'application.

Session réseau sans cache grep -n ephemeral Sources/Quotum/Donnees/Outils.swift

65: … URLSessionConfiguration.ephemeral

Les lignes voisines posent aussi urlCache = nil et une politique qui ignore tout cache local.

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
Claude5 h et 7 joui
Codex7 j, et 5 h selon la formuleoui
Windsurfquotidienne et hebdomadaireoui
Cursorcycle mensueloui
Warpcycleune ligne
Codebuffbloc de 5 h et hebdomadaireune ligne
Augmentcycle de facturationune ligne
opencodeselon le fournisseurune ligne
Grokénuméréesune 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.

Prix et achat