v2.12.0
Breaking Changes
-
Node.js >=22.12.0 is now required by every published package (
monomind,@monoes/monomindcli,@monoes/hooks,@monoes/monograph,@monoes/monobrowse,@monoes/mcp,@monoes/memory,@monoes/routing,@monoes/monodesign,monofence-ai). The declared floor had stopped matching reality —engines.nodewas>=20.0.0in some manifests,>=18.0.0in others, and absent from four published packages entirely, while two optional dependencies already required more.monomind doctorreported "pass" on Node 20 the whole time; it now reportswarn/failbelow22.12.0and names the real floor. Node 20 reached EOL 2026-04-30.How this actually behaves differs by installer, measured on a real Node 20.20.2 install rather than assumed:
npm installwithengine-strict=truehard-fails withEBADENGINE; a defaultnpm installonly warns and installs anyway;pnpm installgives no warning or error at all. A runtime floor check in the CLI entrypoint is a candidate follow-up, not part of this change.
Security
-
Org roles no longer inherit ambient
ANTHROPIC_API_KEY/ANTHROPIC_AUTH_TOKEN/ANTHROPIC_BASE_URLwhen running a non-Anthropic provider or CLI. Every vendor-CLI runner (codex, grok, qwen, opencode, hermes, copilot, kimicode, pi, antigravity, crush) and the version probe used bymonomind agent scanbuilt their child environment as{ ...process.env, ...args.env }— a spread does not delete, soresolveProviderEnv's deliberate strip of these three keys forsubscriptionmode (the default) was silently undone before the child ever saw it.Migration: if your org relied on an exported
ANTHROPIC_API_KEYreaching asubscription-provider role (the previous, unintended behaviour), declare it explicitly instead:
provider: { kind: 'api-key', apiKeyEnv: 'ANTHROPIC_API_KEY' }
Added
monomind init upgradenow refreshes the generatedCLAUDE.mdand.monomind/CAPABILITIES.mdalongside the statusline and helpers, so an existing project picks up corrections instead of keeping whatever its firstinitwrote.
Fixed
- The generated
CLAUDE.mdandCAPABILITIES.mdtold new projects things that were not true. They asserted that Claude Code MUST initialize the monoswarm before complex work — nothing insrc/requires or enforces that — and hard-coded a background-worker count that drifted from the real roster. Both the worker count and the command tables are now derived at doc-generation time from the actual registry, so they cannot silently go stale again. - Optional packages resolve via
import.meta.resolveinstead ofrequire.resolve, which failed for callers whose module graph never referenced the package.
All 8 sibling packages were published ahead of the CLI, so every workspace:* pin resolves.
Full Changelog: v2.11.12...v2.12.0