| name | remember |
| description | This skill should be used after a meaningful step worth persisting — a decision, a root cause, a non-obvious fix, an environment fact, or a user correction or preference — and when the user says "remember this", "save this to memory", "note this for later", or "make this durable". Appends a project log checkpoint by default; with an explicit gist it writes a durable note plus index row after one confirmation. |
| argument-hint | [gist — makes it a durable note] |
tm — remember
Two-tier capture into the project scope of the turing-mem store. Tier 1 (default): an unconfirmed, append-only log/ checkpoint — frictionless, git-revertible. Tier 2 (explicit): a confirmed durable notes/ file plus index row, written inline in the main thread — no subagent round-trip. remember writes project scope only: never MEMORY.md, never global/ (global promotion is the /tm:promote flow).
1. Guard (always first)
Run ${CLAUDE_PLUGIN_ROOT}/scripts/tm-guard.sh "$PWD" and parse its KEY=VALUE output. When this skill auto-triggered (a description match, not an explicit user request) and the guard is not fully healthy (TM_STATUS not OK, or PROJECT_EXISTS=false), skip the capture and at most mention /tm:init in one line — never start a repair or scaffold flow from an auto-trigger; the flows below apply to explicit invocations. If TM_STATUS is not OK, stop — all remember paths are writes — and follow the repair flows in <MEMORY_DIR>/references/bootstrap.md (if the store does not exist yet, the same file ships in the plugin at ${CLAUDE_PLUGIN_ROOT}/references/bootstrap.md). If TM_STATUS=OK but PROJECT_EXISTS=false, follow the bootstrap.md project-creation flow: confirm via AskUserQuestion, derive identity with ${CLAUDE_PLUGIN_ROOT}/scripts/tm-project-id.sh "$PWD", then run ${CLAUDE_PLUGIN_ROOT}/scripts/tm-scaffold.sh project <MEMORY_DIR> <PROJECT_ID> <KEY> — or point the user at /tm:link if the project already exists in the store under another id.
2. Choose the tier
- Tier 2 (durable) only when the invocation carries an explicit gist argument (
/tm:remember <gist>) or the user explicitly asks to make it durable/permanent ("make this durable").
- Tier 1 (log checkpoint) in every other case — including every auto-triggered capture. Auto-triggering never produces a durable write.
3. Tier 1 — log checkpoint (unconfirmed)
- Compose 3–8 terse bullet lines capturing the step: what was decided / root-caused / fixed / learned, and the next step if there is one.
- First line is exactly
# YYYY-MM-DD HH:MM — <slug>; no frontmatter. Slug: 2–4 kebab-cased words.
- Write the file to
<MEMORY_DIR>/<PROJECT_PATH>/log/YYYY-MM-DD-HHMM-<slug>.md (timestamp = now in UTC, date -u +%Y-%m-%d-%H%M — the store syncs across timezones and ordering is lexicographic).
- No confirmation, no index update, no git commit. Tell the user in one line that a checkpoint was logged (path included).
Checkpoint one meaningful step at a time; do not log routine edits or restate the transcript.
4. Tier 2 — durable note (confirm once)
- Compose the note as
notes/YYYY-MM-DD-<slug>.md (date = today in UTC):
- Frontmatter:
type (decision | learning | reference | profile | task-state), updated (ISO-8601 timestamp), status: active, optional tags (list). Add supersedes: "[[<old-file-sans-ext>]]" only when replacing an existing note (bare sibling link — no notes/ prefix; both notes live in the same notes/ dir).
- Body: first heading = the title, then a
**Gist:** <≤100 chars> line, then context. Wikilink related notes.
- Compose the index row — the gist copied verbatim:
- YYYY-MM-DD · <type> · [[notes/YYYY-MM-DD-<slug>]] — <Gist> #tag1 #tag2
- Confirm once via AskUserQuestion, showing the target path, type, and gist (proceed / adjust / cancel).
- Write the note, then prepend the row at the top of the
## Notes list in <MEMORY_DIR>/<PROJECT_PATH>/INDEX.md (newest-first). Bump nothing else: index frontmatter (key, last_consolidated) stays untouched, and MEMORY.md / global/ are never written.
- If superseding: flip the old note's frontmatter to
status: superseded (bump its updated) and remove its index row.
- If the store is its own git repo (
git -C <MEMORY_DIR> rev-parse --show-toplevel equals MEMORY_DIR), commit:
git -C <MEMORY_DIR> add -A && git commit -m "mem(<PROJECT_ID>): <gist>"
(the add -A also sweeps up any uncommitted log checkpoints — this is what makes tier 1 revertible).
If the store is nested inside a larger repo (e.g. a synced vault), skip the commit — the parent repo's own workflow owns it.
5. Codex fallback
No AskUserQuestion on Codex — confirm tier 2 in plain text ("Write durable note <path> — <gist>? yes/no") and wait for the reply before writing. Everything else is identical; tier 1 needs no confirmation on either harness.
Rules
- Project scope only. Never write
MEMORY.md, global/, or another project's folder from this skill.
- Store content is self-contained: no absolute host paths and no links/paths relative to anything outside the memory dir — the store is relocatable by design. Describe outside context in prose when it matters; never reference it.
- The
log/ checkpoint is the only unconfirmed write surface in the whole system — keep it that way.
- Gist ≤100 chars, and the index row copies it verbatim so index and note never drift.