Labsco
MCP SERVER

Bernstein

by chernistry

Run several CLI coding agents in parallel from your MCP client, each in its own git worktree behind merge gates, with a replay journal that lets you check the run afterwards.

Reasoning Scaffolds & Agent Workflow Engines
Summary
Replay yesterday's plan and get yesterday's task graph.

Keeping the LLM out of the coordination loop is what buys that. The consequence you can act on is the journal: when a run diverges, it names the exact step, instead of leaving you to re-run it and hope.

What it is

A deterministic orchestrator for CLI coding agents — Claude Code, Codex, Gemini CLI and 40+ more — exposed as MCP tools so any MCP client can drive multi-agent work. The scheduling itself is plain Python with no LLM in the coordination loop, so a run reproduces end to end.

What you get
  • Three tool tiers, cumulative, chosen with `--mcp-tier` or `BERNSTEIN_MCP_TOOL_TIER`, because every advertised tool costs context on every turn whether or not it is called
  • `core` — `bernstein_run`, `bernstein_status` and `bernstein_run_status`: start a run and observe it, at the smallest context cost
  • `standard`, the default — adds `bernstein_approve`, `bernstein_complete`, `bernstein_cancel`, `bernstein_claim`, `bernstein_post_message`, `bernstein_post_artifact`, `bernstein_task_capsule`, `bernstein_shutdown_orchestrator` and `load_skill`
  • `all` — adds the scenario bridge `bernstein_scenario` and `bernstein_verify_lineage`
  • Isolation by construction: each coding task gets its own git worktree behind merge gates, artifact-mode tasks get a working directory of their own, and the only shared state is a task backlog claimed atomically
  • Checkability after the fact: a replay journal of every run, an always-on lineage spine, and an opt-in HMAC-chained audit log, so non-determinism surfaces as a hash mismatch at the exact step rather than as a flaky re-run
  • One portable, Ed25519-signed run receipt binding the journal head and the lineage-spine head, verifiable offline from the file alone
  • Two operator surfaces reading the same task API — a terminal dashboard and a browser dashboard — so neither lags the other
  • `bernstein mcp tools` to audit exactly what each tier would advertise before you change the setting
Requirements

Python 3.12+. Install with `uv tool install bernstein` or `pipx install bernstein`, then `bernstein init`, `bernstein doctor` — which checks that a CLI agent is installed and authenticated — and you are running. pipx, pip, brew, dnf, npm and Docker are all covered, and an air-gapped wheelhouse install profile exists. An unknown tier value is rejected with an error rather than silently falling back, so a typo cannot quietly change the exposed surface. The project is described as beta and solo-maintained: minor versions may change interfaces, so pin the version for anything you depend on. Apache 2.0.

Setup effort

One command plus a key — uv tool install bernstein, then supply credentials