2026-02-12 20:02:51 +01:00
---
name: memory
2026-02-14 08:22:59 +01:00
description: "Persistent memory system for Opencode agents. SQLite-based hybrid search over Obsidian vault. Use when: (1) storing user preferences/decisions, (2) recalling past context, (3) searching knowledge base. Triggers: remember, recall, memory, store, preference."
2026-02-12 20:02:51 +01:00
compatibility: opencode
---
## Overview
2026-02-14 08:22:59 +01:00
opencode-memory is a SQLite-based hybrid memory system for Opencode agents. It indexes markdown files from your Obsidian vault (`~/CODEX/80-memory/` ) and session transcripts, providing fast hybrid search (vector + keyword BM25).
2026-02-12 20:02:51 +01:00
2026-02-14 08:22:59 +01:00
## Architecture
2026-02-12 20:02:51 +01:00
2026-02-14 08:22:59 +01:00
- **Source of truth**: Markdown files at `~/CODEX/80-memory/`
- **Derived index**: SQLite at `~/.local/share/opencode-memory/index.db`
- **Hybrid search**: FTS5 (BM25) + vec0 (vector similarity)
- **Embeddings**: OpenAI text-embedding-3-small (1536 dimensions)
2026-02-12 20:02:51 +01:00
2026-02-14 08:22:59 +01:00
## Available Tools
2026-02-12 20:02:51 +01:00
2026-02-14 08:22:59 +01:00
### memory_search
Hybrid search over all indexed content (vault + sessions).
2026-02-12 20:02:51 +01:00
```
2026-02-14 08:22:59 +01:00
memory_search(query, maxResults?, source?)
2026-02-12 20:02:51 +01:00
```
2026-02-14 08:22:59 +01:00
- `query` : Search query (natural language)
- `maxResults` : Max results (default 6)
- `source` : Filter by "memory", "sessions", or "all"
2026-02-12 20:02:51 +01:00
2026-02-14 08:22:59 +01:00
### memory_store
Store new memory as markdown file in vault.
2026-02-12 20:02:51 +01:00
```
2026-02-14 08:22:59 +01:00
memory_store(content, title?, category?)
2026-02-12 20:02:51 +01:00
```
2026-02-14 08:22:59 +01:00
- `content` : Memory content to store
- `title` : Optional title (slugified for filename)
- `category` : "preferences", "facts", "decisions", "entities", "other"
2026-02-12 20:02:51 +01:00
2026-02-14 08:22:59 +01:00
### memory_get
Read specific file/lines from vault.
2026-02-12 20:02:51 +01:00
2026-02-14 08:22:59 +01:00
```
memory_get(filePath, startLine?, endLine?)
2026-02-12 20:02:51 +01:00
```
2026-02-14 08:22:59 +01:00
## Auto-Behaviors
2026-02-12 20:02:51 +01:00
2026-02-14 08:22:59 +01:00
- **Auto-recall**: On session.created, relevant memories are searched and injected
- **Auto-capture**: On session.idle, preferences/decisions are extracted and stored
- **Token budget**: Max 2000 tokens injected to respect context limits
2026-02-12 20:02:51 +01:00
2026-02-14 08:22:59 +01:00
## Workflows
2026-02-12 20:02:51 +01:00
2026-02-14 08:22:59 +01:00
### Recall information
Before answering about past work, preferences, or decisions:
1. Call `memory_search` with relevant query
2. Use `memory_get` to retrieve full context if needed
2026-02-12 20:02:51 +01:00
2026-02-14 08:22:59 +01:00
### Store new information
When user expresses preference or decision:
1. Call `memory_store` with content and category
2026-02-12 20:02:51 +01:00
2026-02-14 08:22:59 +01:00
## Vault Structure
2026-02-12 20:02:51 +01:00
```
2026-02-14 08:22:59 +01:00
~/CODEX/80-memory/
├── preferences/ # User preferences
├── facts/ # Factual knowledge
├── decisions/ # Design decisions
├── entities/ # People, projects, concepts
└── other/ # Uncategorized memories
```