Aller au contenu
Ghostchars

Ghostchars dans votre terminal

Le même moteur que ce site, en un seul paquet npm : un outil en ligne de commande, une barrière pour la CI et un serveur MCP que votre agent de codage peut appeler. Node 22 ou plus récent, et rien ne quitte votre machine.

  • Gratuit, licence MIT
  • Aucun appel réseau
  • Skill, serveur MCP, hooks
npx -y ghostchars clean -i notes.md

Il n'y a pas d'étape d'installation : npx récupère la version 1.0.2 et la lance. Node 22 ou plus récent est la seule exigence, et le paquet n'a aucune dépendance à l'exécution.

Ce qu'il fait

Quatre commandes, un seul moteur. Les interrupteurs de nettoyage et leurs noms sont exactement ceux de ce site et de l'application Mac, si bien qu'un niveau veut dire la même chose partout.

clean

Lit l'entrée standard ou les fichiers que vous nommez et écrit le texte nettoyé sur la sortie standard, ou réécrit chaque fichier sur place avec -i, de façon atomique. Avec --check, il n'écrit rien et sort avec le code 1 si quelque chose changerait.

inspect

Liste chaque caractère suspect avec sa ligne, sa colonne, son point de code, son nom Unicode et l'interrupteur qui agirait dessus. Il ne modifie rien et sort avec le code 1 quand il trouve quelque chose.

report

Mesure les habitudes qui donnent à un brouillon l'air d'avoir été écrit par une machine : phrases de longueur uniforme, transitions toutes faites, mots révélateurs, densité de tirets, formules prudentes. Ce n'est pas un détecteur et il n'émet aucune probabilité.

check

Tient toute une arborescence à un niveau et affiche chaque fichier qui changerait, avec la position exacte des caractères. C'est la commande pour la CI et pour un hook pre-commit.

clean et inspect ouvrent les .docx, .odt et .html aussi bien que le texte brut, et nettoient un document selon sa structure plutôt que comme un flux d'octets. Le PDF est hors périmètre.

Un niveau est un ensemble nommé d'interrupteurs : une personne ou un agent choisit un mot au lieu de douze options. default ne retire que ce qui est invisible, text normalise aussi les espaces et la ponctuation typographique, et max active tout et perd de l'information.

La barrière en CI

Une seule étape, aucune action à installer, code de sortie 1 en cas de résultat. Ne passez jamais --fix en CI : cela fait passer un build au vert sans que personne ne lise ce qui a changé.

npx -y ghostchars check --bar text

Avec --sarif, la même exécution est imprimée sous forme de journal SARIF 2.1.0, un résultat par caractère fautif, et l'analyse de code de GitHub affiche les résultats directement dans la pull request.

- run: npx -y ghostchars check --bar text --sarif > ghostchars.sarif || true
- uses: github/codeql-action/upload-sarif@v3
  with:
    sarif_file: ghostchars.sarif

Un ghostchars.json à la racine de l'arborescence indique quels fichiers sont tenus à quel niveau, et épingle un fichier qui change d'exactement N caractères à dessein. Une épingle est vérifiée dans les deux sens : un fichier corrigé en douce échoue jusqu'à ce qu'il soit désépinglé.

Sans chemin, check trouve les fichiers avec git ls-files, et respecte donc les règles d'exclusion que votre dépôt a déjà. Les fichiers binaires, les fichiers de plus de 2 Mio et ceux qui ne sont pas en UTF-8 valide sont ignorés sans faire échouer l'exécution.

Pour les agents de codage

Le paquet livre les fichiers dont un agent a besoin pour lancer la barrière sans qu'on le lui demande à chaque fois. Prenez-en un ou prenez-les tous : ils n'entrent pas en conflit, et aucun n'est un installateur.

Le skill

Un seul répertoire, SKILL.md et deux fichiers de référence, lus par Claude Code, Codex, Cursor, VS Code avec Copilot et Gemini CLI. Il dit à l'agent quand lancer l'outil et quoi faire de chaque type de résultat. Des fichiers de règles pour Cursor, Windsurf et Copilot, et un bloc à coller dans AGENTS.md, CLAUDE.md et GEMINI.md, sont à côté.

