Continuum
The thread that runs through every session.
Continuum is persistent memory for Claude Code. Your AI assistant
remembers who you are, what you've decided, and the work you've done —
across sessions, across compactions, across machines.
No embeddings. No LLM compression step. No MCP server. No workers.
Just SQLite (FTS5 + trigram + Sørensen-Dice), two markdown files,
a tiny CLI, and one Claude Code plugin.
past ─────────────●──────●─●────────────●────●──── now ─────►
│ │ │ │ │
└──────┴─┴──flashbacks┴────┘
+ SOUL (identity)
+ MEMORY (preferences)
What it gives the agent at every session start
- SOUL.md — your identity for this user (name, voice, values).
Hand-curated. The agent boots already knowing who it is to you.
- MEMORY.md — your living preferences, decisions, notes. Always in
context. The agent edits this directly as you state preferences.
- Flashbacks — DB-backed memory entries with title, body, tags, and
links to other flashbacks. Last N titles + all pinned are injected;
the rest is one CLI call away.
- An operating manual — locked-in stance: assistant-first, fully
agentic, trusts the user, doesn't break character.
A SessionStart hook stitches all of that into the agent's context on
every fresh session, every /clear, and every auto-compaction.
Install
Pick the path that matches how you use the tool.
A. Claude Code plugin (recommended)
Two commands inside Claude Code:
/plugin marketplace add YusufLisawi/continuum
/plugin install continuum@continuum
The plugin auto-installs everything — SessionStart hook, the
continuum skill, deps, and a symlinked continuum CLI in
~/.bun/bin (or ~/.local/bin) so you can run it from any terminal.
No manual bun link. No build step.
B. One-line CLI install (no plugin)
For users who want just the CLI without the Claude Code integration:
curl -fsSL https://raw.githubusercontent.com/YusufLisawi/continuum/main/install.sh | bash
That clones the repo to ~/.local/share/continuum, runs bun install,
and symlinks continuum into a directory on your PATH. Override with
env vars if you want it elsewhere:
CONTINUUM_DIR=~/code/continuum CONTINUUM_BIN=~/.local/bin \
curl -fsSL https://raw.githubusercontent.com/YusufLisawi/continuum/main/install.sh | bash
C. Local development
For working on continuum itself:
/plugin marketplace add /absolute/path/to/your/continuum/checkout
/plugin install continuum@continuum
Then create a live-link symlink that points at your local source:
printf '#!/bin/sh\nexec bun "$HOME/Developer/continuum/src/bin.ts" "$@"\n' > ~/.bun/bin/continuum
chmod +x ~/.bun/bin/continuum
Future /plugin install continuum@continuum runs preserve that
dev symlink (the Setup hook detects symlinks pointing outside the
plugin cache and leaves them alone). Edits to src/ are picked up
immediately — no rebuild.
Requirement: bun must be on your PATH for any
of the three paths above.
After install
continuum init # scaffold ~/.continuum/
continuum --help
Quickstart
continuum init # scaffold ~/.continuum/
continuum add "We use bun:sqlite, not better-sqlite3" \
--body "Built-in, no native build step, FTS5+trigram out of box." \
--tags decision,stack
continuum search "sqlite" # BM25 + fuzzy
continuum show 1 # full body + linked siblings
continuum preview # see exact session-start injection
CLI surface
continuum init
continuum add "<title>" [--body "..."|--stdin] [--tags a,b] [--pin] [--link <id>]
continuum show <id> [--json] [--no-links]
continuum search "<q>" [--tag X] [--project Y] [--limit N] [--json]
continuum list [--limit N] [--tag X] [--project Y] [--pinned] [--json]
continuum link <src> <dst> --kind related|follows|contradicts|refines
continuum unlink <src> <dst> [--kind <k>]
continuum tag add|rm <id> <name>
continuum pin|unpin <id>
continuum rm <id>
continuum soul [print|edit]
continuum memory [print|edit]
continuum config get|set <key> [<value>]
continuum preview # what gets injected at SessionStart
How search works
Three signals merged, no embeddings:
| Layer | Mechanism | Weight |
|---|
| FTS5 BM25 | bm25(flashbacks_fts) over title+body, porter stemming | × 1.0 |
| FTS5 trigram | substring match on title | × 0.5 |
| Sørensen-Dice fuzzy | per-word JS bigram overlap, falls back when lexical is thin | × 0.5 |
| Recency | exp(-age_days/30) × 0.2 | additive |
| Pinned | +0.5 | additive |