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
Files1
View on GitHubSKILL.mdskills/plugins/memory-system/skills/rem-sleep/SKILL.md
GitHubREM 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
memoriestable - 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 implementationmedium: inferred from conversation patternslow: 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