@pi-unipi/memory
Persistent cross-session memory with MemPalace backend (auto-installed) and SQLite fallback for Pi coding agent
Package details
Install @pi-unipi/memory from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@pi-unipi/memory- Package
@pi-unipi/memory- Version
2.16.0- Published
- Sep 3, 2026
- Downloads
- 3,055/mo · 1,654/wk
- Author
- neuron-mr-white
- License
- MIT
- Types
- extension, skill
- Size
- 124.3 KB
- Dependencies
- 3 dependencies · 2 peers
Pi manifest JSON
{
"extensions": [
"./index.ts"
],
"skills": [
"./skills"
],
"prompts": [],
"themes": []
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
@pi-unipi/memory
Persistent memory that survives across sessions. Stores facts, preferences, and decisions with semantic vector search, so the agent remembers what you told it last week.
Primary backend: MemPalace — auto-installed via uv on first load, with verified, resumable migration of existing legacy memories. If MemPalace or uv is unavailable, the package transparently falls back to the bundled SQLite + sqlite-vec store, so memory never hard-fails.
Two storage tiers: MemPalace (or SQLite) for vector similarity search, markdown files for a durable human-readable copy you can edit by hand. Project-scoped memories stay separate per codebase, global memories are accessible everywhere.
Commands
| Command | Description |
|---|---|
/unipi:memory-process <text> |
Analyze text and store extracted memories |
/unipi:memory-search <term> |
Search project memories |
/unipi:memory-consolidate |
Consolidate session into memory |
/unipi:memory-forget <title> |
Delete a memory by title |
/unipi:global-memory-process <text> |
Analyze text and store to global |
/unipi:global-memory-search <term> |
Search global memories |
/unipi:global-memory-list |
List all global memories |
Special Triggers
At session start, the agent sees memory titles injected into context. This gives it a summary of what it should remember without loading full memory content.
During compaction (if @pi-unipi/compactor is installed), memories are auto-extracted from the conversation. The memory-consolidate command also triggers this manually.
Memory registers with the info-screen dashboard, showing project memory count, total count, and consolidation count. The footer subscribes to MEMORY_STORED, MEMORY_DELETED, and MEMORYCONSOLIDATED events to display memory stats.
Agent Tools
| Tool | Scope | Description |
|---|---|---|
memory_store |
Project | Store or update a memory |
memory_search |
Project | Search memories by query |
memory_delete |
Project | Delete memory by ID or title |
memory_list |
Project | List all project memories |
global_memory_store |
Global | Store or update global memory |
global_memory_search |
Global | Search global memories |
global_memory_list |
Global | List all global memories |
The agent uses memory_store when it learns something worth remembering — a user preference, a technical decision, a code pattern. memory_search is used to recall relevant context before answering questions.
Memory Format
Memories are markdown files with YAML frontmatter:
---
title: auth_jwt_prefer_refresh_tokens
tags: [auth, jwt, preferences]
project: my-app
created: 2026-04-26T10:00:00Z
updated: 2026-04-26T15:30:00Z
type: preference
---
# Auth: Prefer Refresh Tokens
User prefers short-lived access tokens (15min) with long-lived refresh tokens (30d).
Always implement token rotation on refresh.
Naming Convention
Format: <most_important>_<less_important>_<lesser>
Examples:
auth_jwt_prefer_refresh_tokensdb_postgres_use_connection_poolingstyle_typescript_strict_mode_always
Configurables
Memory has no configuration file. Storage paths are fixed:
~/.unipi/memory/ # UniPi memory root (legacy + markdown tier)
├── .mempalace-install # Cached MemPalace venv detection
├── .mempalace-migrated # Versioned migration verification state
├── global/
│ ├── memory.db # Global vector DB (SQLite fallback)
│ └── *.md # Global memory files
└── <project_name>/
├── memory.db # Project vector DB (SQLite fallback)
└── *.md # Project memory files
~/.mempalace/palace/ # MemPalace palace (primary backend)
MemPalace backend
On first load, the memory package:
- Detects MemPalace; if missing and
uvis available, runsuv tool install mempalaceonce (caches the venv python path in~/.unipi/memory/.mempalace-install). - Pings the bridge to confirm the palace is usable.
- Fingerprints the durable SQLite and markdown sources. If they differ from
the verified state in
~/.unipi/memory/.mempalace-migrated, performs an idempotent read-only migration into MemPalace drawers. Unchanged drawers are skipped, new or changed memories are upserted, and the versioned state is written only after every discovered record is verified in MemPalace. Failed or partial migrations remain unmarked and retry on a later session. Legacy files are never deleted or mutated.
Each memory operation invokes the packaged Python bridge
(bridge/mempalace_bridge.py) once via spawnSync (~0.5s per call). Both the
standalone memory package and the all-in-one umbrella tarball ship and resolve
this bridge. The
first MemPalace use on a machine also downloads the default ONNX embedding
model (~80MB, cached at ~/.cache/chroma/onnx_models/).
Forcing re-detection / re-migration
rm ~/.unipi/memory/.mempalace-install # re-detect MemPalace next session
rm ~/.unipi/memory/.mempalace-migrated # force a full verified migration pass next session
Backend override
Set UNIPI_MEMPALACE_BACKEND to force a MemPalace backend
(sqlite_exact, qdrant, pgvector, default chroma).
Embedder identity
MemPalace enforces embedder identity. If a palace was created with a
different embedding model, writes are rejected — the package then falls
back to SQLite for that session. Use mempalace palace set-embedder
intentionally to realign, then remove the install cache to re-detect.
Dependencies
mempalace(Python, auto-installed viauv) — primary backendbetter-sqlite3— SQLite fallback databasesqlite-vec— Vector search extension (fallback)js-yaml— YAML frontmatter parsing@pi-unipi/core— Shared utilities
License
MIT