/recall-init-ids
Add durable IDs to memory entries. Required before /recall-maintain can run.
$ npx -y skills add davegoldblatt/total-recall --skill recall-init-ids --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.
- You can call itInvoke it directly when you want it.
- Slash command
/recall-init-ids
Context preview
The summary Claude sees to decide when to auto-load this skill.
Add durable IDs to memory entries. Required before /recall-maintain can run.
SKILL.md
recall-init-ids.SKILL.mddescription: Add durable IDs to memory entries. Required before /recall-maintain can run.
disable-model-invocation: true
Add `^tr` IDs to untagged memory entries in managed files. This is safe to run multiple times - it only tags entries that don't already have IDs.
What To Do
1. Identify Managed Files
Scan these locations for single-line list item entries:
- `CLAUDE.local.md` (working memory)
- `memory/registers/*.md` (all register files)
- `memory/archive/**/*.md` (archived entries, if they exist as list items)
**Do NOT scan** `memory/daily/*.md` - daily logs are not managed by the remove gate.
2. Parse Entries
An entry is exactly:
- A line starting with `- ` (dash + space)
- Single line only (the entire entry is on one line)
- NOT inside a fenced code block (``` markers)
- NOT a placeholder like `- [None captured yet]` or `- [None yet]` or `- [not yet set]`
**Already tagged**: If the line ends with ` ^tr` followed by exactly 10 lowercase hex characters, it already has an ID. Skip it.
**Malformed tag**: If the line ends with ` ^` followed by other text that doesn't match the `tr[0-9a-f]{10}` pattern, warn and skip it. Do not attempt to repair.
3. Show Preview
Before making any changes, show the user what will happen:
recall-init-ids — preview
━━━━━━━━━━━━━━━━━━━━━━━━━
Files scanned: [N]
Entries found: [N] total
Already tagged: [N]
Will be tagged: [N]
Skipped (malformed): [N]
Examples:
CLAUDE.local.md:
Before: - Don't blast into writing code unless explicitly told to
After: - Don't blast into writing code unless explicitly told to ^tr8f2a1c3d7e
registers/preferences.md:
Before: - Prefers tabs over spaces
After: - Prefers tabs over spaces ^tra4b2c1d9e0
Apply? [y]es / [c]ancelShow up to 5 before/after examples, spread across different files.
**If no untagged entries are found**, report that and exit:
All [N] entries already have IDs. Nothing to do.
4. Generate IDs
For each entry to be tagged:
1. Generate an ID: `tr` + 10 random lowercase hex characters (use crypto-secure randomness) 2. Check for collisions against:
- All existing inline IDs found during parsing
- All IDs already generated in this run
- All keys in `memory/.recall/metadata.json` (if it exists)
3. If collision, regenerate. (Extremely unlikely with 10 hex chars, but be safe.) 4. Append ` ^[id]` to the end of the line
5. Apply Changes
Only after user confirms:
1. **Rewrite each file** with IDs appended to eligible entry lines. Do not modify any other lines in the file.
2. **Create or update `memory/.recall/metadata.json`**:
- Create `memory/.recall/` directory if it doesn't exist
- For each new ID, add an entry:
{
"tr8f2a1c3d7e": {
"created_at": "2026-02-12T10:15:30Z",
"last_reviewed_at": "2026-02-12T10:15:30Z",
"pinned": false,
"snoozed_until": null,
"status": "active",
"tier": "working"
}
}- Set `tier` based on file location:
- `CLAUDE.local.md` -> `"working"`
- `memory/registers/*` -> `"register"`
- `memory/archive/*` -> `"archive"`
- For entries with existing inline IDs that are missing from metadata.json, add them without changing the file
- Write JSON with sorted keys for readable diffs
6. Summary
recall-init-ids — complete
━━━━━━━━━━━━━━━━━━━━━━━━━━
Tagged: [N] entries across [M] files
Metadata: [N] entries in memory/.recall/metadata.json
Files modified:
CLAUDE.local.md [N] entries tagged
registers/preferences.md [N] entries tagged
...
You can now run /recall-maintain for pressure-based memory cleanup.
Important Notes
- This command is idempotent. Running it again will only tag NEW untagged entries.
- If a user manually removes an ID from an entry, running this command will re-tag it with a NEW ID (losing pin/snooze/review history for that entry).
- Metadata.json is the source of truth for pin/snooze/review state. The inline ID is the link between the entry text and its metadata.
Read more
description: Add durable IDs to memory entries. Required before /recall-maintain can run. disable-model-invocation: true
Add `^tr` IDs to untagged memory entries in managed files. This is safe to run multiple times - it only tags entries that don't already have IDs.
What To Do
1. Identify Managed Files
Scan these locations for single-line list item entries:
- `CLAUDE.local.md` (working memory)
- `memory/registers/*.md` (all register files)
- `memory/archive/**/*.md` (archived entries, if they exist as list items)
**Do NOT scan** `memory/daily/*.md` - daily logs are not managed by the remove gate.
2. Parse Entries
An entry is exactly:
- A line starting with `- ` (dash + space)
- Single line only (the entire entry is on one line)
- NOT inside a fenced code block (``` markers)
- NOT a placeholder like `- [None captured yet]` or `- [None yet]` or `- [not yet set]`
**Already tagged**: If the line ends with ` ^tr` followed by exactly 10 lowercase hex characters, it already has an ID. Skip it.
**Malformed tag**: If the line ends with ` ^` followed by other text that doesn't match the `tr[0-9a-f]{10}` pattern, warn and skip it. Do not attempt to repair.
3. Show Preview
Before making any changes, show the user what will happen:
recall-init-ids — preview
━━━━━━━━━━━━━━━━━━━━━━━━━
Files scanned: [N]
Entries found: [N] total
Already tagged: [N]
Will be tagged: [N]
Skipped (malformed): [N]
Examples:
CLAUDE.local.md:
Before: - Don't blast into writing code unless explicitly told to
After: - Don't blast into writing code unless explicitly told to ^tr8f2a1c3d7e
registers/preferences.md:
Before: - Prefers tabs over spaces
After: - Prefers tabs over spaces ^tra4b2c1d9e0
Apply? [y]es / [c]ancelShow up to 5 before/after examples, spread across different files.
**If no untagged entries are found**, report that and exit:
All [N] entries already have IDs. Nothing to do.
4. Generate IDs
For each entry to be tagged:
1. Generate an ID: `tr` + 10 random lowercase hex characters (use crypto-secure randomness) 2. Check for collisions against:
- All existing inline IDs found during parsing
- All IDs already generated in this run
- All keys in `memory/.recall/metadata.json` (if it exists)
3. If collision, regenerate. (Extremely unlikely with 10 hex chars, but be safe.) 4. Append ` ^[id]` to the end of the line
5. Apply Changes
Only after user confirms:
1. **Rewrite each file** with IDs appended to eligible entry lines. Do not modify any other lines in the file.
2. **Create or update `memory/.recall/metadata.json`**:
- Create `memory/.recall/` directory if it doesn't exist
- For each new ID, add an entry:
{
"tr8f2a1c3d7e": {
"created_at": "2026-02-12T10:15:30Z",
"last_reviewed_at": "2026-02-12T10:15:30Z",
"pinned": false,
"snoozed_until": null,
"status": "active",
"tier": "working"
}
}- Set `tier` based on file location:
- `CLAUDE.local.md` -> `"working"`
- `memory/registers/*` -> `"register"`
- `memory/archive/*` -> `"archive"`
- For entries with existing inline IDs that are missing from metadata.json, add them without changing the file
- Write JSON with sorted keys for readable diffs
6. Summary
recall-init-ids — complete ━━━━━━━━━━━━━━━━━━━━━━━━━━ Tagged: [N] entries across [M] files Metadata: [N] entries in memory/.recall/metadata.json Files modified: CLAUDE.local.md [N] entries tagged registers/preferences.md [N] entries tagged ... You can now run /recall-maintain for pressure-based memory cleanup.
Important Notes
- This command is idempotent. Running it again will only tag NEW untagged entries.
- If a user manually removes an ID from an entry, running this command will re-tag it with a NEW ID (losing pin/snooze/review history for that entry).
- Metadata.json is the source of truth for pin/snooze/review state. The inline ID is the link between the entry text and its metadata.
A memory system for Claude Code that remembers what matters and forgets what doesn't.
Other skills on recall.
- /recall-context
Show what memory files are loaded and available in the current session.
Open skill - /recall-forget
Mark memory entries as superseded. Preserves history, does not delete.
Open skill - /recall-init
Scaffold the Total Recall memory directory structure in this project.
Open skill - /recall-log
Quick append to daily log without write gate evaluation.
Open skill - /recall-maintain
Pressure-based memory cleanup. Demotes, archives, or pins entries when working memory exceeds budget.
Open skill - /recall-promote
Review daily logs and promote entries to registers or working memory.
Open skill