Le serveur MCP

ghostchars mcp parle le Model Context Protocol sur l'entrée et la sortie standard et expose quatre outils en lecture seule : clean_text, inspect_text, style_report et check_paths. Un cinquième, clean_files, écrit sur le disque et n'est enregistré qu'avec --allow-write. Des extraits de configuration sont fournis pour six hôtes.

Le hook Claude Code

Un hook PostToolUse qui vérifie chaque fichier que l'agent écrit et lui renvoie le résultat en retour, pour qu'il corrige dans le même tour. Un script et une clé de réglages.

Le hook pre-commit

Un bloc à coller dans .pre-commit-config.yaml : un hook local qui passe sur les fichiers texte indexés, pour que rien de sale ne soit commité, par qui que ce soit. Comme l'étape CI, il ne passe jamais --fix.

{
  "mcpServers": {
    "ghostchars": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "ghostchars", "mcp"]
    }
  }
}

L'extrait pour Claude Code. Les mêmes trois mots, npx -y ghostchars mcp, sont toute la configuration pour Codex, Cursor, VS Code, Gemini CLI et Windsurf.

Confidentialité

Tout s'exécute sur votre machine. Il n'y a aucun code réseau dans le paquet : pas de télémétrie, pas de vérification de mise à jour, pas de vérification de licence, pas de compte. Les seuls octets qui quittent le processus sont ceux qu'il imprime. Rien de ce que vous nettoyez, inspectez ou analysez ne va où que ce soit.

Le même moteur, partout ailleurs

L'application Mac

Un nettoyage à l'échelle du système derrière un seul raccourci, dans toutes les applications où vous écrivez, et un nettoyage par lots pour les documents. Le raccourci est gratuit 20 fois par semaine ; $24 une fois lève la limite.

Application Mac

L'extension de navigateur

Gratuite, illimitée dans sa fenêtre et son menu contextuel, et elle ne collecte rien. Elle fonctionne dès aujourd'hui, dans Chrome et les navigateurs bâtis dessus.

Extension Chrome

Les questions qu'on nous pose vraiment

De quoi a-t-il besoin ?

De Node 22 ou plus récent, et de rien d'autre. Le paquet n'a aucune dépendance à l'exécution, et npx le récupère à la première utilisation : pas d'installation globale, sauf si vous en voulez une.

Envoie-t-il des données quelque part ?

Non. Il n'y a aucun code réseau dans le paquet : pas de télémétrie, pas de vérification de mise à jour, pas de vérification de licence. Vous pouvez le lancer sur une machine sans connexion et il se comporte exactement pareil.

Quel rapport avec le script Python ?

C'est le même moteur. Les interrupteurs de nettoyage, leurs noms et leur sens sont ceux de la CLI de référence en Python, et des fixtures de référence tiennent clean et inspect à l'octet près. Ce qui est nouveau : le raccourci des niveaux, la sortie JSON et SARIF, la commande check avec sa configuration et ses épingles, et le serveur MCP.

report me dit-il si un texte a été écrit par une IA ?

Non. Il mesure des habitudes qui donnent à un brouillon l'air d'avoir été écrit par une machine, pour que vous puissiez les corriger, et il n'émet ni probabilité, ni score, ni verdict. Il ne décide jamais si un texte a été généré.

check ouvre-t-il les documents ?

Non. check parcourt un dépôt et n'ouvre pas les archives zip ; clean et inspect sont les commandes qui lisent les .docx, .odt et .html. Rien dans le paquet ne lit le PDF, les images ou Google Docs.

La CLI est-elle gratuite ?

Oui, et il n'y a pas d'offre payante derrière. Le paquet est sous licence MIT, la barrière, le serveur MCP et les intégrations y sont tous, et la licence vendue sur la page des tarifs concerne l'application Mac.

Statistiques anonymes ?

Ghostchars traite votre texte dans le navigateur et ne l'envoie jamais nulle part. Nous aimerions comptabiliser les pages vues avec un service de mesure auto-hébergé et sobre en cookies. Jamais le moindre contenu.