Concepts: Context (graphium)
Graphium is AcasoOS's memory layer. Agent context is organised as a four-level taxonomy — Family → Genus → Specimen → ContextStatement — layered on top of DataHub.
The console exposes this through the Context page.
The four levels
| Level | Table | Purpose |
|---|---|---|
| Family | dh_families | Top-level grouping (performance, relationships, goals). Holds a running summary_embedding updated on every ingest. |
| Genus | dh_genera | Sub-grouping within a family (performance-history, feedback). |
| Specimen | dh_specimens | A concrete subject (a person, a project, a system). |
| ContextStatement | acaso:MemoryStatement (KG) + kg_embeddings | An atomic sentence about the specimen, classified and HNSW-indexed for ANN search. |
The structural taxonomy (families, genera, specimens) is mirrored into the tenant's AGE graph as :Family, :Genus, :Specimen vertices with :HAS_GENUS, :HAS_SPECIMEN, and :CONTAINS_SPECIMEN edges. Statements stay relational-only — Cypher traversal queries see the structure; vector search sees the statements.
Classification
Every statement is classified deterministically by a regex pipeline in datahub.graphium.classifier. Two axes:
memory_typeone offact,event,discovery,preference,advice,decision.layer_kindpreloaded(pulled bywake_up_contextat session boot) oron_demand(default; fetched only bysearch_context/recall_context).
Classification runs at ingest time. The console surfaces these as badges on every statement card. A template that wants richer extraction should run its own LLM upstream and call ingest_context(statements=[...]) with pre-split atoms.
Dedup
ingest_context skips inserting a statement whose embedding sits within 0.999 cosine similarity of an existing one in the same family. Instead it bumps access_count on the matched row.
Re-ingesting the same fact is therefore safe and idempotent-ish; the UI surfaces a "Dedup: matched existing statement" pill when this happens.
Scope gating
Statements, specimens, and families carry an optional required_scopes TEXT[] column. The RLS policy is tenant_and_scope_isolation — a row is visible when any of these holds:
cardinality(required_scopes) = 0(no gating).'public' = ANY(required_scopes).- The caller's session scopes match at least one entry.
Editing required_scopes is one of the few mutations the console allows on a statement.
Symbiosis
dh_symbioses rows are cross-family edges of kind related_to, contradicts, or supersedes. Search results follow symbiosis edges after the primary ANN scan and surface hits tagged is_symbiosis=true.
Note: v1 is read-only for symbiosis; pipelines do not create them automatically.
Content edits
The content field of a statement is NOT editable in v1. Changing the content would require re-embedding the vector, which has correctness and performance implications worth their own design. To change content, delete the statement and re-ingest the new wording.