Narrated, with captions. Recorded in a proof of concept on Northbridge Analytics, a fictional company with synthetic people and evidence. Not a certified audit tool.
Auditors spend most of an engagement matching evidence to requirements, checking samples item by item and writing findings up. Language models are good at exactly that kind of reading.
Internal audit also rests on things a model cannot hold: judgement, objectivity, and a signature someone can be held to. If an agent drafts a finding and an auditor approves it without reading, the audit looks like assurance and carries none of its weight.
I built this system to see whether agents can carry the reading without the auditor losing the decision. It runs internal audits against ISO/IEC 27001 and ISO/IEC 42001, and SOC 2 readiness reviews, on a fictional company.
2 · The rule
Agents propose and people decide
At every stage, an agent can only propose. A named person decides. The record keeps the two apart.
An audit committee, an external auditor or a regulator can then see which conclusions came from people, and how closely they checked the machine's work.
Six stages of an engagement
At every stage an agent proposes, a named person decides and the record keeps both.
1. Evidence
The agent proposesScreens each file on arrival and quarantines anything that carries hidden instructions.
A person decidesAn auditor releases a quarantined file, or keeps it out.
The record keepsA hash of every file, taken in the browser and again on the server. The file is locked.
2. Mapping
The agent proposesProposes which controls a document bears on, with a confidence and the passage it relied on.
A person decidesAn auditor accepts or rejects each proposal.
The record keepsThe decision, who made it and how long the proposal was on screen.
3. Sampling
The agent proposesNo agent. Code checks the population for gaps before anything is drawn.
A person decidesAn auditor records why the sample may proceed when the population is incomplete.
The record keepsThe reason and the seed, so anyone can replay the draw and get the same rows.
4. Testing
The agent proposesReads each sampled item and proposes a pass or a fail against the test attributes.
A person decidesA tester confirms or changes every result. The system refuses a tester who operated the control.
The record keepsEach proposal shown as a proposal until a person confirms it.
5. Findings
The agent proposesOne agent drafts the finding. A second agent challenges it for unsupported claims and the wrong grade.
A person decidesThe auditor upholds or dismisses each objection, with a note.
The record keepsThe draft, every objection and how each was resolved.
6. Grading
The agent proposesSuggests a grade.
A person decidesOnly the engagement lead grades the finding.
The record keepsAny override of the agent’s grade, and who made it.
Drawn from the build shown in the film, on fictional data. Any agent can be switched off, and the manual path still completes the audit.
The build also measures whether people are checking. It records how long each proposal was on screen and how often reviewers override the agents. Someone who accepts every proposal in a few seconds is showing automation bias, and the head of internal audit can see it.
Agents do the reading. People make the calls. And the record shows which was which.
The closing line of the film
3 · Try it
A sample anyone can replay
Sampling is the one step with no agent at all. Code checks the population first, and a gap blocks the draw until an auditor records a reason.
The sample is drawn with a recorded seed. An external auditor can replay it and get exactly the same items.
Try it · Population check and seeded sample
The sample can be replayed by anyone who has the seed.
Jan
Feb
Mar
Apr
May
none
Jun
Jul
Aug
Sep
Oct
Nov
Dec
Population check: no tickets in June. The extract may be incomplete.
Illustrative tickets. Draw again with the same seed and you get the same rows; change the seed and you get a new sample. Untick the reason and the draw is refused, as it is in the build.
4 · Try it
A log that shows any change
Every action, by a person or an agent, goes into a log where each entry is sealed over the one before it.
The database refuses edits outright. If a record were changed anyway, verifying the chain would show exactly where.
Try it · Hash-chained log
Change one past event and every seal after it stops matching.
Event 1Seala757e428d2af185f
Event 2Seal35539ed61b584b99
Event 3Sealb2d776076313de70
Event 4Seale3e83f997dd28a16
Event 5Seal724a2691619d8e81
Five events, each sealed over the one before it. Edit any event, then verify.
Illustrative events, real SHA-256 computed in your browser. In the build the database also refuses the edit outright; the chain is the second line of defence, and it shows an auditor or a regulator that nothing was changed after the fact.
What the build is
A working proof of concept, tested end to end. It has a guided demonstration, an evaluation harness for the agents, and a test that tries to tamper with the database directly. Every agent can be switched off, and the manual path still completes the audit.
What the build is not
It is not a certified audit tool, and it has not been used on a live engagement. It holds requirement identifiers only and never stores the text of the standards. Everything in the film and on this page comes from fictional data.
Who it is for
Heads of audit, risk and the audit committee
If you are being asked how AI will change your function, and you want to see a version where the auditor stays accountable, I share the working system on request.
I built this to test one thing: whether agents can carry the reading in an internal audit without the auditor losing the decision. On this build they can, as long as every proposal looks like a proposal and every decision carries a name. Try changing an event in the log above. That small refusal is the part I would want an audit committee to see first.