Skip to content

v0.1.22 — mms host-config management surface (W1+W2+W3)

Choose a tag to compare

@memtomem memtomem released this 02 May 01:12
0786c11

This release lands the full mms host-config management surface (RFC v0.3 Workstreams 1–3) — mms project, mms import, and the mms host subgroup (status/scan/sync/sync --force). Together they form the read → reconcile → write-back loop for keeping host MCP configs in sync with the mms registry.

W1 — registry foundation

  • #278 mms project subgroup (init/show/list/enable/disable) + new ~/.mms/ dotdir with registry.toml / projects.toml / per-project .mms/project.toml. mms addstm_proxy.json and mms import --applyregistry.toml are fully disjoint mutation paths in W1.
  • #279 mms import reads MCP definitions from Claude Code / Cursor / Codex CLI / Claude Desktop. Two-signal secret classification (key pattern OR opaque-token heuristic), dangerous-env-key filter (LD_PRELOAD, NODE_OPTIONS, etc.), first-import-wins reconciliation. --plan / --apply / --show-imported flow.

W2 — drift detection + reconciliation

  • #280 Drift-hash foundation. Canonical form (command + ordered args + key-sorted env, prefix excluded) + sidecar baseline at ~/.mms/import_state.toml. Cross-host equivalence is load-bearing — same github entry hashes byte-identical across all four host config formats.
  • #281 Wire drift-hash into mms import --apply + idempotent backfill (closes pre-PR2 / crash / manual-delete recovery scenarios; backfill source_label reflects the current observing host, asymmetric to fresh-import semantics by design).
  • #282 mms host status 4-state classifier (unchanged / changed / removed_at_host / no_baseline). Read-only, exit 0. JSON 4-key summary frozen as backwards-compat anchor. _select_candidate_by_name two-pass with baseline-source-label preference (no flicker when entries mirror to a second host).
  • #283 removed_at_host promoted from footer count to main-table row (3 states in main table now). Footer count + template kept as backwards-compat anchor for downstream tooling that grepped PR3's output.
  • #284 mms host scan host-side discovery surface. Three columns (NAME / HOST / IN_REGISTRY) + complementary symmetry to status (new_at_hostremoved_at_host). Same-name multi-host = full inventory.
  • #285 mms host sync --plan/--apply write-back. Four mutating buckets (ADD / REMOVE / BACKFILL / CLEANUP) — first and only command in mms that deletes from the registry. New TTY+--yes confirmation pattern; --json + REMOVE always requires --yes (mixing prompt text with JSON corrupts parsing). Cross-host shape-relocation contract: no silent reshape.

W3 — re-stamp

  • #286 mms host sync --force re-stamps changed entries as a full reconciliation (registry + sidecar updated atomically; not sidecar-only). Confirmation prompt shows old/new diff per entry (command / args / env-key set; env values redacted; env keys sorted for diff stability). Env-value-only drift (token rotation: same keys, different values) collapses to a single shape line + explicit (env values redacted; values changed) note. --force and --yes are orthogonal.

    Lock-down 6 cross-host partition (BLOCKER from review): --force skips entries whose only candidate is at a non-baseline host — adopting a Pass-2 fallback would silently relocate the entry's host-of-record. Cross-host count surfaces in JSON plan.skipped_changed[i].host_relocation and a manual-review footer; when every changed entry is cross-host, the standard "use --force" pointer is suppressed entirely.

JSON shape additions (additive at the entry-field level)

Existing parsers reading summary[k] / plan.<bucket>[i]["name"] keep working.

  • mms host status --json — entries gain current_hash (host view, uniform across buckets) + baseline_hash + last_imported. Always-emit 4-key summary.
  • mms host scan --jsontotal / in_registry / new_at_host summary (always-emit).
  • mms host sync --jsonmode / aborted / plan (7 always-emit arrays) / summary (8 always-emit counts).
  • mms host sync --force --jsonsummary.restamped: int (always present, default 0); plan.skipped_changed[i] gains source_label / baseline_hash / current_hash / last_imported / host_relocation.

Backwards-compatibility

All existing CLI commands (mms add, mms init, mms register, mms list, mms health, mms prune) untouched. New ~/.mms/ dotdir is independent of ~/.memtomem/. STM proxy bootstrap (stm_proxy.json) is unaffected.

Install

uv tool install --force memtomem-stm==0.1.22
# or
pipx install --force memtomem-stm==0.1.22

Full changelog: https://github.com/memtomem/memtomem-stm/blob/main/CHANGELOG.md#0122--2026-05-02