Agent skills7 min read
French typography skills compared: Antidote, JoliTypo
Agent skills, libraries and checkers that handle French no-break spaces, guillemets and apostrophes, what each does well, and the skill I use for i18n files.
On a phone, a French price wraps as 2 at the end of one line and 450 $ at the start of the next, and a question mark sits alone at the start of a line. Both come from ordinary spaces where French needs a no-break space, and readers in Québec notice. Coding agents write the plain space by default, so the fix has to be checked rather than remembered. I found one other agent skill with a script, and several good libraries and checkers. None of the ones I tested both reads a JSON message file without touching its keys and fails a CI run on French spacing, which is what a bilingual site needs, so I use french-typography from molveau/skills. If your French copy lives in Word documents or long prose, Antidote or Grammalecte will serve you better, and each section below says when.
The contenders
| Tool | Author | Licence | Best at | Lacks |
|---|---|---|---|---|
| typography | Gleb Kalinin | MIT | An agent skill with a script for prose in four languages, with --check for CI |
Québec rules and JSON safety: in my test it put guillemets around JSON keys |
| LanguageTool | LanguageTool | LGPL-2.1 | Grammar and spelling, with a strict French spacing rule | Fixing files; the strict rule is off by default, and it needs a Java server or the API |
| Grammalecte | Grammalecte project | GPL-3.0 | A free French grammar checker that also checks typographic spaces, in LibreOffice, Firefox or a terminal | Knowledge of JSON or JSX; it reads plain text |
| JoliTypo | JoliCode | MIT | Fixing French typography in HTML from PHP, Symfony or Twig | A check mode; its fr_CA locale follows English spacing |
| Richtypo | Artem Sapegin | MIT | Applying French rules to Markdown or HTML at build time in Node | A check mode and a Québec mode |
| Antidote | Druide informatique | Commercial | Proofreading by a writer, with a spacing setting for each sign | Anything a repository or CI can run |
| french-typography | Molveau Studio | MIT | Checking and fixing JSON, Markdown and MDX for Québec or France, with a CI guard | Grammar, spelling, and files other than JSON, Markdown and MDX |
Each one, fairly
typography, by Gleb Kalinin
This is the only other agent skill I found that runs a script instead of asking the model to remember the rules. It wraps the typograf library with its own rules for German and French, covers Russian, English, German and French, and offers --check with an exit code, --diff and --in-place. On French text it follows France's thin-space habits: a narrow no-break space before : as well as ; ! ?, where both the OQLF and the Imprimerie nationale want a full no-break space before the colon. In my test it also removed the space before %, left thousands separated by plain spaces and turned - into an em dash. Run on a .json file, it wrapped the keys in guillemets and broke the file; its own SKILL.md says to pipe i18n strings through by hand. Install it for multilingual Markdown prose where France's conventions suit you.
I also found a handful of instruction-only skills on French typography. They describe the rules but run no check, so the result still depends on the model getting every space right.
LanguageTool
LanguageTool is a mature open-source grammar checker. Its French rule FRENCH_WHITESPACE flags a missing space before ? ! ; : but accepts an ordinary one; the stricter FRENCH_WHITESPACE_STRICT requires a no-break or narrow no-break space, and it is tagged as picky and off by default. It reports, it does not rewrite files, and it runs as a Java server or through the hosted API. Use it when you want grammar and spelling on long-form French as well, and turn the strict rule on.
Grammalecte
Grammalecte is a free French grammar checker that lists no-break spaces, apostrophes and guillemets among its typographic checks. It runs in LibreOffice, Firefox and Thunderbird, as a server, and as a command-line tool with JSON output. It reads plain text, so a message file has to be flattened first. Use it when writers want a free checker in their editor, before the copy reaches the repo.
JoliTypo, by JoliCode
JoliTypo fixes typography in HTML from PHP, with Symfony and Twig integrations and a command-line PHAR. For fr_FR, fr_BE and fr_CH its punctuation fixer puts a no-break space before : and a narrow one before ; ! ?, and it handles guillemets. Its README says the fr_CA locale uses no space before punctuation and follows English conventions, which is wrong for the colon in Québec, so use fr_FR there. Install it if your site renders HTML from a PHP CMS.
Richtypo, by Artem Sapegin
Richtypo is a dependency-free Node library with French rules: a narrow no-break space before ? ! : ; and inside guillemets, inserted even where no space was typed, and straight double quotes turned into guillemets. Its default French set also converts some hyphens to em dashes, which I avoid in copy. It only fixes, with no check mode or exit code. Use it to apply typography when you render Markdown or HTML, in a project that follows France's conventions.
Antidote, by Druide informatique
Antidote is the corrector many Québec writers already pay for. Druide's guide says its typography view corrects the kind of space required around each punctuation mark, and its Spaces settings choose a breaking, no-break, thin or no space for each context, including around % and currency signs. It works on what a person is writing, not on files in a repository. Keep it for drafting and proofreading, and pair it with a check in CI for what ships.
What french-typography adds
- The exact code points. A table of the cases with the character each needs: U+00A0 before
: ; ! ?and inside « », U+202F between groups of thousands, U+00A0 between a number and$or%, the curly apostrophe U+2019, and no em dash in copy. - Both conventions, sourced. The OQLF's spacing table for Québec, which allows no space or a thin space before
; ! ?, the Imprimerie nationale's thin space for France, and a stated house default, a full no-break space before all four marks, because it renders the same in every font. A client's style guide can switch the rule in one place. - A script that knows message files.
fr-typo.mjsreads JSON, Markdown and MDX. In JSON it touches string values only, never keys. In Markdown it skips fenced, indented and inline code. It leaves URLs, times such as10:30, ICU placeholders such as{count}and phone numbers alone. - Check, then fix.
--checkexits 1 on findings and prints JSON with--json, so CI can fail on it.--fixnormalises the spaces that already exist and never invents one, and running it twice changes nothing. A missing space, as inPrix: 5, is reported for a person to fix. - A CI guard recipe. A test for next-intl or i18next that walks the French messages, fails on any string the rule would change, and grows namespace by namespace so legacy copy does not block the first commit.
- Honest limits. No grammar or spelling, no
.po, HTML or JSX files, and no Québec-only mode out of the box: switching the default to no space before; ! ?means editing the script.
Install
The skill alone, with the skills CLI:
npx skills add molveau/skills -s french-typographyThe Québec bundle (french-typography and loi-25-website):
npx skills add molveau/skills -s french-typography -s loi-25-websiteIn Claude Code, all eleven skills as one plugin:
/plugin marketplace add molveau/skills
/plugin install molveau-skills@molveauEvery skill and bundle is on the skills page, and the source is at github.com/molveau/skills. Related reading: a bilingual website and Law 96 and the Law 25 skills comparison.
Checklist
- The project has chosen one convention before
; ! ?(house default, strict Québec or France) and uses it everywhere. - Every
:in French copy is preceded by U+00A0. - Prices read
1 900 $, with U+202F in the number and U+00A0 before the sign. - Apostrophes are curly and there is no em dash in the copy.
-
fr-typo.mjs --checkruns on the French files in CI and fails the build on a finding. - Writers proofread in their own tool; the CI check covers what ships.
Stanislas Molveau
Founder, Molveau Studio
I design and build web and mobile products, and write these guides from teardowns of real apps rather than theory.