rem-sleep

Extracts and persists memories from the current conversation to the database. Scans for decisions, preferences, patterns, issues, and learnings, then dispatches the memory-extractor agent. Use manuall

SKILL.md

GitHub

REM Sleep - Memory Extraction

Purpose

Scan the current conversation for valuable information worth persisting, categorize it, and dispatch the memory-extractor agent to write it to the memories table.

Trigger

  • Manual: user invokes /rem-sleep
  • Automatic: PreCompact hook outputs a reminder, Claude invokes this skill

Data Storage Rules

  • NEVER write memory data to local files — all memory goes to the memories table
  • Use ToolSearch to discover Supabase MCP tools for INSERT/UPDATE operations
  • Temp files in /tmp/ are acceptable for transient processing

Execution

1. Determine Project Name

git remote get-url origin 2>/dev/null | sed 's|.*/||;s|\.git$||' || basename "$PWD"

Normalize to lowercase with hyphens.

2. Scan Conversation

Review the entire conversation for extractable items in these categories:

Category What to Look For DB category DB subcategory
Decisions Architectural choices, library selections, pattern choices decision or project NULL or <project>
Preferences User's stated preferences for style, tooling, workflow preference NULL or topic
Patterns Recurring approaches, idioms, code patterns used knowledge <topic>
Issues Bugs found, workarounds discovered, gotchas project <project>
Learnings New knowledge gained, framework behaviors, API quirks knowledge <topic>

3. Categorize and Deduplicate

For each extracted item:

  • Assign category and subcategory
  • Write a concise key (slugified, 2-6 words, e.g., zustand-over-redux)
  • Distill content (value field) to factual essence (no commentary)
  • Assign confidence level:
    • high: explicitly stated by user or confirmed through implementation
    • medium: inferred from conversation patterns
    • low: mentioned once, possibly context-dependent
  • Assign relevant tags
  • Set source to rem-sleep

4. Dispatch Memory Extractor

Launch the memory-extractor agent with the categorized items:

Use the Task tool with subagent_type "general-purpose" to run the memory-extractor agent.
Provide the list of categorized memory items as structured input.

5. Report Results

If manually invoked (/rem-sleep): Output a brief summary:

Memories extracted:
- 2 decisions (project-specific)
- 1 preference (cross-project)
- 1 knowledge item (TypeScript patterns)

If hook-triggered (PreCompact): Operate silently. Do not output a summary unless errors occur.

What NOT to Extract

  • Transient debugging steps (unless they reveal a persistent gotcha)
  • Code that was written and immediately discarded
  • Questions the user asked that were fully resolved in-session
  • Implementation details that are visible in the code itself
  • Anything already stored in the memories table (check first)

Examples

Good Extractions

  • "User prefers Zustand over Redux for state management" → category=preference, key=zustand-over-redux
  • "This project uses tRPC for API layer with Zod validation" → category=project, subcategory=my-app, key=trpc-api-layer
  • "Always run migrations before seeding in this project" → category=project, subcategory=my-app, key=migrations-before-seeding
  • "React 19 useActionState replaces useFormState" → category=knowledge, subcategory=react, key=useactionstate-replaces-useformstate

Bad Extractions

  • "Fixed the typo on line 42" → too transient
  • "The button component renders a <button> element" → obvious from code
  • "User asked how to use useState" → resolved in session