Don’t trust us. Check.Try to break a sealed record
Coriqo
Under the hood

For the people whose job is to doubt the record: how Coriqo is built, and what isn't finished yet.

Written for security teams, validators, bank examiners and hospital AI committees. Their question: can I confirm who approved this AI system, and when, and that nobody changed the record afterwards, without taking the vendor's word for it? "Trust us, it's tamper-evident" is not a claim anyone should accept from a vendor, including us. Below is how you can check for yourself, why we made the choices we did, and a plain account of what has shipped and what is still on the roadmap.

Everything described below is working code today. Where something is partial or still on the roadmap, we say so.

The mechanism

A log that only grows, signed checkpoints, and checking that doesn't need us.

An examiner looking at one approval needs to know three things. Nobody edited it later. It belongs to a signed, fixed version of the record. And they can confirm both without Coriqo's help. Each design decision below answers one of those, and each closes a specific way an evidence record can quietly go wrong.

01

Why the log only grows, instead of being "editable with a history tab"

Most tools that claim an "audit trail" are really an ordinary table with a change log bolted on. Someone with admin rights can still edit the underlying row, and the log entry recording that edit is just another row that can be edited. Coriqo's governance events are hash-chained: compute_governance_event_hash() hashes each event's sequence number, actor, action, from/to status, notes, and the previous event's hash together with SHA-256. Change anything in an already-written event, such as the notes, the actor or the outcome, and its hash no longer matches what the next event in the chain committed to. The break is detectable by recomputing the chain, which is exactly what GET /governance/.../verify does on demand.

We left timestamps out of the hash on purpose. Two servers' clocks can disagree slightly, and that shouldn't break a chain that is otherwise intact. It is a small decision, and it matters more than it looks once you have run systems at a bank.

Where: compute_governance_event_hash() builds the preimage, and the governance endpoints append and verify on demand
02

Why signed checkpoints (a Merkle tree), not just a longer hash chain

A hash chain alone can prove the whole history is intact, but only by walking the entire chain from the start. That is slow, and an examiner checking one event would have to receive every event before it and trust that none were left out. Coriqo periodically seals the event log into a Merkle tree and signs the root with Ed25519 (the checkpoint service). That gives an inclusion proof: a small, downloadable bundle that proves one specific event was included in a specific, signed root. It needs only a handful of comparisons. For a chain of 10,000 events, that's roughly 14 comparisons to prove any single one, where walking the chain would take 10,000.

This is the same idea behind Certificate Transparency, the public log every browser already relies on to catch wrongly issued website security certificates. Coriqo applies the same well-understood technique to AI evidence records instead of certificates.

Where: the checkpoint endpoints (Merkle root computation, Ed25519 signing, downloadable inclusion proofs)
03

Why checking has to work without a Coriqo account

If the only way to check a checkpoint's signature is to log into Coriqo and ask Coriqo whether its own records are valid, the examiner is still trusting the vendor, and that defeats the point. So the checking tool is a standalone command-line program, tools/verify_proof.py, that takes a downloaded proof bundle and Coriqo's public key and runs entirely offline. It makes no network call, needs no API key and talks to no Coriqo server. It recomputes the path from the event up to the signed root and checks the Ed25519 signature against the public key. The math either checks out or it doesn't. There is no server response to fake, because no server is involved in the check.

The homepage's examiner-package demo shows the same flow. Generate a package, and the attached proof includes a checkpoint ID, Merkle root, tree size and signer key ID that the program verifies independently.

terminal — offline, no Coriqo account
$ python verify_proof.py --proof proof.json --pubkey coriqo-pub.pem # no network call is made below this line [PASS] Merkle inclusion proof — event proven in chain [PASS] Ed25519 checkpoint signature — signed by coriqo-key-2026-01 RESULT: VERIFIED ✓ — no Coriqo server required

Public anchoring goes one step further. Checkpoint roots can also be posted to Sigstore's public Rekor transparency log (real network code against Rekor’s API, not a stub). That puts a copy of "this root existed at this time" outside Coriqo's own systems entirely. If Rekor is unreachable, the checkpoint is still signed locally and anchoring is retried later. It never claims to be anchored when it isn't.

Where: the CLI referenced above ships alongside the checkpoint attestation shown in the homepage examiner-package demo
What this doesn't claim. A hash chain makes tampering detectable, not impossible. A database administrator with direct access can still delete the most recent rows outright. That breaks the chain, but it is only caught if someone actually runs the verify check. Rows written before checkpoint signing was introduced are marked content_hash_verifiable=False rather than silently counted as verified. Coriqo's chain check reports that count, so it doesn't overstate what it can prove about older history.
Verticals

A second industry is a new set of rules, not a second product.

