Two commands. Your AI coding assistant gets outcome-based memory.
Works with Claude Code and OpenCode.
Why?
AI coding assistants forget everything between sessions. You explain your architecture, your preferences, your conventions — again. When they give bad advice, there's no mechanism to learn from it.
Roampal fixes this with outcome-based memory. Good advice gets promoted. Bad advice gets demoted. Your AI gets smarter every exchange, across every session.
Quick Start
pip install roampal
roampal init
Auto-detects installed tools. Restart your editor and start chatting.
Target a specific tool:
roampal init --claude-codeorroampal init --opencode
Platform Differences
The core loop is identical — both platforms inject context, capture exchanges, and score outcomes. The delivery mechanism differs:
| Claude Code | OpenCode | |
|---|---|---|
| Context injection | Hooks (stdout) | Plugin (system prompt) |
| Exchange capture | Stop hook | Plugin session.idle event |
| Scoring | Main LLM prompted via hooks | Main LLM prompted + independent sidecar fallback |
| Self-healing | Hooks auto-restart server on failure | Plugin auto-restarts server on failure |
Both platforms prompt the main LLM to score each exchange. OpenCode adds an independent sidecar call (using free models) as a fallback — sidecar only runs if the main LLM doesn't call score_response, so memories are never double-scored.
How It Works
When you type a message, Roampal automatically injects relevant context before your AI sees it:
You type:
fix the auth bug
Your AI sees:
═══ KNOWN CONTEXT ═══
• JWT refresh pattern fixed auth loop [id:patterns_a1b2] (3d, 90% proven, patterns)
• User prefers: never stage git changes [id:mb_c3d4] (memory_bank)
═══ END CONTEXT ═══
fix the auth bug
No manual calls. No workflow changes. It just works.
The Loop
- You type a message
- Roampal injects relevant context automatically (hooks in Claude Code, plugin in OpenCode)
- AI responds with full awareness of your history, preferences, and what worked before
- Outcome scored — good advice gets promoted, bad advice gets demoted
- Repeat — the system gets smarter every exchange
Five Memory Collections
| Collection | Purpose | Lifetime |
|---|---|---|
working | Current session context | 24h — promotes if useful, deleted otherwise |
history | Past conversations | 30 days, outcome-scored |
patterns | Proven solutions | Persistent while useful, promoted from history |
memory_bank | Identity, preferences, goals | Permanent |
books | Uploaded reference docs | Permanent |
Commands
roampal init # Auto-detect and configure installed tools
roampal init --claude-code # Configure Claude Code explicitly
roampal init --opencode # Configure OpenCode explicitly
roampal start # Start the HTTP server manually
roampal stop # Stop the HTTP server
roampal status # Check if server is running
roampal stats # View memory statistics
roampal doctor # Diagnose installation issues
roampal ingest <file> # Add documents to books collection
roampal books # List all ingested books
roampal remove <title> # Remove a book by title
MCP Tools
Your AI gets 7 memory tools:
| Tool | Description |
|---|---|
get_context_insights | Quick topic lookup — user profile + relevant memories |
search_memory | Deep search across all collections |
add_to_memory_bank | Store permanent facts (identity, preferences, goals) |
update_memory | Correct or update existing memories |
delete_memory | Remove outdated info |
score_response | Score previous exchange — prompted automatically by hooks |
record_response | Store key takeaways from significant exchanges |
What's Different?
| Without Roampal | With Roampal |
|---|---|
| Forgets everything between sessions | Remembers you, your preferences, what worked |
| You repeat context every time | Context injected automatically |
| No learning from mistakes | Outcomes tracked — bad advice gets demoted |
| No document memory | Ingest docs, searchable forever |
Benchmarks
Tested across 10 adversarial scenarios designed to trick similarity search (200 total tests):
| Condition | Top-1 Accuracy |
|---|---|
| RAG baseline (vector search only) | 10% |
| + Cross-encoder reranking | 20% |
| Full Roampal (outcomes + reranking) | 10% → 60% at maturity |
Outcome learning provides a 5x improvement over reranking alone (+50 pts vs +10 pts). Roampal vs plain vector DB: 40% vs 0% accuracy on adversarial queries (p=0.000135).
Full benchmark data: dev/benchmarks/results/
How Roampal Compares
| Feature | Roampal Core | .cursorrules / CLAUDE.md | Mem0 |
|---|---|---|---|
| Learns from outcomes | Yes — bad advice demoted, good advice promoted | No | No |
| Zero-config context injection | Yes — hooks inject automatically | Manual file editing | API calls required |
| Works across sessions | Yes — 5 memory collections with promotion | Per-project static files | Yes |
| Fully local / private | Yes — all data on your machine | Yes | Cloud or self-hosted |
| Open source | Apache 2.0 | N/A | Apache 2.0 |
Architecture
┌─────────────────────────────────────────────────────────┐
│ pip install roampal && roampal init │
│ Claude Code: hooks + MCP → ~/.claude/ │
│ OpenCode: plugin + MCP → ~/.config/opencode/ │
└─────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ HTTP Hook Server (port 27182) │
│ Auto-started on first use, self-heals on failure │
│ Manual control: roampal start / roampal stop │
└─────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ User types message │
│ → Hook/plugin calls HTTP server for context │
│ → Server returns context + scoring prompt │
│ → AI sees context, scores previous, responds │
│ → Exchange stored for next turn │
└─────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ Single-Writer Backend │
│ FastAPI → UnifiedMemorySystem → ChromaDB │
│ All clients share one server, isolated by session │
└─────────────────────────────────────────────────────────┘
See ARCHITECTURE.md for full technical details.
Requirements
- Python 3.10+
- One of: Claude Code or OpenCode
- Platforms: Windows, macOS, Linux (primarily developed and tested on Windows)
Troubleshooting
Hooks not working? (Claude Code)
- Restart Claude Code (hooks load on startup)
- Check HTTP server:
curl http://127.0.0.1:27182/api/health
MCP not connecting? (Claude Code)
- Verify
~/.claude.jsonhas theroampal-coreMCP entry with correct Python path - Check Claude Code output panel for MCP errors
Context not appearing? (OpenCode)
- Make sure you ran
roampal init --opencode - Check that the server auto-started:
curl http://127.0.0.1:27182/api/health - If not, start it manually:
roampal start
Server crashes and recovers?
This is expected. Roampal has self-healing — if the HTTP server stops responding, hooks automatically restart it and retry.
Still stuck? Ask your AI for help — it can read logs and debug Roampal issues directly.
Support
Roampal Core is completely free and open source.
- Support development: roampal.gumroad.com
- Feature ideas & feedback: Discord
- Bug reports: GitHub Issues