-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
enhancementNew feature or requestNew feature or request
Description
Context
Steps 1-4 are complete (types, config, providers, tools, runtime). The agent can think and act but forgets everything when it stops. Step 5 adds persistent memory.
Scope
SQLite schema + migrations
- Sessions table (id, name, created_at, updated_at, archived)
- Conversation events table (session_id, role, content, tool_calls, created_at)
- Memory chunks table (id, content, source, tags, embedding blob, created_at)
- FTS5 virtual table on chunks
- Session state table (summary, summary_epoch, scratchpad)
- Schema version tracking
Embedding backends
EmbeddingBackendinterface implementation- OpenAI embeddings (
text-embedding-3-small) - Ollama embeddings (local, free —
nomic-embed-text) - Configured via
memory.embedding_backendin config
Hybrid retrieval pipeline
- Vector search via sqlite-vec (cosine similarity)
- FTS5 search (BM25 scoring)
- Normalize scores (min-max within each result set)
- Weighted merge (configurable
vector_weight+fts_weight) - Return top_k results
Rolling summarization
- Detect when context budget is approaching limit (chars/4 estimate already in runtime)
- Summarize unsummarized messages since last epoch
- Call provider with summarization prompt
- Update session state with new summary + epoch
- Replace old messages with summary in context
Memory tools
memory_search(ReadOnly) — search persistent memorymemory_save(SideEffecting) — save information to memory
Conversation persistence
- Store conversation events as they happen
- Load conversation history when resuming a session
- Session create/get/list/update/archive via
SessionStoreinterface
Scratchpad
- Per-session key-value scratchpad for agent working notes
- Persisted in session_state table
Interfaces already defined
internal/types/memory.go—Memory,MemoryRetrieval,EmbeddingBackendinternal/types/session.go—SessionStore,SessionRecord
Files to create
internal/memory/
├── sqlite.go # SQLiteMemory implementing MemoryRetrieval
├── schema.go # DDL + migrations
├── embedding_openai.go
├── embedding_ollama.go
├── hybrid.go # Hybrid retrieval pipeline
├── summarizer.go # Rolling summarization
└── memory_test.go
internal/tool/
├── memory_search.go # memory_search tool
└── memory_save.go # memory_save tool
Dependencies
modernc.org/sqlite(pure Go SQLite)github.com/nicholasgasior/govecor similar for sqlite-vec
Not included
- Multi-user isolation
- Audit logging
- Cost tracking per memory operation
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request