User Input
$ARGUMENTS
You MUST consider the user input before proceeding (if not empty).
Supported argument: --since <commit|time> to bound the summary window.
Examples:
--since HEAD~10 — limit the timeline to phases that began after the
10th-most-recent commit on this branch.
--since 14:00 — only include phases that occurred after 2 PM local time
in the active session.
If no argument is given, summarize the entire live session.
Goal
Produce a single markdown document that lets a teammate (or future-you)
understand the flow of the session in under 60 seconds. The unit of
output is the working session, not any one artifact. Different
granularity from speckit.archive (per-feature, permanent) and
speckit.reconcile.run (drift-fixing).
Operating Constraints
STAY AT THE FLOW LEVEL. This summary is a narrative, not a
transcript. Do NOT include any of the following:
- Per-tool-call narration ("called Read on X.py, then called Edit on...")
- Diffs or hunks of any size
- Line numbers
- Code snippets longer than a single line
- File-by-file change logs (those belong in PR descriptions and
git log)
- Step-by-step reproductions of debugging
- Quotes from the conversation buffer longer than one short clause
STRICTLY ADDITIVE. Do not modify spec.md, plan.md, tasks.md,
or any source files. The only file this command writes is the session
summary itself.
IDEMPOTENT IN SPIRIT. A second invocation in the same session must
produce a comparable summary, not a summary of summaries. Ignore
previously generated session files when composing the new one.
Outline
Run .specify/scripts/bash/check-prerequisites.sh --json --paths-only from repo root and parse FEATURE_DIR from the JSON
output. All paths must be absolute.
- If
FEATURE_DIR is missing, empty, or the resolved directory does
not exist, fail fast with a clear error such as:
No feature directory resolved from current branch — /speckit.opsmill.summary requires an active feature branch.
Suggest the user switch to a feature branch and re-run.
Parse $ARGUMENTS for an optional --since <value>. Treat the
value as opaque — pass it through to git log --since=<value> if it
parses as a date/time, otherwise treat it as a git revision and use
git log <value>..HEAD. Do not attempt to interpret it any further.
Gather context for the summary, in this order of preference:
a. The live conversation context (primary source — the actual
session is what is being summarized).
b. git log on the current branch, optionally bounded by --since,
for outcomes that already landed as commits.
c. FEATURE_DIR/spec.md, plan.md, tasks.md if they exist — only
to anchor terminology, not to copy content.
Do not read every changed file. Do not generate diffs. Stay
at the level of "what phase of work was happening, and what did it
produce".
Compose the summary with exactly these three sections, in this
order:
Executive Summary
One paragraph (2–4 sentences). What was this session about? What was
the working theme? Reading just this paragraph should answer "what
did they spend their time on today?".
Timeline
A chronological bullet list. Each entry is a single short line in
the form HH:MM — <human-readable phase>, e.g.:
10:42 — investigated failing E2E test in deployments_create.py
11:05 — narrowed cause to driver init order
11:30 — applied fix and re-ran suite
Aim for 5–15 entries. Collapse near-duplicate phases (e.g. three
consecutive "ran tests" lines into one). If exact timestamps are not
recoverable, use relative ordering with no HH:MM prefix and a
leading dash only.
Outcomes
A short bullet list of concrete results from the session. Reference
paths and PRs only — no diffs. Examples:
- Opened PR #161 (speckit-extensions cleanup).
- Materially changed
.specify/extensions/auto/, tinyspec/.
- Decided: extensions invoke skills, not slash commands.
- Deferred: rewriting the auto extension's hook condition DSL.
Write the file.
- Path:
FEATURE_DIR/sessions/session-YYYY-MM-DD-HHMM.md, where
YYYY-MM-DD-HHMM is the local time at invocation.
- Create
FEATURE_DIR/sessions/ if it does not exist.
- If a file with the same
HHMM already exists, append a numeric
suffix (-2, -3, …) rather than overwriting.
Print the resolved path back to the user as the final message,
plus a one-line reminder that the summary is intentionally
high-level and the conversation transcript / git log remain the
sources of truth for detail.
Quality Bar
A reader who was not in the session should, after under 60 seconds with
the document, be able to answer:
- What was the session trying to accomplish?
- What was the rough order of work?
- What concretely shipped, what was decided, what was deferred?
If the draft cannot pass that bar, tighten it before writing. If it
exceeds ~80 lines of markdown, you are too detailed — cut.
1---2name: speckit-opsmill-summary3description: Produce a flow-level summary of the current Claude Code session — executive summary, chronological timeline, and outcomes — written into the active feature directory next to spec.md / plan.md.4---56## User Input78```text9$ARGUMENTS10```1112You **MUST** consider the user input before proceeding (if not empty).1314Supported argument: `--since <commit|time>` to bound the summary window.15Examples:1617- `--since HEAD~10` — limit the timeline to phases that began after the18 10th-most-recent commit on this branch.19- `--since 14:00` — only include phases that occurred after 2 PM local time20 in the active session.2122If no argument is given, summarize the **entire live session**.2324## Goal2526Produce a single markdown document that lets a teammate (or future-you)27understand the *flow* of the session in under 60 seconds. The unit of28output is the working session, not any one artifact. Different29granularity from `speckit.archive` (per-feature, permanent) and30`speckit.reconcile.run` (drift-fixing).3132## Operating Constraints3334**STAY AT THE FLOW LEVEL.** This summary is a narrative, not a35transcript. Do **NOT** include any of the following:3637- Per-tool-call narration ("called Read on X.py, then called Edit on...")38- Diffs or hunks of any size39- Line numbers40- Code snippets longer than a single line41- File-by-file change logs (those belong in PR descriptions and `git log`)42- Step-by-step reproductions of debugging43- Quotes from the conversation buffer longer than one short clause4445**STRICTLY ADDITIVE.** Do not modify `spec.md`, `plan.md`, `tasks.md`,46or any source files. The only file this command writes is the session47summary itself.4849**IDEMPOTENT IN SPIRIT.** A second invocation in the same session must50produce a comparable summary, not a summary of summaries. Ignore51previously generated session files when composing the new one.5253## Outline54551. Run `.specify/scripts/bash/check-prerequisites.sh --json --paths-only` from repo root and parse `FEATURE_DIR` from the JSON56 output. All paths must be absolute.5758 - If `FEATURE_DIR` is missing, empty, or the resolved directory does59 not exist, **fail fast** with a clear error such as:60 `No feature directory resolved from current branch — /speckit.opsmill.summary requires an active feature branch.`61 Suggest the user switch to a feature branch and re-run.62632. Parse `$ARGUMENTS` for an optional `--since <value>`. Treat the64 value as opaque — pass it through to `git log --since=<value>` if it65 parses as a date/time, otherwise treat it as a git revision and use66 `git log <value>..HEAD`. Do not attempt to interpret it any further.67683. **Gather context** for the summary, in this order of preference:6970 a. The live conversation context (primary source — the actual71 session is what is being summarized).72 b. `git log` on the current branch, optionally bounded by `--since`,73 for outcomes that already landed as commits.74 c. `FEATURE_DIR/spec.md`, `plan.md`, `tasks.md` if they exist — only75 to anchor terminology, not to copy content.7677 Do **not** read every changed file. Do **not** generate diffs. Stay78 at the level of "what phase of work was happening, and what did it79 produce".80814. **Compose the summary** with exactly these three sections, in this82 order:8384 ### Executive Summary8586 One paragraph (2–4 sentences). What was this session about? What was87 the working theme? Reading just this paragraph should answer "what88 did they spend their time on today?".8990 ### Timeline9192 A chronological bullet list. Each entry is a single short line in93 the form `HH:MM — <human-readable phase>`, e.g.:9495 - `10:42 — investigated failing E2E test in deployments_create.py`96 - `11:05 — narrowed cause to driver init order`97 - `11:30 — applied fix and re-ran suite`9899 Aim for 5–15 entries. Collapse near-duplicate phases (e.g. three100 consecutive "ran tests" lines into one). If exact timestamps are not101 recoverable, use relative ordering with no `HH:MM` prefix and a102 leading dash only.103104 ### Outcomes105106 A short bullet list of concrete results from the session. Reference107 paths and PRs only — no diffs. Examples:108109 - Opened PR #161 (speckit-extensions cleanup).110 - Materially changed `.specify/extensions/auto/`, `tinyspec/`.111 - Decided: extensions invoke skills, not slash commands.112 - Deferred: rewriting the auto extension's hook condition DSL.1131145. **Write the file.**115116 - Path: `FEATURE_DIR/sessions/session-YYYY-MM-DD-HHMM.md`, where117 `YYYY-MM-DD-HHMM` is the local time at invocation.118 - Create `FEATURE_DIR/sessions/` if it does not exist.119 - If a file with the same `HHMM` already exists, append a numeric120 suffix (`-2`, `-3`, …) rather than overwriting.1211226. **Print the resolved path** back to the user as the final message,123 plus a one-line reminder that the summary is intentionally124 high-level and the conversation transcript / `git log` remain the125 sources of truth for detail.126127## Quality Bar128129A reader who was not in the session should, after under 60 seconds with130the document, be able to answer:131132- What was the session trying to accomplish?133- What was the rough order of work?134- What concretely shipped, what was decided, what was deferred?135136If the draft cannot pass that bar, tighten it before writing. If it137exceeds ~80 lines of markdown, you are too detailed — cut.