search_memoryLABSCO SUMMARY
Memory with a feedback loop attached, which is the difference between a store that gets better and one that just gets bigger.
Most memory servers write everything down and retrieve by similarity; here each exchange gets an outcome score, and that score decides whether a memory is promoted to a proven pattern or allowed to expire. The injection happens ahead of your message through hooks or a plugin, so the loop runs without you calling a tool, and the whole thing stays on your machine on CPU.
What it is
A local memory server for Claude Code and OpenCode. Context is injected before the model sees your message, and each exchange is scored afterwards, so the store improves rather than just grows.
What you get
- Relevant memories injected automatically ahead of your message — no tool call, no change to how you work
- Five collections with different lifetimes: working context for the session, history kept 30 days and outcome-scored, patterns that persist while they keep proving useful, a permanent memory bank for identity, preferences and goals, and uploaded reference docs
- Promotion and demotion driven by what actually happened, so a solution that worked moves into patterns and a bad suggestion sinks
- Deep search across every collection, and tools to add permanent facts, correct an existing memory, delete one that has gone stale, or record the takeaway from a significant exchange
- Two scoring paths: on Claude Code the main model scores each exchange through a tool; on OpenCode an independent sidecar reviews it as a third party, which takes self-assessment out of the loop
- Retrieval built for precision — tags-first search with cross-encoder reranking — running entirely on CPU
- Named memory profiles, so separate bodies of memory can be kept apart
Requirements
Python 3.10+, and either Claude Code or OpenCode as the client. Installed from PyPI as roampal, then roampal init detects the tools you have and wires them up. Runs on Windows, macOS and Linux, on CPU only — no GPU — but wants roughly 800MB of RAM for the reranker, embeddings and ChromaDB, and about 500MB of disk for models fetched on first use. Scoring on OpenCode stays off until you configure a model with roampal sidecar setup; a small local model is enough.
Setup effort
One command — pip install roampal
USE CASES
Not re-explaining your preferences every session
Store the standing facts — how you want commits handled, what you never want touched — in the permanent memory bank.
Getting back the fix that worked last time
Relevant patterns are injected before the model answers; search directly when you want to go looking.
Correcting something the assistant learned wrong
Update the memory in place, or delete it when it no longer applies.
Keeping the good advice and losing the bad
Let the exchange be scored so what worked is promoted and what failed is demoted.
Keeping two projects from bleeding into each other
Use named memory profiles so each body of memory stays separate.
6 tools
Listed in project docs. Your client may show a different list.
add_to_memory_bankupdate_memorydelete_memoryscore_memoriesrecord_responseBEFORE YOU INSTALL
What to know first
Tools you get
6 tools named in the project's documentation.
Requires
- pip on PATH
- Python 3.10+
INSTALLATION
Connect your client
Server setup
pip install roampalMCP Clients
Claude Code
roampal init --claude-codeOpenCode
roampal init --opencode