By janbjorge
Manages persistent AI-assistant memory for development teams: capture session knowledge, bootstrap memory from existing codebases, and perform maintenance with deduplication and conflict detection.
Periodic memory maintenance and cleanup. Finds duplicates, conflicts, stale conversations, and quality issues in the memory database. Proposes fixes for user approval — never auto-deletes or auto-modifies. Use when user says "clean up memories", "memory maintenance", "check memory health", or invokes /rekal-hygiene. Run monthly or when conflicts are piling up.
Bootstrap rekal memory for a project. Scans the codebase for architecture, conventions, dependencies, workflows, and config — then stores durable knowledge as properly typed, tagged, deduplicated memories. Use when starting rekal on a new project, or when user says "init rekal", "bootstrap memory", "populate rekal", "scan project". Trigger: /rekal-init.
End-of-session memory capture with deduplication. Extracts durable knowledge, checks for duplicates, stores or supersedes as appropriate. Use whenever a session wraps up, a task finishes, or the user says goodbye/thanks/done. Also use when significant preferences, decisions, or discoveries emerge mid-session. Make sure to trigger this skill proactively — err on the side of capturing.
Operational guide for rekal memory tools. Precise rules for when/how to call each tool, with exact parameters and decision trees. Use at session start, when onboarding to a rekal workspace, or when user asks "how do I use rekal", "what rekal tools", "help with memory". Trigger: /rekal-usage.
Modifies files
Hook triggers on file write and edit operations
Own this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimOwn this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimBased on adoption, maintenance, documentation, and repository signals. Not a security audit or endorsement.
Long-term memory for LLMs. One SQLite file, no cloud, no API keys.
rekal is an MCP server that gives AI coding agents persistent memory across sessions. Memories are stored locally in SQLite and retrieved with hybrid search (BM25 keywords + vector semantics + recency decay). Nothing leaves your machine.
Works with any MCP-capable agent: Claude Code, Codex CLI, OpenCode.
Session 1: "I prefer Ruff over Black" → memory_store(...)
Session 47: "Set up linting" → memory_search("formatting preferences")
← "User prefers Ruff over Black" (0.92)
Sets up Ruff without asking.
pip install rekal
# or
uv tool install rekal
Requires Python 3.11+. On first run, rekal creates ~/.rekal/memory.db.
Three steps: add the MCP server, install the plugin, and disable built-in memory.
1. Add the MCP server — gives Claude Code the memory tools:
claude mcp add rekal rekal
2. Install the plugin — teaches Claude Code when to use those tools, and prevents conflicts with built-in memory:
claude plugin marketplace add janbjorge/rekal
claude plugin install rekal-skills@rekal
3. Disable built-in auto memory — add "autoMemoryEnabled": false to ~/.claude/settings.json:
{
"autoMemoryEnabled": false
}
Why is this required? Claude Code's instruction priority is system prompt > CLAUDE.md > MCP server instructions. Built-in memory lives in the system prompt and always wins — without disabling it, the agent ignores rekal and writes to a flat file with no search, no deduplication, no ranking. The plugin's SessionStart hook replaces the context injection auto memory normally provides, so you don't lose anything.
What if I forget? The plugin's
block-memory-writeshook will catch and block MEMORY.md writes as a safety net, but the agent wastes turns hitting the block. Disabling auto memory is cleaner.Can the plugin do this automatically? No — Claude Code doesn't allow plugins to modify user settings. This manual step is the only way.
Hooks (automatic, no user action needed):
| Hook | Event | What it does |
|---|---|---|
| session-start | SessionStart | Reminds agent to call memory_build_context before doing anything |
| block-memory-writes | PreToolUse on Edit/Write | Blocks writes to MEMORY.md, redirects to rekal tools |
Skills (user-invocable):
| Skill | Trigger | What it does |
|---|---|---|
rekal-init | /rekal-init | Scans codebase and bootstraps rekal with project knowledge |
rekal-save | /rekal-save or auto on session end | Deduplicates and stores durable knowledge from the conversation |
rekal-usage | /rekal-usage | Teaches agents how to use rekal effectively |
rekal-hygiene | /rekal-hygiene | Finds conflicts, duplicates, stale data — proposes fixes |
One step. rekal is a standard MCP stdio server — no plugin system, no competing memory to disable (Codex memories are off by default).
Add to ~/.codex/config.toml (Codex MCP docs):
[mcp_servers.rekal]
command = "rekal"
# optional: scope all memories to a project automatically
[mcp_servers.rekal.env]
REKAL_PROJECT = "my-project"
Instruct the agent to call memory_build_context at session start. Add to your project's AGENTS.md:
Call memory_build_context with your current task before exploring the codebase.
If you have enabled Codex memories (
memories = truein~/.codex/config.toml): disable them to avoid competing memory instructions.[features] memories = false
One step. OpenCode has no built-in memory system — rekal plugs in cleanly with no conflicts.
Add to opencode.jsonc in your project root (OpenCode MCP docs):
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"rekal": {
"type": "local",
"command": ["rekal"],
"enabled": true,
"environment": {
"REKAL_PROJECT": "my-project"
}
}
}
}
OpenCode does not auto-read AGENTS.md — you must list instruction files explicitly (OpenCode config docs). Add to your opencode.jsonc:
{
"$schema": "https://opencode.ai/config.json",
"instructions": ["AGENTS.md"]
}
rekal exposes 21 MCP tools grouped into four categories.
Core — read and write memories:
npx claudepluginhub janbjorge/rekal --plugin rekal-skillsmemX: local-first semantic memory for coding agents. Native Claude Code lifecycle hooks.
Persistent memory for Claude Code. Capture work across sessions and recall relevant context.
Persistent memory for Claude Code - store decisions, patterns, and context across sessions
Multi-tiered memory and knowledge base with semantic search, auto-compaction, and built-in evaluation. Works across Claude Code, Copilot CLI, OpenCode, Cline, and Cursor.
Persistent memory for AI coding agents. Survives across sessions and compactions.
Persistent memory with reinforcement learning for coding agents. Powered by Turso.