OVERMIND · System architecture
ARCHITECTURE
LangGraph StateGraph at the core. Dual LLM design. SQLite checkpointing. Intent routing. Composable skill pipelines. Knowledge palace memory system.
01 Core layers
LANGGRAPH STATEGRAPH
Orchestration · State machine
The entire framework runs as a LangGraph StateGraph. Every execution is a state transition — nodes represent skill invocations, edges represent routing decisions. Full checkpointing means any run can be paused and resumed, inspected mid-flight, or replayed from any checkpoint.
DUAL LLM DESIGN
Ollama local · Claude escalation
Ollama handles the majority of inference locally — fast, private, and free. When a task exceeds local model capability, the framework escalates automatically to Claude via the Anthropic API. The routing decision is made per-skill based on complexity signals. No manual model selection needed.
Ollama primaryClaude escalationAutomatic routingMistral · Llama3 · Qwen
SKILL PIPELINE
Composition · Gating
Skills compose via a fluent .pipe() interface. Each pipe call adds a processing stage. .gate() inserts a confidence checkpoint — if the output confidence falls below the threshold, the pipeline branches to a fallback or halts. This prevents low-confidence outputs from cascading through subsequent stages.
pipe = (SkillPipeline()
.pipe(ResearchSkill.from_config())
.gate(Confidence(min=0.7))
.pipe(SecuritySkill.from_config())
)
MEMORY SYSTEM
MemoryLog · Knowledge Palace
Two-layer memory: MemoryLog provides linear cross-session storage — a running record of what each skill has processed and concluded. The Knowledge Palace adds structured semantic storage across 14 named rooms with 28 inter-room connections — organised like a memory palace to make retrieval predictable and fast.
Cross-session14 palace rooms28 connectionsSQLite backed
INTENT ROUTER
Natural language · Skill dispatch
Each skill declares what it handles via a describe() classmethod returning a structured description. SkillRegistry.manifest() aggregates all descriptions. The intent router matches incoming requests to the right skill using lightweight semantic matching — no hardcoded routing tables.
class AudioSkill:
@classmethod
def describe(cls):
return {
"name": "AudioSkill",
"handles": ["beat analysis", "preset selection", "mood classification"],
"input": ["bpm", "energy", "frequency_bands"]
}