Bernstein is een open-source governance layer die fungeert als een deterministische Python-scheduler voor AI-agenten. In tegenstelling tot veel andere systemen wordt de coördinatieloop niet aangestuurd door een LLM, wat zorgt voor volledige reproduceerbaarheid van plannen.
Kernfunctionaliteiten en proces:
- Workflow: Het proces verloopt in vier fasen: decomponeren (taken verdelen), spawnen (agenten starten in geïsoleerde Git-worktrees), verifiëren (controle op tests en linting) en mergen.
- Verificatie: Alleen wijzigingen die alle tests passeren, worden uiteindelijk toegevoegd.
- Audit-trail: Bernstein genereert HMAC-chained eventlogs en Ed25519-ondertekende bewijzen. Dit maakt het mogelijk om runs cryptografisch te verifiëren zonder dat de volledige procesgang opnieuw uitgevoerd hoeft te worden.
- Deployment: De software is platformonafhankelijk en kan lokaal, on-premise, in air-gapped omgevingen of in de cloud (bijv. Cloudflare Workers) draaien.
Bernstein positioneert zich als een orchestrator die diverse CLI-coding agents (zoals Claude Code) kan aansturen en hun output kan valideren tegen vastgestelde contracten.
Bernstein: De open-source governance layer voor AI-agenten
Wat is Bernstein?
Bernstein biedt de volgende functionaliteiten:
- Parallelle uitvoering: Draait CLI-coding agents in parallel.
- Isolatie: Iedere agent draait in zijn eigen Git-worktree.
- Verificatie: Controleert linting, types en tests per diff.
- Mergen: Alleen wijzigingen die de tests passeren, worden gemerged.
- Afsluiting: Sluit onderzoek, datasets en audit-pakketten af op basis van artifact-contracten met ondertekende lineage-bewijzen.
- Omgeving: Draait op je laptop, on-premise of in een air-gapped omgeving.
Let op: Bernstein is bèta-software, gebouwd door één maintainer.
Installatie
Je kunt Bernstein installeren via pipx, brew, uv of docker:
$ pipx install bernstein
$ bernstein init
Het proces: in vier fasen
Een run verloopt in vier stappen:
- Decomponeren (Decompose): De manager verdeelt de taak in taken, rollen en signalen.
- Spawnen (Spawn): Agenten worden gestart in geïsoleerde worktrees.
- Verifiëren (Verify): De 'janitor' controleert tests, types en linting, met optionele cross-model reviews.
- Mergen (Merge): Alleen geverifieerde diffs worden uiteindelijk toegevoegd.
Bewijs, geen gevoel: Verifieerbare audits
Elke stap wordt ondertekend, in volgorde, op schijf opgeslagen.
Wanneer je draait met --audit, schrijft Bernstein een HMAC-chained eventlog onder .sdd/audit/, met één JSONL-bestand per UTC-dag. Elke entry verwijst naar de vorige hash. Manipulatie van de log verbreekt de verificatie. Niets verlaat je machine.
Iemand die de run niet zelf heeft uitgevoerd, kan deze controleren. De handtekening- en hash-chain-controles lezen alleen de bestanden; voor het HMAC-gedeelte is de sleutel nodig waarmee de chain is geschreven. Door zowel de bestanden als de sleutel aan een reviewer te geven, kan bernstein audit verify antwoord geven zonder dat alles opnieuw gedraaid hoeft te worden. Dit is geen screenshot of een SOC2 PDF, maar een hash-chain die opnieuw berekend kan worden.
Door een ondertekeningssleutel te configureren, schrijft een run ook een Ed25519-ondertekend bewijs (receipt) dat het journaal en de lineage-heads bindt. Met bernstein verify receipt kan dit bestand alleen worden gelezen — zonder HMAC-sleutel en zonder de .sdd/ map. Pin de publieke sleutel voor herkomstverificatie (provenance). Geen sleutel betekent geen bewijs.
Voorbeeld van een audit-verificatie:
~/proj $ bernstein audit verify
# 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
Veelgestelde vragen (FAQ)
Is de scheduler een LLM? Nee. De modellen bevinden zich in andere delen: modelselectie wordt ondersteund door een LLM (capability router + recommender), en 'best-of-n' kiest een winnaar via een LLM-judge. Beide zijn optioneel en vervangbaar, zodat je je eigen planner via de routing-layer kunt koppelen. De enige plek waar een model nooit komt, is de 'tick' die beslist wie er draait, wie geblokkeerd is en wat er gemerged wordt. Als je daar een model plaatst, stopt de run met het identiek kunnen reproduceren van de resultaten.
Verstuurt het gegevens naar een externe server (phone home)? Niets verlaat je machine zonder jouw configuratie. Opt-in telemetrie is volledig en van audit-kwaliteit: HMAC-chained run trails, per-task tool calls, modelgebruik, tokenkosten en latency-percentielen. Je kunt dit versturen naar je eigen Otel-collector, Datadog, Splunk of S3-bucket. Standaard staat dit op 'local-only' omdat on-premise installaties dat vereisen, maar de enterprise-koppelingen zijn aanwezig.
Waar draait het op? Overal waar je het configureert: je laptop, on-premise achter een firewall, Cloudflare Workers als cloud-runtime, Kubernetes als multi-node cluster, of een hybride vorm. Sandbox-executiemodus wordt ondersteund (Cloudflare sandbox, lokale Docker). Je repository is de input, je tests zijn de poort; Bernstein past zich aan de host aan. Er is geen verplichting om via een SaaS-dienst te werken.
Hoe verschilt dit van Claude Code? Claude Code kan zelf sub-agenten spawnen; Bernstein doet hetzelfde voor meer dan 40 verschillende CLI-agenten tegelijk en verifieert hun output tegen jouw tests in plaats van het blind te vertrouwen. Claude Code is de meest gebruikte primaire backend binnen Bernstein — het gebruik van de een sluit de ander niet uit.
Recente updates
Bernstein 3.14.159: The stranger's ninety minutes
Een rapport over het eerste gebruik beschreef een setup-proces van negentig minuten dat nergens toe leidde. v3.14.159 lost dit op: de plan loader geeft nu benoemde fouten in plaats van malformed fields te negeren. Vijf commando's zijn verwijderd en de rest is gemarkeerd voor deprecation. De referentiedocumentatie is nu CI-gated tegen de geregistreerde CLI en de README vermeldt expliciet dat het software in bèta is. Daarnaast zijn er een Muse Code adapter, Agent Plugins v1.0.0 manifests, een offline verifieerbaar ondertekend run-bewijs en bernstein audit diagnose toegevoegd.
Agents op Cloudflare: Workers, Durable Objects, R2, D1
Integratie van Bernstein met Cloudflare voor AI-coding agents: Workers draaien de agenten, workflows beheren multi-step taken, en R2 + D1 beheren de workspace en metering state. Dit is experimenteel en draait op je eigen account.
Bernstein 1.0: Open-source orchestrator voor AI-coding agents
Orkestreer Claude Code, Codex, Gemini CLI en andere CLI-coding agents in parallelle Git-worktrees. Voorzien van een deterministische scheduler en een HMAC-ondertekende audit-chain.
Bernstein: De open-source governance layer voor AI-agenten
Wat is Bernstein?
Bernstein biedt de volgende functionaliteiten:
- Parallelle uitvoering: Draait CLI-coding agents in parallel.
- Isolatie: Iedere agent draait in zijn eigen Git-worktree.
- Verificatie: Controleert linting, types en tests per diff.
- Mergen: Alleen wijzigingen die de tests passeren, worden gemerged.
- Afsluiting: Sluit onderzoek, datasets en audit-pakketten af op basis van artifact-contracten met ondertekende lineage-bewijzen.
- Omgeving: Draait op je laptop, on-premise of in een air-gapped omgeving.
Let op: Bernstein is bèta-software, gebouwd door één maintainer.
Installatie
Je kunt Bernstein installeren via pipx, brew, uv of docker:
$ pipx install bernstein
$ bernstein init
Het proces: in vier fasen
Een run verloopt in vier stappen:
- Decomponeren (Decompose): De manager verdeelt de taak in taken, rollen en signalen.
- Spawnen (Spawn): Agenten worden gestart in geïsoleerde worktrees.
- Verifiëren (Verify): De 'janitor' controleert tests, types en linting, met optionele cross-model reviews.
- Mergen (Merge): Alleen geverifieerde diffs worden uiteindelijk toegevoegd.
Bewijs, geen gevoel: Verifieerbare audits
Elke stap wordt ondertekend, in volgorde, op schijf opgeslagen.
Wanneer je draait met --audit, schrijft Bernstein een HMAC-chained eventlog onder .sdd/audit/, met één JSONL-bestand per UTC-dag. Elke entry verwijst naar de vorige hash. Manipulatie van de log verbreekt de verificatie. Niets verlaat je machine.
Iemand die de run niet zelf heeft uitgevoerd, kan deze controleren. De handtekening- en hash-chain-controles lezen alleen de bestanden; voor het HMAC-gedeelte is de sleutel nodig waarmee de chain is geschreven. Door zowel de bestanden als de sleutel aan een reviewer te geven, kan bernstein audit verify antwoord geven zonder dat alles opnieuw gedraaid hoeft te worden. Dit is geen screenshot of een SOC2 PDF, maar een hash-chain die opnieuw berekend kan worden.
Door een ondertekeningssleutel te configureren, schrijft een run ook een Ed25519-ondertekend bewijs (receipt) dat het journaal en de lineage-heads bindt. Met bernstein verify receipt kan dit bestand alleen worden gelezen — zonder HMAC-sleutel en zonder de .sdd/ map. Pin de publieke sleutel voor herkomstverificatie (provenance). Geen sleutel betekent geen bewijs.
Voorbeeld van een audit-verificatie:
~/proj $ bernstein audit verify
# 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
Veelgestelde vragen (FAQ)
Is de scheduler een LLM? Nee. De modellen bevinden zich in andere delen: modelselectie wordt ondersteund door een LLM (capability router + recommender), en 'best-of-n' kiest een winnaar via een LLM-judge. Beide zijn optioneel en vervangbaar, zodat je je eigen planner via de routing-layer kunt koppelen. De enige plek waar een model nooit komt, is de 'tick' die beslist wie er draait, wie geblokkeerd is en wat er gemerged wordt. Als je daar een model plaatst, stopt de run met het identiek kunnen reproduceren van de resultaten.
Verstuurt het gegevens naar een externe server (phone home)? Niets verlaat je machine zonder jouw configuratie. Opt-in telemetrie is volledig en van audit-kwaliteit: HMAC-chained run trails, per-task tool calls, modelgebruik, tokenkosten en latency-percentielen. Je kunt dit versturen naar je eigen Otel-collector, Datadog, Splunk of S3-bucket. Standaard staat dit op 'local-only' omdat on-premise installaties dat vereisen, maar de enterprise-koppelingen zijn aanwezig.
Waar draait het op? Overal waar je het configureert: je laptop, on-premise achter een firewall, Cloudflare Workers als cloud-runtime, Kubernetes als multi-node cluster, of een hybride vorm. Sandbox-executiemodus wordt ondersteund (Cloudflare sandbox, lokale Docker). Je repository is de input, je tests zijn de poort; Bernstein past zich aan de host aan. Er is geen verplichting om via een SaaS-dienst te werken.
Hoe verschilt dit van Claude Code? Claude Code kan zelf sub-agenten spawnen; Bernstein doet hetzelfde voor meer dan 40 verschillende CLI-agenten tegelijk en verifieert hun output tegen jouw tests in plaats van het blind te vertrouwen. Claude Code is de meest gebruikte primaire backend binnen Bernstein — het gebruik van de een sluit de ander niet uit.
Recente updates
Bernstein 3.14.159: The stranger's ninety minutes
Een rapport over het eerste gebruik beschreef een setup-proces van negentig minuten dat nergens toe leidde. v3.14.159 lost dit op: de plan loader geeft nu benoemde fouten in plaats van malformed fields te negeren. Vijf commando's zijn verwijderd en de rest is gemarkeerd voor deprecation. De referentiedocumentatie is nu CI-gated tegen de geregistreerde CLI en de README vermeldt expliciet dat het software in bèta is. Daarnaast zijn er een Muse Code adapter, Agent Plugins v1.0.0 manifests, een offline verifieerbaar ondertekend run-bewijs en bernstein audit diagnose toegevoegd.
Agents op Cloudflare: Workers, Durable Objects, R2, D1
Integratie van Bernstein met Cloudflare voor AI-coding agents: Workers draaien de agenten, workflows beheren multi-step taken, en R2 + D1 beheren de workspace en metering state. Dit is experimenteel en draait op je eigen account.
Bernstein 1.0: Open-source orchestrator voor AI-coding agents
Orkestreer Claude Code, Codex, Gemini CLI en andere CLI-coding agents in parallelle Git-worktrees. Voorzien van een deterministische scheduler en een HMAC-ondertekende audit-chain.