This release includes breaking changes for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
+14 more
Affected surfaces
Summary
AI summaryFixed local dashboard authentication, restored startup banner, ensured --idle stays on mock adapter, and quieted duplicated LLM preflight notice.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Bugfix | Medium |
Local dashboard authenticates its own browser on loopback serve. Local dashboard authenticates its own browser on loopback serve. Source: llm_adapter@2026-07-21 Confidence: medium |
— |
| Bugfix | Medium |
Restores the startup banner when splash is disabled. Restores the startup banner when splash is disabled. Source: llm_adapter@2026-07-21 Confidence: medium |
— |
| Bugfix | Medium |
Ensures `bernstein run --idle` stays on the mock adapter. Ensures `bernstein run --idle` stays on the mock adapter. Source: llm_adapter@2026-07-21 Confidence: medium |
— |
| Bugfix | Low |
Emits internal‑LLM preflight notice once and rewords it. Emits internal‑LLM preflight notice once and rewords it. Source: llm_adapter@2026-07-21 Confidence: medium |
— |
Full changelog
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.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About chernistry/bernstein
Deterministic multi-agent orchestrator for 18 CLI coding agents (Claude Code, Codex, Cursor, Aider, Gemini CLI, OpenAI Agents SDK, and more). MCP server mode (stdio + HTTP/SSE) exposes the orchestrator to any MCP client. Git worktree isolation per agent, HMAC-chained audit trail, cost-aware model routing via contextual bandit. ~11K monthly PyPI downloads, Apache 2.0.
Related context
Related tools
Earlier breaking changes
- v3.7.1 `bernstein approve` and `bernstein reject` now enforce identifier regex `[A-Za-z0-9._-]{1,64}`.
- v3.7.1 Tampered mission ledger reports as unverified rather than not-found.
- v3.7.1 `mission define` now refuses phases without gate tasks.
- v3.5.0 MCP client, transport, and gateway become stateless; calls carry content‑derived trace IDs in _meta.
Beta — feedback welcome: [email protected]