Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Distill the current conversation into a structured note (decisions made, open questions, file pointers with line numbers, next 1–3 actions) and save to `quality_reports/session_logs/` before auto-compression. Differs from `/checkpoint` (explicit stop-point snapshot) and from auto-compaction (which truncates rather than distills). Use when context is approaching auto-compact threshold, when a long pipeline has accumulated many decisions, or when the user says "compress", "distil this session", "b
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-14 | ✗→✓ | ▲ Improved | 60% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 181% | 0% |
| case-05 | ✓→✗ | ▼ Worse | 87% | 0% |
| case-08 | ✓→✗ | ▼ Worse | 62% | 0% |
| case-09 | ✓→✗ | ▼ Worse | 63% | 0% |
/compress-session — distil, don't truncateAuto-compaction is lossy: it keeps recent turns and drops earlier ones, with no preservation of what was decided mid-session. /compress-session is the distil-not-truncate alternative — produce a structured note that the next session can resume from in under a minute.
Drew Breunig's "How Long Contexts Fail" identifies four failure modes for long-context sessions:
The template's 200-line MEMORY.md cap defends against distraction. The plan-on-disk convention defends against clash. Nothing currently defends against poisoning or directly against confusion — that's what this skill is for.
/checkpoint| | /checkpoint | /compress-session | |---|---|---| | When | Explicit stop-point (end of working session, before model switch, before collaborator handoff) | Forced — context is about to auto-compact, or the conversation has accumulated enough noise that distillation pays for itself | | What's preserved | Active plan, decisions, file pointers, next 1–3 actions | Same, plus an explicit "discarded as noise" line so the next session knows what was intentionally not kept | | Output location | quality_reports/checkpoints/YYYY-MM-DD_<slug>.md | quality_reports/session_logs/YYYY-MM-DD_compression_<slug>.md | | Triggering | User-invoked at a natural pause | User-invoked when context fatigue shows, OR proposed via PreCompact hook | | Memory updates | Optional auto-proposal of [LEARN] entries | Always proposes [LEARN] entries — distillation is exactly the moment when generalizable lessons surface |
Both skills are companions to the narrative session-log workflow at quality_reports/session_logs/. None replaces the others.
/context-status reports approaching threshold./compress-session automatically if the user has wired it in./checkpoint./clear. /compress-session is for preserving state, not for resetting.Read the most recent session log under quality_reports/session_logs/. If none exists, treat the current conversation as the source.
Optionally use $ARGUMENTS as a topic slug for the output filename.
Produce a note with these sections:
markdown# Session Compression — <YYYY-MM-DD> <topic-slug> **Source:** <session-log file or "current conversation"> **Token budget at compression:** <approximate %> **Why compress now:** <approaching auto-compact | mid-plan handoff | accumulated noise | user-requested> ## Active state - **Plan:** [link to active plan in `quality_reports/plans/` or "no active plan"] - **Branch:** <git branch> - **Last commit:** <SHA + subject> - **Working tree:** <clean | N modified files> ## Decisions made (this session) 1. [Decision]. **Why:** [one sentence]. **Where recorded:** [file:line, plan, or memory]. 2. ... ## Files touched - [path:line] — [what changed, one sentence] - ... ## Open questions - [Question]. **Blocker?** [Yes/No]. **Where to resume:** [pointer]. - ... ## Next actions (1–3 only) 1. [Specific next step with file pointer] 2. ... ## Discarded as noise Things explored during this session that should NOT carry forward — failed hypotheses, abandoned approaches, debugging dead-ends. Listing them explicitly defends against [Breunig's "poisoning" failure mode](https://www.dbreunig.com/2025/06/22/how-contexts-fail-and-how-to-fix-them.html) (hallucinated / wrong content from early turns getting quoted later). - [Hypothesis / approach / dead-end] — [why it didn't work] - ... ## Proposed `[LEARN]` entries Lessons worth promoting to MEMORY.md (or personal-memory.md if machine-specific). User reviews; nothing auto-merged. - `[LEARN:<category>]` <lesson>. **Evidence:** <pointer>. - ...
Write to quality_reports/session_logs/YYYY-MM-DD_compression_<topic>.md (slug derived from $ARGUMENTS or current plan name).
Report to the user:
The user reviews. Nothing auto-merges into MEMORY.md — that's /promote-memory's job.
Forkers who want automatic compression can wire /compress-session into the PreCompact hook:
json{ "hooks": { "PreCompact": [{ "hooks": [{ "type": "command", "command": "echo 'Run /compress-session before compacting' && exit 2", "timeout": 5 }] }] } }
The hook surfaces a reminder; the user runs /compress-session manually. We deliberately don't make the hook auto-invoke the skill — that bypasses the user's review step.
/compress-session as a routine replacement for /checkpoint. Checkpoints are cheap and frequent; compressions are heavier and reserved for forced compression.quality_reports/session_logs/YYYY-MM-DD_compression_<topic>.md (gitignored — session-state, not version-controlled).[LEARN] proposals.Other measured skills in the registry, with their headline benchmark lift.