v2.0.0
The domain release. mcx moves from a single implicit repo, inferred from the daemon's
working directory, to explicit first-class domains — named, registered repositories
that every subsystem partitions by. 77 commits since v1.14.6 (2026-07-13).
Breaking changes
- New database:
mcx.dbreplacesstate.db. Adds adomainstable anddomain_id
partitioning across work items, sessions, mail, alias state, the event log, automation
state, and quota. A one-shot importer migrates existingstate.dbcontent on first run
and ships as the upgrade path;state.dbis left byte-frozen, not deleted. mcx scopeis retired, superseded bymcx domain add|ls|show|which|rename|rm|import.- Most commands now refuse to run outside a registered domain.
-d <domain>selects one
explicitly; ambient commands resolve by walking up from$PWD.mcx monitorkeeps its
documented wide default — omitting-dstill shows every domain. mcx claude byekeeps the worktree by default. Pass--cleanto remove it.- Model tier names (
opus,sonnet) pass through verbatim instead of being resolved to
full model IDs.
Domains
One domain worker per domain, supervised, over a transport-agnostic link. Work items,
agent sessions, mail (user@domain addressing), alias state, the event log, and per-domain
spend tracking are all scoped. Automation dispatchers and GitHub pollers resolve their repo
per domain rather than from the daemon's cwd. Domain add/rename/delete are transactional,
with a CHECK on path shape and typed refusals; a rename migrates stamped mail senders and
an rm that would strand them is refused.
Sessions and spawning
- GitHub credentials are scoped per spawned session — no child receives the admin token.
--profileenv bundles for spawned sessions, and scriptable auth-profile switching.- The daemon refuses to spawn into a live session's working tree.
- Claude is re-probed before a blocked spawn, so a patch update no longer needs a daemon restart.
- The rate-limit flag expires instead of latching for the turn.
- Quota is snapshotted into profiles and shown on
mcx auth ls; quota monitoring works on
Linux via a non-keychain token source.
Gate and tooling
- TypeScript 5.9.3 → 7.0.2 (native compiler, ~7.7x faster
tsc -b). CI and the engine floor
move to Bun 1.4.0. am-i-donegets a strict wall-clock deadline with process-tree kill, load-aware lease
admission, and a 600s default matching CI.- The pre-commit hook runs the static gate only — CI owns coverage.
$PATHbinaries install by atomic copy, never symlink, and record install provenance.- Builds embed their source commit, exposed via
_metrics build_info.
Also
Per-server rate limiting for tool calls; producer-rendered summary and severity on the event
envelope; a card store with surgical frontmatter writes; guard-reachability rule harness;
tool-wildcard permission rules rejected at parse time; VFS live clone/pull progress and
adaptive Confluence pagination; site retryOn for session-header staleness; OWA per-mailbox
anchoring; TLS cert/key validation.