import sessions
~/.claude/projects, scrubbed of secret-shaped strings, distilled by your
configured LLM into facts, preferences, episodes, and procedures, and saved through the same
belief pipeline as everything else. Duplicates merge, restatements version, and
contradictions become reviewable conflicts. See Session distillation
for how that pipeline works end to end.
Every imported memory keeps provenance: the session file, the line range, and a short
excerpt, so a recall can always be traced back to the conversation it came from.
Start with --dry-run. It lists what would be processed and makes zero LLM calls.
Bounds and idempotency
Import is bounded by default: sessions modified in the last 14 days, newest first, at most 20. Anything skipped is announced, never silent. Widen with flags when you want more history:What it costs
The run ends with a cost line: extraction calls (one per transcript chunk), dedup classifier calls (one per saved memory that had similar neighbors), and embedding calls (one batch per session). Nothing runs unattended; import spends only while you watch it.import agent-memory
memory/ folder, and GitHub Copilot keeps topic files whose
## sections are individual memories. Those files are distilled already, so this import
needs no LLM extraction: each memory is redacted, embedded, and saved through the same
belief pipeline (duplicates merge, restatements version, contradictions become reviewable
conflicts), with provenance back to the file and line range.
Re-running is free: a content-hash ledger skips unchanged memories before any provider
call. The import is read-only on the agents’ folders; memloom never writes into them.
This is an import, not a sync: an edited agent file re-imports and versions the memory,
but deleting a file from an agent’s folder does not delete the memory here. memloom keeps
what it learned; remove memories from the viewer or CLI if you want them gone.
Automatic capture
connect makes capture continuous: a session-end hook is added to your Claude Code
settings, and each finished session is distilled by the daemon in the background, using
the exact same pipeline as import. The hook is a thin notifier that hands the daemon a
path and exits in milliseconds; if the daemon is down when a session ends, the next daemon
start sweeps the gap using the ledger, so nothing is lost.
Capture scope is an allowlist and it is empty by default: nothing is captured until you
name projects with --project (repeatable) or opt into --all. That is deliberate. The
hook fires for every project on your machine, including client work and repositories whose
code should never reach an LLM provider.
Guarantees around the settings edit: it merges with your existing hooks (never replaces),
a one-time backup is written next to the file before the first edit, running connect
twice changes nothing, and memloom disconnect claude-code removes only memloom’s
entries. A settings file that does not parse is refused untouched.
Prompt-time recall
connect also installs a second hook: at every prompt you type in Claude Code, memloom
recalls the memories relevant to that prompt and injects them as context, so Claude uses
your memory without being told to search it. Recall only reads the store; the capture
allowlist gates what gets imported, not what gets recalled.
The hook is built to be invisible when it has nothing to add. It skips slash commands and
shell passthrough, injects nothing when no memory matches, and treats a stopped daemon, a
locked store, or a slow response as silence. It never blocks a prompt: a hard timeout caps
the added latency, and any failure exits cleanly with no output.
Skip it with --no-recall (which also removes the hook if a previous connect installed
it), or remove both hooks with memloom disconnect claude-code. memloom status shows
which hooks are installed. If you connected before 0.5.0, run connect again to add the
recall hook.
Unattended capture runs against a daily distillation budget so it can never silently burn
credits: when the budget is spent, capture pauses and memloom status says so loudly.
status also shows whether the hook is installed, when it last fired, and whether the
last capture failed (a provider outage, a missing API key), so a dead hook is always
visible, never silent.
Privacy notes
Transcripts never leave your machine except as redacted chunks sent to the LLM provider you configured. Redaction is pattern-based (API key shapes, bearer tokens, credentialed URLs) and best-effort by design; review with--dry-run and the viewer if your sessions
handle sensitive material. Subagent transcripts and compaction summaries are excluded, and
import refuses to run in offline mode rather than degrade silently: distillation needs an
LLM, so OPENROUTER_API_KEY must be set.