Automatic Capture
At session end, Claude Haiku extracts durable observations from the transcript — decisions, bug fixes, learnings, commands — and stores them in a local SQLite database.
Automatically captures decisions, bug fixes, and learnings from every session — and injects them back on the next one. No cloud. No config. Just memory.

npm install -g somtum
somtum init --all # installs hooks + MCP server in current projectThat's it. Every Claude Code session from here will be captured and remembered.
After a debugging session, Somtum extracts observations like these and stores them locally:
[
{
"kind": "bugfix",
"title": "JWT refresh loop — Unix timestamps are seconds, not ms",
"body": "Checked token.exp < Date.now() instead of token.exp < Date.now() / 1000."
},
{
"kind": "decision",
"title": "Use pnpm workspaces — npm hoisting breaks shared types",
"body": "Switched from npm because hoisting put shared type packages in the wrong scope."
}
]Next session, when you ask "why are we using pnpm?" Claude already knows. No re-explanation needed.
Run somtum doctor after install to verify your setup:
✓ config strategy=bm25, k=8
✓ db_open WAL mode, foreign_keys ON
✓ hooks_installed somtum hooks found in .claude/settings.json
✓ embeddings disabled (set retrieval.embeddings.enabled=true to enable)Hybrid strategy requires embeddings
If doctor reports strategy=hybrid but embeddings: disabled, somtum silently falls back to BM25 while paying hybrid overhead. Fix it with one command:
somtum config set retrieval.strategy bm25 # match what's actually runningOr enable full hybrid (requires ANTHROPIC_API_KEY):
somtum config set retrieval.embeddings.enabled trueSee Configuration → Retrieval strategy for details.
somtum stats shows whether memory is paying for itself:
| Metric | Good sign | What to check |
|---|---|---|
breakeven ≥ 1.5x | Saving more than you spend | Expected after ~20+ memories |
cache hits > 0 | Repeated queries are cached | Confirm cache.enabled = true |
retrieval calls accumulating | Memories being actively recalled | Check injection.enabled = true |
A fresh project (< 10 memories) will often show a net negative — this is normal and improves with use.