An open-source CLI that derives AI governance documents from the code itself, then fails the build when the two stop agreeing. The terminal below is not a video. It replays a committed run, and it takes your input.
Four agents classified a real hiring system against the EU AI Act on 2026-07-28. Both transcripts are committed with request hashes and token counts, so this table is generated from those files rather than typed out, and every row replays offline.
"…the precise commercial/organisational relationship between the Talent Platform team and any end-using employer was not specified."
The schema bounced three model cards, re-sent each with the validation errors attached, and only the corrected replies reached the documents.
One undeclared model appended to a source file. The manifest no longer describes the ship. Exit code 1. This is the product.
Reads the code. Sandboxed read, list and grep, nothing else. Reports what it could not determine.
Classifies against the AI Act and NIST AI RMF. Citations are a closed enum, so invented law fails validation instead of reaching a document.
Writes the documents. Every substantive claim carries a reference to a finding, an answer, or a provision.
Attacks the draft. Opens the references rather than trusting them. Unresolved objections are printed, not buried.
And one gate no agent can pass: a named person accepts the classification before anything is generated. Machines may propose a legal classification; people accept one.
# .github/workflows/governance.yml name: AI governance on: pull_request jobs: ballast: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: theogandolphe/ballast@main
No API key, no network, no per-run cost. A check that bills you per pull request gets budgeted away, and one that needs a secret cannot run on forks.
npx ballast-cli demo npm install -g ballast-cli ballast scan
The demo runs against a bundled example and needs nothing else. Requires Node 22 or later.
Published as ballast-cli. MIT, Node 22 or later, no account and no
telemetry. The source is on
GitHub, and the run replayed above
is committed to it.
scan, check and demo never call a model. classify and generate use your own Anthropic key and print what the run cost when they finish, typically a few cents.