This release adds 5 notable features for engineering teams evaluating rollout.
✓ No known CVEs patched in this version
Topics
+14 more
Summary
AI summaryAdds Hold/release API, per‑task turn budget, agent instrumentation, council redesign, and seed block forwarding.
Full changelog
v2.15.0
Released 2026-07-05.
Feature release built around five community contributions by Shane Mattner (@shanemmattner), plus scheduler and test-infrastructure fixes.
Features
- Hold/release API (
/orchestrator/holds): heartbeat-renewed leases that keep the spawner alive while an external workflow driver is active, replacing the fixed quiescence settle timer. TTL is a grace window; expired holds release on their own. Operator docs indocs/operations/HOLDS.md. (#2218, thanks @shanemmattner) - Explicit
max_turnsonTaskCreate: per-task turn budgets flow end to end to the adapter spawn, bypassing the complexity heuristic when set; bounded 1..10000 at the schema boundary; retries carry the value forward. Docs indocs/operations/MAX_TURNS.md. (#2217, thanks @shanemmattner) - Per-agent run instrumentation: JSONL records for every LLM call, tool call, and conversation message, captured in real time via SDK hooks and anchored to the project root (not the per-task worktree). Docs in
docs/operations/INSTRUMENTATION.md. (#2219, thanks @shanemmattner) - Council-of-agents redesign: per-member cost attribution, judge synthesis over candidate outputs,
enable_thinking=falseinjected for Qwen models served from Alibaba Cloud endpoints (hostname-suffix detection), andBERNSTEIN_BUILTIN_ALLOW_RUN_COMMANDpassthrough in env isolation. (#2220, thanks @shanemmattner) - Inline
role_model_policy.<role>.councilseed blocks now forward into the runner manifest, behaving identically to thecouncils/*.yamlfile convention. (#2231)
Fixes
- Model selection no longer falls back to hardcoded model strings: every selection flows from configuration, and unconfigured paths raise
ModelNotConfiguredErrorinstead of silently guessing. (#2216, thanks @shanemmattner) - Critical-path priority boost applies on the first spawn batch, so a low-priority dependency of a high-priority task is claimed first. (#2233)
- Worker exit codes: when the whole process group receives SIGINT, the worker no longer re-forwards the signal into the child's interpreter shutdown window, so it reports the child handler's exit code instead of 130. (#2238)
- Five integration tests repaired and re-enabled after root-causing failures that predated this cycle. (#2232)
Internal
- Unit coverage for the council runner path. (#2230)
- Log-injection sanitization on hold fields; scanner findings resolved across instrumentation and council logging. (#2229)
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]