Facts

A fact is one relationship.

{
  "subject": "user:maya",
  "predicate": "works_at",
  "object": "company:acme"
}

That is user:maya — works_at → company:acme.

Entities: type:id

Use a namespace and an id, joined by a colon.

  • user:maya
  • company:acme
  • project:dashboard
  • topic:typescript

Gomind infers the type from the prefix. user:123 and question:123 are different entities. Deleting with forget_entity then removes every fact about that name.

Bare strings still store. They are harder to join later. Prefer type:id from the start.

Object: entity or literal

If the object looks like an entity name, Gomind treats it as a node in the graph.

If it is a value (vegetarian, Portland, senior engineer), it is stored as a literal. In responses that shows up as value instead of object.

Predicates

Keep them stable and snake_case: works_at, has_skill, display_name. Renaming a predicate later splits history.

Optional context is a note on the fact. It is not part of the triple.

What not to store

Do not invent facts. Store what a user said, what a system already knows, or what feed extracted. Confirm before storing sensitive data.