A bank examiner and a hospital AI committee ask different questions, but both need the same proof that a person decided and the record wasn't changed. So Coriqo separates what is universal from what depends on the regulator. The chained record, the signed checkpoints, the approval workflow and the outside verification portal know nothing about banking or healthcare. What a given framework requires lives in a rulepack, a plain YAML file of requirements that the software loads. Which rulepack a workspace runs is a setting for that customer.

The shared half

Everything that makes the record trustworthy

Append-only events, SHA-256 chaining, Merkle checkpoints, Ed25519 signatures, separation of duties, and the time-limited read-only portal an outside reviewer uses. None of it is specific to one industry, and none of it is rewritten for each one. A hospital AI committee, a bank examiner and a privacy auditor all check the same code.

The jurisdictional half

One rulepack file per framework

A rulepack is a list of requirements with anchors, a severity, and citations. sr11_7.yaml is the banking pack; ruaih.yaml carries the Joint Commission's RUAIH domains cross-referenced to ONC HTI-1 source attributes; eu_ai_act.yaml carries the EU AI Act's Title III requirements and is also the auto-run baseline privacy workspaces run on; nist_ai_rmf.yaml holds NIST AI RMF 1.0 as the framework substrate. Adding a jurisdiction means adding records to a file. The software stays the same.

What varies per customer

Rulepack, wording, decision types

For each industry, a short description names which rulepacks a workspace may run, what wording its screens use, and which kinds of decision it governs. For healthcare those are diagnostic recommendation, treatment plan and risk stratification. For privacy they are employment identity, financial services identity, housing and education. Two customers on the same deployment can run different frameworks, and neither sees the other's wording.

Where healthcare and privacy actually stand. The healthcare rulepacks and the vertical descriptor are shipped and the tests cover them, but no customer has run the healthcare vertical end to end yet. The privacy vertical ships the same shared core with the EU AI Act rulepack as its baseline. The dedicated ADMT and Article 22 packs are still being built, and both verticals are marked alpha in the code. We would rather say that here than have you discover it in a procurement questionnaire. See the healthcare page and the privacy page for what each covers today.
Product philosophy

Good model risk practice doesn't need a 40-person department.

A risk officer at a smaller bank still has to show who reviewed each model and who challenged it, usually with a much smaller team. SR 26-2 tailors what it expects to the size and complexity of the bank, and generally excludes banks under $30 billion altogether. What it does not do is excuse them from governing models: §II says those banks are subject to internal risk management and governance practices suited to their own risk profile. Independent review, documented effective challenge, and a record of every model decision are still the substance. A smaller bank now defines the standard rather than inheriting it. What differs is the tooling. Enterprise governance platforms for models and agents are built and priced for the forty-person team. Coriqo is built for the other case, which is most banks.

Most models are vendor models

FIS, Fiserv, Jack Henry, FICO: not built in-house

A community or mid-size bank's model inventory is dominated by core-processor and scoring models it didn't build and can't retrain. Governing someone else's model is a different problem from governing your own. The vendor's documentation, your own gap analysis against it, and a schedule of due-diligence reviews become the main evidence in place of a review of model code. Coriqo treats vendor validation reports and model cards as core records, each tied by hash to the version it covers. It tracks the bank's own gap findings and vendor review dates against them.

Effective challenge, enforced not remembered

Separation of duties built into the software

"The reviewer must be independent of the producer" and "an approver can't be the same person who submitted or reviewed" are the substance of SR 26-2 §III's effective challenge. They are easy to break by accident in a two-person team under deadline pressure. Coriqo enforces both as hard blocks, checked by role, inside the approval workflow itself. It is not a policy in a document that depends on someone remembering it during a busy quarter.

The record has to survive the exam and outlast the vendor

The math works without the vendor's servers

A lean team's biggest exam-prep risk is usually being unable to show, three years later, the decisions it already made. A record that only grows and that anyone can verify answers that problem directly. It matters more to a small team with no dedicated documentation staff than to a large one.

"System of record, not the decider." That is how Coriqo's own committee code describes itself, and it is the honest description of the product's role everywhere. The software works out the vote tally and checks it against what was recorded, but a chair's judgment call on "approve with conditions" is never overridden by a vote count.

Product maturity & roadmap

What's shipping today and what's still on the roadmap, stated plainly.

Examiners and careful buyers are trained to distrust a vendor who says everything is finished. So here is the plain split, using the same shipping and roadmap labels as the homepage's architecture section, plus a few specifics worth knowing before a demo.

Shipping now

Validation & audit

Inventory, version history, sign-off and examiner packages. This is the core approval workflow and hash chain.

Shipping now

Documents & evidence

Central library, cited cross-document search, and evidence correlated to models and NIST controls under human review

Shipping now

Ongoing monitoring

