How it works
Checked against the source, not asked of a model twice.
Every claim is matched against the exact sentence it cites, with a score you can see. No second model is asked whether the first one was telling the truth.
Ingest
A paper becomes a graph, in stages you can watch.
Structure appears before any model has run, so the page is never a spinner. The skeleton graph lands first, then related work, then metadata, then the summary and pillars, then the remaining generators.
- Skeleton graph<300ms
Paper node and ghost pillars pulse in, before any AI has run.
- Related papers<1s
The Related Papers rail populates from Semantic Scholar, no LLM involved.
- Metadata badge<2s
Metadata and an archetype badge appear, a fast pass.
- Summary + pillars~5-10s
Archetype classification and pillar planning resolve -- the upload view's live progress reflects this in real time, stage by stage.
- Generators + graph expansion~15-45s
Remaining generators fill in (6 of 21 types implemented so far), and citation-graph expansion becomes available.
Structure
Sections come from the paper, not from a fixed template.
A clinical trial and a machine-learning paper do not have the same shape, so they do not get the same headings. Pepiros classifies the paper first and plans its pillars from the content.
Every leaf under a pillar carries its own evidence, which is what makes the graph navigable rather than decorative.
Grounding
The claim and its source sit side by side.
A claim that cleared the match shows its badge, its citation id, and its score, and the sentence it came from is highlighted in the source pane next to it.
A claim with nothing checked behind it is labelled inference and gets no citation at all, rather than a hedge.
Worked example
One claim, scored
Morning bright light advances circadian phase by about 1.4 hours in shift workers.
Source excerpt
Participants receiving 30 minutes of 10,000 lux morning light advanced dim-light melatonin onset by 1.4 hours (95% CI 0.9-1.9) after five days.
For agents
An agent can check its own claims, mid-answer.
Connect over MCP and the agent calls verify_claim on its own sentences before it asserts them to you.
When one comes back unsupported, it says so, in the same answer. That is the whole point: see the MCP tools.
Said on stage, not just in the docs
What this does not prove
- A fuzzy-matched quote proves quotation provenance, not entailment.
- A model can attach a real Methods sentence to a wrong conclusion and still score 1.0 on the match.
- The badge always reads quote located, and never reads verified.
- Claim and quote render next to each other on purpose, so the reader adjudicates entailment rather than the matcher.
An entailment overlap floor helps: every number, unit, and comparator in a claim also has to appear in the anchored span, checked against the numeric ledger. That catches the failure a fuzzy match alone misses, a genuine quote attached to a reversed or overstated conclusion.