Skip to content

chernistry/bernstein

v3.8.3 Security

This release includes 4 security fixes for security teams reviewing exposed deployments.

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

Topics

agent-orchestrator agentic-ai ai-agents aider air-gap audit-trail
+14 more
claude-code cli-tool codex-cli coding-agent deterministic-replay deterministic-scheduler hmac-audit mcp-server model-context-protocol multi-agent parallel-worktrees provenance python reproducibility

Affected surfaces

auth

Summary

AI summary

Updates Run verification and correctness, Observability, and Packaging across a mixed release.

Full changelog

v3.8.3

A bug-fix release. Most of this wave came out of running the published wheel end to end with a free local model, which surfaced a chain of "green status, no artifact" defects across adapter selection, run verification, and the observability surface. Nothing here changes a public API; upgrade in place.

Adapter selection and routing

  • Startup adapter detection now covers the full adapter registry and states when an explicit adapter is pinned instead of claiming auto-routing (#2779).
  • An explicit adapter selection is no longer overridden by model-name inference: a route id like openai/gpt-oss-20b:free under a pinned qwen run no longer hijacks the spawn to another adapter (#2776).
  • Adapter selection in the seed file and --cli now validates against the live registry rather than three separate stale allowlists, so every registered adapter is actually selectable (#2826).
  • The qwen adapter stops passing a flag qwen-code removed, which broke spawns whenever a Tavily key was set (#2766); zero-config spawn works for adapters that pick the model server-side (#2753).

Run verification and correctness

  • path_exists completion signals are verified against the operator checkout, not the agent's ephemeral worktree, so a gitignored or unmerged file no longer reports the task done with nothing delivered (#2778).
  • Running on the repository default branch now fails fast with an actionable message and reports the run as unhealthy, instead of discarding every agent's work and printing a clean summary (#2780).
  • The scheduled dependency scan no longer audits the orchestrator's own tool venv or injects dozens of foreign upgrade tasks into a scoped run; it is scoped to the target repo's declared manifests, skips its own first tick, and can be turned off (#2825).
  • The recovery watchdog now launches from a runnable module, so it actually starts from the published wheel instead of failing silently (#2824).
  • bernstein demo completes its mock tasks, exits nonzero when they all fail, reports a consistent count, points at a real follow-up command, and cleans up its own processes (#2828).
  • A merge-back that fails for a non-conflict reason no longer force-deletes the branch holding an agent's only committed copy: the work is preserved to a graveyard ref, the failure is logged at error level, and the task is failed under a bounded retry budget instead of looping (#2832).

Observability

  • Live OTLP bridge: the run journal's signed, chain-anchored span projection now streams to any stock OpenTelemetry collector, live during a run and via bernstein telemetry export-otel backfill, so orchestrator spans appear in existing tracing stacks with deterministic ids (#2771).
  • bernstein telemetry verify-span proves a single exported span against the run journal and audit chain: it recomputes the span id from the referenced journal entry and checks the chain anchor, rejecting any span that does not recompute (#2827).

Security

  • The webhook secret is no longer written to logs (#2775).
  • The identity grant secret is no longer persisted in clear text; the stored reference is a salted hash, and existing chains stay verifiable (#2777).
  • pyasn1 is bumped to 0.6.4 to clear CVE-2026-59885 and CVE-2026-59886 (#2821).

CLI and configuration

  • The CLI status, cost, and recap probes resolve the effective server port instead of a hardcoded default, so a run started on a non-default port is reachable (#2819).
  • A detached run now persists its auth token to a 0600 file so out-of-process status, cost, and recap can authenticate; a rejected credential is now reported distinctly from an unreachable server (#2830). The browser-dashboard case is tracked separately.
  • Startup cost lines use the submitted task count (#2752); the first spawn outcome is surfaced before a non-interactive run exits (#2754); unknown top-level seed keys warn with a nearest-match suggestion (#2755); the seed parser accepts role_model_policy.<role>.endpoint and drops unread top-level sections from shipped seed files (#2759, #2757); evolution stops warning about locked files in non-source workspaces (#2750).

Packaging

  • The published container image is runnable by default: its entry command no longer points at a removed command, and a foreground serve mode lets the image host a coordinator node (#2829). Multi-arch (arm64) images are tracked separately.

Thanks

Thanks to the external contributors in this release:

  • @Sanjays2402 - dropped the removed qwen web-search flag that broke spawns (#2766) and passed the configured model through to the agy adapter (#2813)
  • @sairajkasam - the live OTLP bridge that streams chain-anchored journal spans to OpenTelemetry collectors (#2771)
  • @AnayGarodia - persisting the effective server port so CLI probes reach a run started on a non-default port (#2819)

Security Fixes

  • pyasn1 bumped to 0.6.4 – clears CVE-2026-59885 and CVE-2026-59886
  • Webhook secret no longer written to logs
  • Identity grant secret stored as salted hash instead of clear text
  • CVE-2026-59886

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

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]