Show HN: Bernstein – run 44 CLI coding agents from one deterministic scheduler Bernstein, a deterministic orchestrator for CLI coding agents, is now in beta, enabling users to run 44 CLI coding agents from a single scheduler. Developed by sipyourdrink-ltd, Bernstein coordinates agents like Claude Code, Codex, and Gemini CLI in parallel, with no LLM in the coordination loop, isolated worktrees, and an optional HMAC-chained audit log for verifiable runs. The tool is Apache-2.0 licensed and supports air-gapped installation. "To achieve great things, two things are needed: a plan and not quite enough time."- attributed to Leonard Bernstein website https://bernstein.run · docs https://bernstein.readthedocs.io/ · install https://bernstein.readthedocs.io/en/latest/getting-started/install/ · first run https://github.com/sipyourdrink-ltd/bernstein/blob/main/docs/getting-started/first-run.md · glossary https://github.com/sipyourdrink-ltd/bernstein/blob/main/docs/reference/GLOSSARY.md · limitations https://github.com/sipyourdrink-ltd/bernstein/blob/main/docs/reference/KNOWN LIMITATIONS.md · name policy https://github.com/sipyourdrink-ltd/bernstein/blob/main/TRADEMARKS.md · sponsor https://github.com/sponsors/chernistry Status: beta.Solo-maintained, under active development. The version number counts releases, not maturity - minor versions may change interfaces. Pin the version for anything you depend on; regressions get fixed fast, file them . Bernstein is a deterministic orchestrator for CLI coding agents Claude Code, Codex, Gemini CLI, and 40+ more . It runs them in parallel, gates what they produce, and records enough of the run that you can check it afterwards. Air-gap install profile included. Apache-2.0. Four things set it apart; everything after is detail. No LLM in the coordination loop. Scheduling is plain Python, so a run is reproducible end to end. Replay yesterday's plan and get yesterday's task graph. Checkable after the fact. The replay journal records every run, and the always-on lineage spine records every lineage-bearing step; the opt-in HMAC-chained audit log BERNSTEIN AUDIT=1 adds receipts you verify offline. Non-determinism surfaces as a hash mismatch at the exact step, not a flaky re-run. Non-code deliverables get the same treatment. A task can declare an artifact contract — report, dataset, action log, ops result — from a plan step, a backlog entry, or the task CLI, and completes on a signed lineage receipt rather than a git commit. Isolated by construction. Each coding task gets its own git worktree behind merge gates; artifact-mode tasks get working-directory separation under .sdd/workspaces/ . Under this default isolation agents share no mutable workspace; coordination state the task backlog is shared and claimed atomically. Filesystem enforcement beyond that separation is opt-in, from the sandbox backends https://github.com/sipyourdrink-ltd/bernstein/blob/main/docs/architecture/sandbox.md . Disable worktrees and every task runs in the shared checkout. Broad and local. 40+ CLI agent adapters plus a generic --prompt wrapper, file-based state, no SaaS hop, no third-party data plane. The full list is on the capabilities page https://github.com/sipyourdrink-ltd/bernstein/blob/main/docs/reference/capabilities.md ; the feature matrix https://github.com/sipyourdrink-ltd/bernstein/blob/main/docs/reference/FEATURE MATRIX.md is the exhaustive index. uv tool install bernstein or: pipx install bernstein bernstein init bernstein doctor checks a CLI agent is installed and authenticated bernstein -g "fix the failing test in tests/test foo.py" pipx, pip, brew, dnf, npm, and Docker are covered in the install guide https://bernstein.readthedocs.io/en/latest/getting-started/install/ ; the air-gapped wheelhouse has its own air-gap guide https://bernstein.readthedocs.io/en/latest/installation/air-gap/ . The recording above is a real run, and it ships with its own proof. The cast, the signed run receipt derived from that run's journal, and the public key that pins it all live in docs/assets/demo-run/ https://github.com/sipyourdrink-ltd/bernstein/tree/main/docs/assets/demo-run . Verify the run you just watched, offline: bernstein verify receipt docs/assets/demo-run/run-receipt.json \ --public-key docs/assets/demo-run/run-receipt.pub.pem CI re-verifies the committed receipt on every push to main — and proves a tampered copy fails — so the published evidence cannot rot into a decorative file. scripts/record demo.sh regenerates the recording, receipt, and key from a fresh real run; nothing inside the terminal is synthesised. A run in flight is watchable from either operator surface. Both read the same task API, so neither is a lagging mirror of the other. bernstein live — the terminal dashboard | bernstein gui serve — the browser dashboard | Determinism here is something you check, not something you take on faith. Run once with audit enabled, then verify what was recorded: BERNSTEIN AUDIT=1 bernstein -g "fix the failing test in tests/test foo.py" bernstein replay list run ids recorded on disk bernstein replay latest --verify recompute the journal head, name the first divergent step bernstein lineage verify