French family benefits (CNAF corpus)

Registre officiel IA et agents

French family-benefit models (CNAF corpus) as executable rules with sources; independent demo

Installation

Ajoutez ceci à la configuration MCP de votre client (Claude Desktop : claude_desktop_config.json ; Cursor : .cursor/mcp.json ; VS Code et les autres utilisent la même forme « mcpServers »).

Remote (streamable-http)
Claude Code
claude mcp add --transport http french-family-benefits-cnaf-corpus 'https://mcp.arxo.io/mcp/cnaf'
Configuration JSON (Claude Desktop, Cursor, VS Code)
{
    "mcpServers": {
        "french-family-benefits-cnaf-corpus": {
            "type": "http",
            "url": "https://mcp.arxo.io/mcp/cnaf"
        }
    }
}
NPM package @arxo/mcp-cnaf
Claude Code
claude mcp add french-family-benefits-cnaf-corpus -- npx -y @arxo/mcp-cnaf@0.1.1
Configuration JSON (Claude Desktop, Cursor, VS Code)
{
    "mcpServers": {
        "french-family-benefits-cnaf-corpus": {
            "command": "npx",
            "args": [
                "-y",
                "@arxo/mcp-cnaf@0.1.1"
            ]
        }
    }
}

Documentation

Tirée du README du projet sur GitHub, actualisée chaque semaine. Les liens ouvrent GitHub.

Sommaire
  1. arxo-cnaf
  2. Choose your starting point
  3. What it answers
  4. Use from Node.js
  5. Quick start
  6. Example: one case, two readings
  7. Rules and exceptions
  8. How to read a model
  9. At a glance
  10. Browse the models
  11. Formalization depth
  12. Find your way around the repository
  13. Release and verification
  14. Found an error?
  15. Cite this snapshot
  16. Rights and contact

arxo-cnaf

Explore French benefit rules as executable models, and trace their answers back to published legal sources.

Explore the demo · Run an example · Read the book

First of all, a demonstration. This repository shows what modelling legislation with Arxo can do: French family-benefit law written as executable canons, with the source of every answer. It is an independent model built from published French law for teaching and demonstration. It does not claim legal accuracy or completeness, it is not an implementation by or for the Cnaf or any French authority, and its answers are not legal advice. For a real file, rely on the official texts and the competent bodies.

Choose your starting point

I want to…Start here
Explore saved cases and their sources in a browserFrench Benefits Lab — no installation
Use a model from JavaScript or TypeScriptNode.js package
Run a local MCP with npx, connect a client or deploy independentlyCNAF MCP — stdio, connection and pinned image
Run a scenario on my machineQuick start
Find the model for a benefitBrowse the models
Reproduce a chapter of the bookBook examples
Rebuild a package or check the registryReproducibility guide

French Benefits Lab, captured on 12 October 2026. Open the demo and choose “Explore a saved family case” to inspect its inputs, answer and French sources. The lab presents its own recorded evidence release; its coverage and version are separate from this repository's export.

What it answers

QuestionExplore a concrete example
How does a selected reading change the amount?One APL case, two readings
Why is an answer withheld?The same APL case without a selected reading
Where do an amount and its parameters come from?Follow an instruction to a saved calculation
What changes between two legal dates?Compare saved dates in the lab
Which facts, duties and stages does a case involve?Browse the book's fictional case files

The browser examples belong to the lab's recorded release. The local APL example below belongs to this repository's pinned model.

Use from Node.js

Node.js 20+. The pinned models are available as @arxo/canon-fr-benefits. Load one world and ask it through the common @arxo/law API:

npm install @arxo/law@0.4.2 @arxo/canon-fr-benefits@0.1.1
import { open } from '@arxo/law';
import { loadModel } from '@arxo/canon-fr-benefits/apl';
import { household, caseInput } from '@arxo/canon-fr-benefits/examples/apl';

const model = await loadModel();
const apl = await open(model.spec, {
  offline: true,
  local: { packages: { [model.spec]: model.package } },
});
const answer = await apl.collect('aide_formule', [household, '?amount'], caseInput);
console.log(answer.evaluationStatus); // COMPUTED
console.log(answer.value[0].value);   // '20.17' (EUR, formula amount)
console.log(apl.unfold('aide_formule', { depth: 2 }).text);

