Narrow Highway
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