MemoryOS: Why dijin Is Not a Search Engine
Most digital assistants treat your data like a search index. You ask a question, they scan for keywords, return the closest match. dijin takes a fundamentally different approach.
The Problem with Search-Based Memory
When you ask "What was the Q2 budget decision?", a search engine scans for "Q2" and "budget." But what if the budget was mentioned in three different contexts? What if the decision was confirmed in a follow-up?
How MemoryOS Works
dijin treats every question as a system call. An Execution Planner classifies your intent and routes it to the right subsystem β only the necessary tiers execute.
The Four Tiers
| Tier | What It Does | Example Query | Data Source | Local model needed? |
|---|---|---|---|---|
| Tier 0 β Deterministic | Direct database query | "When is the board meeting?" | Calendar, counts, dates | No β 100% confidence |
| Tier 1 β Claims Graph | Knowledge graph traversal | "Who committed to the deadline?" | Verified facts, relationships | No β graph lookup |
| Tier 2 β Episodic Search | Hybrid FTS + vector search | "What was the Q2 budget decision?" | Transcript segments, embeddings | Partial β ranking only |
| Tier 3 β Compacted Memory | Pre-computed summaries | "Summarize the Q2 Marketing Sync" | Daily/topic summaries | Yes β synthesis |
The Short-Circuit Principle
Execution Flow: Step by Step
Intent Classification
Your question is classified: temporal, numeric, relational, identity, analytical, or continuation. Each type has a different resolution strategy.
Execution Planner
The Planner selects which tiers to activate. Simple factual questions go to Tier 0 only. Complex analytical questions may activate Tier 2 + Tier 3 + LLM.
Tier Execution
Selected tiers run in order. Each tier either resolves the question or passes to the next. Short-circuit: if an earlier tier succeeds, later tiers are skipped.
Result Assembly
Structured facts from tiers are merged into a response context. Evidence links point to exact source moments.
LLM Rendering
The LLM formats the structured answer into natural language. It does not reason, interpret, or add information β it is a renderer only.
The 7 Active Resolvers
| Resolver | Query Type | Example | Resolution Method |
|---|---|---|---|
| CountResolver | "How many..." | "How many action items from Q2 Marketing Sync?" | COUNT query on ActionItems |
| DateRangeResolver | "Between X and Y..." | "Meetings last week" | SQL BETWEEN on timestamps |
| WhenObjectResolver | "When was..." | "When is the board meeting?" | Calendar + ActionItem lookup |
| WhatResolver | "What did we..." | "What was the Q2 budget decision?" | Keyword β full-text search + Claims |
| WhoResolver | "Who said/did..." | "Who committed to send the proposal?" | Entity graph + Claims |
| IdentityResolver | "Who am I..." | "What do you know about me?" | Claims(subject=user) |
| ParticipantResolver | "Who was in..." | "Who attended the Q2 Marketing Sync?" | Session participants + diar |
Why This Matters: The 20-Year Principle
This is not an optimization. It is a design philosophy:
Structured-first β resolve from structured data before searching text
Deterministic-first β exact answers before probabilistic ones
Semantic-second β use semantic search only when structure cannot answer
LLM as renderer β the model formats output, never generates facts