The input is the technical APL case below, with PpPlancherFinal selected. The answer includes the engine's canonical document, proof and hashes. This is a formula amount, not a final payable benefit. The package contains all 21 models; loading a subpath parses only the selected world.

Package API, model exports, TypeScript and verification limits. For maintainers: how to ship a canon with several models. Source models are pinned to the original public export; npm delivery checks are separate from full corpus acceptance, which remains not checked.

Quick start

You need Git, Node.js 20+ and npm. This example uses the released law 0.2.2 command-line tool, which executes the models. The package already includes its pinned dependency; no Python, source restoration or registry installation is needed for this scenario.

npm install -g @arxo/cli@0.2.2
law --version

git clone https://github.com/arxohq/arxo-cnaf.git
cd arxo-cnaf/packages/fr.apl

law test . --file tests/finish-lecture-pp.lawtest --json

This runs seven scenarios about the personal contribution in housing aid (article D. 823-17). Success means the command exits with code 0 and the JSON report records no failed scenarios. These are checks against the model's declared expectations, not certification of legal accuracy. The successful report includes these fields:

{"ok": true, "passed": 7, "failed": 0, "notRun": 0, "total": 7}

What to explore next: compare the readings, then open the scenario file.

Need help getting started? See Troubleshooting.

Example: one case, two readings

The model records two readings of the personal contribution in article D. 823-17. The choice enters at SensMinimumPp, an interpretation group that requires exactly one of PpPlancherFinal or PpLitteral.

The scenario fixes a single person with no dependants, zone II in metropolitan France, legal date 15 June 2024, supplied resources of €4,000 and zero rent. It also supplies ordinary housing, sole tenancy, zero solidarity rent reduction and no AAH/AEEH beneficiary. Zero rent deliberately isolates the reading difference; this is a technical probe, not a realistic aid claim.

The pinned parameters used in this probe are P0 = €37.91, Tp = 0.0283, R0 = €5,186, L = €0 and C = €58.08.

Selected readingPersonal contribution PpFormula amount Af
PpPlancherFinal — keep a final floor at P0€37.91€20.17
PpLitteral — apply the formula without that final floor€4.3462€53.7338
No reading selectedINTERPRETATION_REQUIREDINTERPRETATION_REQUIRED

Both readings feed the same participation_personnelle relation. The same AideFormule rule then uses Af = L + C − Pp. These are exact formula amounts in the probe; neither is presented as the final payable benefit. The model leaves the choice explicit rather than selecting a reading for you.

The rules behind the amount

This is the native unfold response for aide_formule, rendered as a tree from the published fr.apl@0.1.0 world. Each rule exposes its premises, strength and source anchors. The two contribution producers are both visible: ParticipationPersonnelle and ParticipationPersonnelleLitterale.

No case, legal date or reading is selected. This shows the model's available rules, not which rules applied to a particular answer. The depth-limit markers come from the engine. Repeated article locators are grouped visually; the JSON retains every dated source anchor.

Full native JSON · Native text and labels · Reproduce these trees

Follow the map in the actual model:

StepInspect
Source references and captured publications01-sources.law — CCH_D823_17, CCH_D823_16 and their dated versions
Selection and literal branch24-lecture-pp.law — SensMinimumPp, ParticipationPersonnelleLitterale
Final-floor branch and downstream formula02-calcul-locatif.law — ParticipationPersonnelle, AideFormule
Both readings and the missing-selection checkfinish-lecture-pp.lawtest — the seven scenarios run in the Quick start

Rules and exceptions

The same view for droit_ouvert shows a defeasible opening rule alongside its exception rules (defeater). Expanding surface_insuffisante exposes its own producers and an exception to that condition. fact, derived, judgment and test are distinct kinds of premise in the native response.

This is a map of declared rule structure across the published world, not an eligibility finding for a person. No case, date or reading is selected.

Full native JSON · Native text and labels · Declared exception scenarios

How to read a model

Published text → executable rules → dated case facts → answer and evidence.

A canon is a package containing a legal model, its source references and checks. A scenario supplies facts, dates and any selected interpretation, then states the expected answer. A pinned source is a captured publication identified by its provenance and a content hash, so the model's input can be checked later.

The rules are data in .law files, executed by law. This repository carries no separate implementation of the benefit formulas in application code. Models have individual scope and date boundaries; read a package's source and scenarios before applying its answers to a different case.

