Skip to main content

What aspects are

Aspects are a closed enum that classifies every fact stored in CORE memory. The search router uses them to filter results: a query is mapped to one or more aspects, and only statements tagged with those aspects are returned. The full set is defined as StatementAspects in packages/types/src/graph/graph.entity.ts.

The 12 aspects

Voice aspects vs graph aspects

The 12 aspects are split into two storage paths, defined by the VOICE_ASPECTS subset in packages/types/src/graph/graph.entity.ts. Voice aspects (Directive, Preference, Habit, Belief, Goal, Task) represent the user’s voice. They are stored as complete, non-decomposed statements in the Aspects Store. Queries scoped to these aspects return whole statements as written. The other six (Identity, Knowledge, Decision, Event, Problem, Relationship) are graph aspects. They are decomposed into atomic subject, predicate, object triples in Neo4j. Queries scoped to these aspects return triples rather than full statements.

How aspects route searches

The router’s extractAspects() function classifies an incoming query and returns aspects: string[], where each value is one of the 12 enum strings above. The aspect_query handler then scopes its graph traversal by those aspects plus any matched labels. Agents calling memory_search do not pass aspects directly: classification is performed internally by the router and handlers.

Aspect combinations by task