LightMem (lmem) Python SDK
Ultra-Fast Local AI Agent Persistent Memory Engine with Neural Extractive QA, Multimodal BLOB Vault & Knowledge Graph.
LightMem combines SQLite WAL + FTS5 BM25 with lazy-initialized ONNX vector search (fastembed), local ONNX Extractive QA (minilm-squad2 / tinyroberta-squad2) & swappable Ollama rerankers (ollama:<model>), immutable SHA-256-verified multimodal BLOB attachments (images, audio, video, documents), Obsidian-grade [[wikilinks]] & multi-hop knowledge graph traversal, nearest-neighbor conflict merging, and temporal point-in-time (as_of) & single-day (date) queries — with zero Python dependencies.
⚡ Quickstart
Installation
pip install lmem
Python SDK Usage
from lmem import LightMem
# Initialize vault (defaults to ~/.lightmem/memories.db or custom db_path)
lm = LightMem()
# 1. Store a memory (auto-infers across 14 categories if omitted)
memory = lm.remember(
"PostgreSQL primary runs on port 5432 with WAL archiving enabled",
category="fact",
title="PostgreSQL Primary Config",
tags=["postgres", "database", "production"],
confidence=0.95,
)
print("Stored memory:", memory.id)
# 2. Store Multimodal Attachments (images, audio, 4K video, PDFs in isolated 0600 SQLite BLOB vault)
diagram = lm.remember(
"API Gateway routes to [[PostgreSQL Primary Config]]",
files=["./ingress-architecture.png"],
tags=["architecture", "gateway"],
extract=False, # True to invoke configured LLM for visual/document summary extraction
)
# 3. Hybrid Search (FTS5 BM25 + Vector Cosine RRF + Graph Multi-Hop & Media Filter)
results = lm.recall("postgres port", limit=5, multi_hop=True)
for r in results:
print(f"[{r.score:.2f}] {r.memory.title}: {r.memory.content}")
# Materialize verified attachment file paths directly on disk
image_paths = lm.recall("gateway", media="image", limit=1, path=True)
inspected_paths = lm.inspect(diagram.id, path=True)
# 4. Neural Extractive QA (exact fact extraction via ONNX SQuAD-2.0 or Ollama)
answer = lm.answer("what port does postgresql use?")
print("Extracted answer:", answer.answer) # "5432"
print("Confidence:", answer.confidence)
print("Reranker:", answer.reranker_used)
# 5. Conversational Observation & Atomic Fact Extraction
candidates = lm.observe(
"User: We switched Redis to port 6380.\nAssistant: Updated!",
dry_run=True,
)
for c in candidates:
print(f"[{c.category}] {c.title}: {c.content}")
# 6. Intentional Knowledge Graph Linking & Multi-Hop Traversal
lm.link(diagram.id, memory.id, relation="depends_on", weight=1.0)
related = lm.related(memory.id, hops=2)
for rel in related:
print(f"Hop {rel.distance}: {rel.memory.title} via {' -> '.join(rel.relation_path)}")
# 7. Conflict Detection, Deduplication & Vault Telemetry
conflicts = lm.conflicts(min_similarity=0.80)
stats = lm.stats()
print(f"Active memories: {stats.active_memories} | Vectors: {stats.vector_count}")
# 8. Deploy Skill to AI Agents (Antigravity, Codex, Hermes, Cursor, Claude)
lm.connect("antigravity")
🧩 Python SDK Reference (LightMem)
| Method | Description |
|---|---|
lm.remember(content, ..., files=None, extract=False, supersede=False) |
Store a memory and optional binary attachments (files=[...]), auto-linking [[wikilinks]]. |
lm.recall(query, limit=5, category=None, media=None, multi_hop=False, path=False) |
Hybrid BM25 + Cosine RRF search; returns List[ScoredMemory] or List[str] file paths when path=True. |
lm.answer(question, category=None, reranker=None, as_of=None, date=None) |
Extractive QA via local ONNX (minilm-squad2, tinyroberta-squad2), ollama:<model>, or top1. |
lm.observe(input_text_or_path, yes=False, dry_run=False, reranker=None) |
Extract atomic candidate memories from dialogue transcripts or notes. |
lm.inspect(memory_id, *extra_ids, save_to=None, path=False) |
Inspect full record + graph links + attachments, or materialize verified file paths (path=True). |
lm.list(page=None, limit=20, category=None, media=None, path=False) |
Paginated chronological listing (PaginatedList or List[str] paths when path=True). |
lm.link(source, target, relation="relates_to", weight=1.0) |
Create or update a directional knowledge graph edge. |
lm.unlink(source, target, relation=None) |
Remove a directional edge between two memories. |
lm.related(memory_id, hops=2) |
Breadth-first multi-hop traversal with hop-decay scoring. |
lm.graph(focus=None, hops=2) |
Export full or neighborhood knowledge graph {nodes, edges}. |
lm.conflicts(yes=False, min_similarity=0.78, reranker=None) |
Detect (and optionally auto-merge with yes=True) conflicting or near-duplicate memories. |
lm.deduplicate() |
Smart-merge exact duplicate memories. |
lm.forget(memory_id, hard=False) |
Soft-expire (hard=False) or permanently purge (hard=True, cascading BLOBs & cached files). |
lm.stats() |
Vault telemetry (StorageStats: active/expired counts, vector count, categories, DB size). |
lm.connect(platform=None, workspace=False, path=None) |
Install SKILL.md to AI coding agents (antigravity, codex, hermes, cursor, claude, all). |
💻 CLI Commands (Included)
The pip install lmem package also installs the standalone lmem (and lightmem) CLI:
lmem remember "Redis cache runs on port 6379" -t fact
lmem remember "Itachi 4K wallpaper" -f ./itachi-4k.mp4 --extract
lmem observe conversation.txt --yes
lmem recall "redis port" -l 5 --multi-hop
lmem recall "itachi" -m video -l 1 --path
lmem inspect <ID> --paths
lmem answer "what is my pan card no"
lmem link <SRC_ID> <DST_ID> -r "depends_on"
lmem related <ID> --hops 2
lmem graph --focus <ID> --hops 2
lmem conflicts
lmem connect all
📄 License
MIT License. Created by Pathi Krishna Kanth.
Identity-aware connections (v0.4.0)
Register the person, the logical agent, and a named harness connection once:
lmem identity user-add alice --name "Alice"
lmem identity agent-add coding --user alice
lmem identity connection-add agy --user alice --agent coding --harness antigravity --project myapp --memory-scope project
lmem identity connection-add codex --user alice --agent coding --harness codex --project myapp --memory-scope project
lmem --connection agy --session chat-123 remember "Decision: use SQLite WAL" -t decision
lmem --connection codex recall "database decision"
lmem --connection codex context --json
lmem --connection codex --scope agent remember "Current debugging checkpoint"
lmem --connection agy connect
lmem --connection agy connect --mcp
Connections for the same user/project open the same persistent project vault across harnesses. user scope follows the user; agent scope belongs to the user/agent and, when provided, project. Each command uses one scope. Switch with --scope; recall does not blend scopes. LIGHTMEM_CONNECTION can select a default connection. Do not combine a connection with --db, LIGHTMEM_DB, or --global.
Register custom harnesses and deploy their bound instructions:
lmem identity harness-add my-harness --path /absolute/path/to/skills
lmem identity connection-add custom --user alice --agent coding --harness my-harness --memory-scope user
lmem --connection custom connect
lmem identity list connections --json
lmem identity list users --json
Custom MCP clients can launch lmem --connection custom mcp; automatic MCP configuration supports Antigravity, Claude, and Cursor. The MCP context tool shows the active binding. Connection IDs, user IDs, agent IDs, project IDs, and optional session IDs accept 1–128 ASCII letters, digits, underscores, or hyphens.
The registry is stored in ~/.lightmem/identities.db and scoped vaults under ~/.lightmem/vaults/ (or LIGHTMEM_CONFIG_DIR). Scope keys use hashes to avoid filesystem case collisions. All memory operations, including graph traversal, deduplication, conflicts, attachments, and export, operate on the selected vault. New memories expose optional context source metadata in JSON; exact duplicates retain their original source. Backups preserve source metadata even when deliberately imported into another vault.
Existing commands and databases continue to work. Schema v5 adds optional source context; existing memories are not attributed to a user automatically. To copy existing memories into a new scope, explicitly export the old database and import into the selected connection. These are local organizational identities, not authentication. Connections do not automatically capture chats; agents must invoke remember or observe.
from lmem import LightMem
admin = LightMem()
admin.register_user("alice")
admin.register_agent("coding", "alice")
admin.register_connection("agy", "alice", "coding", "antigravity", project_id="myapp", scope="project")
memory = LightMem(connection="agy", session="chat-123")
saved = memory.remember("Decision: use SQLite WAL", category="decision")
print(saved.context)
print(memory.context())
Python also exposes register_harness, identities, connection_info, and connect(mcp=True). Use different connection IDs for multiple harnesses while retaining the same user/project to share decisions.
Metadata
Release files for lmem 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| lmem-0.4.0.tar.gz | 13.0 kB | With provenance | Details |
Built distributions (wheels)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| lmem-0.4.0-py3-none-win_amd64.whl | Python 3 | none | Windows x86-64 | Details |
| lmem-0.4.0-py3-none-manylinux2014_x86_64.whl | Python 3 | none | Linux glibc 2.17+ x86-64 | Details |
| lmem-0.4.0-py3-none-macosx_11_0_arm64.whl | Python 3 | none | macOS 11.0+ ARM64 | Details |
Total release size: 38.5 MB
Release files / lmem-0.4.0.tar.gz
| Download URL | lmem-0.4.0.tar.gz |
|---|---|
| Size | 13.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
da4e4ec6ab2df88739864c1ff380f26c74d2a10c15c364804a7ea17963f0985b
|
|
BLAKE2b-256 checksum How to use checksums |
b79f49810c5cbefa444a7866b5331b5d72415348c43a7334d52f06aae37e3011
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.
Transparency logRelease files / lmem-0.4.0-py3-none-win_amd64.whl
| Download URL | lmem-0.4.0-py3-none-win_amd64.whl |
|---|---|
| Size | 12.2 MB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
a3a0372a95967a812c20cacd66339a139b1d54d24ce3197eb8fe87f6fdb44962
|
|
BLAKE2b-256 checksum How to use checksums |
5bf9b6684f3d157d58f99d711fd30da2155b87336cb418b04bc1a077e35f8b19
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.
Transparency logRelease files / lmem-0.4.0-py3-none-manylinux2014_x86_64.whl
| Download URL | lmem-0.4.0-py3-none-manylinux2014_x86_64.whl |
|---|---|
| Size | 14.4 MB |
| Tags | Linux glibc 2.17+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
7680a378feace237280708c9e9ce9f4e88d358fdd2f2de1620a544c7d86862e0
|
|
BLAKE2b-256 checksum How to use checksums |
7d36ae5aced5a34a9bfabfbd99bfd3de2d4959c9f670c1661f33b094e6e7c758
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.
Transparency logRelease files / lmem-0.4.0-py3-none-macosx_11_0_arm64.whl
| Download URL | lmem-0.4.0-py3-none-macosx_11_0_arm64.whl |
|---|---|
| Size | 11.9 MB |
| Tags | Python 3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
87e0b87e939b22e2bd6073bdd5da68243881a9975c9117dad6dbcadd3abbc152
|
|
BLAKE2b-256 checksum How to use checksums |
738743d9ce7480aa1a7982969f6a565e1091bda56f5d47ca4515a910df0e0b5a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.
Transparency logSecurity for lmem 0.4.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 4 files in this release have been uploaded with provenance metadata.
Attestation for lmem-0.4.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.