Persistent two-tier memory for AI agents. Short-term markdown + long-term SQLite with semantic search.
Project description
AgentRecall
Persistent two-tier memory for AI agents. Battle-tested across 134 sessions with 10 agent roles.
Short-term (markdown files, always loaded) + Long-term (SQLite + OpenAI embeddings, searched on-demand).
Install
pip install agentrecall-memory
Zero required dependencies. SQLite is Python stdlib.
Optional semantic search:
pip install agentrecall-memory[embeddings]
export OPENAI_API_KEY="sk-..."
Quick Start
CLI
# Initialize
agentrecall init
# Store a memory (auto-dedup via cosine similarity >0.92)
agentrecall store coder gotchas "kamal app exec spawns new container, use docker exec"
agentrecall store social exhausted_stories "blue-green deploy order loss" --tags deploy,sqlite
# Search (semantic + keyword fallback)
agentrecall search coder gotchas "kamal file not found"
# List categories
agentrecall list coder
# Check health
agentrecall check --all
Python API
from agentrecall import MemoryStore, MemorySearch
# Store
store = MemoryStore()
store.store("coder", "gotchas", "kamal spawns new container", tags=["kamal", "docker"])
# Search
search = MemorySearch()
results = search.search("coder", "gotchas", "kamal file not found")
for text in results:
print(text)
# List categories
categories = store.list_categories("coder")
How It Works
Two-Tier Design
Short-term (memory/<role>.md) |
Long-term (SQLite + embeddings) |
|---|---|
| Active learnings, mistakes, feedback | Growing lists (exhausted topics, defect patterns) |
| Max 80 lines, pruned regularly | Unlimited entries, never pruned |
| Read in full at session start | Searched on-demand per query |
Semantic Dedup
Every store call embeds the text via OpenAI text-embedding-3-small and checks cosine similarity against all existing entries in the same role/category. Similarity > 0.92 blocks the store (raises DuplicateError).
Without an API key, falls back to exact text matching.
Search
- Embed the query
- Compute cosine similarity against all entries with embeddings
- Return entries above threshold (0.75), sorted by similarity
- If no embedding matches: keyword fallback (>=50% keyword match)
- No API key: keyword-only search
Graceful Degradation
Works fully offline without an OpenAI API key:
- Store: exact text dedup (case-insensitive)
- Search: keyword matching (>=50% of query words must appear)
Agent Skills
Copy skill/agent-recall/ into your project's skills directory for use with Claude Code, Codex, Cursor, Copilot, Cline, or Goose.
cp -r skill/agent-recall/ .claude/skills/agent-recall/
Configuration
Environment variables:
| Variable | Default | Description |
|---|---|---|
AGENT_RECALL_HOME |
~/.agentrecall |
Memory storage directory |
OPENAI_API_KEY |
(none) | OpenAI API key for embeddings |
UT_OPENAI_API_KEY |
(none) | Preferred over OPENAI_API_KEY |
CLI Reference
agentrecall store <role> <category> "text" [--tags t1,t2] [--db path]
agentrecall search <role> <category> "query" [--db path]
agentrecall list <role> [--db path]
agentrecall check [--fix] [--long-term] [--all] [--dir path] [--db path]
agentrecall init [--dir path]
agentrecall migrate [--dry-run] [--rebuild] [--dir path] [--db path]
Exit codes: 0 = success/found, 1 = not-found/validation-fail, 2 = input error.
Migration from JSONL
If you have existing JSONL memory files:
agentrecall migrate --dir /path/to/memory/
agentrecall migrate --rebuild # Re-embed entries missing embeddings
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file agentrecall_memory-0.1.1.tar.gz.
File metadata
- Download URL: agentrecall_memory-0.1.1.tar.gz
- Upload date:
- Size: 23.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
04402b1c45d04588a3b5989e58187971d86eb41ac9134668aaa3403af711e1c6
|
|
| MD5 |
d0fa5de71a9449cd418f00a6ab5f4143
|
|
| BLAKE2b-256 |
a077f7128cbedf4359c76efc295a66a251fc1f4c5ba545a17136e8fb74e32076
|
File details
Details for the file agentrecall_memory-0.1.1-py3-none-any.whl.
File metadata
- Download URL: agentrecall_memory-0.1.1-py3-none-any.whl
- Upload date:
- Size: 19.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d00c8a8e7772564f36344c359a30e0a54b0c38c84ec419fd12a1423cb9a7d8a1
|
|
| MD5 |
a01108dccabafc2c5b3db5e768597012
|
|
| BLAKE2b-256 |
6118a680322a8e251187dad70b04a6e280307da85b11ed1919c83b4cded69baf
|