Releases: massgen/MassGen
v0.1.94
🚀 Release Highlights — v0.1.94 (2026-06-05)
v0.1.94 — Parallelism Hardening (Engineering Health) — strengthens the orchestrator's parallel execution. It moves the snapshot copy off the event loop so agents keep streaming concurrently, backs it with immutable versioned snapshots that keep the off-loop copy safe, and closes latent concurrency races. No per-backend functionality changes (parity principle).
⚡ Snapshot Copy Off the Event Loop
FilesystemManager.copy_snapshots_to_temp_workspacenow runs its blockingrmtree/copytree/scrub on a worker thread viaasyncio.to_thread- One agent's snapshot copy no longer stalls every other agent's streaming
🔒 Immutable, Versioned Snapshots
- Each agent's snapshot path
<base>/<agent_id>is now a symlink to an immutable<base>/.versions/<agent_id>/v<N>directory save_snapshot(and the interrupted-turn partial save) publish a fresh version and atomically repoint the symlink instead of rewriting in place- The peer-context copy
acquires (refcounts) the current version for the duration of its copy; GC never deletes a pinned or in-flight version - Eliminates the read-during-write race the off-loop copy would otherwise expose — coordinated by the new
SnapshotVersionStore
🧵 Concurrency Correctness Fixes
- R1 — lost peer-answer revision across the injection
awaitwindow (counts now captured at selection time) - R2/R3 — lost background-subagent result from a blind queue
pop(consume only the consumed ids) - R4 — leaked background trace-analyzer tasks on cleanup (cancelled before the flush)
- R5 — cancel-without-await teardown (
cancel_all_subagentsnow awaits cancellations against the live registry) - D2 — worktree-isolation degradation never surfaced because
emit_statuswas called with an invalidstatus=kwarg whoseTypeErrorwas swallowed - D3 — changedoc enrichment made non-fatal
🧩 Unified Mid-Stream Injection
- The two ~150-line per-backend
get_injection_contentclosures collapsed into onebuild_midstream_injection(..., native=), preserving theupdate_context → refresh_checklistside-effect order on both paths - The triplicated background-wait interrupt provider consolidated into one helper
🧪 Tests
- New race/regression suites driven under TDD with cost-free simulation:
test_concurrency_race_fixes.py,test_snapshot_version_store.py,test_snapshot_versioned_save.py,test_snapshot_copy_offload.py,test_midstream_injection_unified.py,test_wait_interrupt_provider.py
📖 Install
pip install massgen==0.1.94What's Changed
- feat: v0.1.94 by @ncrispino in #1113
Full Changelog: v0.1.93...v0.1.94
v0.1.93
🚀 Release Highlights — v0.1.93 (2026-06-03)
v0.1.93 is an internal-quality release: no intended runtime behavior changes, but a smaller CLI surface, typed config validation, cleaner package contents, and stronger test/type-checking gates.
🧩 CLI Package Decomposition
massgen/cli.pywas split into an 18-modulemassgen/cli/package- The public import surface is preserved through the package facade
- The Textual per-turn handler was extracted into a dependency-injected function
- CLI helper and run-loop characterization tests cover the new seams
🛡️ Pydantic Config Migration
AgentConfig,CoordinationConfig,TimeoutConfig,StepModeConfig, and related nested config classes now validate field types on construction- Mode fields use
Literaldefinitions inmassgen/config_modes.py config_validatorderives valid mode sets from the typed definitions, reducing validator driftpydantic>=2.0is now a declared dependency
🔧 Correctness Fixes
- Textual concurrent-run logging now preserves per-run session context
CoordinationConfig.from_dict()no longer lets absent YAML keys override defaults withNone- Response backend tool-argument parsing now logs malformed payloads instead of silently dropping them
- Backend/API parameter exclusion lists now derive from a single source
🧪 Test Signal & Typing
- Coverage configuration now points at the real package
pytest.PytestReturnNotNoneWarningis treated as an error- CI enforces
uv.lockviauv sync --frozen scripts/mypy_island.shadds a blocking incremental mypy gate- All bundled configs were validated after the migration
🧹 Dead Code Removal
- Removed unreferenced legacy
massgen/v1andmassgen/prototypecode from the wheel
📖 Install
pip install massgen==0.1.93What's Changed
- docs: docs for v0.1.93 by @Henry-811 in #1112
- feat: v0.1.93 by @Henry-811 in #1111
Full Changelog: v0.1.92...v0.1.93
v0.1.92
🚀 Release Highlights — v0.1.92 (2026-06-01)
v0.1.92 is a maintainability release for MassGen's orchestration core, with a new Parallel Web Search MCP example included for research-heavy workflows. The main result: the largest orchestrator surfaces are smaller, more modular, and guarded by characterization tests before deeper behavior changes continue.
🧩 Orchestrator Collaborator Extraction
orchestrator.pydrops from 21,599 to 8,574 lines- 49 collaborator classes are extracted into
massgen/orchestrator_collaborators/ - Existing public methods remain available through thin delegators
- Shared mutable state still lives on the orchestrator, preserving current ownership semantics
🖥️ TUI Display Module Cleanup
- Provider/model display logic moved to
_textual_provider_model.py - Terminal capability probing moved to
_textual_terminal_capabilities.py - Widget debug helpers moved to
_textual_widget_debug.py - Public imports from
textual_terminal_display.pystay stable
🔎 Parallel Web Search MCP
- New
parallel_searchMCP registry entry - New example config:
massgen/configs/tools/web-search/parallel_search_example.yaml - Supports Parallel's hosted Search MCP server for LLM-optimized web search and URL extraction
- Optional
PARALLEL_API_KEYenables higher rate limits
🧪 Characterization Coverage
massgen/tests/test_orchestrator_characterization.pymassgen/tests/frontend/test_textual_terminal_display_characterization.py- Existing integration/unit tests updated for the new collaborator seams
- Refactor roadmap and remaining high-risk follow-up steps documented in
docs/dev_notes/orchestrator_refactor_roadmap.md
📖 Getting Started
- Quick Start Guide
- Install:
pip install massgen==0.1.92
- Try Parallel Search:
uv run massgen --config massgen/configs/tools/web-search/parallel_search_example.yaml "Research the latest advances in multi-agent AI systems"
What's Changed
- feat(mcp): add Parallel Web Search to MCP server registry + example config by @NormallyGaussian in #1108
- docs: docs for v0.1.92 by @Henry-811 in #1109
- feat: v0.1.92 by @Henry-811 in #1107
New Contributors
- @NormallyGaussian made their first contribution in #1108
Full Changelog: v0.1.91...v0.1.92
v0.1.91
🚀 Release Highlights — v0.1.91 (2026-05-27)
v0.1.91 hardens MassGen's release-critical configuration paths: YAML parsing is centralized, typo detection is strict enough to block releases, checklist runtime controls now flow through the same orchestrator helper, and native hook permission checks now honor nested protected paths before broad workspace write rules.
🧭 Centralized Config Wiring
CoordinationConfig.from_dict()ownsorchestrator.coordinationparsingTimeoutConfig.from_dict()owns top-leveltimeout_settingsparsingAgentConfig.apply_orchestrator_config()owns top-level orchestrator runtime field application- CLI helpers remain import-compatible wrappers around the centralized implementations
🔎 Config Drift Detection
- Unknown
orchestrator.coordination.*keys now produce validation warnings - Unknown top-level
orchestrator.*andtimeout_settings.*keys are flagged the same way scripts/validate_all_configs.py --stricttreats those warnings as release-blocking- Typos such as
fast_interation_mode,voting_sensitivty, andorchestrator_timout_secondsnow surface before runtime
✅ Checklist Runtime Controls
max_checklist_calls_per_roundis wired through the centralized orchestrator runtime helperchecklist_first_answernow follows the same runtime path- Planning controls and subagent timeout fields have parser and documentation parity coverage
🛡️ Native Hook Permission Safety
- Gemini CLI and Codex standalone hook scripts now apply more-specific managed paths before broader parents
- Nested read-only/protected paths override workspace-level write access
- Claude Code native hook tests/docs now match the SDK-native
additionalContextinjection contract
🧪 Tests
massgen/tests/test_config_wiring_refactors.pymassgen/tests/test_coordination_config_wiring.pymassgen/tests/test_config_validator.pymassgen/tests/test_validate_all_configs_script.pymassgen/tests/test_native_hook_adapters.py- Updated Gemini CLI and Codex hook script coverage
📖 Getting Started
- Quick Start Guide
- Install:
pip install massgen==0.1.91
- Try It:
uv run massgen --config massgen/configs/features/fast_iteration.yaml "Create an svg of an AI agent coding."
What's Changed
- docs: docs for v0.1.91 by @Henry-811 in #1106
- feat: v0.1.91 by @Henry-811 in #1104
Full Changelog: v0.1.90...v0.1.91
v0.1.90
🚀 Release Highlights — v0.1.90 (2026-05-25)
v0.1.90 strengthens MassGen's checklist-gated refinement loop: non-discriminative criteria are softened, checklist reasoning becomes next-round feedback, candidate ordering is counterbalanced, and gate thresholds now share one consistent 0-10 scale.
🎯 Discriminative-Power Pruning
- Bootstrap criteria now compute per-criterion score spread across agents
- Low-spread criteria are demoted to
stretchso they stay visible without acting as hard gates - A protected floor prevents the gate from being hollowed out
🧠 Criterion Feedback Loop
- Checklist score reasoning is extracted after each verdict
- Per-agent score submissions keep the lowest-score reasoning per criterion as the most diagnostic signal
- Next-round agents receive a
<CRITERION FEEDBACK ...>memo with failed criteria marked
⚖️ Position-Bias Calibration
- Candidate answer order rotates per scoring agent
- Primacy-slot exposure is distributed across agents
- Equal aggregate checklist scores break deterministically, independent of insertion order
📏 Unified Checklist Gate
ChecklistGate.from_budget(...)derives effective threshold, required-true count, and confidence cutoff together- The checklist gate now consistently uses a 0-10 threshold scale
- Fast-iteration defaults continue to relax the gate as answer budget tightens
🧩 Shared Score Utilities
- New
massgen/score_utils.pycentralizes score extraction and per-agent score-shape detection - Checklist server, quality server, and bootstrap criteria now share the same parsing behavior
llm_circuit_breaker_*kwarg parsing is consolidated into the shared custom-tool/MCP backend base
⚡ Fast-Iteration Config Updates
- Fast-iteration examples now default to local command execution
fast_iteration.yamlrefreshes its default pairings for current Gemini + Codex workflows- Antigravity fast-iteration config remains available for CLI-backed Google runs
🧪 Tests
massgen/tests/test_discriminative_pruning.pymassgen/tests/test_criterion_feedback.pymassgen/tests/test_position_bias_calibration.pymassgen/tests/test_score_utils.py- Updated
massgen/tests/test_checklist_tools_server.py
📖 Getting Started
- Quick Start Guide
- Install:
pip install massgen==0.1.90
- Try It:
uv run massgen --config massgen/configs/features/fast_iteration.yaml "Create an svg of an AI agent coding."
What's Changed
- docs: docs for v0.1.90 by @Henry-811 in #1103
- feat: v0.1.90 by @Henry-811 in #1102
Full Changelog: v0.1.89...v0.1.90
v0.1.89
🚀 Release Highlights — v0.1.89 (2026-05-22)
v0.1.89 completes the follow-up Antigravity CLI integration pass after v0.1.88 introduced the first backend. This release focuses on reliability in real MassGen coordination runs: workflow-tool parity, auth checks, workspace write isolation, native hooks, and prompt affordance gating.
🛰️ Workflow-Mode Parity
- Antigravity now mirrors Gemini CLI's
new_answer/voteworkflow handling voteis hidden when no candidate answers exist, keeping agents innew_answer_onlymode- Post-evaluation prompts guard against stale
new_answer,vote, orstopcalls - Duplicate parsed workflow calls are suppressed within a single turn
🧰 Workspace Write Reliability
--add-dir <cwd>registers the MassGen workspace with agy so file tools write where peers and snapshots can see outputs- Workspace-root
.antigravitycli/marker prevents agy's upward project discovery from adopting a parent project .antigravity/and.antigravitycli/are ignored as runtime artifacts
🔐 Auth + Binary Health Checks
- Backend construction now verifies
agy --version - Runs fail fast when no
GEMINI_API_KEY,GOOGLE_API_KEY, or cached Google OAuth credentials are available - Docker mode still requires API-key auth because OAuth state does not cross container boundaries
🔌 Native Hooks
- Antigravity hooks now emit standalone
hooks.json settings.jsonenables hooks throughenableJsonHooks- Native hook adapter docs now reflect Antigravity's storage model rather than Gemini CLI's embedded settings hook model
🧭 Prompt Guardrails
TaskContextSectionadvertisesspawn_subagentsonly when subagents are enabled- Multimodal-only agents keep
read_mediacontext guidance without phantom subagent MCP affordances
🧪 Tests
massgen/tests/test_antigravity_cli_backend.pyexpanded to cover health checks, authentication, workspace anchoring,--add-dir, hooks.json, workflow filtering, duplicate tool-call suppression, multimodal prompt flattening, cancellation cleanup, and agent-id propagationmassgen/tests/test_system_prompt_sections.pycovers subagent affordance gating
📖 Getting Started
- Quick Start Guide
- Install:
pip install massgen==0.1.89 curl -fsSL https://antigravity.google/cli/install.sh | bash - Try It:
uv run massgen --config massgen/configs/features/fast_iteration_gemini_antigravity.yaml "Create an svg of an AI agent coding."
What's Changed
- feat: harden Antigravity CLI backend for v0.1.89 by @ncrispino in #1099
- docs: docs for v0.1.89 by @Henry-811 in #1101
- feat: v0.1.89 by @Henry-811 in #1100
Full Changelog: v0.1.88...v0.1.89
v0.1.88
🚀 Release Highlights — v0.1.88 (2026-05-20)
This is the first version of MassGen's Antigravity integration. v0.1.88 establishes the backend, workspace-local config isolation, MCP config translation, native hook adapter support, and runnable examples. We plan to complete the full integration in the next release.
🛰️ Antigravity CLI Backend
- New backend type (#1097):
antigravity_cliwraps Google'sagybinary as a MassGen backend - Auth support: local mode can use existing Google OAuth state at
~/.gemini/google_accounts.json;GEMINI_API_KEY/GOOGLE_API_KEYare passed through when present - Server-side model selection:
agyselects the active model per Antigravity tier; MassGen acceptsmodelfor logging/registry consistency but does not pass a nonexistent--modelflag
🧰 Workspace-Local Isolation
- Antigravity project state is routed through
<workspace>/.antigravityvia--gemini_dir - MCP config and settings stay inside the MassGen workspace, avoiding mutation of the user's global
~/.gemini/config .antigravity/.antigravityclimetadata directories are excluded from snapshot meaningful-content heuristics
🔌 MCP + Hook Integration
- MassGen MCP server entries are translated to Antigravity's
mcp_config.jsonschema - HTTP MCP servers emit
serverUrl; stdio servers emitcommand/args/env AntigravityCLINativeHookAdapterreuses Gemini CLI hook behavior for Antigravity's compatible hook protocol
📦 New Example Configs
massgen/configs/providers/antigravity/antigravity_cli_local.yaml— single Antigravity CLI agentmassgen/configs/features/fast_iteration_gemini_antigravity.yaml— Gemini API + Antigravity CLI fast-iteration pair
🧪 Tests
massgen/tests/test_antigravity_cli_backend.pycovers binary discovery, command construction, workspace-local config, MCP schema, provider metadata, stdout/error streaming, workflow JSON envelopes, Docker/API-key constraints, native hook adapter wiring, and environment passthrough
📖 Getting Started
- Quick Start Guide
- Install:
pip install massgen==0.1.88 curl -fsSL https://antigravity.google/cli/install.sh | bash - Try It:
uv run massgen --config massgen/configs/features/fast_iteration_gemini_antigravity.yaml "Create an svg of an AI agent coding."
What's Changed
- feat: add Antigravity CLI backend wrapping Google's
agybinary by @ncrispino in #1097 - docs: docs for v0.1.88 by @Henry-811 in #1098
- feat: v0.1.88 by @Henry-811 in #1096
Full Changelog: v0.1.87...v0.1.88
v0.1.87
🚀 Release Highlights — v0.1.87 (2026-05-15)
📚 Framework Comparison Pages
- Three new "MassGen vs ..." pages (#1094):
crewai.rst,langgraph.rst,autogen.rstunderdocs/source/reference/comparisons/— each positions MassGen's parallel-refinement-with-voting model against the target framework's coordination shape and lists when to reach for one versus the other - Docs landing page update (#1094): "How Does MassGen Compare?" now lists all four comparisons (LLM Council + the three new ones); parent
comparisons.rstdrops "coming soon" and gains a toctree
🤖 llms.txt for AI Agents
- Curated index (#1094):
docs/source/_extra/llms.txtpublished at the docs site root via Sphinxhtml_extra_path, following the llmstxt.org spec - Full-corpus dump (#1094):
llms-full.txt(~1 MB, 59 files) generated by a Sphinxbuild-finishedhook indocs/source/conf.py - README pointer: One-line pointer in
README.md/README_PYPI.mddirecting AI agents and crawlers tollms.txt/llms-full.txt
🔧 bootstrap_subagent Single-Shot Fix
refine=False(#1094):Orchestrator._run_bootstrap_discriminator_stepnow passesrefine=FalsetoSubagentManager.spawn_subagent. Without it, the orchestrator'smax_new_answers_per_agent: 3default shadowed the coordination-dict overrides and let the discriminator refine instead of running single-shot. Found via live log inspection- Test (#1094):
massgen/tests/test_bootstrap_criteria.pyassertsdiscriminator must pass refine=False to spawn_subagent for single-shot
✅ Issues Closed
- #1082 — publish
llms.txt+llms-full.txtatdocs.massgen.ai - #1083 — add MassGen vs CrewAI / LangGraph / AutoGen comparison pages
📖 Getting Started
- Quick Start Guide
- Browse the comparisons: https://docs.massgen.ai/en/latest/reference/comparisons.html
- Point your AI agent at: https://docs.massgen.ai/en/latest/llms.txt
- Install:
pip install massgen==0.1.87
What's Changed
- docs: add comparison pages and llms.txt index by @ncrispino in #1094
- docs: docs for v0.1.87 by @Henry-811 in #1095
- feat: v0.1.87 by @Henry-811 in #1093
Full Changelog: v0.1.86...v0.1.87
v0.1.86
🚀 Release Highlights — v0.1.86 (2026-05-13)
🧠 bootstrap_subagent Discriminator Is Now Functional
orchestrator.coordination.criteria_mode: bootstrap_subagentnow runs a between-rounds LLM critic viaSubagentManager- The critic reads the task and each agent's latest answer, emits
proposed_criteriaas JSON, and the orchestrator merges them intobootstrap_criteria_accumulator.json - The next round's checklist is augmented automatically, giving the same end state as
bootstrap_inlinebut with criteria sourced from a dedicated critic rather than the answering agents - The discriminator runs once per unique answer snapshot so unchanged rounds are not re-critiqued
🧹 Session-End Criteria Drain
Orchestrator._drain_at_session_endforces one final drain before final presentation- Late stdio JSONL emissions are captured instead of being stranded after the last checklist resolution pass
🛠️ Codex MCP Approval Fix
codex execworkspaces now get both non-interactive approval bypasses:approval_policy = "never"- Per-MCP-server
default_tools_approval_mode = "approve"
- This prevents external MCP tools such as
submit_checklist,create_task_plan,new_answer, andread_mediafrom failing immediately with "user cancelled MCP tool call"
🧪 Tests
massgen/tests/test_bootstrap_criteria.pyexpanded to 35 tests for discriminator behavior and session-end drainmassgen/tests/test_codex_native_hook_adapter.py::TestCodexWorkspaceApprovalPolicycovers Codex approval config across modes
📖 Getting Started
- Quick Start Guide
- Try It:
pip install massgen==0.1.86 uv run massgen --config massgen/configs/coordination/bootstrap_subagent_criteria.yaml "Create an SVG of an AI agent coding." - Inspect emerging criteria at
.massgen/massgen_logs/<session>/bootstrap_criteria_accumulator.json
What's Changed
- feat: Part 2 of bootstrap criteria by @ncrispino in #1090
- docs: docs for v0.1.86 by @Henry-811 in #1092
- feat: v0.1.86 by @Henry-811 in #1091
Full Changelog: v0.1.85...v0.1.86
v0.1.85
🚀 Release Highlights — v0.1.85 (2026-05-11)
⚠️ First-stage release — still maturing. Expect further finalization and more thorough end-to-end testing in v0.1.86.
🧪 Discriminative Criteria Emergence (criteria_mode)
bootstrap_inlinevariant (fully functional): Neworchestrator.coordination.criteria_mode: bootstrap_inlinemakes each agent emit a shortproposed_criterialist alongside itssubmit_checklistcall — criteria a stronger answer would satisfy that the current answers do not. Proposals are deduped, FIFO-capped (bootstrap_max_total, default 30), persisted tobootstrap_criteria_accumulator.json, and merged into the next round's checklist via the existingEvaluationSection- All backends with checklist tool support: SDK path (Claude Code) gets the field directly in the in-process tool schema; stdio backends (gemini, codex, response, chat_completions, claude, grok) get a JSONL emission channel —
proposed_criteria.jsonlnext to checklist specs, drained by the orchestrator each pass bootstrap_subagentvariant (wired, LLM step deferred): Same accumulator pipeline; in-process LLM discriminator pass queued for v0.1.86- New module
massgen/bootstrap_criteria.pywithmerge_proposals,augment_with_accumulator,is_bootstrap_mode,validate_criteria_mode - Config fields:
CoordinationConfig.{criteria_mode, bootstrap_max_per_agent_per_round, bootstrap_max_total}
🛡️ Anti-Goodhart by Construction
- Criteria come from observed gaps, not priors that may not match the task
- Removes cold-start friction: users no longer need to pre-author criteria for new tasks — the first round produces both answers and the criteria the second round must rise to
📦 New Example Configs
massgen/configs/coordination/bootstrap_inline_criteria.yaml— fully functional variantmassgen/configs/coordination/bootstrap_subagent_criteria.yaml— accumulator wired, LLM step in v0.1.86
🧪 Tests
- 30 new tests in
massgen/tests/test_bootstrap_criteria.py(476 lines) covering merge/dedup/cap, config validation,AgentState.criteria_proposals, augmentation across criteria sources, rendering gating, and round-N → round-N+1 propagation end-to-end
📖 Getting Started
- Quick Start Guide
- Try It:
pip install massgen==0.1.85 uv run massgen --config massgen/configs/coordination/bootstrap_inline_criteria.yaml "Create an SVG of an AI agent coding." - Inspect the emerging criteria at
.massgen/massgen_logs/<session>/bootstrap_criteria_accumulator.json
What's Changed
- docs: docs for v0.1.85 by @Henry-811 in #1088
- feat: v0.1.85 by @Henry-811 @ncrispino in #1087
Full Changelog: v0.1.84...v0.1.85