Bernstein Launches Open-Source Governance Layer for Deterministic AI Agent Orchestration

Original title: Bernstein – open-source governance layer for AI agents
78AI Score

Bernstein v3.23.0 introduces an open-source governance layer for AI agents using a deterministic Python scheduler that runs tasks in parallel without model intervention. It enforces 'policy as code' to ensure verifiable records and byte-identical plan replays, featuring a four-stage workflow of decomposition, spawning, verification, and merging.

Full Report

Contents12 sections

v3.23.0 shipping53 cli adapters · apache 2.0 · on-prem

several ai agents. one governance layer. every run provable.

bernstein is the open-source governance layer for ai agents: a deterministic python scheduler runs them in parallel, with no model in the coordination loop, so the same plan replays byte-identically. it runs on policy as code: you write the policy, bernstein enforces it, and produces the verifiable record.

·ask the docs·grounded in source + 19 posts·cited

ask anything.

one run, four stages.

01decomposemanager → tasks · roles · signals02spawnagents → isolated worktrees03verifyjanitor → tests · types · lint · optional cross-model review04mergeonly verified diffs land[Aug 10, 2026·4 min read

bernstein 3.14.159: the stranger's ninety minutes

A first-use report described ninety minutes of setup that ended in nothing. v3.14.159 answers it: the plan loader raises named errors instead of swallowing malformed fields, five commands are removed and the rest fold with deprecation windows, the reference docs are CI-gated against the registered CLI, and the README says beta. Also new: a Muse Code adapter, Agent Plugins v1.0.0 manifests, a signed run receipt that verifies offline, and bernstein audit diagnose.](https://bernstein.run/blog/v3-14-159-pi)[Apr 14, 2026·4 min read

agents on cloudflare: workers, durable objects, r2, d1

bernstein's cloudflare integration for ai coding agents: workers run agents, workflows carry multi-step tasks, r2 + d1 hold workspace and metering state. experimental; runs on your own account.](https://bernstein.run/blog/cloudflare-cloud-execution)[Mar 29, 2026·3 min read

bernstein 1.0: open-source orchestrator for ai coding agents

Orchestrate Claude Code, Codex, Gemini CLI and other CLI coding agents in parallel git worktrees. Deterministic scheduler, HMAC-signed audit chain.](https://bernstein.run/blog/introducing-bernstein)

evidence, not vibes

every step signed, in order, on disk.

run with --audit and bernstein writes an hmac-chained event log under .sdd/audit/, one jsonl file per utc day. each entry references the previous hash. tampering breaks verification. nothing leaves your machine.

someone who did not run it can check it. signature and hash-chain checks read the files alone; the hmac leg needs the key the chain was written with, so hand a reviewer both and bernstein audit verify answers without rerunning anything. not a screenshot, not a SOC2 PDF - a hash chain that recomputes.

configure a signing key and a run also writes an ed25519-signed receipt binding the journal and lineage heads. bernstein verify receipt reads that file alone - no hmac key, no .sdd/. pin the public key for provenance. no key, no receipt.

~/proj $ bernstein audit verify

Text
# reading .sdd/audit/2026-07-24.jsonl · 412 entries · 18m04s span

17:42:01  manager.plan     cb84a1…  13 tasks · est $4.20
17:42:18  scheduler.spawn  3e09f7…  t-001 → backend (sonnet)
17:42:18  scheduler.spawn  81c2dd…  t-002 → backend (sonnet)
17:42:19  scheduler.spawn  b50af8…  t-003 → qa      (opus)
17:55:11  janitor.verify   d014a3…  t-005 docs · pytest 84/84 · ruff 0
17:55:14  manager.merge    ee7c12…  t-005 → main · 4 files · clean
18:02:14  janitor.fail     9aa10b…  t-003 qa · pytest collect err · 3/3 retries
18:02:30  scheduler.route  71b4cc…  t-003 opus → sonnet · awaiting op
18:09:14  scheduler.pause  4d2e09…  conflict · t-001 ↔ t-007 · src/auth/refresh.py

verify chain      ok ✓  412/412 entries · last hash 4d2e09cb…
hmac key          ~/.local/state/bernstein/audit.key

frequently asked

the four questions that block install.

is the scheduler an llm?

no. the useful half of the answer is where models do sit: model selection is llm-assisted (capability router + recommender), and best-of-n picks a winner via llm judge. both are opt-in and pluggable, so you can wire your own planner in through the routing layer. the one place a model never goes is the tick that decides who runs, who's blocked and what merges. put one there and the run stops replaying.

does it phone home?

nothing leaves your machine without your config. opt-in telemetry is full and audit-grade: hmac-chained run trail, per-task tool calls, model usage, token cost, latency percentiles. ship it to your own otel collector, datadog, splunk, s3 bucket. defaults to local-only because on-prem installs need that, but the enterprise hooks are there.

where does it run?

wherever you point it. your laptop, on-prem behind a firewall, cloudflare workers as the cloud runtime, kubernetes as a multi-node cluster, or a hybrid of those. sandbox-execution mode is supported (cloudflare sandbox, local docker). your repo is the input, your tests are the gate; bernstein adapts to the host. nothing forces a saas hop.

how is this different from claude code?

claude code can spawn sub-agents on its own; bernstein does the same thing across 40+ cli agents at once and verifies their output against your tests instead of trusting it. claude code is the most common primary backend inside bernstein - using one does not exclude the other.