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 the transcript never says
either way — so an absent verification is not the same as a failed one.
- 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) and Suggested next (next steps) — 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
- "No summary yet." The feature is off, the session has not reached the
minimum user turns, or nothing has changed since the last cached pass. 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; 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.
1---2name: session-summaries3description: 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, or how to turn it on.4---56# Session summaries78The session summary panel lives in the chat right side panel. When enabled, it9distills a session into the few things that make returning to it cheap: what the10person was trying to do, what is actually true now, and what is still open. It is11generated by a separate background pass after a turn completes — you do not write12it, and reading this skill does not trigger it.1314Use this skill to explain the panel, diagnose why it looks empty or wrong, and15help the person get more out of it. It changes how you *talk about* the feature,16never how the summary is produced.1718## Turning it on1920It is **off by default** because summarizing spends tokens on a turn the person21did not ask to pay for. The single opt-in is **Settings → Chat → Sessions →22Session summaries**. Point them there rather than editing config by hand.2324- An unchanged session is served from cache for free — the cost is only on turns25 that actually change the session.26- The cadence and caps (minimum user turns before the first summary, how often it27 rebuilds, how many intents it keeps) are power-user knobs in `config.json` under28 `session_summary.*`, not in the UI. Mention them only if asked.2930## What the panel is built from3132The summary is organized by **intent** — a goal the person pursued, which can span33many turns. A session that pivoted has several intents; a topic label is not an34intent. Each intent carries:3536- **status** — about the work: `active`, `completed`, or `abandoned`.37- **verified** — about the *result*, independent of status: was the outcome ever38 confirmed? Shipped-but-never-run, diagnosed-but-never-fixed, and merged-but-never-39 seen are all `completed` yet unverified. This is the panel's most useful signal;40 it is exactly the work a person forgets. It is three-valued: `true` confirmed,41 `false` shipped-but-unconfirmed, and `null` when the transcript never says42 either way — so an absent verification is not the same as a failed one.43- **progress** — a short runbook of what is true now and known to work, not a44 turn-by-turn history. Shorter is better here.45- **next steps** — inferred open actions, each with why it matters and what to46 expect. An intent that needs nothing has none.47- **project notes** — a handful of session-scoped operational facts (a required48 flag, a step that must follow a change, a name you were corrected on). Durable49 cross-session preferences belong in lessons, not here.50- **turn ranges** — each intent shows which turns it spans, how many times the51 session returned to it, and the turn it pivoted from, so a session that52 ping-ponged between two goals reads as such.5354In the panel these read as **You asked for** (the goal), **Where it stands**55(progress) and **Suggested next** (next steps) — use the panel's words when56pointing at a section.5758Enabling it summarizes new turns only: earlier turns are not backfilled, so an59old session stays unsummarized until it gets another turn or the person presses60**Summarize**.6162## Why a summary looks wrong or empty6364- **"No summary yet."** The feature is off, the session has not reached the65 minimum user turns, or nothing has changed since the last cached pass. A brand-new66 or one-exchange session has no intent structure worth extracting. Once the67 session is long enough the panel offers a **Summarize** button that forces a68 pass on demand; it is refused while a turn is running69 (`Cannot summarize while a turn is running`) or while another summary is being70 written — both are wait-and-retry, not failures.71- **It describes an older state.** The panel serves the last cached pass and72 marks it stale rather than blocking, so the newest turns may not be in it yet.73- **It reads like a changelog.** Very large intents flatten into history. The fix is74 narrower, clearly-bounded goals, not a longer summary.75- **A withdrawn thing still shows.** A retraction ("revert that", "I was wrong")76 is the truth; if it appears anyway, that is a generation miss worth reporting, not77 a setting to change.7879## Make a session summarize well8081You improve the raw material just by working clearly:8283- **Name the goal in the person's terms** when a new intent starts, so the intent84 title is theirs, not a topic guess.85- **Mark the boundary.** A commit, a merge, or an opened PR punctuates a session more86 reliably than any phrasing. Say when one goal is done and another begins.87- **State the current truth, then move on.** Facts go stale inside one session — a88 version, path, or count stated early may change. The latest statement wins.89- **Distinguish shipped from verified.** Say plainly when something was merged but90 not yet run or seen, so the intent is not recorded as confirmed.91- **Preserve corrections.** A correction from the person is the highest-value signal92 in the transcript; never paper over one.