Run the self-review pass a `/flow` or `/flow-fast` run deferred, inline on this session's model, from the saved context bundle; file, rate, write the report, delete the bundle. Standalone, not a pipeline stage. Use for /flow-self-review.
Resources
2Install
npx skillscat add tweety53/agents/flow-self-review Install via the SkillsCat registry.
Run the self-review reasoning pass a /flow or /flow-fast run deferred (## self review: defer, per skills/flow-contracts/project-configuration.md), from the context bundle run 2
step 9 saved — skills/flow-contracts/finish-contract-run2.md step 9 is canonical for that
bundle's shape and the five-angle table below — or 5. Verify (skills/flow-fast/SKILL.md)
saved on the change branch before landing. The pass runs inline, in this session, on whatever model it is
already on — no subagent, no dispatch. Picking a stronger model than the
same-run pass would have used is done by picking the model this session runs on (/model) before
invoking this command, not by anything this skill itself resolves.
This is a standalone command, not a pipeline stage. It takes one change name, writes no
per-change state file, and marks no flow stage call.
No flags. The only argument is the change name.
Announce at start: "Using flow-self-review."
Workflow
1. Resolve and refuse
<bundle> is <project>/docs/self-review/<name>-context.md. Absent: print everydocs/self-review/*-context.md present (or none pending when there are none) and stop.
git branch --show-current must be <default-branch> (the project's own default branch). A
checkout on any other branch: print the branch and stop.
2. Read the bundle and run the five angles
Read <bundle> in full. Run the five-angle table over it, inline, every angle explicit —
present-but-empty for an angle with no findings, never omitted:
| # | Angle | Label |
|---|---|---|
| 1 | Problems encountered, and what pipeline change would avoid them | flow-fix |
| 2 | Token/time cost, and what would reduce it without quality loss | flow-cost |
| 3 | What went well, and how to reproduce it | flow-improvement |
| 4 | What could be automated or moved to a script | flow-automation |
| 5 | What could move to the Go app or its persistent storage | flow-stats-app |
What may be filed is bounded by run 2 step 9's A finding is filed only from the five angles
paragraph (skills/flow-contracts/finish-contract-run2.md).
One combined pass — never five separate reads. A deferred pass covers what the bundle holds
and nothing a same-run session could still remember beyond it — Run 2 — the branch is merged (skills/flow-contracts/finish-contract-run2.md), step 9 — say so in the report, never imply
parity with a same-run pass.
3. Explain, then ask
Every finding is explained in the message body first, before any prompt fires — what was
observed, what breaks, and what the fix would be. The filing ask and the rating are oneAskUserQuestion call, shaped exactly as run 2 step 9's own — Run 2 — the branch is merged (skills/flow-contracts/finish-contract-run2.md), step 9: up to three multi-select questions of
three findings each, every option prefixed with its angle's label, plus None — file nothing
as the default; the rating last, 5 — excellent / 4 — good / 3 — fine / 2 — rough, a 1
typed through the tool's free-text "Other". More than nine findings roll the overflow into one
further call of the same shape, without the rating.
4. File chosen findings
File each chosen finding as a Jira issue per Labels on issues the pipeline creates (skills/flow-contracts/jira-integration.md), carrying its angle's label on top of that set.## jira absent or none in <project>/.flow/project.md, or no Atlassian tooling available in
this session: print ⚠ Jira: skipped — <reason> and record that finding declined instead.
5. Write the report, delete the bundle, land it
Write <project>/docs/self-review/<name>-self-review.md in the shape<project>/scripts/check-self-review-report.sh checks — one section per angle, all five present; each
finding one line naming its angle's label, the finding, and its disposition (filed: <KEY> ordeclined); an angle with no findings carrying the explicit none-marker — plus one line under the
title:
**Deferred:** reasoning pass run on <model named in this session's own system prompt> from <bundle path>Delete <bundle>. Run <project>/scripts/check-self-review-report.sh when the project declares
it in <project>/.flow/project.md's ## lint section; fix any violation before committing.
Exit 2 — the guard cannot answer at all (a missing or unreadable target directory, an
unreadable report inside it, an internal coverage.sh call failing) — is not a violation: report it and stop before the
commit, never commit a report the guard could not read.
Commit both paths in one commit through the landing chain's one script — the same invocationskills/flow/archive.md step 9 lands its own report with, differing only in the asserted branch,
the removed context-bundle path and the --push — since the round-trip through the five-angle
pass and the filing-and-rating prompt above is long enough that the branch is worth re-checking
rather than trusted from step 1 alone:
land-self-review-report.sh "<project>" "<default-branch>" \
"docs(self-review): <name> self-review report" \
"docs/self-review/<name>-self-review.md" \
"docs/self-review/<name>-context.md" \
--push "<default-branch>"A branch mismatch stops here — nothing is committed, pulled, or pushed. Staged work in the
checkout beyond the chain's own two paths refuses the commit (LAND-FOREIGN-STAGED) — clear
the staging or land from a clean checkout, never around the refusal. A rejected push leaves the
commit local and this run names it — never retried around.
6. Report
End naming the report path, the rating, and the Jira keys filed (or none).
Guardrails
- Never push directly to a protected branch under any name but the project's own default
branch, and never force-push.
Commands (user-facing)
| Intent | Say |
|---|---|
Run a deferred self-review pass for <name> |
/flow-self-review <name> |