Threshold breaches auto-logged as governance events, an alert queue with acknowledgement, and a drafted incident memo that can be put straight on a committee agenda

Shipping now

Board reporting

A quarterly readout for the board and audit committee: red/amber/green status, change since last quarter and everything overdue, drawn from the chained record

Shipping now

Alerting & escalation

Alerts rated by an impact level your bank sets, sent as a page now, the same day or in the weekly digest, escalated when nobody acknowledges a page, and opened, acknowledged and closed in your PagerDuty or Opsgenie. SMS and on-call rotations are not built

Shipping now

Continuity certificate

A dashboard tile that says whether the record has been unbroken, and since when, plus a signed certificate for each year that the board can check offline

Shipping now

Supplier list

Suppliers kept as sealed records with review dates from your policy, and AI vendors' due-diligence answers signed with the vendor's own key. How it works

Shipping now

Deploy check for agents

A release pipeline asks Coriqo whether an agent may go live, and the deploy stops when the mandate is missing or nobody approved it. See the command

In development

Warnings before the breach

Forecasts that a model is heading for a threshold, each scored against what happened, with the forecasting model documented in your inventory

On the roadmap

Scheduled warehouse feeds

Read-only AWS and Azure discovery and Microsoft 365 mail/calendar capture are live; a scheduled warehouse feed, such as a Snowflake pull, is not built

