From unforget
Consolidates deferred work (paused plans, spillover, audit findings, bugs) into a single structured UNFORGET.md file. Helps avoid scattered tracking across multiple surfaces.
How this skill is triggered — by the user, by Claude, or both
Slash command
/unforget:unforgetThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
> Installed as a Claude Code plugin in v0.2+. Manual install via `~/.claude/skills/unforget/` (invoked as `/skill unforget`) still works as a v0.1 fallback.
Installed as a Claude Code plugin in v0.2+. Manual install via
~/.claude/skills/unforget/(invoked as/skill unforget) still works as a v0.1 fallback.
A way of not losing sight or track of what is deferred.
Every developer defers things. The problem isn't the deferral. The problem is that deferred items end up scattered across:
Deferred.md at the repo root// TODO: come back to this)~/.claude/plans/When the user asks "what's deferred?" months later, the answer requires walking five surfaces. Items go stale. Some get fixed by accident. Some sit forever because nobody remembered them.
unforget collapses all deferral into ONE file (UNFORGET.md) with a structured format that:
The pattern was extracted from a real Universal app (iOS, iPadOS, macOS) where deferred work had fragmented across five tracking surfaces. Consolidation freed roughly 3 hours of release-prep time per cycle.
UNFORGET.md is a single markdown file with 4 sections, each containing a rating table whose width depends on the preset (10 columns for Standard, 9 for Compact / Continuous, 6 for Lean).
Sections: 1. Paused plans (P) · 2. Session spillover (S) · 3. Audit findings (A) · 4. User-reported / observed (U)
Columns (Standard preset): # | Target | Finding | Urgency | Risk: Fix | Risk: No Fix | ROI | Blast Radius | Fix Effort | Status
Target values: 🔴 THIS (blocks current release) · 🔵 NEXT (next post-release update) · 🟡 LATER (two cycles out) · ⚪ SOMEDAY (no commitment)
Invariant: 🔴 THIS is the only Target that blocks shipping. At submission time, every 🔴 THIS row must be Status = Fixed or have been demoted with a one-line reason.
Full format spec lives in reference/format.md: column meanings, Status enum, detail-block format (closure pointer → body → verify-still-open recipe → spawn links), Standard / Compact / Lean / Continuous presets, and anti-patterns. Read that file when writing or validating a row.
Open rows whose details cite specific file paths SHOULD carry a **Verify-still-open:** one-line recipe in the detail block — a 10-second grep that confirms the row's premise still matches the current source. Rows decay independently of fixes (refactors move lines, parallel sessions ship silent fixes); the recipe makes that grep a structural checkpoint, not a habit. See reference/format.md § Verify-still-open recipe for the three-layer cascade.
| Subcommand | One-line purpose | Full spec |
|---|---|---|
/unforget init | Bootstrap UNFORGET.md and survey existing deferral artifacts across the project | reference/init.md (with surface detail in reference/surfaces.md) |
/unforget add | Capture a new deferral (defaults to Section 2 / Session spillover); 30s end-to-end | reference/commands.md |
/unforget edit | Refine a row's columns; closure recommendations on --status=Fixed | reference/commands.md |
/unforget import | Re-run the surface survey after init (catches NEW artifacts) | reference/commands.md (surface detail in reference/surfaces.md) |
/unforget list | Show current state, filterable by section / Target / Urgency / age / staleness | reference/commands.md |
/unforget scan | Identify rows past their staleness threshold; read-only | reference/commands.md |
/unforget promote | Release-time ritual: verify 🔴 THIS rows fixed, promote 🔵 NEXT to 🔴 THIS | reference/promotion.md (with backups in same file) |
/unforget --version | Print version, install path, supported format-version; install-verification | reference/commands.md |
Decision flowchart: which subcommand do I run?
/unforget init/unforget add "<finding>"/unforget edit <ID>/unforget import/unforget list (or /unforget list --target=THIS for ship-blockers only)/unforget scan/unforget promote/unforget --version/unforget edit <ID> --status=Fixed) and you want the post-fix sweep → see reference/promotion.md § post-fix-sweepThis SKILL.md is intentionally thin. The full spec is split across reference/*.md files loaded on demand:
| File | What's in it | Loaded when |
|---|---|---|
reference/format.md | Column definitions, Status / Target enums, detail-block format, presets, anti-patterns | Writing or validating a row |
reference/init.md | Phases 1–7 of the init walkthrough, success criteria | Running /unforget init |
reference/surfaces.md | Six core surfaces, Surface 1b general doc scanning, redirect-pointer pre-check, memory-dir resolution, path encoding, meta-file pre-check, audit-tool format-aware parsing, cross-surface dedup, GitHub-issues four states, algorithm fallback | Running init or import, or auditing surface behavior |
reference/promotion.md | Promote ritual, dry-run mechanics, post-fix-sweep workflow, backups and recovery | Running /unforget promote or marking a row Fixed |
reference/commands.md | Per-subcommand specs for add, edit, import, list, scan, --version | Running any of those subcommands |
scripts/*.py | Deterministic helpers (surface scan, fuzzy dedup, path encoding, format-version check, backup prune). JSON in / JSON out. Standard library only. See scripts/README.md. | Whenever the corresponding reference file delegates to a script |
Spec-substitution principle. This SKILL.md is the index, not the spec. When implementing or modifying any subcommand, Read the linked reference file before acting. The reference files are authoritative.
The skill works best when the project's main AI instructions file has a section that points at UNFORGET.md as the canonical deferral source. /unforget init offers to add this for you. Example block:
## Deferred Work Index
**Single source of truth:** `Documentation/Development/Deferred/UNFORGET.md`
Read this file when:
- The user asks "what's deferred?", "what's the backlog?", "prioritize my plans," or any variant.
- Before suggesting a release / submission, to check 🔴 THIS rows for unresolved blockers.
- When a task in the current session needs to be deferred, log a row here. Do NOT create a new tracking file unless the entry needs detail beyond one row.
**Format:** 10-column rating table per section. **Sections:** Paused plans / Session spillover / Audit findings / User-reported.
**Target column** is the release-cycle commitment: 🔴 THIS / 🔵 NEXT / 🟡 LATER / ⚪ SOMEDAY.
Never log deferred items elsewhere. Memory files, plan files, and audit ledgers are detail stores; UNFORGET.md is the index.
This block is what makes the skill's recall trigger work. Without it, future AI sessions don't know to read UNFORGET.md when the user asks about deferred work.
/unforget scan output is structured markdown. A simple GitHub Action can run the scan weekly and post the report to a Slack channel or open an issue. The scripts/*.py helpers are standalone and can be invoked from CI without Claude Code.scripts/ use Python 3.9+ standard library only (no third-party deps). When Python is unavailable, each reference/*.md file that delegates to a script keeps an "Algorithm fallback" paragraph the LLM can re-derive from. The fallback is functional but slower and non-deterministic; install Python 3.9+ for the canonical implementation.Every read operation (add, list, promote, scan, edit, import) checks for an HTML comment marker of the form <!-- unforget-format: vN --> near the top of UNFORGET.md. The marker declares which version of the unforget file format the file conforms to. v0.2 of the skill supports format v1. Three cases:
<!-- unforget-format: v1 --> near the top of the file to silence the prompt on future reads.v1). The skill proceeds normally.v2 or higher when the skill is v0.2). The skill prints: "this file declares unforget format vN, but this skill version supports up to v1. Operating in read-only mode; writes are refused." Read-only operations (list, scan, and promote --dry-run) still work. Write operations (add, edit, import, and promote without --dry-run) refuse with a one-line error pointing to the version mismatch and recommending a skill upgrade.Preferred implementation: delegate the marker read to python3 scripts/check_format_version.py <path-to-UNFORGET.md> (returns JSON). Algorithm fallback if Python is unavailable: read the first 30 lines of the file, grep for <!-- unforget-format: v (case sensitive), parse the version digit, compare against supported.
Things this skill deliberately does NOT do, and why. Full discussion in reference/format.md.
Apache License 2.0. See LICENSE.
npx claudepluginhub terryc21/unforgetCreates bite-sized, testable implementation plans from specs or requirements, with file structure and task decomposition. Activates before coding multi-step tasks.