adversarial-qa
Exploratory QA of a running feature through its UI (Playwright) and/or API (curl) to find issues the plan and committed tests…
Records a feature's workflow outcome (steps run or skipped, review rounds, what each critic caught, short judgment) as a fixed-schema file in .workflow-log/. Use at the end of a /feature session, after the PR is opened or the feature is abandoned.
Claude Code
$ npx -y skills add cunhaax/ai-workflow --skill workflow-retro --agent claude-code
Codex
$ npx skills add cunhaax/ai-workflow --skill workflow-retro -a codex -y
Cursor
$ npx skills add cunhaax/ai-workflow --skill workflow-retro -a cursor -y
Gemini CLI
$ npx skills add cunhaax/ai-workflow --skill workflow-retro -a gemini-cli -y
GitHub Copilot
$ npx skills add cunhaax/ai-workflow --skill workflow-retro -a github-copilot -y
OpenCode
$ npx skills add cunhaax/ai-workflow --skill workflow-retro -a opencode -y
Windsurf
$ npx skills add cunhaax/ai-workflow --skill workflow-retro -a windsurf -y
name: workflow-retro description: > Records a feature's workflow outcome (steps run or skipped, review rounds, what each critic caught, short judgment) as a fixed-schema file in .workflow-log/. Use at the end of a /feature session, after the PR is opened or the feature is abandoned. license: MIT metadata: author: André Cunha
Record what the workflow did for this feature: which steps ran, what each caught, what that changed. Run at the end of a feature session (after the PR is opened, Step 9 of `/feature`) or when the feature is abandoned.
This is the **outcome half** of the record. The **cost half** is appended later by `/workflow-inspect`; until then (or if it isn't installed), the Cost section stays `pending`.
outputs
Anything not established → `unknown`, never a guess
commit it or move it into repo history
previous retro, or a multi-session feature) → update it (fill gaps, correct facts, append the new session ID), no duplicate. Never overwrite a `## Cost` section that `/workflow-inspect` already filled: the Step 3 template's `pending` text is for new records only
the numbers and add `pending re-inspection — sessions added since the last inspect` as the first line of the section, so `/workflow-inspect` picks the record up again
the branch name (its PR is already merged, or its dates are far from this session's) → ask the user: replace it, or pick another filename. Never merge two features into one record
review-only pass) → record what applies, mark the rest `n/a`
(feature worktrees get deleted after merge; the log must outlive them)
the **parent** of the printed shared `.git` dir is the main worktree root (in a plain clone, the repo root)
(e.g. a submodule, whose common dir is under the outer repo's `.git/modules/`) → unusual layout; ask the user where the log should live instead of writing there
`.workflow-log/feat-login-form.md`)
Record the pointer now: `/workflow-inspect` runs in a later session that can't know which transcript was the feature session. Transcripts are pruned after Claude Code's `cleanupPeriodDays` (~30 days by default); the join must happen within it.
Get the current session ID, in order: 1. `printenv CLAUDE_CODE_SESSION_ID` (single command). Its value is the session ID; the transcript is `<session-id>.jsonl` somewhere under `~/.claude/projects/` 2. Unset → heuristic: the most recently modified `.jsonl` anywhere under `~/.claude/projects/` (a single `find`), searched globally since transcripts are filed under the session's *launch* directory, not necessarily the current worktree's
sessions) → ask the user which one; never pick silently 3. Neither works (variable unset, directory missing or ambiguous) → record `Sessions: unknown`. Both the variable and the on-disk layout are undocumented Claude Code behavior; a wrong-but-plausible ID silently corrupts the later cost-join, an honest `unknown` merely skips it
Also:
they can identify them, e.g. by date); otherwise `earlier sessions: unknown`
session ID is the load-bearing pointer: `/workflow-inspect` finds transcripts by global search for `<session-id>.jsonl`, never by deriving a directory from this path
Draft the file with exactly this structure (fixed schema; later tooling aggregates across files, so keep headings and field labels verbatim):
# Workflow retro — <branch> - Date: <YYYY-MM-DD of this retro> - Branch: <branch> - PR: <url | not opened | abandoned> - Plugin version: <installed workflow plugin version, if discoverable | unknown> - Sessions: <session ID(s), oldest first | unknown> - Project path: <absolute path(s) of the worktree(s) the sessions ran in | unknown> ## Steps | Step | Ran? | Notes | |------|------|-------| | 1a planner | yes / skipped / n/a | <why skipped, if skipped> | | 1b plan-critic | yes / skipped / n/a | <why skipped, if skipped> | | 1c approval | yes / n/a | plan revisions before approval: <N> | | 2 implement | yes / n/a | deviations: <N> minor, <N> material | | 3 tests | yes / n/a | final full run: <N> tests, <pass/fail> | | 4–6 code review | yes / n/a | rounds: <N>; FAIL items: <N>; NEEDS_DECISION: <N>; Open Questions: <N> | | 7–8 QA | yes / skipped / n/a | <why skipped>; findings: <N>; blockers: <N> | | 9 PR | yes / n/a | | ## Findings - plan-critic: <N> findings; adopted into plan: <N>; discarded: <N> - code-critic FAIL items, one line each: <what, and the fix or the user's override> - NEEDS_DECISION items, one line each: <what, and the user's decision> - Open Questions, one
Turns Claude Code into a small development team instead of one agent guessing alone — with a git-level gate that keeps the humans in charge of what actually ships.
Exploratory QA of a running feature through its UI (Playwright) and/or API (curl) to find issues the plan and committed tests…
Reviews code changes against project standards and the approved plan; returns PASS/FAIL/NEEDS_DECISION per checklist item plus…
Runs the full AI-assisted workflow for a non-trivial feature or change: plan, plan critique, user approval, implementation with…
Sets up and checks the AI workflow in a project that has this plugin installed: scaffolds missing AGENTS.md, CLAUDE.md, hooks,…
Critiques a draft implementation plan with pre-mortem, inversion, load-bearing-assumption and consistency checks; returns…
Drafts a structured implementation plan (approval summary with acceptance criteria, contract, files, edge cases, test strategy)…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.