memory-seed · git:20260731.937a638 · 2026-07-31 · sha256 428d4e225d8c301f
memory-seed git:20260731.937a638A
Immutable. This exact content is served forever at /api/v1/blob/428d4e225d8c301f.
---
name: memory-seed
description: Extract L1 memory atoms from Claude Code conversation history. Run manually via /memory-seed.
disable-model-invocation: true
---
# Memory Seeding
Read conversation transcripts from `~/.claude/projects/` and extract structured L1 memory atoms. You perform all extraction — no external LLM needed.
## Workflow
### 1. Find pending sessions
```bash
tmem sessions
```
If no pending sessions, tell the user and stop.
### 2. For each pending session
Read the conversation:
```bash
tmem read-session SESSION_FILE_PATH
```
### 3. Extract memories
Read the extraction guide for detailed rules:
```bash
cat ${CLAUDE_PLUGIN_ROOT}/skills/memory-seed/references/extraction-guide.md
```
Analyze the conversation and produce a JSON array of memories. Each memory needs `content`, `type`, `priority`, `scene_name`, `source_message_ids`, `metadata`.
**Grounding (important):** populate `source_message_ids` with the actual transcript message `uuid`s the memory was drawn from. `tmem write-l1 --session` runs a deterministic grounding check — an atom whose `content` does not overlap its cited source messages is **dropped as confabulation**. Leaving `source_message_ids` empty skips the check (atom kept ungated), so cite real ids to get protection, and never invent facts absent from the source. Note: the check is lexical (shared words), so a heavily paraphrased/normalized atom (e.g. expanding an acronym the source never spelled out) can be dropped even when truthful — keep some of the source's own wording in `content`, or leave `source_message_ids` empty if you must paraphrase far.
**Three types with scope routing:**
- **persona** (priority 50-100) → stored globally. Stable user attributes, preferences.
- **episodic** (priority 60-100) → stored per-project. Events, decisions, plans.
- **instruction** (priority 70-100) → stored globally. AI behavior rules.
**Filtering — skip these:**
- Greetings, filler, one-time requests
- AI tool outputs, error messages
- Anything already covered by existing memories (check with `tmem search <keyword>` if unsure)
If a session has no extractable memories, mark it done and move to the next.
### 4. Write atoms
Write the JSON array to a temp file to avoid shell escaping issues, then pipe it:
```bash
cat <<'ATOMS_EOF' | tmem write-l1 --session SESSION_ID
[{"content": "...", "type": "persona", "priority": 80, "scene_name": "...", "source_message_ids": ["<real-uuid-from-transcript>"], "metadata": {}}]
ATOMS_EOF
```
### 5. Verify and hint
```bash
tmem status
tmem changelog --last 10
```
After seeding, tell the user: **Next: use the memory-consolidate skill** to group atoms into scenes and synthesize persona.