At a glance

This snapshotRecorded value and evidence
SubjectFrench benefit models, including housing, family, disability, care and income support; each package has its own scope
Canon export12 October 2026 · public source revision f2efcc6
Source packages and scenarios21 packages · 1,985 declared scenarios · packages.json
Model semanticslaw.core/0.2.11 · fr.apl/law.lock
CLI for the Quick startReleased law 0.2.2; expected report: 7 passed, 0 failed
Registry publications22 packages including the dependency closure · reproducibility guide

Browse the models

The names below identify the subject of each model, not a claim of complete coverage of that benefit. The version and scenario inventory records the exported package versions and dependency counts.

Housing
SubjectModel
Housing aid (APL / AL)fr.apl
Housing-aid payment stagefr.apl.versement
Income used for housing aidfr.tax.income_for_apl
Family and children
SubjectModel
Family allowances (AF)fr.pf.af
Early-childhood benefits (PAJE)fr.pf.paje
Childcare supplement (CMG)fr.pf.cmg
Family supplement (CF)fr.pf.cf
School-start allowance (ARS)fr.pf.ars
Family support allowance (ASF)fr.pf.asf
Disability and care
SubjectModel
Adult disability allowance (AAH)fr.css.aah
Disabled-child education allowance (AEEH)fr.pf.aeeh
Parental presence allowance (AJPP)fr.pf.ajpp
Caregiver allowance (AJPA)fr.css.ajpa
Income support
SubjectModel
Active solidarity income (RSA)fr.casf.rsa
Activity bonusfr.css.prime_activite
Resources for minimum-income benefitsfr.minima.ressources
Shared rules and parameters
SubjectModel
Family-benefit foundationsfr.pf.core
Benefit payments and debt recoveryfr.prestations.versement
Revaluationfr.css.revalorisation
Social-security ceiling (PASS)fr.css.pass
Minimum wage (SMIC)fr.travail.smic

Formalization depth

Depth is recorded per model, against source revision f2efcc6. The unit is an article in a pinned publication edition: the same article can occur in several editions. Identical document bytes are counted once per package. Imports are excluded.

Executable / measured counts units with at least one deriving node. The other levels are I — executable only under an explicit interpretation; A — anchored without a deriving rule; S — source fragment only; N — no model node. An executable unit can still be only partly expressed. These counts describe the pinned excerpts, not the percentage of a benefit or of French law that is completely formalized.

ModelExecutable / measuredOther I / A / S / NRules / normsScenarios
fr.apl1,352 / 1,654 †0 / 166 / 136 / 0480 / 70406
fr.apl.versementnot measured—9 / 011
fr.casf.rsa422 / 5491 / 0 / 126 / 0155 / 34133
fr.css.aah168 / 196 †0 / 0 / 28 / 064 / 470
fr.css.ajpa38 / 600 / 0 / 22 / 018 / 544
fr.css.passnot measured—13 / 026
fr.css.prime_activite693 / 813 †0 / 0 / 120 / 0344 / 17201
fr.css.revalorisationnot measured—3 / 012
fr.minima.ressources105 / 1400 / 0 / 35 / 0102 / 031
fr.pf.aeeh79 / 1100 / 1 / 30 / 0100 / 1950
fr.pf.af103 / 103 †0 / 0 / 0 / 084 / 373
fr.pf.ajpp286 / 3880 / 6 / 96 / 082 / 1091
fr.pf.ars143 / 1800 / 1 / 36 / 016 / 226
fr.pf.asf163 / 1910 / 0 / 28 / 023 / 336
fr.pf.cf103 / 107 †0 / 0 / 4 / 047 / 696
fr.pf.cmg37 / 44 †0 / 0 / 7 / 0180 / 745
fr.pf.core998 / 1,3710 / 0 / 373 / 0251 / 36326
fr.pf.paje29 / 380 / 0 / 9 / 060 / 487
fr.prestations.versementnot measured—183 / 23138
fr.tax.income_for_apl1 / 10 / 0 / 0 / 04 / 03
fr.travail.smic26 / 420 / 0 / 16 / 053 / 080

† Partial measurement: some own publications or declared documents are outside the measured units; the report identifies them. Not measured means no declared source-document division was available for this method, not that the model has no executable rules. Rules / norms count own rule nodes and norm templates separately. Scenarios are the recorded export inventory; they were not rerun for this documentation update.

