Ontology Augmented Generation · Neurosymbolic Architecture
Dialecticais the TACITUS core engine — the neurosymbolic context backend for conflict and policy intelligence. Standard AI treats disputes, reports, and policy situations as text to summarize. Dialectica treats them as structured systems to reason about — typed knowledge graphs that make context legible to machines and auditable by the professionals who act on it.
Named after the ancient art of reasoned dialogue, Dialectica goes beyond retrieval (RAG) and entity linking (GraphRAG) to provide Ontology Augmented Generation— a conflict-specific ontology grounded in 30+ theoretical frameworks that preserves temporality, causality, and provenance. The engine that powers every TACITUS product.
Every event timestamped. Every claim version-stamped. The graph reconstructs what was said, when, in what sequence.
Not "A then B" but "A caused B via mechanism M." The difference between a log and intelligence.
Every assertion traces to a source document, timestamp, and actor. A full audit trail by design.
The Real Problem
The hardest questions in conflict resolution are structural, temporal, and relational. They require connecting versioned claims across time — not retrieving similar text chunks.
“Did the manager’s behavior escalate after the complaint was filed, or was the pattern already present?”
“Which commitments did Party B acknowledge in writing that they later denied agreeing to?”
“Which parties shifted position on water rights after March, and did new coalitions form?”
“Beneath the property arguments, what does each sibling actually need — and where is there overlap?”
The Agentic Conflict Ontology
The Agentic Conflict Ontology — the kernel grammar that DIALECTICA reads and writes — has moved to its canonical home in research. Eight primitives that do not change, dynamic per-case extensions that do, MIT-licensed and forkable.
How It Works
Load documents, transcripts, emails, case notes. LLMs identify actors, claims, events, evidence. Extraction only — the LLM is a pattern recognizer, and that’s exactly what we use it for.
The Agentic Conflict Ontology applies type binding, relation mapping, temporal ordering, and provenance linking. Every node typed against the 8-primitive Conflict Grammar. This is where structure becomes intelligence.
Graph-native storage. API-queryable. Deterministic on keyed facts. LLM-groundable on open questions. The graph never hallucinates. The LLM never flies blind.
The Agentic Conflict Ontology
Not generic NLP categories — the reasoning patterns of trained conflict professionals, grounded in Fisher/Ury, Galtung, Glasl, Lederach, and 30+ theoretical frameworks.
Principal, Agent, VetoPlayer, BridgeActor, Mediator — typed roles, not just “person mentioned”
Position, Interest, RedLine, BATNA — what actors assert, need, and won’t concede
The need beneath the position. Per Fisher/Ury: interests unlock resolution
Legal, institutional, temporal limits that bound the solution space
Asymmetric power — who can compel action and through what mechanism
Promises and obligations tracked over time with version-stamped provenance
Timestamped occurrences with typed causal links — the atoms of the timeline
Competing stories about the same events. Divergence reveals where mediation begins.
Typed node
Each extraction becomes a primitive with a role, confidence, timestamp, and source span.
Typed edge
Relations such as contradicts, commits-to, constrained-by, escalated-from, and aligns-with are explicit.
Graph layer
GND, CTX, EVD, and RZN keep raw facts, context, evidence, and reasoning separate.
Contestability
Analysts can inspect, revise, reject, or annotate the graph before generation uses it.
# Position vs. Interest , the core distinction in negotiation theory
from tacitus_ontology import Actor, Claim, CausalEdge
position = Claim(type=ClaimType.POSITION, text="I need a private office")
interest = Claim(type=ClaimType.INTEREST, text="Needs quiet for focused work",
evidence_ids=["doc-042"], confidence=0.87)
# Same person. The position blocks. The interest unlocks.
escalation = CausalEdge(
type=CausalRelation.ESCALATED_FROM,
source="event-complaint-001", target="event-grievance-002",
mechanism="Perceived retaliation after informal complaint dismissed")Dialectica · Work in Progress
We're building in public from NYC. Explore the Dialectica engine, inspect the open-source pipelines, or read the research.