Everything you need to test this without asking anybody a question first. Written to be read once, top to bottom, in about ten minutes.
The whole product in one sentence. Lyntway sits between your applications and the AI they call, records what was in the traffic as classes and counts, and signs that record — so somebody who trusts neither you nor us can check later what happened.
No account needed for any of this.
# 1. Send something through and read the receipt curl -s https://lyntway.com/v1/demo -H 'Content-Type: application/json' \ -d '{"content":"email priya@acme.co.uk, card 4111 1111 1111 1111"}' | jq . # 2. Install the tools brew install lynt-x-global/lyntway/lyntway # 3. Check that receipt yourself, offline curl -s https://lyntway.com/.well-known/lyntway-keys.json -o keys.json lyntway-verify -keys keys.json receipt.json
Step 3 is the product. It runs with no account, no network call back to us and no permission from anybody. If it did not, none of the rest would be worth anything: evidence you need the issuer's cooperation to check is worthless at exactly the moment the issuer is the party in dispute.
Try to get sensitive data past it, and try to make it cry wolf. Both directions are bugs.
client = OpenAI(
base_url="https://lyntway.com/gw/openai",
api_key=LYNTWAY_KEY,
default_headers={"X-Provider-Key": OPENAI_API_KEY},
)
Streaming, tool calls, large bodies, timeouts, an upstream that returns an error. The question behind all of it: does anything reach the model that the receipt does not account for?
lyntway login lyntway init # shows what it found, asks before changing anything lyntway status lyntway undo # must put the machine back exactly
undo is the one to be unkind to. Every file it touches is
backed up first; if anything is left changed after an undo, that is a
serious bug and worth reporting immediately.
Sign up, run the readiness check on Overview, work through Connect, Traffic, Blind spots, Risk score, Team, Usage, Settings. Look for anything that claims more than it can know, any dead end, any control that does nothing, and any screen that shows a raw identifier where a person's words belong.
A receipt must never claim more than actually happened. If you find a case where it does, that is the most valuable bug you can file, above a crash.
Three fields carry it, and absent always reads as the weakest possibility:
| Field | Values | Meaning |
|---|---|---|
evidence.provenance | observed / attested / asserted | we watched the bytes · another system told us · the caller described itself |
governance.mode | full / degraded / bypassed | everything ran · some of it did · none of it did |
finding detector | empty / named | a rule matched, reproducible · a model judged, maybe not |
Do not trust our tool for this — write your own and see whether it agrees. The full recipe, including the domain separator that is easy to miss, is in the documentation. Roughly thirty lines against any standard crypto library.
issuer.key_attestation against the published root key. Prepend lyntway-key-attestation-v1\x00 before the canonical bytes.key_attestation.public_key. No prefix here.lyntway status says so for that reason.Useful reports contain, in order:
The receipt is the useful part. It carries the ruleset version, the policy version, the detector components and the mode, which together say what was running when it happened.
The repository has a CLAUDE.md at its root written for
exactly that. It carries the honesty rule, the layout, the local run
instructions, the traps, and a list of real defects this project has
shipped and how each was found — so an agent starts with the failure
modes rather than discovering them.
Two conventions worth knowing before you send a pull request: the root Go module has no third-party dependencies and CI enforces it, and comments explain why rather than what.
| Production | lyntway.com |
| Tools and their source | lyntway-tools |
| Install | brew install lynt-x-global/lyntway/lyntway |
| Python | pip install lyntway |
| Verify in a browser | /verify |
| Documentation | /docs |