Delivery loop retro
Skill jgamaraalv/delivery-loop/.claude/skills/delivery-loop-retro
Write a structured retrospective of a delivery-loop run (frontend-delivery-loop, backend-delivery-loop, or fullstack-delivery-loop) that judges what went well, what went badly, where time/roundtrips/tool calls were wasted and in which skill or agent, how the agents integrated, and the session id + trace file paths — then save it as a Markdown report for skill-evolution-factory to act on. Use this the moment a delivery loop finishes (or stalls), whenever the user says "retro", "post-mortem", "retrospectiva", "feedback loop", "evaluate the loop", "how did the loop go", "what should we improve in the loop/agents", or asks to grade/critique a frontend/backend/fullstack delivery-loop run. Run it even if the user only gestures at it — a finished loop is the trigger.From its SKILL.md
npx -y skills add jgamaraalv/delivery-loop --skill delivery-loop-retroAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
12.7 KB, ~2.9k tokens by cl100k_base, as published. Nobody here has run it
Delivery-Loop Retro
What this is
A delivery loop (frontend-/backend-/fullstack-delivery-loop) just ran — an
orchestrator drove a team of specialist subagents through test → diagnose → fix →
review → re-test until ship-ready. This skill turns that run into a rigorous,
evidence-backed retrospective whose entire purpose is to make the next run
better. The report you write is not for a human to admire and forget; it is the
input to skill-evolution-factory, which mutates the load-bearing lines of the
loop skills and persona files and measures the delta. So every criticism you make
must point at a specific file and a specific instruction the factory can change.
You are the analyst, not the orchestrator. You did not (necessarily) drive the loop; your job is to reconstruct what happened from the evidence, judge it honestly, and hand the plugin maintainers a list of changes worth measuring.
When you run
The natural trigger is immediately after a loop reaches its boundary — "tests green + reviews clean + production-ready", or a stall the user wants diagnosed. You normally run in the same session that drove the loop, so you have live memory of the dispatches and the durable trace on disk. If you're pointed at a past session instead, pass its id to the collector (see below); everything else is the same.
The output, and where it goes
One Markdown report per loop run. Resolve the destination once, in this order:
- If a
docs/feedbackloops/directory exists at the plugin's dev checkout root (i.e.${CLAUDE_PLUGIN_ROOT}/docs/feedbackloops/), write there. This is whereskill-evolution-factoryreads its inputs. - Else write to
<host-repo>/docs/feedbackloops/(the project the loop ran in) and tell the user the dev checkout wasn't found, so they can move it.
Create the directory if missing. Filename:
<YYYY-MM-DD>-<loop>-<change-slug>-<session8>.md — e.g.
2026-06-18-frontend-delivery-loop-gated-nav-3e3febb7.md
(<session8> = first 8 chars of the session id; <change-slug> = the OpenSpec change
or feature the loop delivered, kebab-cased).
How to write the report
Step 1 — Collect the trace (deterministic, do this first)
Run the bundled collector from the host repo root (the project the loop ran in). It resolves the session id, transcript path, and a precise per-subagent roster (tokens, wall-clock, tool-call counts) from the harness transcript, plus each persona's persisted episode:
python3 "${CLAUDE_PLUGIN_ROOT}/.claude/skills/delivery-loop-retro/scripts/collect_trace.py"
# add --session <id> to target a past run; --json for the raw summary; --help for flags
Paste its Markdown Trace index verbatim into the report's appendix — it is your session-id + trace-paths deliverable and the spine of your metrics. Don't hand-tally what the script already counts; spend your effort on why the numbers look like they do.
The collector is the floor, not the ceiling. The richest evidence is the
per-subagent return content and the roundtrips between dispatches, which
live in the transcript and in your own memory of the run. references/evidence-sources.md
maps every signal — the transcript anatomy, the toolStats/toolBreakdown that
exposes a persona burning tool calls, the agent-memory episodes (taskId, objective,
specDrift, notes), and the OpenSpec change/vault artefacts. Read it before you
judge so you cite mechanisms, not impressions.
Step 2 — Judge along the axes that matter
Reconstruct the run, then form a defensible verdict on each axis. For every claim,
hold yourself to: what exactly happened, in which dispatch, costing what, and which
skill/agent line is responsible. The retro doc at
docs/retro-frontend-delivery-loop-2026-06-05.md is the bar — notice how each point
names a mechanism (a Radix uncontrolled flip, a .toastRegion:empty a11y regression)
and a cost, never a vibe.
- What worked — and why it worked, so the factory doesn't accidentally erode it.
A good thing you can't explain is a good thing you'll lose in the next edit. This section is
load-bearing downstream:
skill-evolution-factoryturns each named positive into a guard fixture — a behaviour the baseline passes that any promoted edit must still pass — so the goal of "push the negatives → 0 without losing the positives" is enforced mechanically. Name each positive concretely enough that it could be turned into a pass/fail check (the behaviour, the dispatch/episode that shows it, the mechanism), not as vague praise. Favour positives a fresh model would NOT do on its own — a project-specific convention, a named path, a rule the loop only follows because an instruction says so. A positive that's just generic good practice (a competent agent does it anyway) makes a weak guard: the factory can't protect a behaviour that won't regress when its instruction is removed. The load-bearing positives are the non-obvious ones. - What went badly — defects that escaped, wrong verdicts, gates that missed, fixers that decided scope they shouldn't have.
- Friction & waste — the heart of the report. Where did the loop spend time,
tokens, and tool calls it didn't need to? Look hard at: high tool-call/long-duration
dispatches (a driver re-learning the MCP sandbox; a fixer re-discovering
architecture); roundtrips (finding → fix → re-review ping-pong, a fixer blocked
on an artifact another in-flight task promised, a reviewer re-flagging the same
thing); redundant dispatches;
AskUserQuestionrounds that interrupted for decisions the user rubber-stamped. Attribute each one to the responsible skill/reference/persona line — that attribution is what the factory consumes. - Agent integration — how the team composed. Diagnose-vs-fix discipline (did
reviewers/drivers stay diagnose-only; did fixers avoid deciding what was wrong);
handoffs and
SendMessageresumes; parallel-wave file ownership (any clobbering or near-miss); whether the orchestrator routed findings to the right fixer; whether context was lost across a dispatch boundary. Both what clicked and what ground.
Step 3 — Turn every negative into an improvement target
This is what separates this report from a diary. For each problem worth fixing, produce a row the factory can act on directly. A target that doesn't name a file and an instruction is not done — keep working it until it does.
## Improvement targets for skill-evolution-factory
| # | Symptom (observed, with cost) | Target file | Section / load-bearing line | Proposed change (falsifiable) | Evidence |
|---|---|---|---|---|---|
| 1 | playwright-expert spent 247 tool calls / 29min re-discovering the MCP sandbox limits | `.claude/agents/frontend/playwright-expert.md` | the "live drive" grounding block | State the known sandbox limits (no `URL`/`Buffer`/`atob`/`setTimeout`; FS at repo root) inline so the driver doesn't probe for them | dispatch #18; episode `…_behaviour…txt` |
Rules that make a target usable:
- Open the real file and read the instruction before you propose changing it. This is the single highest-leverage habit, and the one that most often saves the factory's budget. The naive retro proposes "state X in the persona" — but X is frequently already there, and the real failure is that it's buried, unenforced, or contradicted elsewhere. Proposing to add something that exists is worse than no target: the factory spends a full tournament proving a no-op. So for every target, read the actual lines, quote the current instruction verbatim, and frame the change as a delta against that quote ("line X already says '…' — the fix isn't to add it, it's to hoist it out of a run-on bullet into a standalone pre-flight so it's salient"). A target you wrote without opening the file is a guess.
- Anchor to quoted text, not just a line number. Line numbers are convenient but rot — the files get edited (including by the factory), and a stale number points at the wrong place. The factory re-locates load-bearing blocks by content. So cite the section heading and a short quoted phrase of the instruction as the durable anchor; add the line number as a secondary convenience, not the sole locator.
- Name the real file. Loop workflow lives in
.claude/skills/<loop>/SKILL.mdand itsreferences/*.md; persona behaviour lives in.claude/agents/<area>/<persona>.md. Point at the one that actually carries the instruction — the factory mutates lines, so "improve the loop" is useless; "the wave-gate rule inreferences/review-gate.md" is actionable. Usereferences/evidence-sources.mdfor the file map if unsure. - Make the change falsifiable. Phrase it as a hypothesis the factory can test: "stating X inline will stop the driver probing for it," not "make the driver better."
- Generalize, don't overfit. You're proposing edits that fire across every future run. Fix the class ("fixers copy design snippets verbatim, latent bugs and all → tell the architect to mark snippets normative-vs-illustrative"), not the one instance.
- Cite evidence — dispatch number, episode filename, or transcript moment — so a maintainer can verify the symptom before paying to evolve against it.
- Don't invent problems. A clean run with no high-value targets is a finding; say so rather than padding the list. The factory wastes budget chasing non-discriminating edits.
Step 4 — Assemble and save
Write the report to the resolved path using the structure below, then tell the user
the path and give a 3-5 line verbal summary (loop, result, top 1-2 improvement
targets). The full annotated template with an example lives in
references/report-template.md; the canonical skeleton is:
# Delivery-Loop Retro — <loop> · <change-slug>
**Repo:** … · **Branch:** … · **Date:** … · **Result:** <ship-ready | stalled @ …>
**Session:** `<id>` · **Loop shape:** <waves / dispatches / review rounds in one line>
## 1. Metrics ← from the collector's Trace index, plus what you add
## 2. What worked (and why)
## 3. What went badly
## 4. Friction & waste ← per-incident, attributed to a skill/agent line, with cost
## 5. Agent integration
## 6. Improvement targets for skill-evolution-factory ← the hand-off table (Step 3)
## 7. Appendix — evidence
- Trace index (collector output, verbatim)
- Notable subagent returns / episodes / Urgent findings
The quality bar
- Evidence or it didn't happen. Every positive and negative cites a dispatch, an episode, a finding, or a transcript moment. No unsupported adjectives.
- Cost-quantified. Friction without a number ("slow", "wasteful") is unactionable. Attach tokens, tool calls, wall-clock, or roundtrip count — the collector gives you all four per dispatch.
- Attributed. Every improvement target names the file and instruction to change.
- Honest about the clean parts. Protecting what worked matters as much as fixing what didn't — an unexplained strength gets edited away. And don't manufacture targets to look thorough.
- Self-contained. A maintainer who never saw the run should be able to read the report, open the cited traces, and agree with each target without asking you anything.
Files in this skill
scripts/collect_trace.py— deterministic trace collector (session id, transcript path, per-subagent roster with tokens/duration/tool-calls, episode roster, loop detection). Stdlib-only, best-effort, never aborts the retro.references/evidence-sources.md— where every signal lives and how to read it: the transcript anatomy, agent-memory episodes, OpenSpec change/vault artefacts, and the file map (which skill/agent file carries which behaviour) you target in Step 3.references/report-template.md— the full annotated report template with a worked example, modelled ondocs/retro-frontend-delivery-loop-2026-06-05.md.
What ships with it: 3 files
27.6 KB alongside SKILL.md, 1 of them executable
references/
- evidence-sources.md8.0 KB
- report-template.md6.4 KB
scripts/
- collect_trace.pyruns13.3 KB