> ## Documentation Index
> Fetch the complete documentation index at: https://docs.getcore.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Statement Aspects

> The closed enum CORE uses to classify every fact in memory and route searches.

## 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

| Aspect         | Captures                                                         | Example statement                                                | Used for                           |
| -------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------- |
| `Identity`     | Who they are: role, location, affiliation (slow-changing)        | "Manik works at Red Planet"                                      | Role, company, background          |
| `Knowledge`    | What they know: expertise, skills, understanding                 | "Expert in TypeScript and React"                                 | Skill level, technical depth       |
| `Belief`       | Why they think that way: values, opinions, reasoning             | "Values simplicity over complexity in code"                      | Design and architectural reasoning |
| `Preference`   | How they want things: likes, dislikes, style choices             | "Prefers pnpm over npm"                                          | Tooling, style, setup choices      |
| `Habit`        | What they do regularly: recurring behaviors, routines            | "Reviews PRs every morning before standup"                       | Routines, recurring workflows      |
| `Goal`         | What they want to achieve: future targets, aims                  | "Launch MVP by Q2 2026"                                          | Planning, prioritization           |
| `Task`         | One-time commitments: follow-ups, promises, action items         | "Send the contract draft to Sarah by Friday"                     | Open action items, follow-ups      |
| `Directive`    | Rules and automation: always do X, notify when Y, remind me to Z | "Always run tests before creating a PR"                          | Enforced rules and triggers        |
| `Decision`     | Choices made, conclusions reached                                | "Chose Neo4j for graph storage because of traversal performance" | Past choices and their reasoning   |
| `Event`        | Specific occurrences with timestamps                             | "Started auth refactor on Jan 15, 2026"                          | Temporal queries                   |
| `Problem`      | Blockers, issues, challenges                                     | "Hit rate limits with GitHub API when syncing 50+ repos"         | Debugging, constraint planning     |
| `Relationship` | Connections between people                                       | "Works with Sarah on CORE project"                               | Team and collaborator graph        |

## 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

| What the agent is doing | Aspects surfaced                       |
| ----------------------- | -------------------------------------- |
| Writing code            | `Preference`, `Directive`, `Knowledge` |
| Code review             | `Preference`, `Directive`              |
| Architectural decision  | `Decision`, `Belief`, `Problem`        |
| Debugging               | `Problem`, `Knowledge`, `Decision`     |
| Planning features       | `Goal`, `Decision`, `Directive`        |
| Tracking follow-ups     | `Task`, `Directive`, `Goal`            |
| Explaining concepts     | `Knowledge`, `Identity`                |
