@[entity:id]{text}
Binds the current lexical context to an addressable subject. Facts that follow resolve against this entity until another entity is introduced or a scoped entity block ends.
Prototype. ProveML is in its prototyping phase, version 0.x: the markup, the verifier's API and the review page still move between releases, and the canonicalisation contract has not been audited. Try the idea, tell us where it breaks, do not build on it yet as if it were stable.
A document-native verification layer for AI-generated text. Models stay open-ended; important claims become deterministic, addressable, and auditable.
@[entity:id]{text}
%[field]{value}
?[label: THRESHOLD]{text}
Most grounding systems verify around text. ProveML puts the verification boundary inside the text itself. Entity mentions, direct facts, and thresholded inferences can all be checked against a fact store and registry without another model in the loop.
It is designed to be easy to pull into an existing flow: one JavaScript package, one verifier, one optional renderer, and no extra model call to perform verification.
It also ships with built-in TypeScript declarations, so JavaScript and TypeScript agents can consume the same small runtime without extra wrappers.
Binds the current lexical context to an addressable subject. Facts that follow resolve against this entity until another entity is introduced or a scoped entity block ends.
Checks direct fact reproduction against the current entity path. Equality is exact against the fact store’s canonical representation, including units when present.
Verifies qualitative claims through registered predicates such as numeric ranges, missing-value checks, membership, and cross-entity comparisons.
ProveML works best when agents treat it as a small authoring language rather than decorative markup. Bind an entity, reproduce exact stored facts with fact references, and express qualitative judgments through registered thresholds.
@[company:aapl]{Apple Inc.} reported revenue of
%[revenue]{416161000000 USD} with net income of
%[netIncome]{112010000000 USD}.
?[profitable: IS_PROFITABLE]{This is a highly profitable company}.
ProveML does not need a heavy importer. It expects a flat fact store with keys like company:aapl.revenue and optional unit metadata such as company:aapl.revenue._unit.
If your source is already structured JSON, CSV rows, or query results, the mapping step is usually small. That mapping code is often a good place to use AI, because it remains short, inspectable, and easy to test.
Once you have a first draft, run npx proveml doctor --facts facts.json to catch obvious key-shape, unit, and missing-name issues before debugging markup.
{
'company:aapl.name': 'Apple Inc.',
'company:aapl.revenue': 416161000000,
'company:aapl.revenue._unit': 'USD',
'company:aapl.netIncome': 112010000000,
'company:aapl.netIncome._unit': 'USD',
}
These examples show the source markup next to the rendered result a reader would see.
@[company:aapl]{Apple Inc.} reported revenue of
%[revenue]{416161000000 USD} with net income of
%[netIncome]{112010000000 USD}.
Apple Inc. reported revenue of 416161000000 USD✓ with net income of 112010000000 USD✓.
The entity is bound once; both facts resolve against the current entity context.
@[company:msft]{Microsoft Corporation} has
%[netMargin]{36}%.
?[high: IS_ABOVE_30]{This exceeds the 30%
net-margin threshold}.
Registered as IS_ABOVE_30: { field: 'netMargin', op: 'gt', value: 30 }; not part of the built-in example registry.
Microsoft Corporation has 36%✓. This exceeds the 30% net-margin threshold✓
The sentence is accepted because the registered predicate holds for the bound value.
@[company:AAPL]{Apple Inc.} reported
%[revenue]{391.0 USD bn}.
This performance was extremely safe.
npm install proveml
npx proveml example
npx proveml strip --input report.md > plain.md
npx proveml doctor --facts facts.json
import { verifyProveml } from 'proveml/verify';
const factStore = {
'company:aapl.name': 'Apple Inc.',
'company:aapl.revenue': 416161000000,
'company:aapl.revenue._unit': 'USD',
'company:aapl.netIncome': 112010000000,
'company:aapl.netIncome._unit': 'USD',
};
const result = verifyProveml(
'@[company:aapl]{Apple Inc.} reported revenue of %[revenue]{416161000000 USD} with net income of %[netIncome]{112010000000 USD}.',
factStore
);
console.log(result.verified, result.total);
Add markdown-it only if you want the plugin integration path.
For plain browser or app embedding without markdown-it, use proveml/render. It emits stable semantic class names and exports a small class-name map; proveml/style.css is only the reference theme.
verifyProveml, renderProveml, and the plugin factStore option also accept adapters with resolve(path) when you want source-authentication metadata in addition to plain fact matching.
npx provemlprovemlmarkdown-it plugin for rendering and verification metadataproveml/renderproveml/verifyproveml/trust-adapterresolve(path) contractproveml/thresholdsproveml/style.cssProveML is intended as a clear, usable package-first reference implementation: small enough to inspect, light enough to embed, and permissive enough for other teams to build on.
The practical adoption target is simple: npm package for the runtime, optional skill for agent ergonomics, optional CSS for quick default rendering.
Read the READMEThe companion research repository now holds the paper, benchmarks, experiment outputs, and citation-audit workflow so this repo can stay focused on the runtime and docs.