Recall: Project & Cross-Project Memory
An opt-in memory layer that composes a focused brief from your project's Markdown vault before each prompt and harvests one memory note per commit — so decisions, gotchas, and conventions persist across sessions instead of being re-explained every time.
Overview
Recall is an opt-in memory layer. When you enable it for a project, it composes a focused brief from the project's Markdown vault and injects it into the agent before each prompt, then harvests one memory note per commit — anchored to that commit's diff — so hard-won decisions, gotchas, and conventions persist across sessions instead of being re-explained every time.
Notes are plain Markdown files in <project>/.recall/, openable in Obsidian or any editor. Two background workers do the work: an Enricher that composes the pre-prompt brief and a Harvester that writes the per-commit note.
Recall is off by default and per-project. Turn it on only where long-lived memory pays off — a codebase you return to often — not throwaway scratch work.
What You See
Recall has no always-on panel. It surfaces in two places:
- Settings → Recall (Brain icon) — the control surface. It holds a master Enable Recall toggle, a Mode dropdown, a per-project vault health summary (indexed note count, a notes-by-type breakdown, harvests logged, and the last-indexed timestamp), and three actions: Run cold-start seed, Reindex, and Open vault in Finder/Explorer or Obsidian.
- In the background — when Recall is on, the Enricher runs before prompts and the Harvester runs on commit. They work silently; failures are logged and, in the default mode, never block your prompt or commit.
How to Open / Access
Open Settings with Cmd/Ctrl , and select the Recall tab. Vault actions operate on the currently active project, so open a project first. If no project is open, the tab shows "Open a project to manage its Recall vault."
Modes
| Mode | Behavior |
|---|---|
| Off | No Recall activity for this project. The vault stays on disk, but neither Enricher nor Harvester runs. |
| Suggested (default) | Enricher and Harvester both run. Failures log a warning but never block prompts or commits. |
| Enforced | The Enricher must complete before a prompt sends; Self-Drive blocks when the Enricher model is unreachable. |
User Actions
- Enable Recall — the master switch. Off by default; opt in per project. Changes on this tab save immediately, so flipping the toggle takes effect right away.
- Run cold-start seed — bootstraps the vault for an existing project. It ingests existing memory files and ADRs, seeds hotspot/landmine and co-change-pattern notes from git history, writes a manifest, and indexes the result. The toast reports notes indexed, elapsed time, and the manifest outcome.
- Reindex — re-parses the
.recall/vault into the local SQLite index. Use it after you edit notes by hand in Obsidian. - Open vault — reveals
<project>/.recall/in your file manager (Finder on macOS, File Explorer on Windows) or Obsidian.
States
| State | Meaning |
|---|---|
| No vault registered | Shown before the first seed or index. Run cold-start seed to create one. |
| Indexed | The health summary shows live counts. "Last indexed: never" means the vault exists on disk but hasn't been parsed into the index yet. |
Configuration
The Settings tab ships the minimum-viable controls: enable, mode, and the vault actions. For now, power-user fields live in settings.json under a recall object; a fuller Recall settings panel is planned for a later release.
| Field | Default | Notes |
|---|---|---|
enabled | false | Master switch. |
mode | suggested | off / suggested / enforced. |
enricherProvider / enricherModel | google / gemini-3.1-flash-lite | Model that composes the pre-prompt brief. |
harvesterProvider / harvesterModel | google / gemini-3.1-flash-lite | Model that writes the per-commit note. |
crossProjectLinking | true | Allow notes to reference a shared meta-vault across projects. |
tokenBudgetPerBrief | 2000 | Cap on the size of the injected brief. |
staleThresholdDays | 30 | Age past which a note is treated as stale. |
commitVaultToGit | false | When off, .recall/ stays local-only and is not committed. |
Privacy
When Recall is on, snippets of your code and notes are sent to the configured provider (Google Gemini by default) on every enriched prompt and every harvested commit. The vault itself stays local unless you set commitVaultToGit: true.
Tips
- Seed an existing codebase first. Run cold-start seed once so the first brief has history to draw on instead of starting empty.
- Leave Mode on Suggested unless you specifically want the Enricher to be a hard gate. Enforced blocks prompts (and Self-Drive) if the Enricher model is unreachable.
- Notes are plain Markdown. Open the vault in Obsidian to read, edit, or prune them, then click Reindex.
- Override the default model if you want. The Enricher and Harvester use the inexpensive
gemini-3.1-flash-lite; point them at a stronger model insettings.jsonif you want it writing your memory notes.
Related Articles
- Self-Drive: Autonomous Implementation — Enforced mode gates Self-Drive on the Enricher completing
- Per-Task Agent Routing — Recall injects its brief into whichever agent handles the prompt
- Session Persistence — How your work carries across sessions alongside Recall's memory
- Settings Reference — Every Recall configuration field in one place
Duo-Coding: Mentor + Primary Pairing
Pair two coding agents on one task — a Primary that writes and a read-only Mentor that reviews every turn, runs the build and tests, and directs repairs — with a cheap analyst driving a live dashboard.
Auto-continue: Auto-Resume After Quota Resets
Arm Auto-continue on a Claude Code or Codex session and CodeMantis automatically resumes the same task about a minute after your usage quota resets — no waiting, no manual nudge.