| name | ralph-memories |
| description | Manage persistent memories. Use when: Storing or retrieving patterns, decisions, and fixes across sessions. Not for: Temporary scratchpad or session-specific state. |
Ralph Memories
Persistent learning system for accumulated wisdom across sessions. Storage: .agent/memories.md.
Memory Injection Configuration
Configure how memories are automatically injected into Ralph's context in ralph.yml:
memories:
enabled: true
inject: auto
budget: 2000
filter:
types: []
tags: []
recent: 0
Injection Modes
| Mode | Behavior | Use Case |
|---|
auto | Ralph prepends relevant memories at start of each iteration | Most workflows - automatic context |
manual | Agent must explicitly run ralph memory search | When you want selective memory access |
none | Memories disabled entirely | Testing or memory-free workflows |
Token Budget
| Setting | Effect |
|---|
0 | Unlimited memories injected (risky for large memory bases) |
1500-3000 | Balanced context (recommended) |
500-1000 | Minimal memory injection for token-constrained workflows |
Filter Configuration
memories:
inject: auto
budget: 1500
filter:
types: [pattern]
tags: [api, auth]
recent: 30
Prime command equivalents:
ralph tools memory prime -t pattern --tags api,auth --recent 30 --budget 1500
ralph tools memory prime -t pattern,decision
ralph tools memory prime --budget 0
When to Search Memories
Search BEFORE starting work when:
- Entering unfamiliar code area →
ralph tools memory search "area-name"
- Encountering an error →
ralph tools memory search -t fix "error message"
- Making architectural decisions →
ralph tools memory search -t decision "topic"
- Something feels familiar → there might be a memory about it
Search strategies:
- Start broad, narrow with filters:
search "api" → search -t pattern --tags api
- Check fixes first for errors:
search -t fix "ECONNREFUSED"
- Review decisions before changing architecture:
search -t decision
- Use
--all flag to show unlimited results
Working directory option:
All ralph tools memory commands support --root <ROOT> to specify working directory (default: current directory).
When to Create Memories
Create a memory when:
- You discover how this codebase does things (pattern)
- You make or learn why an architectural choice was made (decision)
- You solve a problem that might recur (fix)
- You learn project-specific knowledge others need (context)
Do NOT create memories for:
- Session-specific state (use tasks instead)
- Obvious/universal practices
- Temporary workarounds
Memory Types
| Type | Flag | Use For |
|---|
| pattern | -t pattern | "Uses barrel exports", "API routes use kebab-case" |
| decision | -t decision | "Chose Postgres over SQLite for concurrent writes" |
| fix | -t fix | "ECONNREFUSED on :5432 means run docker-compose up" |
| context | -t context | "ralph-core is shared lib, ralph-cli is binary" |
Discover Available Tags
Before searching or adding, check what tags already exist:
ralph tools memory list
grep -o 'tags: [^|]*' .agent/memories.md | sort -u
Reuse existing tags for consistency. Common tag patterns:
- Component names:
api, auth, database, cli
- Concerns:
testing, performance, error-handling
- Tools:
docker, postgres, redis
Quick Reference
ralph tools memory add "content" -t pattern --tags tag1,tag2
ralph tools memory add "content" -t pattern --tags tag1,tag2 --format quiet
ralph tools memory search "query"
ralph tools memory search -t fix "error message"
ralph tools memory search --tags api,auth
ralph tools memory search --tags api,auth --all
ralph tools memory list
ralph tools memory list -t fix --last 10
ralph tools memory list --format json
ralph tools memory show mem-1737372000-a1b2
ralph tools memory delete mem-1737372000-a1b2
ralph tools memory prime --budget 2000
ralph tools memory prime --tags api,auth
ralph tools memory prime --recent 7
ralph tools memory prime -t pattern
ralph tools memory init --force
Output formats: --format {table,json,markdown,quiet}
table: Human-readable table format (default)
json: JSON format for programmatic access
markdown: Markdown format (for prime command)
quiet: ID-only output for scripting
Best Practices
- Be specific: "Uses barrel exports in each module" not "Has good patterns"
- Include why: "Chose X because Y" not just "Uses X"
- One concept per memory: Split complex learnings
- Tag consistently: Reuse existing tags when possible
Examples
ralph tools memory add "All API handlers return Result<Json<T>, AppError>" -t pattern --tags api,error-handling
ralph tools memory add "Chose JSONL over SQLite: simpler, git-friendly, append-only" -t decision --tags storage,architecture
ralph tools memory add "cargo test hangs: kill orphan postgres from previous run" -t fix --tags testing,postgres
ralph tools memory add "The /legacy folder is deprecated, use /v2 endpoints" -t context --tags api,migration