Core Concepts

Memory Graphs

Organizing knowledge into separate graphs

Memory Graphs

A memory graph is an isolated hypergraph — a complete, self-contained set of nodes and edges. Your HyperMemory account can have multiple graphs, each independent from the others.

What is a memory graph?

Think of a memory graph like a separate database:

  • Nodes in Graph A cannot connect to nodes in Graph B
  • Queries only search within the specified graph
  • Each graph has its own namespace
Account
├── Graph: default
│   ├── node_abc123
│   ├── node_def456
│   └── (edges, hyperedges)
├── Graph: project_alpha
│   ├── node_xyz789
│   └── (edges, hyperedges)
└── Graph: testing
    └── (test data)

When to use multiple graphs

Separate projects or domains

If your agents work on completely unrelated topics, separate graphs prevent cross-contamination:

├── Graph: sales_agent_memory
├── Graph: support_agent_memory
└── Graph: engineering_agent_memory

Different agents with different knowledge

Each agent can have its own memory space:

├── Graph: agent_alice
├── Graph: agent_bob
└── Graph: shared_team_knowledge

Testing vs production

Keep test data isolated:

├── Graph: production
├── Graph: staging
└── Graph: testing

Client isolation

If you’re building a platform on HyperMemory, give each client their own graph:

├── Graph: client_acme_corp
├── Graph: client_initech
└── Graph: client_hooli

Default graph

Every account has a default graph. If you don’t specify a graph_id in your API calls, operations use this graph.

memory_store(
  content="This goes to the default graph"
)

memory_store(
  content="This goes to a specific graph",
  graph_id="project_alpha"
)

Graph limits by plan

PlanMax Graphs
Free1
Developer3
Pro10
EnterpriseUnlimited

Managing graphs

List all graphs

memory_list_graphs()

Response:

{
  "graphs": [
    {
      "id": "default",
      "node_count": 1542,
      "created_at": "2026-01-15T00:00:00Z"
    },
    {
      "id": "project_alpha",
      "node_count": 328,
      "created_at": "2026-02-20T14:30:00Z"
    }
  ]
}

Create a new graph

memory_create_graph(
  graph_id="project_beta",
  metadata={"project": "Beta", "team": "backend"}
)

Delete a graph

memory_delete_graph(
  graph_id="testing"
)

Deleting a graph permanently removes all its nodes and edges. This cannot be undone.

Sharing knowledge between graphs

Graphs are isolated by default, but you can transfer knowledge using export/import:

Export from one graph

memory_export_subgraph(
  node_ids=["node_abc", "node_def"],
  graph_id="project_alpha"
)

Import to another graph

memory_load_link(
  data=exported_subgraph,
  graph_id="project_beta",
  merge_strategy="append"
)

Imported nodes get new IDs in the target graph. Relationships are preserved relative to the imported nodes.

Best practices

Start with one graph

Don’t over-engineer. Use the default graph until you have a clear reason to separate:

  • Different access control needs
  • Completely unrelated domains
  • Testing isolation requirements

Use meaningful graph IDs

Bad: graph_1, temp, new

Good: sales_agent, q3_project, staging_env

Document your graph structure

Keep track of what each graph is for:

├── production      # Live agent memory
├── staging         # Pre-release testing
├── client_acme     # Acme Corp's isolated data
└── experiments     # R&D and prototypes

Next steps