Method, boundaries and reproduction · Per-unit evidence

Find your way around the repository

PathWhat it contains
packages/Model sources, captured texts, scenarios and pinned dependencies, one directory per canon
registry/Installable publications and their dependency closure — 22 packages, including dependencies; not a duplicate of the source tree
tools/Scripts to obtain the pinned build tools and restore withheld sources
packages.jsonExported package versions, hashes, dependency lists and recorded scenario outcomes
toolchain.lock.jsonExact build-tool release and its SHA-256
WITHHELD.jsonAddresses and hashes of source files that are not redistributed

The packages contain the public consumer kit; authoring reports and maintenance scripts are excluded. See public package contents for the preservation rules and the read-only guard.

For a case package that consumes these canons, follow Install the book examples. For compilation, scenario checks, replay and release rebuilds, follow Rebuild a source package.

Release and verification

Published with Law as Code in Practice: French Family Benefits (Law as Code by Country · Volume 1), available at Arxo Books.

The canons were exported on 12 October 2026 from Arxo commit 7206473829, with 1,985 scenarios passing on law 0.2.1 (law.core/0.2.11). The book's reproduction kit was checked with released law 0.2.2. These are recorded execution results for this export.

The packages workflow compiles each package, runs its scenarios on both evaluators, replays saved evaluations and rebuilds from the release using pinned law-package-tools 0.3.0. The registry workflow checks schemas, addresses and hashes. See the reproducibility guide for requirements and commands.

Found an error?

You do not need to know the rule language to report a problem. Open an issue with:

  1. Where: the package, article or scenario, and the legal date.
  2. What happened: fictional or anonymized input facts, the selected reading, your law --version, and the returned answer or test report.
  3. What you expected: the relevant published source, its date/version, and the reasoning that leads to a different result.

Use fictional or anonymized examples; omit personal records and identifiers. If you mean the browser lab, include its page link and recorded release. A difference between readings may need an explicit alternative rather than a change to a shared rule. A confirmed defect should be accompanied by a scenario that reproduces it.

Cite this snapshot

Arxo (2026). French benefit rules on Arxo: executable, source-linked models. Canon export of 12 October 2026, public source revision f2efcc6788465484f145146a3ed5f76b13d41703.

@software{arxo_french_benefits_2026,
  author = {Arxo},
  title  = {French benefit rules on Arxo: executable, source-linked models},
  year   = {2026},
  url    = {https://github.com/arxohq/arxo-cnaf/tree/f2efcc6788465484f145146a3ed5f76b13d41703},
  note   = {Canon export: 12 October 2026; semantics: law.core/0.2.11}
}

For a particular result, also identify its package version, scenario or case, legal date and selected reading, and retain the execution evidence and hashes. The source revision above pins the exported canons; the lab is a separate release.

Rights and contact

Code and model: Apache-2.0. Captured publisher texts retain their own reproduction terms, listed per package in NOTICE; the code licence does not cover those texts. Some source files are withheld from redistribution.

Maintainer: Rifat Dzhumagulov · hi@arxo.io.

Questions fréquentes

Qu'est-ce que French family benefits (CNAF corpus) ?

French family-benefit models (CNAF corpus) as executable rules with sources; independent demo

Comment installer French family benefits (CNAF corpus) ?

Il fonctionne comme serveur distant. Dans Claude Code : claude mcp add --transport http french-family-benefits-cnaf-corpus 'https://mcp.arxo.io/mcp/cnaf'. Pour les autres clients, collez la configuration JSON de cette page dans leurs réglages MCP.

Faut-il une clé API pour French family benefits (CNAF corpus) ?

Son entrée au registre n'indique aucune clé ni secret obligatoire. Certaines fonctions peuvent tout de même demander un compte auprès du service auquel il se connecte.

French family benefits (CNAF corpus) est-il open source ?

Oui. Son code est sur GitHub sous licence Apache-2.0.

Qui maintient French family benefits (CNAF corpus) ?

Il est publié par arxohq. AI.tn le référence sans le maintenir ni le recommander.

Issu du registre MCP officiel. Être listé n'est pas une recommandation : vérifiez le code et les permissions d'un serveur avant de lui donner accès à vos données.