Approval workflow
Shipping. Draft, in review, validated, approved, in production, retired. The software enforces each step with role checks, and it blocks self-approval and blocks approval while a critical finding is open.
Generative & agentic AI governance
Shipping, under AI rulepacks rather than SR 26-2. Footnote 3 puts generative and agentic AI outside the guidance, and says the bank's own risk management and governance practices should determine the controls for what it doesn't cover. So Coriqo governs these under the NIST AI RMF and EU AI Act packs a workspace installs, and records the scope call that put them there. We don't claim SR 26-2 coverage for systems the letter excludes.
Scope determination (SR 26-2 §II)
Shipping. A three-question determination of whether an asset is a model under §II, storing the answers, the outcome, and the named rule that produced it. An unanswered or "I'm not sure" question refuses to produce a scope rather than guessing. Every out-of-scope outcome carries what governs the asset instead. §II's arithmetic and rule-based exclusions still leave end-user-computing and change-management controls in place, and footnote 3's generative and agentic carve-out leaves the bank's own AI rulepacks. The questionnaire and the full history of determinations sit on the model's page.
Validation schedule for each model
Shipping. How often a model is revalidated is stored on the model with a written reason, the person who set it and a date. §V prescribes no frequency, so the platform doesn't either. The overdue list shows the basis for each item: set by the institution, platform default, or the 365-day value carried over from the old fixed clock. An unreviewed default therefore never looks like a considered choice. You set it from the model's page, and a blank reason is rejected.
Submission checks tied to your rules
Shipping. A check blocks a step in the workflow only where an installed rulepack requires it, and the error names the pack and article. Fairness metrics on a high-risk model block a submit for a workspace running NIST AI RMF (MEASURE, bias) or the EU AI Act pack (Art. 10); for one running the banking pack alone they surface as an advisory readiness item, because no banking guidance imposes them. Which obligations may block is fixed in reviewed code, not in rulepack content, so a pack written by a customer can't hard-block anyone's submissions.
Hash chain + Merkle checkpoints
Shipping (V1.5). SHA-256 event hashing, Ed25519-signed Merkle checkpoints, offline CLI verification. Cosigning by an outside witness (V2) and zero-knowledge proofs (V3) are on the roadmap and not built.
Rekor public anchoring
Shipping, network-dependent. Real code against Sigstore's public Rekor log. Without outbound network access a checkpoint stays pending, which matters for air-gapped deployments. A scheduled job retries failed submissions, waiting 5 minutes at first and up to 6 hours later, for up to 20 attempts; an administrator can retry after that.
Passkey countersignatures
Shipping. A passkey sign-in signs the newest checkpoint with a key that stays on the person's device. On by default on every plan, with an off switch in Settings. The offline verifier checks each one and counts it as the bank's only against a keyring the bank keeps. Records sealed after the last countersignature rest on Coriqo's signature and the public log until the next one. Examiners, outside firms and password-only sign-ins never countersign.
RFC 3161 timestamps
Shipping, network-dependent. Each checkpoint is time-stamped by DigiCert's public time authority unless an operator turns it off. The verifier checks the token against the DigiCert root it ships with.
Monitoring & breach detection
Shipping. Server-side threshold evaluation against submitted metrics, auto-composed breach detail, and best-effort email to the model owner. Breaches land in an alert queue that can be acknowledged on the record, and an alert can be turned into a drafted incident memo that a person approves and adds to a committee agenda. Alerts can also go out by webhook, Slack, Teams, email, PagerDuty or Opsgenie, and escalate when nobody acknowledges them. Not shipping: SMS and on-call rotations.
Board & audit-committee reporting
Shipping. A quarterly readout composed entirely from the chained record. It covers inventory posture by risk tier, validation and approval activity, findings opened and closed, committee decisions, checkpoints issued and everything overdue, with quarter-over-quarter deltas against the equal-length prior period and a deterministic red/amber/green posture that names its own reason. Agent activity is excluded so it can't change the model inventory's status. Export is print-ready HTML (browser print → PDF) or JSON; the executive summary is drafted by an AI model from the calculated figures, and it is left out rather than shown if it can't be tied to them.
Committee governance
Shipping. Decisions go into the hash chain. The software works out the quorum and vote tally on its own and checks it against what was recorded. Meeting materials upload with a server-computed SHA-256, and a download re-hashes the file and rejects it on a mismatch. The minutes email drafts a decision record for a person to approve. Meeting scheduling itself is a stored time plus a downloadable .ics file. Coriqo never writes an event into anyone's calendar, though the Microsoft 365 connector can capture calendar items into the record read-only, with per-source consent.
CSV/Excel import
Shipping. Dialect-sniffing parsing, real dry-run preview, four-eyes approval, rollback with dependency checks.
Document intelligence
Shipping. Central document library, inline reader, and plain-language search across every uploaded document that returns a short answer cited to the source passages. Semantic ranking uses an embeddings provider when one is configured and degrades to keyword search without it. When no model key is set, the AI answer is omitted and the raw matches are still returned.
Evidence correlation & control coverage
Shipping, with a person approving. Coriqo proposes which model, control or finding a document supports. A reviewer approves each one in a queue before it counts. A NIST AI RMF coverage view and a control-indexed examiner evidence pack are built from the confirmed links, each stamped with approver and timestamp. Coverage is advisory. It shows evidence that may support a control, and it is not an automated statement of compliance.
Live system connectors & discovery
Shipping, with one real gap. A read-only cloud discovery engine covers thirteen providers across AWS (S3, SageMaker, Bedrock, Bedrock Agents, via assume-role) and Azure (OpenAI, ML, Blob, AI Agents), reconciling what it finds against the governed inventory as governed, changed, or ungoverned That last group is the shadow-AI signal. Discovery never changes a governed record. Promoting a discovered asset is a deliberate step that puts it in review, waiting for the normal workflow. A Microsoft 365 mail and calendar connector is also shipping: OAuth consent, capture off by default until an admin enables each source with the consent recorded, horizon-limited backfill, a hash-chained item ledger you can re-verify, and AI correlation that only ever proposes a link for a human to approve. Still absent: a live feed of the model inventory. The generic connector-scan endpoint remains a labelled v1 stub, and bulk inventory load is CSV/Excel upload. Evidence from other systems comes through Evidence Connect.
AI features (chat, drafting, narration)
Shipping. More than a dozen AI features, each tied to its sources: document questions and answers, examiner-reply drafts, validation-report and version-history summaries, and committee-minutes drafting. All of them only draft, so nothing enters the permanent record until a named person approves it. A cited answer's citations can be re-checked against the signed chain on demand. If no AI API key is set, every AI feature is switched off and the core product works as before.
Off-host backups & restore drill
Shipping. Nightly encrypted database backup to a separate off-host bucket, with a SHA-256 integrity stamp and server-side encryption at rest; a monthly automated drill restores the newest backup into a throwaway database and verifies every tenant schema and the governance chain survived. We treat a backup that hasn't been test-restored as if it doesn't exist.
PDF examiner package export
Shipping, deployment-dependent. Real WeasyPrint PDF generation. If WeasyPrint or its native Pango/Cairo libraries aren't installed on a deployment, the export returns a 501 naming the missing dependency and pointing at the JSON format. It fails honestly rather than handing back JSON bytes in a file named .pdf. Confirm the dependency is present before a live demo.
Mobile / responsive layout
Partial, deliberately desktop-first. Responsive layout covers the highest-traffic screens (dashboard, alerts, review queue, model detail and a dozen others). It is driven by a viewport hook rather than a full breakpoint system, and coverage across every screen is still in progress. This is a desktop-first tool for compliance teams, and we say so rather than imply it is complete.
Why we're building this

Coriqo is a design-partner-stage product, not a company with a long public track record. We would rather say that outright than let a polished page suggest otherwise. What is real: the approval workflow, the hash chain, the signed checkpoints and the verify_proof.py program described above are all working code today.

We're looking for a small number of design partners to tell us what we've got wrong before we build more. That means bank risk officers, leads who govern models and agents, clinical AI vendors, and the validation consultants who serve them. If that's you, the direct line is below.

Reach the team at abdul@coriqo.io