Tamper-evident records for automated labs

Every instrument file, sealed. Any later change, caught.

Seal every file as your instruments write it. Anyone can audit the folder in one click, and your data never leaves your lab.

The demo seals sample data in your browser. Nothing to install.

How a change is caught, in four steps

1, Written: a plate reader writes plate-07.csv into the folder bio-line-2, where the agent is watching. 2, Sealed: the agent fingerprints the file with SHA-256 and signs the seal into the ledger. 3, Copy edited: weeks later, a sync conflict rewrites well A01 from 0.482 to 0.428 in a shared copy of the folder; same name, same size. 4, Caught: one click audits the copy. The fingerprint of plate-07.csv no longer matches its seal, so it is reported as changed; the other four files match.

The plate reader writes plate-07.csv into the watched folder.

The agent fingerprints it with SHA-256 and signs the seal into the ledger.

Weeks later, a sync conflict rewrites one value in a shared copy. The folder looks the same.

One click audits the copy: plate-07.csv changed since it was sealed.

How it works

Three steps. One of them is a click.

  1. Install the agent on the instrument PC

    One file, run with Node.js on the results folder. It reads only bytes: any instrument, any vendor, any format.

    node iqc.mjs watch "D:\Results"

  2. Every file is sealed as it is written

    Each new or changed file gets a SHA-256 fingerprint and a signature, chained into a ledger inside that folder.

    sealed plate-07.csv 477f09c4…

  3. Drop the folder to audit it in one click

    Anyone with the folder drops it on the app: every file matches its seal, or you see exactly which do not.

    Pass All 5 files match.

A pass shows

Each file is byte-for-byte the one the agent sealed, and the ledger has not been edited or reordered since it was signed. Checked against a pinned head, it has not lost records since that head was pinned.

It does not show

That a file was right when it was written, or a change in the few seconds before the agent reads a new file. Whoever holds the ledger’s key could rewrite it from the start, and anyone can remove its newest records without a key; a head pinned elsewhere exposes both.

A change on the instrument PC while the agent runs is sealed as a new version, with its time; the audit lists every version.

Why it matters

Most bad data is not malicious.

Quiet accidents

A script rewrites a column, a sync conflict keeps the wrong copy, a backup lands over newer results. Nobody meant to change anything.

Results that steer

Results now feed models that choose the next experiment, so one wrong value travels into every run after it.

Nothing readable leaves

The ledger holds fingerprints, not data. Audits run in your browser, and the app is blocked from connecting anywhere.

To pin the ledger somewhere else, you share only its head: a record number and a 64-character link that reveals none of your data.

In an intelligence explosion, human review can’t keep up with every result; records have to verify themselves.

José A. Fernández Abreu, founder

Who it is for

Built for labs where machines write the results.

First

Automated research labs

Biotech, microbiology, chemistry and materials science, where instruments and robots write results faster than anyone can review them.

Later

Regulated QC labs

Upcoming: Per-person signatures and the review controls regulated labs ask for.

Status

What works today, and what is Upcoming.

Works today

  • The agent seals a folder, then every new, changed or removed file.
  • One-click audit in the browser. Nothing is uploaded.
  • The same audit on the command line, with an exit code.
  • A self-contained audit report, in HTML and JSON.
  • Sealing in the browser, and a demo with sample data.
  • An AI agent’s steps are recorded, and each input is traced back: measured (sealed by a lab station), derived (written by a recorded step) or untraced, which goes to review.
  • A reviewer signs off each step, on the command line or in the app.

Upcoming

  • Upcoming: Merkle batches
  • Upcoming: Per-person signatures
  • Upcoming: Values extracted from inside files
  • Upcoming: Sealing inside the vendor’s software
  • Upcoming: A Windows installer and service
  • Upcoming: An npm package
  • Upcoming: Post-quantum signatures

Install

Get the agent.

One file, no dependencies. Needs Node.js 22 or later on Windows, macOS or Linux.

1 · Download

Download iqc.mjs
SHA-256 of iqc.mjs

bf946887b5c62c83ec630dbd9a0641890b622572cbfc789d702a0ac04f41895a

Check your download:

  • Windowscertutil -hashfile iqc.mjs SHA256
  • macOS, Linuxshasum -a 256 iqc.mjs

2 · Run one command

On the instrument PC
node iqc.mjs watch "D:\Results"

It seals the folder now, then each new or changed file until you press Ctrl+C.

What it touches

Reads
Every file in the folder, read-only. It skips symlinks and system files.
Writes
Only ImmutableQC/ledger.jsonl, README.txt and agent.lock in that folder, and its private key in ~/.immutableqc/keys/, readable only by you.
Network
None.
Runs as
You: no installer, no service. It stops on Ctrl+C, and records the stop.
In a scheduler or a pipeline
# seal once and exit
node iqc.mjs seal "D:\Results"
# print the head, to pin it somewhere else
node iqc.mjs head "D:\Results"
# exit 0 pass, 3 review, 1 fail, 2 usage or read error
node iqc.mjs audit "D:\Results" --expect-head <n>:<h> --json audit.json

See a pass and a fail in under a minute.

Run the 1-click demo