Bernstein — Multi-Agent Orchestration
Version updated for https://github.com/sipyourdrink-ltd/bernstein to version v3.8.2.
- This action is used across all versions by 5 repositories.
Action Type
This is a Composite action.
Go to the GitHub Marketplace to find the latest changes.
Action Summary
Bernstein orchestrates CLI coding agents deterministically using plain Python, ensuring reproducibility of tasks across runs. It maintains a lineage spine to track every artifact write and replay journal to preserve the execution history. The tool supports various providers like Claude Code, Codex, Gemini CLI, and more, with features for auditing and verifying run results offline.
What’s Changed
v3.8.2
Patch release: the local dashboard now authenticates its own browser, the startup banner is restored, --idle runs actually stay on the mock adapter, and a duplicated startup notice is quieted. All four were surfaced by an end-to-end run of the released 3.8.1 build.
Fixed
- The local dashboard authenticates its own browser on loopback serve (#2739). On
bernstein gui servebound to loopback with dashboard auth configured butBERNSTEIN_AUTH_TOKENunset, the UI shell loaded but every data panel returned 401: the panels poll the general API, which accepts only the process bearer, while a scoped dashboard token unlocks only the dashboard routes. The local serve path now mints an ephemeral operator bearer, exports it before the app is built so the general API accepts it, and seeds the same token into the opened browser, so the panels load with no operator steps. A non-loopback bind never auto-mints and still refuses without configured auth; an operator-supplied token is reused verbatim; the token rides only the browser URL fragment, never the console or access log. - The startup banner is restored on program load (#2740). Two coupled defects had removed the recognisable ASCII wordmark. First, the bare
bernsteininvocation suppressed its fallback box banner even when the splash was disabled, so withvisual.splash: falseorBERNSTEIN_NO_SPLASH=1no banner showed at all; the fallback now prints whenever the splash renders nothing. Second, the block-art logo only rendered in colour-capable terminals on the bare invocation, so plain terminals and everybernstein runfell back to a one-liner; the compact splash now draws the block-art wordmark on any interactive terminal wide enough to hold it, and thebernstein runstartup banner is routed through it. Non-interactive output (CI, pipes) keeps the terse form. bernstein run --idlestays on the mock adapter (#2741). The orchestrator subprocess overrode the explicit adapter with the seed’sclifield, and sinceclidefaults toauto, any workspace with abernstein.yamlsilently discarded themockoverride that--idlesets. Idle runs then spawned real coding agents, which failed provider authentication, tripped the adapter health monitor, and left every task failed. An explicit--adapterorBERNSTEIN_ADAPTERchoice now takes precedence over the seedcli, mirroring the existing model-resolution rule; the seed value is used only when no adapter was passed explicitly.- The internal-LLM preflight notice is emitted once and reworded (#2742). The hint was logged on every seed construction, and the seed is parsed twice during
gui serve, so operators saw it twice per process. It is now emitted at most once per process, and the wording states the fact and both remedies without alarmist phrasing.