Control plane vs. substrate split
SpaAIderLocal-first multi-agent runtime with persistent cross-session memory and heterogeneous clients deliberately splits concerns: the TypeScript control planeThe user-facing orchestrator layer that owns planning, delegation, and streaming event multiplexing runs runOrchestrator; the Python FastAPI substrateThe backend service owning persistence, memory APIs, and agent routes owns SQL tables, episodic store, and /api/v1/memory/recall.
OllamaSovereign local LLM inference server supplies orchestrator, subagent, and embedding models without shipping prompts to a cloud API—privacy and latency motivated the architecture.