Kaysser Kayyali 0f939b3bdb docs(adr): 0008 — graph backend is Neo4j (overrides Cognee's Kuzu default)
Cognee's default graph DB is Kuzu (PR #1022, June 2025). We override
to Neo4j for battle-testedness + Java UDFs. The time model
(time_in_window/overlap, era tree, current token) now ships as a
Neo4j Java UDF — queryable inline in Cypher, the contract was_true_at
depends on. Kuzu has no Java UDF mechanism, so on Kuzu the time model
would have been app-layer Python called outside the query. The POC's
pure-Python port becomes the reference impl + test oracle.

Resolves the 'verify which backend' hedge that was never executed:
  - 08-architecture.md: storage line, diagram, time-model impl, hosting
  - 22-cognee-boundary.md: storage ownership
  - CONTEXT.md: Cognee entry pinned to Neo4j
  - 00-overview.md: ADR index

Post-cognify consistency hook (Q10 second half): Cognee exposes no
built-in hook. 04-consistency.md updated — live sweep runs as a final
Task in run_custom_pipeline (post-ingest, <100ms); nightly full sweep
runs as external cron. Both write the same :ConsistencyRun shape.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-17 22:55:21 -04:00

Lore Engine

A Neo4j-backed world ontology and modular MCP tool surface that lets an LLM reason about a high-fantasy world with historical accuracy, temporal consistency, and macro↔micro association.

Built on top of the existing GraphMCP-Example stack (Neo4j + Redis Streams + Go MCP server), with extensions for the things a world needs that a message archive does not.

v1.2 (current): adds first-class Plane and Setting graph nodes with REFLECTS / LAYER_OF / ADJACENT_TO / ACCESSIBLE_VIA relations. Replaces the v1.1 flat world_id strings with the model from 17-planes.md. The v1.1 extension model (DomainEntity, multi-store) is unchanged.

v1.1: adds polymorphic DomainEntity extension model, multi-store storage strategy, and a microservice decomposition plan. See 11-extensibility.md, 12-storage-strategy.md, 13-microservice-decomposition.md, 14-examples.md.


Read in this order

# Doc What it covers
00 Overview Goals, design philosophy, what we inherit vs. what we add
01 Ontology Node labels, edge types, properties — the full world model
02 Time Model Eras, calendars, temporal validity, "was X true at time T?"
03 Macro↔Micro Association How lineage chains, location hierarchies, and faction membership bind micro details to macro context
04 Consistency Engine Rules, anachronism detection, contradiction pattern extensions
05 MCP Tool Catalog One section per tool — purpose, signature, returns, when to use
06 Ingestion Pipelines How to ingest structured lore (timelines, family trees, gazetteers, bestiary) and free prose
07 Reasoning Harness LLM prompt patterns + tool-chaining recipes for the most important question types
08 Architecture System diagram, data flow, service layout
09 Roadmap Phased build plan — MVP first, then layers
10 Critique Self-pressure-test: what could break, where this could fail
11 Extensibility v1.1 — polymorphic DomainEntity + TypeTemplate model. New domains as YAML, not code.
12 Storage Strategy v1.1 — which data goes in Neo4j, Postgres, pgvector, Redis, S3. Why and when.
13 Microservice Decomposition v1.1 — split the mcp-server monolith. Macro/micro iteration speeds.
14 Worked Examples v1.1 — three end-to-end examples: thieves-guild missions, war campaigns, black-market economy.
15 Related Work Survey of GraphRAG, Cognee, LightRAG, Generative Agents, IVIE, WikiChat, TKG methods, CoK. With stars, citations, and direct quotes from abstracts.
16 Comparison & Critical Thinking Head-to-head with GraphRAG, Cognee, Generative Agents. Honest assessment of where the Lore Engine is worse. Strategic recommendation.
17 Planes of Existence v1.2 — first-class Setting and Plane graph nodes, the plane taxonomy (material / reflection / transit / outer / demiplane / etc.), the four plane-relation edge types, and the migration from the v1.1 world_id string.

The 30-second pitch

A Lore Engine has four jobs, and only four:

  1. Remember. Capture the world as a typed, temporal, source-attributed graph — not a bag of facts.
  2. Scope. When the LLM asks about Aldric, it gets Aldric's context — not the world's. When it asks about Aldric-in-340-TA, it gets the right slice of his life.
  3. Reason. Provide tools that compose: was_allied_with + at_time + as_far_as = "Were House Vyr and the Crimson Pact allied in 340 TA?"
  4. Verify. Flag anachronisms, contradictions, and missing lineages before the LLM hallucinates around them.

Everything else is implementation detail.

Status

Design phase. No code yet. This repo is the design contract — read it, red-team it, then we build.

The underlying graph infrastructure (Neo4j, Redis, MCP transport) is already production in GraphMCP-Example. The Lore Engine adds ontology, time model, consistency rules, and ~12 new MCP tools on top of that substrate.

Description
Lore engine: Neo4j-backed world ontology + modular MCP tools for historically-accurate LLM reasoning about a high-fantasy world
Readme 697 KiB
Languages
Markdown 100%