Human-like cognitive memory for AI agents — emotion-gated recall with adaptive forgetting
Project description
Cognitive Memory
Human-like cognitive memory for AI agents — emotion-gated recall with adaptive forgetting.
Unlike traditional vector databases that treat all memories equally, Cognitive Memory models how humans actually remember: emotionally significant experiences persist longer, while routine information naturally fades. This makes AI agents feel more natural and context-aware.
Key Features
- Emotion-gated recall: Arousal scores modulate memory persistence
- Adaptive forgetting: High-arousal memories decay slower (configurable half-life)
- Adaptive search gate: Skips trivial queries (greetings, acknowledgments)
- FailOpen design: Falls back to keyword search when embeddings are unavailable
- Zero required dependencies: Core uses only Python stdlib (sqlite3, urllib)
- Pluggable embeddings: Ollama (built-in), OpenAI, or any custom provider
Why Cognitive Memory?
Traditional RAG and vector databases retrieve memories by semantic similarity alone. Every memory is treated equally — a casual greeting and a critical business decision have the same weight. This leads to noisy, context-poor recall that makes AI agents feel mechanical.
Cognitive Memory changes this by modeling three aspects of human cognition:
1. Emotion-Gated Recall
Each memory entry carries an arousal score (0.0–1.0) that reflects emotional intensity — surprise, insight, conflict, determination. High-arousal memories are weighted more heavily in search results.
| Query | Traditional Vector DB | Cognitive Memory |
|---|---|---|
| "past pricing decisions" | Returns all mentions of "pricing" ranked by text similarity | Prioritizes the heated debate where pricing strategy was reversed (arousal: 0.9) over routine price update logs (arousal: 0.2) |
What triggers high arousal? Conversations with emotional or cognitive significance:
| Conversation | Arousal | Why it matters |
|---|---|---|
| "Wait, that assumption is wrong!" | 0.9 | Direction change — a premise collapsed |
| "I see, so that's how it works!" | 0.8 | Aha moment — cognitive breakthrough |
| "Let's stop this approach. Because..." | 0.7 | Rejection decision — a turning point |
| "This is the third time this topic came up" | 0.7 | Pattern recognition — metacognition |
| "Phase 1 complete" | 0.6 | Milestone — phase transition |
| "We need to investigate..." | 0.4 | Open question emerged |
These are remembered. Meanwhile, greetings ("hello"), acknowledgments ("ok"), and navigation ("let's move on") score near 0 and are skipped entirely by the adaptive search gate.
2. Adaptive Forgetting
Memories decay over time — but not uniformly. The decay half-life adapts to arousal:
half_life = base_half_life * (1 + arousal)
- A routine status update (arousal: 0.2) has a half-life of 72 days and fades quickly
- A critical pivot decision (arousal: 0.9) has a half-life of 114 days and persists far longer
This means your agent naturally "forgets" noise while retaining the moments that matter — just like human memory.
3. Adaptive Search Gate
Not every user message needs memory retrieval. Greetings ("hello"), acknowledgments ("ok"), and trivial messages are automatically detected and skipped, saving unnecessary embedding API calls and reducing noise in results.
The Result
| Aspect | Without Cognitive Memory | With Cognitive Memory |
|---|---|---|
| Recall quality | All memories ranked equally by text similarity | Important memories surface first, noise fades |
| Over time | Old memories never decay, search gets noisier | Natural forgetting keeps results relevant |
| Agent personality | Generic, robotic responses | Remembers what mattered, feels more human |
| Wasted searches | Every message triggers vector search | Trivial messages are skipped automatically |
Install
pip install cogmem-agent
Embedding Setup (recommended)
Cognitive Memory uses Ollama for local embeddings. Without it, the library falls back to keyword search only.
# 1. Install Ollama (macOS)
brew install ollama
# 2. Start the server
ollama serve
# 3. Download the embedding model (~2.2 GB)
ollama pull zylonai/multilingual-e5-large
Other platforms: see ollama.com/download
You can also use OpenAI or any custom embedding provider — see Embedding Providers.
With vs Without Ollama
Cognitive Memory works in two modes depending on whether an embedding provider is available:
With Ollama, search upgrades from exact keyword matching to semantic understanding. All core Cognitive Memory features become available: related concept discovery, cross-lingual search, typo tolerance, emotion-based ranking, and adaptive forgetting. It runs entirely locally with no additional cost or privacy risk — just ~2.2 GB of disk space.
| Without Ollama (keyword mode) | With Ollama (semantic mode) | |
|---|---|---|
| Search method | Exact keyword matching (grep) | Vector similarity + emotion scoring |
| "pricing strategy" | Matches only entries containing the exact words "pricing" and "strategy" | Also finds entries about "LTV:CAC optimization", "revenue model", "cost structure" |
| Cross-lingual | Japanese query only matches Japanese text | "価格戦略" finds both Japanese and English entries about pricing |
| Typos / synonyms | "competetor analysis" returns nothing | Understands intent, returns competitor-related entries |
| Scoring | Binary match (found or not) | (0.7 * cosine_sim + 0.3 * arousal) * time_decay — nuanced ranking |
| Adaptive forgetting | Not available (all matches are equal) | Old low-arousal entries naturally fade from results |
| Latency | < 1ms | ~15ms (local, no network roundtrip) |
| Privacy | Local | Local — no data leaves your machine |
| Cost | Free | Free (Ollama is open-source) |
| Disk usage | 0 | ~2.2 GB (model weight) |
Recommendation: Install Ollama to unlock the full cognitive memory experience. The keyword fallback is designed as a safety net, not as the primary mode of operation.
Quick Start
CLI
cogmem init # Initialize project
cogmem index # Build/update index
cogmem search "past decisions" # Search memories
cogmem status # Show statistics
Python API
from cognitive_memory import MemoryStore, CogMemConfig
config = CogMemConfig.from_toml("cogmem.toml")
with MemoryStore(config) as store:
store.index_dir()
result = store.search("past competition analysis")
for r in result.results:
print(f"{r.date} [{r.score:.2f}] {r.content[:80]}")
Convenience API
from cognitive_memory import search
result = search("past decisions") # Auto-finds cogmem.toml
Scoring Formula
score = (0.7 * cosine_sim + 0.3 * arousal) * time_decay
Where time_decay uses an adaptive half-life:
half_life = base_half_life * (1 + arousal)
High-arousal memories (insights, conflicts, surprises) decay slower — just like human memory.
Configuration
cogmem.toml:
[cogmem]
logs_dir = "memory/logs"
db_path = "memory/vectors.db"
[cogmem.scoring]
sim_weight = 0.7
arousal_weight = 0.3
base_half_life = 60.0
decay_floor = 0.3
[cogmem.embedding]
provider = "ollama"
model = "zylonai/multilingual-e5-large"
url = "http://localhost:11434/api/embed"
timeout = 10
Custom Embedding Provider
class MyEmbedder:
def embed(self, text: str) -> list[float] | None: ...
def embed_batch(self, texts: list[str]) -> list[list[float]] | None: ...
store = MemoryStore(config, embedder=MyEmbedder())
Documentation
References
Papers
- NFD: Nurture-First Development — Architectural framework for AI agent personality development through experiential layers and crystallization
- A-MEM: Agentic Memory for LLM Agents — Atomic note-based memory structuring for autonomous agents
Projects
- memory-lancedb-pro — Adaptive gate and time decay pipeline design reference
- memU — Experiential layer implementation reference
- A-mem — Atomic notes implementation reference
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 cogmem_agent-0.2.0.tar.gz.
File metadata
- Download URL: cogmem_agent-0.2.0.tar.gz
- Upload date:
- Size: 20.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b50ce9d9c936368b50b90cdafa50b06733f46246689c322646e199e89685fcdb
|
|
| MD5 |
be7980cfffc80b625796b41f5196a6e0
|
|
| BLAKE2b-256 |
38b6ba56bdefa16e11ef0dceb7aba8892a523bae50f5ce2fb2f88fff81bd7666
|
File details
Details for the file cogmem_agent-0.2.0-py3-none-any.whl.
File metadata
- Download URL: cogmem_agent-0.2.0-py3-none-any.whl
- Upload date:
- Size: 29.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e01fa3d56cacb2421114a8b7f42634e95e4a3c470d3370365c7c343413c71ec0
|
|
| MD5 |
1f1dd691ab643d9ba653d8fd224cc4d0
|
|
| BLAKE2b-256 |
723df2d7c42e10f970e7efa23d3b091898d72fd00c1e35e6475e6748076a2e6d
|