The Gateway

Private in, verified out.

Put Narrow Highway's two distinctives in front of any AI you already use. Strip personal context to stable placeholders before the model sees it — this runs on your device, so that data never reaches us. Verify any claim into a permanent, re-checkable receipt — a verdict and the worked reasoning, not "trust me." Verifying sends only the claim, checked transiently and stored nowhere (and redacted before it is sealed) — or run the whole engine locally and nothing leaves at all. Try them right here.

Runs on your device

Private

Email, SSN, card, IP, URL → stable placeholders. Nothing is sent anywhere.
Sent to the engine · store-nothing · sealed

Verified

A claim in — a verdict, the worked reasoning, and a receipt you can re-check. Unlike the strip on the left, this sends your claim to the engine: checked transiently, stored nowhere, redacted before it is sealed.

Build it in five minutes

The engine finds and verifies; it never generates. Point an agent at a local engine (python -m concordance mcp) and the text never leaves your machine at all.

Browser vanilla JS, zero build — the model never sees the personal details
<!-- one script, then wrap any LLM/API call -->
<script src="https://narrowhighway.org/redact.js"></script>
<script>
  const ask = Rampart.guard(async (clean) => {
    // `clean` has [EMAIL_1], [CARD_1]… — the originals stay on this device
    const r = await fetch("https://some-llm.example/v1/chat", {
      method: "POST", body: JSON.stringify({ prompt: clean })
    });
    return (await r.json()).text;
  });
  const answer = await ask(userText);  // scrub in, reveal out — automatically
</script>
Verify a claim → a receipt curl · the receipt URL is permanent and re-checkable
curl -s -X POST https://narrowhighway.org/verify \
  -H content-type:application/json \
  -d '{"claim":"the speed of light is 299792458 m/s"}'
# → { "verdict":"HOLDS",
#     "checks":[{"claim":"…","verdict":"CONFIRMED","domain":"physical_constants","detail":"…"}],
#     "receipt":"https://narrowhighway.org/s/<hash>",   ← proof, not "trust me"
#     "generated": false }
Server Python, stdlib — strip at your edge, we never see the data
from concordance.gateway import scrub, restore, guard

clean, mapping = scrub("email me at a@b.com")   # ("email me at [EMAIL_1]", {…})
reply = my_llm(clean)                            # the model never sees the email
final = restore(reply, mapping)                  # reapply locally

safe_llm = guard(my_llm)                          # …or wrap it once