"use bun not npm", "be terse").
What gets stored
Four kinds:| Category | Example |
|---|---|
pref | ”use bun not npm”, “be terse” |
decision | ”switched to zustand — redux was too much boilerplate” |
gotcha | ”JWT expiry uses container clock, drifts in prod” |
context | ”legacy/ deletes next sprint — don’t touch” |
How recall works
Before each turn, SoulForge looks at your prompt and which files you’ve been editing, then injects up to 3 relevant memories silently. The agent sees them and adjusts. You don’t have to type/memory or remember what’s stored.
If nothing’s relevant, nothing’s injected — memory earns its prompt slot every turn or it doesn’t take one.
Browser — /memory
Type /memory to open the browser. Five tabs:
- All — every memory across project + global. Pin, soft-delete, or supersede per row.
- Hidden — soft-deleted entries, restorable forever.
- Cleanup — Quick (dupes + dead file refs) and Stale (low-signal candidates) for manual review.
- SIM — clusters of related memories.
- Settings — read & write scopes.
Scopes
Two databases:| Scope | Location | Use for |
|---|---|---|
| Project | .soulforge/memory.db | code-specific decisions, file-scoped gotchas |
| Global | ~/.soulforge/memory.db | cross-project preferences, your style |
Pinning
Pin a memory to keep it from being surfaced in cleanup suggestions and to lift its ranking in recall. Useful for non-obvious rules you want to keep close.Languages
Memory works in any script — English, CJK, Arabic, Cyrillic, mixed-script identifiers. Searches use a word index plus a character n-gram index together, so paraphrases and non-Latin queries both hit.Commands
| Command | Description |
|---|---|
/memory | Open the browser |

