@amaster.ai/pi-memory-mem0
Mem0 passive memory extension for pi — dual-mode: Platform (cloud) or Open-Source (local SQLite).
Package details
Install @amaster.ai/pi-memory-mem0 from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@amaster.ai/pi-memory-mem0- Package
@amaster.ai/pi-memory-mem0- Version
0.1.6- Published
- Jul 20, 2026
- Downloads
- 2,264/mo · 505/wk
- Author
- qianchuan
- License
- Apache-2.0
- Types
- extension
- Size
- 1.8 MB
- Dependencies
- 2 dependencies · 2 peers
Pi manifest JSON
{
"image": "https://raw.githubusercontent.com/TGYD-helige/pi/master/packages/pi-memory-mem0/preview.png",
"extensions": [
"./dist/index.js"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
@amaster.ai/pi-memory-mem0

Passive semantic memory extension powered by Mem0 — supports both Platform (cloud) and Open-Source (local) modes.
How It Works
After each conversation turn, user + assistant messages are automatically sent to Mem0 for fact extraction and vector storage. Before the next turn, relevant memories are recalled via semantic search and injected into the system prompt.
Zero effort required — memory storage and recall are fully automatic.
Two Modes
| Mode | Vector Store | Persistence | Dependencies | Use Case |
|---|---|---|---|---|
platform |
Mem0 Cloud | Cloud-managed | MEM0_API_KEY |
Quick start, multi-device sync |
open-source |
Mem0 OSS vector store | Vector-store managed | LLM + Embedding API | Data privacy, no Mem0 Cloud |
Architecture (Open-Source Mode)
User ←→ Agent ←→ Mem0 OSS Memory
↕
Mem0 OSS Vector Store (source of truth)
- Vector search:
mem0aiOSSMemoryVectorStore. Despite the provider namememory, it is backed by SQLite;dbPathselects an in-process SQLite database or a SQLite file. - LLM extraction: Configured provider extracts facts from conversations
- Persistence: The default
dbPathis<home>/memories/mem0-vectors.db, so Mem0 writes vectors and payloads directly to a durable SQLite file. No second snapshot is maintained. - Provider mapping: Custom providers are automatically mapped to mem0-compatible providers (e.g.
openai) via the pi model registry'sapifield. - Observation date:
add()accepts an optionalobservedAt(Date or string). In OSS mode it grounds mem0's extraction prompt so relative time references ("yesterday", "last week") resolve against the conversation's date rather than the system clock — important when ingesting historical conversations. Omit it and mem0 falls back to the current date (correct for live turns).
Quick Start
Platform Mode
{
"pi-memory-mem0": {
"mode": "platform",
"apiKey": "${MEM0_API_KEY}",
"userId": "${USER}"
}
}
Open-Source Mode (Recommended)
Reuses API keys and base URLs from pi's configured model providers — no extra environment variables needed.
{
"pi-memory-mem0": {
"mode": "open-source",
"userId": "${USER}"
}
}
Defaults to OpenAI text-embedding-3-small (embedding) + gpt-4.1-nano (extraction). API keys and base URLs are automatically resolved from pi's model registry.
Custom Provider
When your model registry defines a custom provider with api: "openai-completions", you can use it directly:
{
"pi-memory-mem0": {
"mode": "open-source",
"oss": {
"llm": {
"provider": "my-provider",
"config": { "model": "deepseek-v4-pro" }
},
"embedder": {
"provider": "my-provider",
"config": { "model": "text-embedding-v4" }
}
}
}
}
The extension automatically:
- Resolves API key from the model registry
- Injects
baseUrlfrom the registry - Maps
api: "openai-completions"→ mem0 provider"openai"
Fully Local (Ollama)
{
"pi-memory-mem0": {
"mode": "open-source",
"userId": "${USER}",
"oss": {
"llm": {
"provider": "ollama",
"config": { "model": "llama3", "url": "http://localhost:11434" }
},
"embedder": {
"provider": "ollama",
"config": { "model": "nomic-embed-text", "url": "http://localhost:11434" }
}
},
"useRegistryKeys": false
}
}
External Vector Store (e.g. Qdrant)
For production workloads that need a dedicated vector database:
{
"pi-memory-mem0": {
"mode": "open-source",
"oss": {
"vectorStore": {
"provider": "qdrant",
"config": { "url": "http://localhost:6333" }
}
}
}
}
Supported vector store providers: memory (default), qdrant, redis, pgvector, supabase.
The configured vector store always owns persistence. To request an intentionally ephemeral SQLite database, set the memory provider's config.dbPath to ":memory:"; no snapshot fallback is created.
Configuration Reference
| Field | Type | Default | Description |
|---|---|---|---|
mode |
"platform" | "open-source" |
"platform" |
Operating mode |
apiKey |
string | — | Required for platform mode. Supports ${MEM0_API_KEY} |
baseUrl |
string | https://api.mem0.ai |
Custom platform endpoint |
userId |
string | $USER or "default-user" |
Memory scoping identifier |
topK |
number | 5 |
Max recalled memories per turn |
useRegistryKeys |
boolean | true |
Whether OSS mode resolves keys from pi registry |
oss.llm |
object | OpenAI gpt-4.1-nano | OSS extraction model |
oss.embedder |
object | OpenAI text-embedding-3-small | OSS embedding model |
oss.vectorStore |
object | memory at <home>/memories/mem0-vectors.db |
Custom vector store config |
oss.historyStore |
object | SQLite at <home>/memories/mem0-history.db |
Custom mem0 history store config |
oss.historyDbPath |
string | <home>/memories/mem0-history.db |
Shortcut for SQLite history DB path |
oss.disableHistory |
boolean | false |
Disable mem0 operation history |
Data Storage
| Mode | Vector Data | History |
|---|---|---|
| Platform | Mem0 Cloud | Cloud-managed |
| Open-Source (default) | <home>/memories/mem0-vectors.db |
<home>/memories/mem0-history.db |
Open-Source (memory, dbPath: ":memory:") |
Process-local SQLite; lost on restart | <home>/memories/mem0-history.db |
| Open-Source (Qdrant) | Qdrant server | <home>/memories/mem0-history.db |
The home directory is resolved via resolveHome() from @amaster.ai/pi-shared/settings (defaults to ~/.pi/agent).
Provider Mapping
When a provider name doesn't match mem0's built-in list, the extension uses the model registry's api field to map it:
Registry api field |
Mapped to mem0 provider |
|---|---|
openai-completions, openai-responses |
openai |
anthropic-messages |
anthropic |
azure-* |
azure_openai |
google-*, gemini-* |
gemini |
This happens transparently — just configure the provider name as it appears in your models.json.
Installation Notes
The default Open-Source mode depends on better-sqlite3 (native addon, transitive dependency of mem0ai) for both the vector store and history. This remains true for dbPath: ":memory:": it changes where SQLite stores pages, not which vector-store implementation is used.
For pi-agent users: pi-agent's package.json includes better-sqlite3 in pnpm.onlyBuiltDependencies — it compiles automatically during pnpm install. No extra steps needed.
For standalone users: If your project's pnpm config blocks build scripts, add to your root package.json:
{
"pnpm": {
"onlyBuiltDependencies": ["better-sqlite3"]
}
}
If better-sqlite3 fails to load (for example, because of a Node ABI mismatch), the default memory vector store cannot start. An external vector store can still be used with history disabled or configured to a working provider.
Tools
| Tool | Description |
|---|---|
mem0_search |
Semantic search over long-term memories |
mem0_profile |
List all stored memories |
mem0_save |
Store a fact verbatim (bypasses LLM extraction) |
Commands
/mem0 status # Show current status
/mem0 search <query> # Semantic search
/mem0 profile # List all memories
Relationship with pi-memory
pi-memory-mem0 and pi-memory run independently in parallel as separate extensions:
pi-memory: Active memory — agent explicitly manages via tools, local.mdfiles, hard char limitspi-memory-mem0: Passive memory — automatic extraction and storage, semantic retrieval, no capacity limits
They do not interfere with each other and each injects into the system prompt separately.
Dedup API
The package exports a standalone deduplication function used by pi-memory's dreaming job:
import { dedupMemories } from "@amaster.ai/pi-memory-mem0/dedup";
const result = await dedupMemories({
userId: "my-user",
config: { mode: "platform", apiKey: "..." },
});
// result: { total: 42, duplicatesRemoved: 3 }
Normalizes entries (case-insensitive, whitespace-collapsed), identifies exact duplicates, and deletes the older ones through the configured provider. In OSS mode those deletes go directly to the vector store.