claim.provider-directory.current
- Source
- Registry export, row 1842
- Last checked
- 7 June 2026
- Good until
- Recheck due in 7 days
- Gap
- The phone number attestation is private
Developers New to Kontour? Start with Flow Agents.
make every claim show its evidence, freshness, and gaps
An agent tells your support team a listing is current. A dashboard says the scan passed. Neither one shows when it was last checked, what checked it, or what it couldn't see. Surface is the receipt underneath — the claim, the evidence, when the check runs out, and what's still missing — in an open file anyone can re-check without trusting the tool that produced it.
$ npx surface report \
--input node_modules/@kontourai/surface/examples/surface-example-bundle.json \
--format summary
Kontour Surface report surface-1785016678537
Source: kontour-surface-validation-examples
Claims: 4 (unknown: 1, verified: 2, stale: 1)
Facets: repo-governance.developer-evidence: 1, field-attested-records.public-data: 1,
fact-resolution.financial-facts: 1, surface.roadmap: 1
High-impact unsupported: none
Stale: claim.field-attested-records.registration-status
Recompute needed: none
Disputed: none
Claim groups: 0
Transparency gaps: 3
Your first five minutes
npm install -D @kontourai/surface
The example bundles used below ship inside the package. Nothing else to download.
npx surface report --input node_modules/@kontourai/surface/examples/surface-example-bundle.json --format summary
Read someone else's receipt. That's the output in the terminal above: four claims, one of them stale, three transparency gaps, and the id of the stale claim so you know which one to chase.
npx surface console --input …/ci-producer.bundle.json --input …/review-producer.bundle.json --input …/security-producer.bundle.json
Merge three teams' results into one page. The console prints one line — the address. Open it and you get exactly what's below.
$ npx surface console \
--input node_modules/@kontourai/surface/examples/console-multi-producer/ci-producer.bundle.json \
--input node_modules/@kontourai/surface/examples/console-multi-producer/review-producer.bundle.json \
--input node_modules/@kontourai/surface/examples/console-multi-producer/security-producer.bundle.json
Surface console running at http://localhost:4242
See it

What Surface answers
Surface Console
surface console serves a live view from.surface/runs/latest.json, and each new run updates it. It can also merge multiple producer bundles — repeat --input, as above — into one view, attributing every claim to the producer that filed it and reporting merge collisions instead of dropping them. It runs on your machine: no cloud, no account, nothing to host.
Example use case
The sentence doesn't change. What changes is that the person reading it — or the agent about to act on it — can see where it came from, when it was last checked, how long that check is good for, and the part nobody outside the registry can see. Surface keeps those four things attached to the claim, in a file the reader can open themselves.
claim.provider-directory.current
What's in a receipt
A claim is one specific statement — "the registration status on this listing is current." Evidence is what backs it: a test result, a source excerpt, a person signing off. A policy says what would have to be true for that claim to count as checked, and how long the check stays good. A gap is anything the receipt can't show you — evidence that's missing, private, expired, or contradicted. Surface's job is to keep the gap as visible as the claim.
Every claim carries a status derived from those four things. The one worth learning first isstale — it doesn't mean wrong. It means this was checked, the check was good for a set window, and the window has closed. Nobody has to remember that; the status changes on its own. The full vocabulary and all nine statuses →
Signing
A bundle you generate on your laptop re-derives to the same answer on anyone else's machine. What it doesn't do is prove who produced it — that's L0, unsigned and local, and it's where everyone starts. When provenance starts to matter, CI can sign its own results with a short-lived identity it gets from the CI provider (L1), and an organization can sign with keys it holds itself (L2). Turning the dial up never changes the answer: signing says where a bundle came from, not how it was derived. Surface carries the signing block; the levels themselves are defined in the open spec. How the levels work →
What Surface gives you
Before someone acts on a recommendation, a report, or an agent's reply, they can open what sits under it: the claim, what backs it, when it was last checked, and what nobody has checked yet.
Your product writes claims and evidence in one shape. People, agents, and other systems all read the same file — you never build a separate trust view for each audience.
What has gone stale, what has no evidence behind it, what two producers disagree about. Surface Console opens all of it in a browser on your own machine — no cloud, no account, nothing to host.
Show it to your users
A dependency-free <surface-trust-panel> element drops the customer-facing view of a claim into your own product — the claim, its evidence, freshness, and gaps, without shipping a framework.
Export a derived report and anyone can open it in the hosted viewer — paste or load the JSON; it parses entirely in the browser and never leaves the page.
Open the viewer →A spec'd badge that links your product to its inspectable trust state — a claim of inspectability that is itself inspectable.
More than a status
A claim can rest on supporting claims, and its status is capped by the weakest one underneath it. A total cannot read verified while one of its inputs has gone stale or contested.
A stale claim is not a dead end. Surface ships the verification endpoint a producer stands up at /.well-known/hachure/verify, so anyone holding a claim can ask the system that made it for the current state of exactly the version they are holding. References it does not recognize come back named as unrecognized, never quietly dropped.
The same report in plain JSON (--format analytics): coverage by producer, the stale queue, the gap rollup — ready to feed a dashboard or an audit export without anyone retyping it.
Point a coding agent or assistant at npx @kontourai/surface mcp and it can check, before it uses a number, whether that number's evidence is current, missing, or contested. It gets the same answer you would get at the command line, with nothing summarizing it in between.
When someone signs off on a gap instead of closing it, Surface records who, why, and when — and checks the date. A waiver that has run out stops counting as an approval instead of quietly holding the line green. The approver's name is recorded, not cryptographically verified.
Products built with Surface
Each product keeps its own language — merge readiness, extraction review, gate outcomes — and still writes receipts anyone else's tooling can read. Flow Agents, Veritas, Flow, Survey, Console and Fieldwork all emit their trust records through Surface, so anything built on Kontour reads and writes the open format through one integration point rather than six. Surface is Kontour's implementation of the Hachure open trust format; the spec, its schemas, and the test vectors that define the format are published separately from us, so anyone can write their own implementation and prove it derives the same answers without running any of our code.
Merge autonomy for AI-authored code
Turns Repo Standards, evidence checks, boundary crossings, and readiness outcomes into Surface-backed trust state. Veritas users stay in repo-native language while downstream systems can inspect the evidence behind merge readiness.
Explore Veritas →Anything that needs product transparency
Public-data records, fact resolution, audit pipelines, fitness tracking, compliance filings, marketplace listings — anywhere a product needs to show the work behind what it asks people and agents to trust.
Build with Surface →