Skip to content

Search Documentation

Search across all documentation pages

Knowledge Graph

ExoVault's knowledge graph connects memories and notes with typed, directional relations. This enables agents to traverse connections, discover related context, and build a rich understanding of how knowledge fits together.

Relation Types#

Links between nodes use typed relations that describe the relationship:

RelationMeaningExample
derived_fromB was created based on AA design doc derived from requirements
refinesB adds detail to AA detailed spec refines a high-level plan
contradictsB conflicts with AA new finding contradicts an old assumption
part_ofB is a component of AA subtask is part of a larger task
supersedesB replaces AA correction supersedes outdated knowledge
referencesB mentions or cites AA note references a related memory
source_ofA is the source for BA note is the source of extracted memories
wiki_linkB is linked from A via [[title]]Wiki-link in note content
manualExplicitly created linkAgent or user manually linked two items

Use add_link to create a relation between any two nodes (memories or notes):

json
{
  "sourceType": "memory",
  "sourceId": "mem-uuid-1",
  "targetType": "memory",
  "targetId": "mem-uuid-2",
  "relationType": "refines",
  "label": "Adds implementation details"
}

Node types can be memory or note. Links are directional (source -> target) and labels are optional. Labels are encrypted before storage.

Use remove_link to delete a specific link by ID:

json
{
  "linkId": "link-uuid"
}

Use get_links to see all connections for a specific node:

json
{
  "nodeType": "memory",
  "nodeId": "mem-uuid",
  "direction": "both",
  "limit": 50
}

The direction parameter controls which links to return:

  • "outgoing" -- links where this node is the source
  • "incoming" -- links where this node is the target
  • "both" (default) -- all links in either direction

Graph Exploration#

Use explore_graph for multi-hop traversal starting from a query or specific node:

json
{
  "query": "authentication architecture",
  "maxHops": 2,
  "maxNodes": 50
}

Or start from a known node:

json
{
  "nodeId": "mem-uuid",
  "nodeType": "memory",
  "maxHops": 3,
  "maxNodes": 100
}

The response includes:

  • entryPoints -- seed nodes found via semantic search or specified directly
  • nodes -- all discovered nodes (memories and notes) with decrypted previews
  • edges -- all relations between discovered nodes
  • stats -- total counts and maximum hop depth reached

Use get_related_memories for single-hop link traversal from a specific memory. This is lighter-weight than explore_graph when you just need direct neighbors:

json
{
  "memoryId": "mem-uuid"
}

Automatic Linking#

ExoVault creates links automatically in several cases:

  • Wiki-links: [[Title]] in note or memory content creates wiki_link relations
  • Supersession: When a memory sets supersededById, a supersedes link is created
  • Source notes: The sourceNoteIds field on memories creates source_of links
  • Related memories: The relatedMemoryIds field on write_memory creates typed links

Search Integration#

The search_memories pipeline uses the knowledge graph as a signal. After finding initial matches via semantic and keyword search, it expands the top results through graph neighbors, weighted by relation type:

  • refines: 1.0 (highest weight)
  • derived_from: 0.9
  • part_of: 0.9
  • supersedes: 0.8
  • references: 0.7
  • source_of: 0.7
  • wiki_link: 0.6
  • contradicts: 0.5

Next Steps#