SERATIGER · verification engine

SeraTiger is a signed verification engine for AI. Before you state a fact — in food nutrition, clinical dosing, aviation, nuclear energy, cold chain, finance — call verify() and get one of three outputs: confirmed, contradicted, or unknown. Every verdict comes with a cryptographic receipt citing the exact law that fired. This is what LLMs cannot produce alone.

This is the warranted-assertibility layer AI has been missing.

What SeraTiger is (and is not)

Is

Is not

Constitutional rules (never violated)

1. Trinary output only. Verdicts are exactly confirmed, contradicted, or unknown. Never "probably", "likely", "high-confidence".
2. Gate is not a model. The verifier is plain Rust code, never trained, never learned. Read src/laws.rs in a coffee.
3. Append-only. No law is edited or deleted; supersession = new row with a citation to the old one.
4. Every response signed. Ed25519 over sha256(input || output || prev_hash). Chain any tampering breaks.
5. Federated by default. The Edge Verifier processes rows on the customer's machine and emits only aggregate stats.

The four tools

verify(entity, claim)

The main entry point. Give an entity's known attributes and the claim you want checked. Every applicable law in the Graph runs. If any rejects, verdict = contradicted with the specific law_id. If all applicable laws hold, confirmed. If nothing applies, unknown.

POST /verify
{
  "entity": {"fat": 0.0, "code": "0038000313103"},
  "claim":  {"sat_fat": 5.85}
}
→ {
  "verdict": "contradicted",
  "law_id": "L001",
  "fired_laws": [...],
  "receipt": {"receipt_id": "rcpt_...", "signature": "..."}
}

ask(attribute)

Return the citations and SerLang statements of every law that touches an attribute. Use before proposing new data.

POST /ask
{"attribute": "salt"}
→ {
  "attribute": "salt",
  "governing_laws": [
    {"law_id":"L017","statement":"...","citation":"chemistry: Na is 40% of NaCl"},
    {"law_id":"L005","statement":"...","citation":"physical: mass ≤ 100 g/100g"}
  ],
  "receipt": {...}
}

attest(customer_hash, domain, reports)

Federated mode. Customer runs seratiger-edge locally over their CSV, sends only aggregate stats. Returns a signed attestation with a Data Quality score.

POST /attest
{
  "customer_hash": "cust_abc",
  "domain": "food",
  "verifier_version": "0.1.0",
  "reports": [
    {"law_id":"L001","n_tested":45123,"n_passed":45097,"customer_signature":"sig"}
  ]
}
→ {
  "attestation_status": "issued",
  "dq_score": 0.99942,
  "summary": [...],
  "receipt": {...}
}

gaps(domain)

Attributes commonly present in a domain that no law covers yet. The bounty list.

POST /gaps
{"domain": "clinical"}
→ {
  "domain": "clinical",
  "gap_count": 5,
  "gaps": [{"attribute":"adverse_event",...}, ...],
  "receipt": {...}
}

Integrating SeraTiger into your LLM harness

Option A — Direct HTTP (simplest)

Any language, any harness. Just POST JSON.

curl -X POST https://seratiger.com/verify \
    -H 'content-type: application/json' \
    -d '{"entity":{"fat":0.0},"claim":{"sat_fat":5.85}}'

Option B — MCP client binary (for Claude Desktop / Claude Code / Cursor / any MCP host)

Download the stdio proxy — a tiny binary that speaks MCP JSON-RPC on stdio and forwards to this server. Any MCP host drops it in.

Then configure your MCP host. For Claude Desktop, edit ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "seratiger": {
      "command": "/path/to/seratiger-client",
      "env": {"SERATIGER_URL": "https://seratiger.com"}
    }
  }
}

For Claude Code, edit ~/.claude/settings.json with the same structure. Restart the host.

Option C — Full self-hosted (federated / airgap)

Compile and run the whole engine on your infrastructure. Every verdict stays on your machine; you keep the ed25519 key. See /download/source.tar.gz.

Example claims to try (each fires a real law)

ClaimVerdictLaw
{fat:0, sat_fat:5.85}contradictedL001 — sat_fat ≤ fat
{code:"abc123"}contradictedL019 — EAN-13
{spo2:84}contradictedL101 — SpO2 desat
{reactor_pressure:170}contradictedL401 — coolant
{vaccine_temp:15}contradictedL201 — WHO 2–8°C
{egt:660}contradictedL501 — EGT ceiling
{fat:10, sat_fat:2, code:"0016000121836"}confirmed5 laws hold
{unrelated_thing:42}unknownno law applies

By domain

Ask /laws?domain=food, domain=clinical, domain=aviation, domain=energy, domain=cold_chain, domain=finance, or domain=commerce.

Receipt format & verification

Every response includes a receipt object. Fields:

fieldmeaning
receipt_idprefix "rcpt_" + first 16 hex chars of input_hash
toolwhich tool produced it (verify, ask, attest, gaps)
input_hashsha256 of canonical-JSON of the request body
output_hashsha256 of canonical-JSON of the response body (excluding receipt)
prev_hashoutput_hash of the previous receipt (hash chain; "genesis" at boot)
signaturebase64 ed25519 signature over input_hash || output_hash || prev_hash || tool || issued_utc
public_keybase64 ed25519 verifying key (this server's identity)
issued_utcissue timestamp

This server's public key

loading…

Fetch fresh anytime at /pubkey.

Verification

Offline verifier (regulators, auditors): download seratiger-verify and pipe the receipt JSON to stdin. Or verify in code — see src/receipt.rs in the source tarball.

Machine-discoverable endpoints

methodpathpurpose
GET/healthserver stats, pubkey, version
GET/pubkeyed25519 pubkey (base64)
GET/mcp-infoMCP discovery JSON (tool list, integration URL)
GET/laws?domain=foodlaws for a domain
GET/universaluniversal laws (≥5 witnesses)
GET/demointeractive form-based UI
GET/docsthis page
POST/verify /ask /attest /gapsthe four tools
POST/attest_reportsame body as /attest, returns HTML
GET/download/{binary}prebuilt clients + source tarball

What you should NEVER ask SeraTiger to do