# 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, or how to turn it on.

- Skill: `kirodotdev/session-summaries` (Agent Skill)
- Install (CLI): `npx skillmds@latest add kirodotdev/session-summaries`
- Raw SKILL.md: https://api.skillmd.com/api/skills/kirodotdev/session-summaries/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Research & Search
- Author: kirodotdev (https://skillmd.com/u/kirodotdev)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/kirodotdev/session-summaries

---


# 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.

