Context
Post-unification (KB + MC share one orchestrator-owned Chroma daemon), both MCP servers still carry boot-time auto-trigger flags + managed-mode lifecycle surface that duplicate orchestrator responsibility. The orchestrator daemon already drives every one of these behaviors on its own schedule (per #12065): dream (1h), golden-path (1h), summary (10min), chroma (continuous + 24h recycle), kbSync, and FS-ingest (Phase 1 of the dream cycle). The MCP servers should be pure clients — no boot-time self-triggers, no managed-mode DB lifecycle, no autonomy tools the orchestrator owns.
Empirical smell: every SDK script (ai/services.mjs) and runSandman.mjs already hardcodes these flags to false defensively to prevent double-runs with the orchestrator. That "remember to disable it everywhere" tax is the signal — the flags are a redundant second source of truth.
Inventory (validated against source 2026-05-30)
Memory-Core auto-* flags — ai/mcp/server/memory-core/config.template.mjs
| Flag |
Status |
Consumer |
Orchestrator SSOT |
autoStartDatabase |
DEAD |
none (ai/services.mjs:64 override only) |
chroma task + recycle |
autoStartInference |
DEAD |
none (ai/services.mjs:65) |
mlx/lms tasks |
autoGoldenPath |
DEPRECATED no-op |
observability only (HealthService:454) |
golden-path task + event mutate_frontier |
realTimeMemoryParsing |
DEPRECATED no-op |
MemoryService:348 (logs "skipped") |
parsing runs in dream cycle |
autoSummarize |
ACTIVE-redundant |
SessionService:302,866 |
summary task |
autoDream |
ACTIVE-redundant |
DreamService:128 |
dream task |
autoIngestFileSystem |
ACTIVE-redundant |
GraphService:166 |
FS-ingest = Phase 1 of dream cycle |
Knowledge-Base auto-* flags — ai/mcp/server/knowledge-base/config.template.mjs
| Flag |
Status |
Consumer |
Orchestrator SSOT |
autoStartDatabase |
DEAD |
none (ai/services.mjs:41 override only) |
chroma task + recycle |
autoSync |
ACTIVE-redundant |
DatabaseService:557 |
kbSync task |
MCP tools
| Tool |
Action |
Why |
manage_database (KB + MC) |
REMOVE |
orchestrator owns Chroma lifecycle; handler already no-op spawn |
summarize_sessions (MC) |
REMOVE |
orchestrator summary task is the sole driver (operator directive 2026-05-30) |
mutate_frontier (MC) |
KEEP |
agent-facing frontier-pivot primitive (operator directive 2026-05-30) |
The Fix
- Delete all 9 boot-time auto-* config leaves (MC 7 + KB 2) + env bindings.
- Remove the boot-hook code consuming the ACTIVE flags:
SessionService:302,866, DreamService:128, GraphService:166 (MC); DatabaseService:557 (KB autoSync). Remove the dead realTimeMemoryParsing if-block (MemoryService:348). The two DEAD autoStartDatabase flags + DEAD autoStartInference have no hook — leaf + override deletion only.
- Remove redundant MCP tools
manage_database (both) + summarize_sessions (MC) — registration + handler/lifecycle methods. Keep mutate_frontier.
- Simplify
HealthService (both): drop the auto-* observability block (MC HealthService:441-456) + the managed/strategy DB branching → external-only payload.
- Remove the now-meaningless defensive overrides:
ai/services.mjs (KB:40,41; MC:63,64,65) + runSandman.mjs:98-100.
- (PR B) Collapse the managed-mode lifecycle: lifecycle services → readiness gate / inline into
ChromaManager.connect; drop unused spawn imports / chromaProcess; simplify the two ChromaManagers (lifecycle coupling removed, distinct client logic retained).
Staging (2 PRs)
- PR A — de-auto-trigger surface (mechanical): items 1-5. Pure removal; orchestrator already drives everything → no behavior lost. Low-risk.
- PR B — external-only Chroma lifecycle (refactor): item 6.
Contract Ledger
| Target Surface |
Source of Authority |
Proposed Behavior |
Fallback |
| 9 auto-* config leaves (MC 7 + KB 2) |
server configs |
REMOVED — orchestrator sole trigger |
orchestrator dream/summary/golden-path/chroma/kbSync tasks |
manage_database tool (KB+MC) |
toolService.mjs |
REMOVED |
orchestrator owns Chroma (handler already no-op) |
summarize_sessions tool (MC) |
toolService.mjs |
REMOVED |
orchestrator summary task |
mutate_frontier (MC) |
toolService.mjs |
KEPT |
n/a (agent primitive) |
boot hooks (autoSummarize×2, autoDream, autoIngestFileSystem, realTimeMemoryParsing, KB autoSync) |
MC/KB services |
REMOVED |
orchestrator tasks |
| HealthService auto-*/managed block |
HealthService.mjs (both) |
external-only payload |
n/a |
Acceptance Criteria
Out of Scope
- Orchestrator-side Chroma mechanisms (kill-dups PR #12137; recycle) — the supply side.
- The orchestrator REM pipeline itself (#12065 — already built the replacements).
Decision Record impact
aligned-with ADR 0003 (unified Chroma topology) — establishes the orchestrator as the sole lifecycle + autonomy authority for KB + MC.
Related
- #12065 (orchestrator REM pipeline — built the replacements)
- #12133 (dual-daemon corruption — redundant managed-mode was a factor) · PR #12137 (kill-dups)
Scope expanded 2026-05-30 per operator directive (KB added; summarize_sessions removal confirmed; mutate_frontier confirmed keeper) + full source-validated inventory. Filed by @neo-opus-ada.
Context
Post-unification (KB + MC share one orchestrator-owned Chroma daemon), both MCP servers still carry boot-time auto-trigger flags + managed-mode lifecycle surface that duplicate orchestrator responsibility. The orchestrator daemon already drives every one of these behaviors on its own schedule (per #12065):
dream(1h),golden-path(1h),summary(10min),chroma(continuous + 24h recycle),kbSync, and FS-ingest (Phase 1 of the dream cycle). The MCP servers should be pure clients — no boot-time self-triggers, no managed-mode DB lifecycle, no autonomy tools the orchestrator owns.Empirical smell: every SDK script (
ai/services.mjs) andrunSandman.mjsalready hardcodes these flags tofalsedefensively to prevent double-runs with the orchestrator. That "remember to disable it everywhere" tax is the signal — the flags are a redundant second source of truth.Inventory (validated against source 2026-05-30)
Memory-Core auto-* flags —
ai/mcp/server/memory-core/config.template.mjsautoStartDatabaseai/services.mjs:64override only)chromatask + recycleautoStartInferenceai/services.mjs:65)mlx/lmstasksautoGoldenPathHealthService:454)golden-pathtask + eventmutate_frontierrealTimeMemoryParsingMemoryService:348(logs "skipped")dreamcycleautoSummarizeSessionService:302,866summarytaskautoDreamDreamService:128dreamtaskautoIngestFileSystemGraphService:166dreamcycleKnowledge-Base auto-* flags —
ai/mcp/server/knowledge-base/config.template.mjsautoStartDatabaseai/services.mjs:41override only)chromatask + recycleautoSyncDatabaseService:557kbSynctaskMCP tools
manage_database(KB + MC)summarize_sessions(MC)summarytask is the sole driver (operator directive 2026-05-30)mutate_frontier(MC)The Fix
SessionService:302,866,DreamService:128,GraphService:166(MC);DatabaseService:557(KBautoSync). Remove the deadrealTimeMemoryParsingif-block (MemoryService:348). The two DEADautoStartDatabaseflags + DEADautoStartInferencehave no hook — leaf + override deletion only.manage_database(both) +summarize_sessions(MC) — registration + handler/lifecycle methods. Keepmutate_frontier.HealthService(both): drop the auto-* observability block (MC HealthService:441-456) + the managed/strategy DB branching → external-only payload.ai/services.mjs(KB:40,41; MC:63,64,65) +runSandman.mjs:98-100.ChromaManager.connect; drop unusedspawnimports /chromaProcess; simplify the twoChromaManagers (lifecycle coupling removed, distinct client logic retained).Staging (2 PRs)
Contract Ledger
dream/summary/golden-path/chroma/kbSynctasksmanage_databasetool (KB+MC)toolService.mjssummarize_sessionstool (MC)toolService.mjssummarytaskmutate_frontier(MC)toolService.mjsautoSummarize×2,autoDream,autoIngestFileSystem,realTimeMemoryParsing, KBautoSync)HealthService.mjs(both)Acceptance Criteria
SessionService:302,866,DreamService:128,GraphService:166, KBDatabaseService:557) + deadrealTimeMemoryParsingblock.manage_database(both) +summarize_sessions(MC) removed;mutate_frontierretained.…= falseoverrides removed (ai/services.mjs,runSandman.mjs).Out of Scope
Decision Record impact
aligned-with ADR 0003(unified Chroma topology) — establishes the orchestrator as the sole lifecycle + autonomy authority for KB + MC.Related
Scope expanded 2026-05-30 per operator directive (KB added;
summarize_sessionsremoval confirmed;mutate_frontierconfirmed keeper) + full source-validated inventory. Filed by @neo-opus-ada.