Skip to main content
v3.17.2 shipping40+ cli adapters · apache 2.0 · on-prem

several coding agents. one git tree. every run provable.

bernstein is a deterministic python scheduler that runs cli coding agents in parallel. no model in the coordination loop, so the same plan replays byte-identically.

ships adapters for claude code, codex, gemini cli, aider, and 40+ more. each runs in its own git worktree; lint, types, and tests gate every merge. lineage and replay are always on. flip on the hmac audit log and someone who did not run it can check the record offline, without rerunning it.

ask the docsgrounded in source + 20 postscited

ask anything.

one run, four stages.

01
decompose
manager → tasks · roles · signals
02
spawn
agents → isolated worktrees
03
verify
janitor → tests · types · lint · optional cross-model review
04
merge
only verified diffs land

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.

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.

one engineering post a month.

what we shipped, what broke, what we learned. one click to unsubscribe.