← the whole session plugin/skills/session-reminder/SKILL.md

Reflect-style pass over a session's human messages that produces the session's killer title plus its full structured reminder — a title written into the session's own transcript (the same mechanism Claude Code's session list reads) so the human remembers EXACTLY what the session was about, plus a richer reminder printed to the human or handed to your own dashboard if you have one. Copied from /reflect and restructured for this one job.

Session Reminder — /session-reminder

Copied from /reflect and restructured for one job: given a session's human messages, produce the title and reminder that make the session instantly recognizable weeks later.

The title is not a summary category. It is the memory hook. "Killer" means: the human reads it and is transported back into exactly what this session was dedicated to. Use their own vivid phrasing verbatim whenever it carries the dedication — including profanity when it is load-bearing ("not some truncated shit" is a requirement statement, not noise). Never sanitize into corporate generality. Length is uncapped: take the words the dedication needs, no more.

Input

A JSON array of the session's human messages: [{"seq": 2, "text": "..."}, ...].

Method (from /reflect, compressed)

Work through target → location → gap → initiative → leverage mentally, then emit only the output contract. What the human stated they wanted IS the target. Noise is worse than silence — drop any field you cannot ground in the messages rather than inventing it, but NEVER drop a verbatim requirement.

Output contract (strict JSON, one object, no prose around it)

{
  "title": "The killer title. Any length. Human's voice, verbatim anchors preferred. States the dedication, not the topic bucket.",
  "dedication": "1-3 sentences: what this session is dedicated to, in UX/intent terms — the thing the human is trying to GET.",
  "whereItStands": "1-2 sentences: where the work stands against that dedication right now (from /reflect's location).",
  "gap": "1-2 sentences: the gap being navigated — omit if not yet visible.",
  "anchors": ["verbatim phrases from the human, in priority order — the ones that would re-trigger the memory instantly. Include profanity/typos as-is when load-bearing."],
  "next": "1-2 sentences: the shortest path forward from here — omit if the session read as complete."
}

Rules

  1. Output ONLY the JSON object. No markdown fence, no commentary, no quotes around the whole.
  2. title and anchors are mandatory; every other field is omissible when ungrounded.
  3. Use the language of the messages.
  4. Do NOT leave out actual verbatim requirements — if the human stated a hard constraint, it appears in anchors or dedication.
  5. The title reads like how the human talks to the agent, not like a ticket name. Compare: "Session list: convo-scraped killer titles + full-screen hover reminders — no truncated shit" beats "Session title UI improvements".

Where the title and reminder actually go

Producing the JSON object is only half the job — it has to land somewhere the person actually sees it.

  1. The title goes into the session's own transcript as a custom-title entry — the same mechanism /session-titles-name uses to batch-rename many sessions at once, and the one Claude Code's own session list reads to label a session. Append this line to the session's JSONL transcript file:
    {"type": "custom-title", "customTitle": "{the title field above}", "sessionId": "{this session's id}"}
    
    (Remove any existing custom-title entry for this session first, the same way /session-titles-name does, so there's never more than one.)
  2. The full reminder (dedication, whereItStands, gap, anchors, next) — print it directly to the person in chat, since most setups have nowhere else to show it. If you've built or connected your own dashboard that displays session reminders (optional — nothing ships with one by default), hand it this same JSON instead of, or in addition to, printing it.