capture · distill · recall

Stop re-explaining your codebase every morning.

recall captures every Claude Code session, distills them overnight into a cross-linked knowledge vault, and feeds that context back at the start of the next one. Each session begins with everything the last one learned — not a blank slate.

Get recall See the loop ↓
46
knowledge notes
6
projects
82
sessions captured
$0
while idle

— the maintainer's own vault, today. All of it distilled automatically.

01 · on session end

Capture

A Stop hook writes a raw dump to the vault. Shell + jq, no model call.

02 · nightly, 7pm

Distill

A headless Claude pass folds the day into cross-linked notes.

03 · on session start

Retrieve

A SessionStart hook injects the index as background context.

04 · on a pattern

Surface

Proposes an automation to an inbox. You approve — nothing auto-promotes.

The problem

Claude Code has no memory between sessions.

You explain the same gotchas, conventions, and dead-ends day after day. The model re-derives what it already figured out last Tuesday. recall closes that gap.

Without recall

Every session starts cold.

Fresh context window, zero recall of the last one. The hard-won detail from yesterday — the signing quirk, the deploy order, the API that returns null — is gone.

With recall

Every session starts warm.

The index of what you've learned is already in context before you type a word. It survives /clear and auto-compact, and grows a little smarter each night.

How it works

Four moving parts. You touch none of them.

recall runs as two Claude Code hooks and one nightly job. Once installed, the loop turns on its own — the only thing it ever asks of you is a yes or no on the automations it proposes.

01 — CAPTURE

It never forgets a session.

hooks/capture-session.sh · Stop hook

When a session ends, a Stop hook writes a raw dump — working directory, project, git diff stat, transcript pointer — straight to the vault. Pure shell and jq: no model call, roughly zero tokens, and it never blocks your work.

02 — DISTILL

It studies your day while you sleep.

distill/run-distill.sh · launchd, 7pm

Each night a headless Claude pass reads the new sessions and folds what's durable into markdown notes — cross-linked with [[wiki-links]] and filed by project. If nothing's new, it skips entirely and costs $0.

03 — RETRIEVE

It hands the knowledge back.

hooks/inject-knowledge.sh · SessionStart hook

At the start of each session, a SessionStart hook injects the knowledge index as background context, so it persists through /clear and auto-compact. A tiny always-on index; full notes read only on demand.

04 — SURFACE

It suggests; you decide.

inbox/proposals.md · human approval

When distill sees a pattern worth automating, it writes a proposal into an inbox — never a live skill. You review and approve on your terms. Your tooling stays yours, and nothing promotes itself.

recall — Obsidian

knowledge / global

craft-cookie-signing

Craft / Yii signs response cookies by default. JavaScript can't read the value of a signed cookie — use a raw header() when the value needs to be readable client-side.

[[craft-5-api-changes]] [[craft-link-field-eager-loading]]

2 linked notes

The vault

A wiki your machine writes for you.

Every note is plain markdown — a single fact, cross-referenced to its neighbors, filed at the narrowest scope that fits. It reads like a zettelkasten because it is one; the tedious bookkeeping is just left to the model.

global/conventions that hold across every repo
projects/<name>/gotchas specific to one codebase
[[ links ]]the connective tissue between them

The design bet

Knowledge compounds. The token bill doesn't.

The vault can grow to hundreds of notes without slowing a session or inflating its cost. recall injects a small always-on index and reads full notes only when they're relevant — so per-session context stays flat as knowledge accumulates.

When there's nothing to distill
$0
Per nightly run
~$0.85
Hard budget cap
$1.50
day 1 today
knowledge in the vault per-session cost

Yours, and only yours

The knowledge lives in your directory — not ours.

recall is machinery, not a service. The vault is a folder of markdown on your Mac that you own outright.

Obsidian-native

Point it at an existing vault and the notes sync right alongside yours.

Read-only in sessions

Sessions consult the vault; only the nightly distill ever writes to it.

Local by default

Everything runs on your machine. The one network call is the nightly pass.

Never in the repo

The code ships open; your captured knowledge stays out of it entirely.

Install

Three commands, then it runs itself.

One interactive installer wires up both hooks and the nightly job — and it never clobbers settings you already have.

bash
$ git clone https://github.com/maxdmyers/recall.git ~/Sites/recall  # or wherever
$ cd ~/Sites/recall
$ ./install/install.sh                 # interactive
Requires macOS Claude Code CLI Homebrew bash 4+ jq

What it does for you

Asks where the vault lives, when to distill, and whether to touch git.

Merges two hooks into ~/.claude/settings.json — your existing ones untouched, a backup written first.

Scaffolds the vault and loads the nightly launchd job.

Re-run any time to pick up changes. It's idempotent.

Scripted install

./install/install.sh -y --vault ~/notes/recall --time 22:30