Skip to content

chernistry/bernstein

v2.0.0 Feature

This release adds 3 notable features for engineering teams evaluating rollout.

✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →

✓ No known CVEs patched in this version

Topics

agent-framework agent-orchestrator agentic-ai ai-agents ai-coding aider
+14 more
anthropic claude-code cli-tool codex-cli coding-agent deterministic-scheduler hmac-audit llm mcp-server model-context-protocol multi-agent parallel-worktrees python swe-bench

Summary

AI summary

Bernstein v2.0.0 adds a web UI with FastAPI‑mounted SPA and full /api/v1/* surface.

Changes in this release

Feature Medium

Web UI ships in wheel with `bernstein gui serve` booting FastAPI server at /ui and full /api/v1 surface.

Web UI ships in wheel with `bernstein gui serve` booting FastAPI server at /ui and full /api/v1 surface.

Source: granite4.1:8b-q6_K@2026-05-21

Confidence: low

Feature Medium

Default web UI URL is http://127.0.0.1:8052/ui/.

Default web UI URL is http://127.0.0.1:8052/ui/.

Source: granite4.1:8b-q6_K@2026-05-21

Confidence: low

Feature Medium

Adds a web UI accessible via `bernstein gui serve`.

Adds a web UI accessible via `bernstein gui serve`.

Source: granite4.1:30b@2026-05-21-audit

Confidence: low

Feature Medium

Agents panel shows live grid of agent sessions with token/cost/duration meters.

Agents panel shows live grid of agent sessions with token/cost/duration meters.

Source: granite4.1:30b@2026-05-21-audit

Confidence: low

Feature Medium

Tasks view includes a Diff drawer displaying syntax‑highlighted `git diff` with copy/download options.

Tasks view includes a Diff drawer displaying syntax‑highlighted `git diff` with copy/download options.

Source: granite4.1:30b@2026-05-21-audit

Confidence: low

Feature Medium

Adds a real diff viewer for the Diff tab using `GET /tasks/{id}/diff`.

Adds a real diff viewer for the Diff tab using `GET /tasks/{id}/diff`.

Source: granite4.1:30b@2026-05-21-audit

Confidence: low

Feature Low

Web UI serves SPA at `/ui` and exposes full API under `/api/v1/*`.

Web UI serves SPA at `/ui` and exposes full API under `/api/v1/*`.

Source: granite4.1:30b@2026-05-21-audit

Confidence: low

Feature Low

Audit screen provides HMAC‑signed audit chain browser and verifier.

Audit screen provides HMAC‑signed audit chain browser and verifier.

Source: granite4.1:30b@2026-05-21-audit

Confidence: low

Feature Low

Costs screen reports per‑model spend, run summaries, and burn‑rate.

Costs screen reports per‑model spend, run summaries, and burn‑rate.

Source: granite4.1:30b@2026-05-21-audit

Confidence: low

Feature Low

Fleet view offers a multi‑project fleet overview (data plane functional).

Fleet view offers a multi‑project fleet overview (data plane functional).

Source: granite4.1:30b@2026-05-21-audit

Confidence: low

Feature Low

Settings screen is currently a placeholder for future configuration options.

Settings screen is currently a placeholder for future configuration options.

Source: granite4.1:30b@2026-05-21-audit

Confidence: low

Feature Low

Trace timeline panel reads trace data from `.sdd/traces/*.jsonl` via `GET /tasks/{id}/trace`.

Trace timeline panel reads trace data from `.sdd/traces/*.jsonl` via `GET /tasks/{id}/trace`.

Source: granite4.1:30b@2026-05-21-audit

Confidence: low

Feature Low

Quality‑gates panel shows gate reports with status buckets and auto‑expands failures via `GET /tasks/{id}/gates`.

Quality‑gates panel shows gate reports with status buckets and auto‑expands failures via `GET /tasks/{id}/gates`.

Source: granite4.1:30b@2026-05-21-audit

Confidence: low

Feature Low

Task dependency view displays upstream/downstream graph using `GET /tasks/{id}/graph-neighbors`.

Task dependency view displays upstream/downstream graph using `GET /tasks/{id}/graph-neighbors`.

Source: granite4.1:30b@2026-05-21-audit

Confidence: low

Bugfix High

Honours per‑step CLI and model directives in plan‑driven runs, fixing dispatch pipeline bugs.

Honours per‑step CLI and model directives in plan‑driven runs, fixing dispatch pipeline bugs.

Source: granite4.1:30b@2026-05-21-audit

Confidence: low

Bugfix Medium

Fixes normalisation of dev‑proxy routing and corrects Pydantic 500 error in `/openapi.json`.

Fixes normalisation of dev‑proxy routing and corrects Pydantic 500 error in `/openapi.json`.

Source: granite4.1:30b@2026-05-21-audit

Confidence: low

Bugfix Medium

Restores the startup banner that was missing after a regression.

Restores the startup banner that was missing after a regression.

Source: granite4.1:30b@2026-05-21-audit

Confidence: low

Bugfix Medium

Fixes several regressions (~150 fixes) in the wheel‑bundled SPA build pipeline.

Fixes several regressions (~150 fixes) in the wheel‑bundled SPA build pipeline.

Source: granite4.1:30b@2026-05-21-audit

Confidence: low

Bugfix Low

Improves drawer behavior (close on ESC, click‑outside, focus trap, drag‑resize).

Improves drawer behavior (close on ESC, click‑outside, focus trap, drag‑resize).

Source: granite4.1:30b@2026-05-21-audit

Confidence: low

Other Low

affected_surface

affected_surface

Source: granite4.1:8b-q6_K@2026-05-21

Confidence: low

Full changelog

Bernstein v2.0.0 — Web UI

Hand-curated release notes for the v2.0.0 cut. Overrides the auto-drafter output when the tag is published.

Why 2.0.0

Bernstein now ships a web interface. The CLI / TUI surface is unchanged. The major bump is signalling the new operator surface, not a breaking API change.

For everything else, v2.0.0 is a strict superset of v1.10.x — wheels install the same way, configs don't move, agents and adapters work as before.

What's new — Web UI

The UI ships in the wheel: bernstein gui serve boots a FastAPI server with the SPA mounted at /ui and the full /api/v1/* surface attached. No Node toolchain required at install time — the Vite bundle is committed under src/bernstein/gui/static/.

Default: http://127.0.0.1:8052/ui/.

Screenshots

Agents panel — live grid of running agent sessions with per-card token / cost / duration meters and a side drawer for the selected agent:

Tasks + Diff — task list with a per-task drawer showing the running git diff (split view, syntax-highlighted, copy + .patch download):

Top-level screens

| Screen | What it shows |
|------------|-------------------------------------------------------------------------|
| Tasks | Live task list with per-task drawer (see below). |
| Agents | Registered adapters, status, last-seen. |
| Approvals | Pending tool-call approvals; approve / deny from the operator surface. |
| Audit | HMAC-signed audit chain browser + verifier. |
| Costs | Per-model spend, per-run summary, burn-rate. |
| Fleet | Multi-project fleet view (scaffold — data plane is real, UI is light). |
| Settings | Placeholder — wiring is contributor-welcome. |

Per-task drawer

Click any task row → side drawer with six tabs:

| Tab | What it shows |
|---------|--------------------------------------------------------------------------------------------------|
| Summary | KPIs (tokens, cost, branch, approvals), plan steps from progress_log, basic task metadata. |
| Logs | SSE-streamed live logs with ANSI rendering, virtualised list, search, level filters, throughput. |
| Diff | git diff <base>...<branch> rendered as split / unified, syntax highlight, copy + .patch. |
| Gates | Quality gate report (/tasks/{id}/gates) with status buckets, auto-expand failures, polling. |
| Deps | Upstream / downstream task graph for depends_on. |
| Trace | Timeline from .sdd/traces/{task_id}.jsonl with filter chips and free-text search. |

What landed in feat/frontend-gui-phase1

8 PRs in the wave-4 sweep, plus the earlier production-grade Logs panel and the SPA build pipeline that preceded them:

| PR | Title |
|-------|--------------------------------------------------------------------|
| #1253 | fix(gui): normalise dev-proxy routingapiGet contract hardened + a Pydantic /openapi.json 500 fix as a bonus. |
| #1254 | fix(gui): drawer close + KPI/Plan wiring + UX polish — ESC, click-outside, focus trap, drag-resize. |
| #1255 | feat(gui): real diff viewer for the Diff tabGET /tasks/{id}/diff backend + split / unified UI. |
| #1256 | feat(gui): trace timeline panelGET /tasks/{id}/trace reading .sdd/traces/*.jsonl. |
| #1257 | fix(cli): restore startup banner — regression from an earlier commit, now pinned by a test. |
| #1258 | feat(gui): quality-gates panelGET /tasks/{id}/gates with generated_at / task_status annotations. |
| #1259 | fix(orchestrator): honour per-step cli + model in plan-driven runs — three dispatch-pipeline bugs that collapsed per-step cli: / model: directives. |
| #1260 | feat(gui): task dependency viewGET /tasks/{id}/graph-neighbors + Deps panel. |

The earlier work that the wave-4 PRs built on:

  • Logs panel (commit 4a872ca17) — SSE stream, ANSI, virtualisation, search, level filters, throughput stats, keyboard shortcuts. The reference for every subsequent panel.
  • Tab-content router with stub panels (commit e9eeb549c) — the shape every wave-4 panel filled in.
  • Bug-hunt rebuild (62589d0ef, ~150 fixes) — the wheel-bundled SPA bundle baseline that wave-4 reset against.

Stack

React + React Router + React Query + Tailwind. Vite for the build. No new heavy front-end deps beyond that — Redux, MUI, Recharts, etc. are intentionally not in the tree.

Limitations — read this before you file an issue

This is a minimal demo of the operator surface, shipped because the core was capable of supporting it and operators asked for it. It is not a priority development direction for the maintainer. Specifically:

  • No screenshot / GIF assets in the README yet.
  • A11y audit hasn't been done end-to-end — several panels follow good patterns, but nothing has been verified against WCAG or screen readers.
  • No dark / light theme toggle UI — the provider is wired, the switch isn't.
  • No mobile-responsive pass — drawer + tables assume desktop viewports.
  • Settings screen is a placeholder.
  • Fleet screen is scaffolding — the data plane on the Python side is real, the UI is light.
  • No front-end test suite — Python backend routes are covered, TS components aren't.
  • No Playwright / e2e smoke test in CI.

Tracking issue for everything above + contributor pointers: #1262 — Web UI development — tracking issue + contributor welcome mat.

If you want to contribute — small PRs preferred, no need to coordinate. The integration branch was collaborative; staying that way.

Migration from v1.x

Nothing breaks. The new commands are additive:

  • bernstein gui — the new subcommand group.
  • bernstein gui serve [--host …] [--port …] [--no-open] [--dev] [--minimal] — boots the FastAPI server with the SPA mounted.

The default port is 8052. --minimal skips mounting the full Bernstein API (useful for smoke tests). --dev skips the browser auto-open and expects a Vite dev server on :5173 for HMR.

If you have a wheel install, the SPA is already there. If you've checked the repo out and want to rebuild the SPA: cd web && npm install && npm run build.

Everything else

  • All v1.10.x adapters, plan formats, audit chain, lineage, MCP server mode, A2A, cluster mode, GitHub App, air-gap wheelhouse profile — unchanged.
  • The CLI / TUI surfaces are unchanged.
  • The pre-existing bernstein dashboard command (legacy TUI dashboard) is unchanged. The new web UI is a separate surface.

Source

Integration branch: feat/frontend-gui-phase1.

Tracking issue: #1262.

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

Track chernistry/bernstein

Get notified when new releases ship.

Sign up free

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.

All releases →

Related context

Beta — feedback welcome: [email protected]