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
| Plan | Max Graphs |
|---|---|
| Free | 1 |
| Developer | 3 |
| Pro | 10 |
| Enterprise | Unlimited |
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"
)
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