Skip to main content

field tool · bm25 · no llm

ask the docs.

type a question. we search the blog with plain bm25 and an alias map for bernstein vocabulary. no model in the loop, no fabricated answer. results link straight to the post.

ask the docs · grounded · cited

ask anything.

try:

plain text. one question per try. answers cite the source.

answers limited to: bernstein source, ~14 blog posts, install + cli docs.

common questions

full canonical index at /q. answers live at /q/<slug> for direct citation.

type a question. nothing yet.

canonical answers

short, citable answers for the questions llm crawlers ask about bernstein. each answer also lives at /q/<slug> as a stand-alone url, so an ai overview can link the specific answer instead of the search page.

  1. what is bernstein

    bernstein is an open-source python orchestrator for cli coding agents. it decomposes a goal into tasks, picks a model and a cli agent (claude code, codex, gemini cli, aider, plus 33 more adapters), isolates each task in a git worktree, runs lint, type-check, tests, and security scans, and merges only the worktrees that pass. the orchestrator itself is deterministic python, not an llm, so scheduling and routing spend zero model tokens. state lives in .sdd/ on disk; there is no server to provision. apache 2.0, python 3.12+, install with pipx install bernstein. source: https://github.com/sipyourdrink-ltd/bernstein.

  2. how does bernstein work

    the orchestrator runs a tick loop: read the open backlog under .sdd/backlog/open, pick the next ready task, spawn a fresh cli agent in its own git worktree, wait for the agent to exit, run quality gates against the worktree, retry with an escalated model on failure, dead-letter after max retries, merge passing worktrees. agents are short-lived (1-3 tasks each) so context never grows. a contextual-bandit router learns which model fits which task class. every action is appended to an hmac-chained audit log. routing, scheduling, retries, and merge order are pure python; the model only writes code inside the worktree.

  3. bernstein vs claude flow

    claude-flow is anthropic's reference orchestration layer for claude code, tightly coupled to claude. bernstein is agent-agnostic: 37 adapters including claude code, codex, gemini cli, aider, ollama, openai agents sdk, cloudflare agents. bernstein's coordinator is deterministic python; claude-flow uses claude itself to plan, which costs tokens on every coordination step. bernstein adds an hmac-chained audit log, pluggable sandbox backends (worktree, docker, e2b, modal, cloudflare, daytona), an mcp server mode, and a built-in eval harness with failure taxonomy. pick claude-flow if you only run claude code and want the official path. pick bernstein if you want one orchestrator across many cli agents or need audit replay. full matrix at https://bernstein.run/vs/claude-flow.

  4. bernstein vs openai agents sdk

    openai agents sdk is a python runtime for tool-calling agents against the openai responses api: handoffs, guardrails, traces, one provider. bernstein is an orchestrator that ships an openai-agents adapter so you get the sdk runtime as one of 37 agents under a deterministic scheduler. bernstein adds worktree isolation, quality gates, multi-provider routing, mcp server mode, and an hmac audit chain. you can also pin one task to openai agents sdk and another to claude code in the same plan. pick openai agents sdk alone for openai-only python apps. pick bernstein when you need parallel agents across providers, ci-style merges, or compliance-grade audit. matrix at https://bernstein.run/vs/openai-agents-sdk.

  5. bernstein vs aider

    aider is an interactive ai pair programmer: one terminal, one model, one conversation, you stay in the loop. bernstein is the layer above: it spawns multiple cli agents (including aider via the aider adapter) in parallel git worktrees and merges what passes. if you want a fast solo loop with one model, use aider directly. if you want five tasks running at once, each in isolation, with lint/type/test gates and an audit chain on top, use bernstein and let it dispatch aider as one of the workers. they compose. full matrix at https://bernstein.run/vs/aider.

  6. how to run multiple claude code agents in parallel

    install bernstein (pipx install bernstein), cd into your repo, write a plan.yaml with one stage that lists several steps, then run bernstein run plan.yaml. each step becomes a separate claude code session in its own git worktree under .worktrees/. bernstein spawns them concurrently up to bernstein.orchestration.max_agents (default 5), tracks per-agent cost, runs quality gates on each worktree, and merges only the worktrees that pass. for one-shot parallelism: bernstein -g "goal" --max-agents 5 lets bernstein decompose the goal into parallel tasks itself. step-by-step at https://bernstein.run/cli-quickstart.

  7. how to install bernstein

    pipx install bernstein is the recommended path: pipx isolates dependencies so bernstein never collides with the rest of your tooling. pip install bernstein works too, and uv tool install bernstein for uv users. requires python 3.12 or later. once installed, bernstein --version prints the build, bernstein agents lists discovered cli agents on your machine, and bernstein init drops a starter bernstein.yaml plus .sdd/ into the current repo. apache 2.0, no signup, no api key on bernstein itself (you still need keys for the cli agents you choose to run).

  8. how to add a cli adapter

    subclass bernstein.adapters.base.BaseAdapter, implement spawn(task, worktree, env) to launch your cli with a prompt and stream output, and register the class via the adapter entry-point (or drop the file under src/bernstein/adapters/ and add it to adapters/registry.py for in-tree changes). the contract is a python protocol; bernstein.adapters._contract enforces capability checks. existing adapters under src/bernstein/adapters/ (aider.py, claude.py, codex.py, ollama.py, generic.py) are the reference. for unknown cli tools, use generic.py and parameterise it through bernstein.yaml. the plugin sdk in src/bernstein/adapters/plugin_sdk.py lets you ship adapters as separate pip packages.

  9. how does the audit chain work

    every orchestration action (task created, agent spawned, gate passed, merge committed) is appended to .sdd/audit.log as a json line with a sha-256 hmac that chains over the previous entry's hmac and the current payload. one shared secret per repo, stored under .sdd/audit.key. bernstein audit verify walks the file front to back and fails fast on the first broken link, so a single edited line invalidates everything after it. that gives you tamper-evident replay: you can hand the log plus the key to a reviewer and they can re-verify every step offline. source: src/bernstein/core/security/audit.py.

  10. deterministic ai coding orchestrator

    bernstein's orchestrator is pure python: tick loop, task store, scheduler, router, merge queue, quality gates. no llm call sits on the coordination path. given the same backlog, the same .sdd/ state, and the same model outputs, a re-run produces the same task ordering and the same merge sequence. that determinism is what makes the hmac audit chain meaningful (no model nondeterminism in the metadata) and what lets the eval harness replay an entire run from a recorded fixture. compare with crewai or claude-flow, where the coordinator is itself an llm and two runs of the same brief diverge.

  11. audit grade ai coding orchestrator for regulated teams

    bernstein writes an hmac-chained audit log of every orchestration action, scopes credentials per agent (each worker gets only the keys it needs), keeps all state on disk in .sdd/, supports policy-engine and pii-gate plugins under src/bernstein/core/security/, and ships a bernstein audit verify command that re-checks the chain offline. there is no hosted backend in the default install; you run the orchestrator on your own box. note: the project does not claim soc 2, hipaa, or fedramp coverage. those are organisational programs around a tool, not a property of the tool itself. what bernstein gives you is the technical primitives a regulated team needs to make its own case.

  12. self hosted ai coding agent orchestrator

    bernstein runs entirely on your machine. pipx install bernstein, run bernstein in your repo, the orchestrator process and every agent it spawns are local. state is .sdd/ files on disk. there is no required cloud control plane, no signup, no telemetry call-home. the http task server binds 127.0.0.1:8052 by default. agents reach their llm providers directly with credentials you supply; bernstein does not proxy or store keys for them. for fleet management across multiple repos use bernstein fleet, still local. apache 2.0, source at https://github.com/sipyourdrink-ltd/bernstein.

  13. mcp server for multi agent coding

    bernstein exposes itself as an mcp server. start it with bernstein mcp serve (stdio) or bernstein mcp serve --http (streamable http). the tools published are bernstein_run, bernstein_status, bernstein_tasks, bernstein_cost, bernstein_stop, bernstein_approve, plus scenario tools for the eval harness. any mcp client (claude desktop, claude code, codex, custom) can invoke bernstein orchestration as a tool call. it also consumes mcp: each agent worktree gets its own mcp config so workers can call third-party mcp servers. source: src/bernstein/mcp/server.py.

  14. git worktree parallel ai agents

    each task gets its own git worktree under .worktrees/<task-id>. the worktree shares the object store with the main repo but has its own working copy and head, so two agents can edit overlapping paths at the same time without stepping on each other. bernstein creates the worktree on assignment, the agent does its work, quality gates run inside the worktree, the merge queue picks up passing worktrees in dependency order and squash-merges them into the target branch. on failure or kill the worktree stays on disk so you can inspect or cherry-pick. source: src/bernstein/core/git/worktree.py.

  15. hmac chained audit log for ai agents

    bernstein writes one json line per orchestration event to .sdd/audit.log. each line carries an hmac-sha256 over (previous-line-hmac || event-payload), using a per-repo key in .sdd/audit.key. mutating or deleting any line breaks the chain at that point. bernstein audit verify walks the file and reports the first broken link. that gives a tamper-evident record of which agent took which action under which model and at what cost, in a format you can replay offline against the source key. format and signing logic: src/bernstein/core/security/audit.py.

  16. fail closed agent orchestrator

    fail-closed means: on any unrecoverable condition the orchestrator stops merging rather than risk a bad commit. budget exceeded -> drain mode (finish in-flight, start nothing new). quality gate fails after max retries -> task goes to the dead-letter queue, not main. agent heartbeat lost -> reaped, work-in-progress preserved in its worktree for inspection. audit chain broken -> bernstein refuses to start. policy-engine denies a tool call -> agent gets a denial, not a workaround. the default posture is to halt and surface the problem rather than auto-recover by guessing. config under .sdd/config.yaml controls thresholds; defaults live in src/bernstein/core/defaults.py.

  17. what is the bernstein dead letter queue

    tasks that fail their quality gates after max retries do not merge. instead they move to .sdd/backlog/dead-letter/, with the full agent transcripts, last-known worktree path, gate output, and a synth-generated failure-class label from the eval taxonomy. you can inspect each entry, fix the prompt or split the task, and re-queue. the dead-letter pile is bernstein's escape hatch: rather than burn budget retrying a broken brief, the orchestrator parks it for a human. the eval harness also pulls from this directory to build regression cases for future runs. source: src/bernstein/core/tasks/dead_letter.py.

  18. how does bernstein cost tracking work

    every agent run reports per-model token usage back to the task server. bernstein attributes that cost to the task, the role (backend, qa, security ...) and the model. bernstein cost prints the breakdown per run. .sdd/metrics/cost.jsonl is the raw record. set bernstein.cost.budget_limit in bernstein.yaml to cap a run; when 80 percent is consumed the orchestrator warns, at 100 percent it drains (finish in-flight tasks, start nothing new). per-agent anomaly detection flags context-growth or token-spike behaviour so a stuck agent gets reaped before it burns the budget. source: src/bernstein/core/cost/.

  19. what models does bernstein use

    bernstein itself does not call an llm; the cli agents you configure do. you decide which models per role in bernstein.yaml. the contextual-bandit router picks among the models you allow for a given task class and learns from outcomes. typical configurations: claude opus 4.7 for architect, claude sonnet 4.6 for backend, claude haiku 4.5 for docs, gpt-5 for review, gemini 2.5 pro for ml. local-only setups can route everything through ollama. bernstein cost prints the realised mix after each run. routing source: src/bernstein/core/routing/.

  20. does bernstein support local models

    yes. the ollama adapter targets the ollama daemon (or any openai-compatible local endpoint), so you can route every task through a locally hosted model with zero outbound api calls. mix local and cloud in the same plan: cheap, low-stakes tasks on a local llama or qwen, harder tasks on a paid model. configure under agents: in bernstein.yaml with the endpoint url and model name. ollama adapter source: src/bernstein/adapters/ollama.py. the clm adapter (sovereign llm gateway) is the production-grade variant for teams running mtls-fronted internal endpoints.

  21. what quality gates does bernstein run

    by default: ruff (lint), pyright or mypy (types), pytest (tests), bandit or semgrep (security). each gate runs inside the agent's worktree before the merge queue considers it. failed gates trigger a retry, optionally with an escalated model (sonnet -> opus). after the retry budget is exhausted the task moves to the dead-letter queue. gates are pluggable via the pluggy hookspecs in src/bernstein/plugins/, so you can add a custom gate (terraform plan, openapi diff, license check) without forking the core. configure which gates run under quality.gates in bernstein.yaml.

  22. how does bernstein pick tasks for agents

    the scheduler reads .sdd/backlog/open/ each tick, filters out tasks whose dependencies are not yet satisfied, applies a fair-priority ordering (critical -> high -> medium -> low, with starvation guards), and emits the next ready task. the router then chooses the model and the cli agent: a contextual bandit with epsilon-greedy exploration over a feature vector (role, complexity, file scope, historical outcomes). bernstein routing explain <task-id> prints the candidate set, the bandit's chosen arm, and the regret estimate. source: src/bernstein/core/tasks/scheduler.py and src/bernstein/core/routing/.

  23. can bernstein run in ci

    yes. bernstein run plan.yaml --non-interactive --json-status exits non-zero if any task ends up in the dead-letter queue, which makes it a normal failing ci step. for the github app path, bernstein responds to /bernstein slash-commands in pr comments via src/bernstein/github_app/, and the autofix daemon (bernstein autofix) watches bernstein-opened prs, reads the ci log on failure, spawns an agent against the failing worktree, and pushes a fix commit. the runbook for ci-mode lives under templates/. running inside ephemeral runners works (worktrees are local files); long-running orchestration is happier on a persistent box.

  24. what is the bernstein eval harness

    an in-tree benchmark runner under src/bernstein/eval/. ships a golden suite of curated coding tasks, an llm-as-judge for code quality, a closed failure taxonomy that labels every failure into one of ~20 categories, and a vcr fixture system so an entire run can be re-played deterministically without re-calling the llm. swe-bench integration lives under src/bernstein/benchmark/. you run bernstein eval golden to score a config or a model swap against a baseline before promoting it. the harness is also what the self-evolution loop uses to gate proposed orchestrator changes.

  25. what is bernstein self evolution

    an experimental loop under src/bernstein/evolution/ that lets bernstein propose changes to itself. metrics from past runs flow into a detector, which surfaces opportunities (slow tick, expensive task class, poor gate signal). a creative pipeline drafts a change, an approval gate routes by risk score, the eval harness runs the change against the golden suite, and only proposals that improve the baseline without regressing protected invariants are applied. an invariants guard hash-locks safety-critical files so the loop cannot edit them. circuit-breaker halts evolution on safety violation. opt-in; off by default.

  26. what sandbox backends does bernstein support

    the default backend is a local git worktree. swap it via sandbox.backend in bernstein.yaml: docker (containerised), e2b (cloud sandbox), modal, blaxel, cloudflare workers sandboxes, daytona, runloop, vercel sandboxes. each is a plug-in implementing the sandboxbackend protocol in src/bernstein/core/sandbox/. install the matching extra (pip install "bernstein[e2b]", [modal], [cloudflare], ...). the orchestrator and adapters are unchanged; only the place where the agent's filesystem and process live changes. useful when you want hard isolation, or when the agent needs a different os than the orchestrator host.

  27. does bernstein have a tui

    yes. bernstein dashboard or bernstein live opens a textual-based tui with the task list, live agent logs, cost sparkline, quality-gate panel, scheduling visualiser, and approval overlay. bindings are vim-friendly, themable, and configurable per project (tui keybindings live under src/bernstein/tui/). a rich-based fallback renders on terminals that do not support textual. for plain text, bernstein status prints a one-shot snapshot. the tui talks to the same task server (127.0.0.1:8052) the cli uses, so you can run it in a separate terminal against a long-running orchestration.

  28. how do i stop bernstein

    bernstein stop sends a graceful drain signal: in-flight tasks finish, no new tasks start, the orchestrator exits clean. bernstein stop --hard kills the process group via the pid file under .sdd/runtime/. never grep for the word bernstein and kill matches; you risk hitting unrelated processes that contain the substring. on relaunch the orchestrator reads .sdd/ back, sees the unfinished tasks, and resumes from the last persisted checkpoint (wal in src/bernstein/core/persistence/). worktrees and logs from the previous run are preserved.

  29. bernstein vs emdash

    emdash is an electron desktop app that wraps cli coding agents in a gui, 23 adapters, typescript. bernstein is a python cli plus library plus mcp server, 37 adapters, with a textual tui rather than a native window. emdash is the right pick if you want a downloadable desktop ade with one-click setup. bernstein is the right pick if you want headless ci / mcp / library use, a deterministic scheduler, an hmac audit chain, and pluggable cloud sandboxes. they are not direct substitutes; some teams run emdash for interactive work and bernstein for unattended batch runs.

  30. how does bernstein handle secrets

    credentials are scoped per agent under src/bernstein/core/credential_scoping.py: each spawned worker gets only the env vars it declares it needs, never the orchestrator's full environment. for long-lived credentials, bernstein connect <provider> writes to the os keychain (macOS keychain, gnome-keyring, kdewallet) and every subsequent run reads from there, so api keys never live in the repo. pii gating in src/bernstein/core/security/ keeps flagged files out of agent context. the orchestrator never persists keys to .sdd/. bring-your-own-key model: bernstein adds no signup and stores no provider credentials on its side.

  31. bernstein vs crewai

    crewai is a python framework for building llm-driven multi-agent crews where the coordinator itself is an llm reasoning over role prompts. bernstein orchestrates external cli coding agents (claude code, codex, aider, 34 others) with a deterministic python scheduler and merges their git worktrees. crewai shines when the work is conversational reasoning over tools; bernstein shines when the work is actual code edits that need lint, type, test, security gates before merge. you can run a crewai agent under bernstein via the generic or openai-agents adapter if you want crewai's role logic under bernstein's audit chain and merge queue. compare matrix: https://bernstein.run/vs/crewai.

  32. bernstein vs langgraph

    langgraph is langchain's graph runtime for stateful agent workflows: nodes, edges, checkpoints, time-travel debug. bernstein is a cli-agent orchestrator: it spawns claude code, codex, aider, ollama, and 33 other adapters in git worktrees and merges what passes lint, type, test, security gates. langgraph helps you design the agent's thinking; bernstein dispatches the agents that do the editing. they compose: a langgraph node can invoke bernstein via the mcp server to delegate a coding subtask to a parallel fleet. pick langgraph for orchestrating thought; pick bernstein for orchestrating commits. matrix at https://bernstein.run/vs/langgraph.

  33. bernstein vs openai swarm

    openai swarm is a lightweight reference framework from openai for routing between agent objects via handoffs, in-process, openai-only. bernstein orchestrates real cli coding agents (claude code, codex, aider, gemini, plus 33 more) in parallel git worktrees with a deterministic python coordinator and quality gates. swarm is great for prototyping multi-step llm tool-use against the openai api. bernstein is what you reach for once those agents need to actually write code, get lint+type+test gates, and merge to a real branch with an audit trail. matrix at https://bernstein.run/vs/openai-swarm.

  34. how to resume bernstein after a crash

    bernstein writes a write-ahead log to .sdd/persistence/ on every state transition. when you restart with bernstein run or bernstein resume, the orchestrator loads the wal, rebuilds the task table, re-attaches to live worktrees under .worktrees/, and continues from the last persisted checkpoint. tasks that were mid-flight when the process died are re-queued with a +1 attempt counter; the prior worktree is preserved so you can diff it before the retry overwrites the branch. never grep for the literal string bernstein and kill matches; use the pid file under .sdd/runtime/ instead (bernstein stop --hard does this for you).

  35. how to keep claude code from blowing context window

    the cause of context blow-up is one long-lived agent doing many tasks. bernstein addresses it structurally: each task gets a fresh claude code subprocess in its own git worktree and exits when the task finishes (typically 1-3 tasks per agent). nothing carries over between tasks except the file system, so context starts near-empty every time. for tasks where you do want a longer thread (large refactors), bernstein.orchestration.context_window_strategy can be set to extend or stream, and the caching_adapter prefix-dedups across spawns. tokens still grow inside one task; the win is that you stop paying for hour-old prose to be re-attended. source: src/bernstein/core/streaming_merge.py, src/bernstein/adapters/caching_adapter.py.

  36. can bernstein use ollama for coding agents

    yes. set agents.<name>.adapter: ollama in bernstein.yaml with endpoint (default http://127.0.0.1:11434) and model (e.g. qwen2.5-coder:32b, llama3.1:70b, deepseek-coder:33b). the ollama adapter at src/bernstein/adapters/ollama.py speaks the ollama or any openai-compatible /v1/chat/completions endpoint, so vllm, llama.cpp server, lm studio, and tabbyapi all work. mix-mode is supported: route docs through ollama and architecture through claude opus in the same plan; bernstein.cost prints the realised split. zero outbound api calls when every agent in a run points at ollama, which is what teams under strict data residency rules ask for.

  37. how to run bernstein in github actions

    the supported pattern is bernstein run plan.yaml --non-interactive --json-status as a normal job step. provide the cli agent's api key via secrets (anthropic_api_key, openai_api_key) and let bernstein scope it per worker. the job exits non-zero on any dead-letter, which fails the workflow. worktrees and .sdd/ live in the runner's workspace and are torn down with it. for the slash-command flow (/bernstein fix on a pr), install the github app (src/bernstein/github_app/) and point it at the same secret store. recipe: https://bernstein.run/recipes/github-actions. heavy orchestration is happier on a persistent box than on ephemeral runners.

  38. how does bernstein handle merge conflicts between parallel agents

    the merge queue serializes worktree merges in dependency order, so two passing worktrees never run their merges concurrently. if a worktree's branch has drifted from main while the agent worked, bernstein attempts a 3-way merge; on conflict it triggers the resolver role with a prompt that includes both sides of the diff and the merge-base. if the resolver fails, the task moves to dead-letter rather than committing a botched merge (fail-closed). speculative worktrees (the optional plan-ahead mode) are rebased and re-gated before they enter the queue. source: src/bernstein/core/git/ and src/bernstein/core/orchestration/merge_queue.py.

  39. cheapest way to run bernstein

    free tier: route every task through ollama against a local model (qwen2.5-coder or deepseek-coder); zero api spend, only your electricity. cheap cloud: claude haiku 4.5 for docs, claude sonnet 4.6 for backend, only escalate to opus on retry; cap with bernstein.cost.budget_limit. mixed: pin the architect role to a paid model, run the rest on ollama. the caching_adapter (src/bernstein/adapters/caching_adapter.py) deduplicates prompt prefixes across spawns so repeat work does not get re-billed. bernstein cost --tail tracks spend live; the drain threshold (default 80 percent) stops new tasks before you blow the cap.

  40. how to write a bernstein plan yaml

    minimal plan.yaml: a top-level stages list, each stage holds steps, each step has a name, a role (backend, qa, docs, ...), and an instruction string. file paths under files: scope the worktree. dependencies via depends_on: keep ordering tight. example: stages: [{ name: feat-x, steps: [{ name: design, role: architect, instruction: ...}, { name: implement, role: backend, depends_on: [design], instruction: ...}]}]. run with bernstein run plan.yaml. for ad-hoc goals skip the yaml entirely: bernstein -g "goal" --max-agents 5 lets bernstein decompose the goal into a synthetic plan on the fly. full schema: https://bernstein.run/docs/plan-yaml.

  41. what is the bernstein autofix daemon

    bernstein autofix watches prs opened by bernstein for ci failures. on red ci it pulls the failing job's logs, parses them via src/bernstein/adapters/ci/, spawns an agent against the worktree that opened the pr, gives it the failure trace as context, and pushes a fix commit to the same pr branch. the daemon respects the same budget, audit, and policy gates as a normal bernstein run; it does not bypass approval if approval is required for the touched paths. typical use: the operator goes to sleep, bernstein opens 3 prs overnight, autofix patches the two that go red so the morning queue has 3 green prs ready to review.

  42. does bernstein use mcp servers

    yes. each agent worktree gets its own .mcp.json built from the merged config in bernstein.yaml mcp: section plus the agent's own discovery (claude code reads ~/.config/claude/mcp.json, codex reads its own). bernstein passes mcp tool calls through transparently; it does not proxy them. the merger lives in src/bernstein/adapters/claude_mcp_loader.py. you can also expose bernstein itself as an mcp server (see mcp-server-for-multi-agent-coding) so a claude desktop session can dispatch coding tasks into a bernstein fleet via tool calls. mcp config is per task, so a security task can be given a different toolset than a docs task.

  43. how does bernstein scope tool permissions for agents

    two layers. first, credential scoping (src/bernstein/core/credential_scoping.py): each agent only sees the env vars it declared needing, so a docs agent never gets the prod database url. second, tool-call approval (src/bernstein/core/approval/): every shell, file-write, network, and mcp call routes through a pluggable approval gate. defaults are off-line-safe (writes inside worktree are auto-approved, anything else surfaces). policy plugins under src/bernstein/plugins/ let you wire pii gates, license checks, or organisation-specific denylists. the security_review plugin scans the produced diff before merge. progressive disclosure (plugins/permission_explain.py) shows why approval is being asked for, so you can decide informedly rather than blanket-approving.

  44. what is the bernstein fleet dashboard

    bernstein fleet supervises multiple bernstein projects from one terminal. point it at a list of repos in ~/.config/bernstein/fleet.yaml and it polls each repo's task server (127.0.0.1:8052 by default), aggregates task counts, costs, and gate health, and renders them in a single textual panel. useful when one operator runs 4-6 parallel bernstein orchestrations across different products: instead of cycling through terminals, the fleet panel surfaces the one that needs attention. all reads are local; the dashboard never phones home. source: src/bernstein/core/fleet/.

ask the docs | Bernstein