recall-context
Show what memory files are loaded and available in the current session.
Pressure-based memory cleanup. Demotes, archives, or pins entries when working memory exceeds budget.
$ npx -y skills add davegoldblatt/total-recall --skill recall-maintain --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/recall-maintainContext preview
The summary Claude sees to decide when to auto-load this skill.
Pressure-based memory cleanup. Demotes, archives, or pins entries when working memory exceeds budget.
description: Pressure-based memory cleanup. Demotes, archives, or pins entries when working memory exceeds budget. disable-model-invocation: true
Run maintenance on the memory system. Primary function: pressure-based demotion when working memory exceeds the word budget. Secondary: stale entry verification, contradiction checks, open loop review.
**Check for IDs first.** Scan all managed files (CLAUDE.local.md, memory/registers/*.md, memory/archive/**/*.md) for single-line list item entries (lines starting with `- `, not inside code blocks, not placeholders).
Cannot run maintain: [N] entries are missing IDs. Run /recall-init-ids first to tag all entries.
Cannot run maintain: duplicate ID found.
ID: ^tr8f2a1c3d7e
1. CLAUDE.local.md line 15
2. registers/preferences.md line 8
Resolve manually before running maintain.If preconditions pass, proceed.
**Parse entries** from all managed files. For each entry, extract:
**Load metadata** from `memory/.recall/metadata.json`:
Count words in working memory entries only (tier=working):
Report:
Working memory: [working_words] words (target: 1500)
From working entries, exclude:
Score remaining working entries:
score = 1.0 * word_count(entry) + 0.1 * days_since(last_reviewed_at)
(If `last_reviewed_at` is missing, treat as 365 days.)
Sort by score descending. Take the top candidates until the sum of their word counts >= (working_words - 1500). This is the minimum set needed to bring working memory under budget.
Find any entry across all tiers where metadata has `status: "superseded"` and tier is NOT `archive`. These should be archived.
If no candidates (under budget and no superseded entries):
recall-maintain — all clear ━━━━━━━━━━━━━━━━━━━━━━━━━━ Working memory: [N] words (target: 1500) - under budget No superseded entries pending cleanup. No action needed.
Otherwise, present each candidate with its reason:
recall-maintain — [N] candidates ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Working memory: [working_words] words (target: 1500, over by [N]) Pressure candidates (need to free [N] words): 1. [CLAUDE.local.md] 23 words, last reviewed 45 days ago "Dave prefers concise error messages and no unnecessary logging" → [k]eep / [p]in / [s]nooze / [d]emote / [a]rchive / [m]ark superseded 2. [CLAUDE.local.md] 18 words, last reviewed 30 days ago "Current deployment target is AWS us-east-1 with fallback to us-west-2" → [k]eep / [p]in / [s]nooze / [d]emote / [a]rchive / [m]ark superseded Superseded cleanup: 3. [registers/tech-stack.md] status: superseded "Using Node 16 in production" → [a]rchive (recommended) / [k]eep Apply all / decide individually?
For each candidate, apply the chosen action:
**keep**: Update `last_reviewed_at` to now in metadata. No file changes.
**pin**: Set `pinned: true` and update `last_reviewed_at` in metadata. No file changes. Entry will be excluded from future pressure candidates.
**snooze**: Set `snoozed_until` to now + 30 days (or user-specified duration) and update `last_reviewed_at` in metadata. No file changes. Entry will be excluded from pressure candidates until the snooze expires.
**demote** (working -> register): 1. Remove the entry line from CLAUDE.local.md 2. Append the entry line (with ID) to `memory/registers/_inbox.md`
# Inbox
> Entries demoted from working memory. Review and file into appropriate registers.3. Update metadata tier to `register` and `last_reviewed_at` to now
**archive** (working or register -> archive): 1. Remove the entry line from its current file 2. Append the entry line (with ID) to `memory/archive/ARCHIVE.md`
# Archive
> Archived memory entries. Searchable but never auto-loaded.3. Update metadata: set `status: "archived"`, `tier: "archive"`, `last_reviewed_at` to now
**mark_superseded**: Set `status: "superseded"` and `last_reviewed_at` to now in metadata. No file changes. Entry will appear in superseded cleanup on next maintain run.
When moving entries between files:
After all actions are applied, write `memory/.recall/metadata
A memory system for Claude Code that remembers what matters and forgets what doesn't.
Show what memory files are loaded and available in the current session.
Mark memory entries as superseded. Preserves history, does not delete.
Add durable IDs to memory entries. Required before /recall-maintain can run.
Scaffold the Total Recall memory directory structure in this project.
Review daily logs and promote entries to registers or working memory.