superemotion
Ontology

The ontology is the map superemotion keeps of your life — the people in it, the places, what happened and what is still owed. Everything you mention becomes a typed object on that map instead of another line of chat history.

Most assistants keep your conversations as text and hope the model notices a pattern on the way past. This is a typed graph instead: four object types with real schemas, named edges that carry their own state, and every fact stamped with the moment it became true.

SELF

you

  • sibling

    PERSON

    sister

    3 missed calls · 3 weeks

  • parent

    PERSON

    mum

    surgery · 4 March

  • partner

    PERSON

    Jennifer

    moved in · August

  • lives in

    PLACE

    Berlin

    since 2024

Jenniferlives inBerlinAn edge that never passes through you.

One turn’s worth of graph. Asserted relationships carry a name; derived facts hang off their subject and carry a date. Jennifer connects to Berlin without going through you — which is the whole point of a graph over a profile.

01 / Types

Four types, and a schema for each.

A person is a person. Not a string that happened to sit near other strings, and not a row in a vector table that scored well this turn.

PERSON

Someone you have mentioned. Resolved by reference, not by string match — “my sister”, “her” and a first name collapse into one node.

label
string
relation
edge → self
first_seen
timestamp
last_mentioned
timestamp
salience
float

PLACE

Somewhere with a bearing on the conversation: a city you moved to, a room you avoid, a country someone left.

label
string
kind
city | home | other
since
timestamp?

EVENT

Something that happened at a time. Recurrence is a property, which is how “again” becomes answerable.

label
string
subject
edge → entity
occurred_at
timestamp
recurrence
int

COMMITMENT

Something owed, by you or to you. The only type with a due date, and the only one that can quietly expire.

label
string
owed_to
edge → person
due
timestamp?
state
open | met | lapsed

02 / Edges

The edge carries state too.

An edge is not a pointer. The one between you and your sister has its own distance, its own rhythm, and its own count of things left unfinished.

edge: you → sister

kind
family · romantic · friend · school · lives_at · works_at
since
when the edge was first asserted
last_contact
stamped on every mention
frequency
rolling mentions per month
unresolved
count of open threads on this edge

This is what lets the model say “that’s the third time this month” without being told. The count is on the edge, not inferred from a transcript it happened to still have in the window.

It is also what keeps it quiet. An edge with nothing unresolved and a normal rhythm produces no retrieval at all — there is nothing to bring up.

03 / Time

Facts supersede. They don’t overwrite.

When something stops being true the new fact wins, but the old one keeps its dates. The shape of a change is often the only thing worth knowing.

  1. 01lives_at → LondonJan 2023superseded
  2. 02lives_at → BerlinMar 2024active

Only the active row is retrievable. The superseded one is still readable in Memory, with the date it was retired — nothing is silently rewritten, and every row is yours to delete.

04 / Retrieval

Three facts, chosen by the turn.

Three is a ceiling, not a target. Most turns retrieve one, plenty retrieve none, and a turn that needs nothing gets nothing.

01

Entities in the turn

Who and what you just referred to, resolved against the graph rather than matched as text.

02

Edge state

Whether anything on those edges is unusual: a broken rhythm, an unresolved thread, a lapsed commitment.

03

Recency and weight

A fact from March beats one from two years ago unless the old one is the reason the new one matters.

Stuffing the window with everything it knows is what makes an assistant sound like it is reading a file on you. The ceiling is the feature.

It already knows who your people are.

You just have to mention them once.

Ontology · superemotion