session-summaries

What the chat right-panel session summary shows, what it costs, and how to make a session summarize well. Load when the user asks about the session summary panel, why a summary looks wrong or empty, o

SKILL.md

GitHub

Session summaries

The session summary panel lives in the chat right side panel. When enabled, it distills a session into the few things that make returning to it cheap: what the person was trying to do, what is actually true now, and what is still open. It is generated by a separate background pass after a turn completes — you do not write it, and reading this skill does not trigger it.

Use this skill to explain the panel, diagnose why it looks empty or wrong, and help the person get more out of it. It changes how you talk about the feature, never how the summary is produced.

Turning it on

It is off by default because summarizing spends tokens on a turn the person did not ask to pay for. The single opt-in is Settings → Chat → Sessions → Session summaries. Point them there rather than editing config by hand.

  • An unchanged session is served from cache for free — the cost is only on turns that actually change the session.
  • The cadence and caps (minimum user turns before the first summary, how often it rebuilds, how many intents it keeps) are power-user knobs in config.json under session_summary.*, not in the UI. Mention them only if asked.

What the panel is built from

The summary is organized by intent — a goal the person pursued, which can span many turns. A session that pivoted has several intents; a topic label is not an intent. Each intent carries:

  • status — about the work: active, completed, or abandoned.
  • verified — about the result, independent of status: was the outcome ever confirmed? Shipped-but-never-run, diagnosed-but-never-fixed, and merged-but-never- seen are all completed yet unverified. This is the panel's most useful signal; it is exactly the work a person forgets. It is three-valued: true confirmed, false shipped-but-unconfirmed, and null when confirmation does not apply — so an absent verification is not the same as a failed one. The panel never shows the two fields separately: it shows one chip, Done, Needs you (completed but false), Active or Dropped.
  • progress — a short runbook of what is true now and known to work, not a turn-by-turn history. Shorter is better here.
  • next steps — inferred open actions, each with why it matters and what to expect. An intent that needs nothing has none.
  • project notes — a handful of session-scoped operational facts (a required flag, a step that must follow a change, a name you were corrected on). Durable cross-session preferences belong in lessons, not here.
  • turn ranges — each intent shows which turns it spans, how many times the session returned to it, and the turn it pivoted from, so a session that ping-ponged between two goals reads as such.

In the panel these read as You asked for (the goal), Where it stands (progress), Suggested next (next steps) and How this project works (project notes, a collapsed footer) — use the panel's words when pointing at a section.

Enabling it summarizes new turns only: earlier turns are not backfilled, so an old session stays unsummarized until it gets another turn or the person presses Summarize.

Why a summary looks wrong or empty

  • "Session summaries are off." The feature is disabled; point at the Settings toggle above.
  • "No summary yet." No pass has stored a summary for this session: it has not reached the minimum user turns, it is an incognito or temporary session (those never get one), its last turn did not end cleanly, or the pass produced nothing usable. A brand-new or one-exchange session has no intent structure worth extracting. Once the session is long enough the panel offers a Summarize button that forces a pass on demand (not offered for incognito or temporary sessions); it is refused while a turn is running (Cannot summarize while a turn is running) or while another summary is being written — both are wait-and-retry, not failures.
  • It describes an older state. The panel serves the last cached pass and marks it stale rather than blocking, so the newest turns may not be in it yet.
  • It reads like a changelog. Very large intents flatten into history. The fix is narrower, clearly-bounded goals, not a longer summary.
  • A withdrawn thing still shows. A retraction ("revert that", "I was wrong") is the truth; if it appears anyway, that is a generation miss worth reporting, not a setting to change.

Make a session summarize well

You improve the raw material just by working clearly:

  • Name the goal in the person's terms when a new intent starts, so the intent title is theirs, not a topic guess.
  • Mark the boundary. A commit, a merge, or an opened PR punctuates a session more reliably than any phrasing. Say when one goal is done and another begins.
  • State the current truth, then move on. Facts go stale inside one session — a version, path, or count stated early may change. The latest statement wins.
  • Distinguish shipped from verified. Say plainly when something was merged but not yet run or seen, so the intent is not recorded as confirmed.
  • Preserve corrections. A correction from the person is the highest-value signal in the transcript; never paper over one.