/smoke-test
Goal-driven smoke test for the feature just implemented. Drives a browser (UI) or hits the running service (backend), both, when full-stack. Tests every behaviour acceptance criteria define plus exploratory edges, catches console errors / network failures / a11y issues /
$ npx -y skills add Flagrare/agent-skills --skill smoke-test --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.
- You can call itInvoke it directly when you want it.
- Slash command
/smoke-test
Context preview
The summary Claude sees to decide when to auto-load this skill.
Goal-driven smoke test for the feature just implemented. Drives a browser (UI) or hits the running service (backend), both, when full-stack. Tests every behaviour acceptance criteria define plus exploratory edges, catches console errors / network failures / a11y issues /
SKILL.md
smoke-test.SKILL.mdname: smoke-test
description: "Goal-driven smoke test for the feature just implemented. Drives a browser (UI) or hits the running service (backend), both, when full-stack. Tests every behaviour acceptance criteria define plus exploratory edges, catches console errors / network failures / a11y issues / contract violations / auth leaks / missing observability, fixes every gap or bug it finds, then re-runs until clean. Captures the successful trajectory as a permanent test before declaring done. Use after implementation and after figma-matcher (when UI), before /flagrare:wrap-up. Triggers when the user says 'smoke test', 'does this actually work', 'test the feature', 'validate this', 'launch the app and test', 'make sure nothing is broken', or finishes implementing a feature."
Smoke Test
A goal-driven validation pass for the feature you just implemented. The pass ends only when every scenario, both acceptance-criteria-defined and exploratory, passes against a real running instance, every gap or bug found has been fixed, and the working trajectory has been captured as a permanent test.
The word "smoke" is doing real work here: this is not a full regression suite. It is the shortest path that exercises the new behaviour end-to-end against a real running system. If it can't be done in under ten minutes, the scope is wrong, split the feature, not the test.
---
Why this exists
Implementation finishing and the feature working are two different events that teams routinely conflate. Tests pass, types check, lint is clean, and the feature is still broken in production because nobody opened the actual app or hit the actual endpoint. Static checks measure code, not behaviour. This skill closes that gap.
There is a second reason. The model that writes the implementation also writes its own test discipline. Without an external loop that exercises the running system, defects that live between units, exactly the defects integration tests are supposed to catch but rarely do completely, ship straight to review.
---
Step 1: Set the goal explicitly
Before any action, state the goal in one sentence. The goal owns this entire flow; the agent does not exit until the goal is met.
> **Goal:** validate that [feature name / ticket key] works end-to-end against a running instance. Every acceptance criterion passes, every exploratory edge passes, every gap or bug found is fixed before exit, and the successful trajectory is captured as a permanent test.
Surface the goal back to the user in plain prose so they can correct scope before the loop starts.
---
Step 2: Detect the domain
Inspect the staged diff (`git diff --staged --name-only`) and the recent context (intake brief if present, last few commits if not) to pick the domain.
| Signal | Domain | |---|---| | Diff touches `.tsx`/`.jsx`/`.vue`/`.svelte`/`.css`/`.scss`/component dirs, no backend handlers | `ui` | | Diff touches API handlers / controllers / route files / DB migrations / worker code, no frontend files | `backend` | | Diff touches both | `both` | | Ambiguous | ask via `AskUserQuestion` with the three options |
Load the matching reference file(s):
- `ui` → read `references/ui.md`
- `backend` → read `references/backend.md`
- `both` → read both. The priority order interleaves: do P0-P1 of each domain in parallel, then P2 of each, and so on, so a broken backend doesn't block UI validation and vice versa.
Skip the skill entirely when the diff is purely process / config / docs and no user-observable behaviour changed, say so explicitly rather than running an empty loop.
---
Step 3: Derive scenarios from acceptance criteria + diff
This is the part where AI assistance pays off most. Draft the scenario list once, then freeze it as something the loop executes deterministically.
Gather inputs:
- Acceptance criteria, from the intake brief (`## Acceptance Criteria` section), the ticket, the PR description, or directly from the user
- The diff, what the feature actually changed, not just what the ticket asked for (implementations often go beyond or under the spec)
- Skip-conditions, anything the user explicitly deferred ("error handling out of scope for this PR" stays out)
Emit a structured scenario list. Each scenario has:
- An ID (`S1`, `S2`, …)
- A priority tier (P0-P4, domain-specific; see the reference files)
- A one-line behaviour description, phrased as what the user / caller observes
- A pass condition that's objectively verifiable
Show the list to the user via `AskUserQuestion` with options to **Run all (Recommended)** / **Edit scope first** / **Cancel**. Don't start driving the browser or hitting the API before scope is confirmed, a smoke test against a wrong scope is just noise.
---
Step 4: Run the priority loop
Walk the scenarios in priority order, lowest tier first (P0 catches dead-on-arrival, P4 is nice-to-have). The reference files define each tier in detail; this section describes the loop, not the content.
For each scenario:
1. Execute it (drive the browser / hit the endpoint, see reference for tooling). 2. Capture the outcome and the *evidence*: a screenshot, the network log, the response body, the spans emitted, the console output. Evidence is what makes the fix-and-retest loop possible. 3. Record: `pass`, `fail`, or `blocked` (depends on a prior scenario failing).
If P0 fails, stop the cascade, fix P0 first, then restart from P0. P0 is "did the feature even load?", if not, everything else is noise. P1 onwards can collect failures and triage them together.
**No retries on flake.** A scenario that passes on second attempt without an intervening change is a defect, not a config setting. Investigate. Race conditions, hydration timing, and connection-pool warmup all hide behind retries.
---
Step 5: Fix-and-retest
For every `fail`, fix it before exit. Not "log it for later." Not "tracked in the PR description." Fixed.
Loop:
1. Pick the highest-priority failure. 2. Diagnose using the evidenc
Read more
name: smoke-test description: "Goal-driven smoke test for the feature just implemented. Drives a browser (UI) or hits the running service (backend), both, when full-stack. Tests every behaviour acceptance criteria define plus exploratory edges, catches console errors / network failures / a11y issues / contract violations / auth leaks / missing observability, fixes every gap or bug it finds, then re-runs until clean. Captures the successful trajectory as a permanent test before declaring done. Use after implementation and after figma-matcher (when UI), before /flagrare:wrap-up. Triggers when the user says 'smoke test', 'does this actually work', 'test the feature', 'validate this', 'launch the app and test', 'make sure nothing is broken', or finishes implementing a feature."
Smoke Test
A goal-driven validation pass for the feature you just implemented. The pass ends only when every scenario, both acceptance-criteria-defined and exploratory, passes against a real running instance, every gap or bug found has been fixed, and the working trajectory has been captured as a permanent test.
The word "smoke" is doing real work here: this is not a full regression suite. It is the shortest path that exercises the new behaviour end-to-end against a real running system. If it can't be done in under ten minutes, the scope is wrong, split the feature, not the test.
---
Why this exists
Implementation finishing and the feature working are two different events that teams routinely conflate. Tests pass, types check, lint is clean, and the feature is still broken in production because nobody opened the actual app or hit the actual endpoint. Static checks measure code, not behaviour. This skill closes that gap.
There is a second reason. The model that writes the implementation also writes its own test discipline. Without an external loop that exercises the running system, defects that live between units, exactly the defects integration tests are supposed to catch but rarely do completely, ship straight to review.
---
Step 1: Set the goal explicitly
Before any action, state the goal in one sentence. The goal owns this entire flow; the agent does not exit until the goal is met.
> **Goal:** validate that [feature name / ticket key] works end-to-end against a running instance. Every acceptance criterion passes, every exploratory edge passes, every gap or bug found is fixed before exit, and the successful trajectory is captured as a permanent test.
Surface the goal back to the user in plain prose so they can correct scope before the loop starts.
---
Step 2: Detect the domain
Inspect the staged diff (`git diff --staged --name-only`) and the recent context (intake brief if present, last few commits if not) to pick the domain.
| Signal | Domain | |---|---| | Diff touches `.tsx`/`.jsx`/`.vue`/`.svelte`/`.css`/`.scss`/component dirs, no backend handlers | `ui` | | Diff touches API handlers / controllers / route files / DB migrations / worker code, no frontend files | `backend` | | Diff touches both | `both` | | Ambiguous | ask via `AskUserQuestion` with the three options |
Load the matching reference file(s):
- `ui` → read `references/ui.md`
- `backend` → read `references/backend.md`
- `both` → read both. The priority order interleaves: do P0-P1 of each domain in parallel, then P2 of each, and so on, so a broken backend doesn't block UI validation and vice versa.
Skip the skill entirely when the diff is purely process / config / docs and no user-observable behaviour changed, say so explicitly rather than running an empty loop.
---
Step 3: Derive scenarios from acceptance criteria + diff
This is the part where AI assistance pays off most. Draft the scenario list once, then freeze it as something the loop executes deterministically.
Gather inputs:
- Acceptance criteria, from the intake brief (`## Acceptance Criteria` section), the ticket, the PR description, or directly from the user
- The diff, what the feature actually changed, not just what the ticket asked for (implementations often go beyond or under the spec)
- Skip-conditions, anything the user explicitly deferred ("error handling out of scope for this PR" stays out)
Emit a structured scenario list. Each scenario has:
- An ID (`S1`, `S2`, …)
- A priority tier (P0-P4, domain-specific; see the reference files)
- A one-line behaviour description, phrased as what the user / caller observes
- A pass condition that's objectively verifiable
Show the list to the user via `AskUserQuestion` with options to **Run all (Recommended)** / **Edit scope first** / **Cancel**. Don't start driving the browser or hitting the API before scope is confirmed, a smoke test against a wrong scope is just noise.
---
Step 4: Run the priority loop
Walk the scenarios in priority order, lowest tier first (P0 catches dead-on-arrival, P4 is nice-to-have). The reference files define each tier in detail; this section describes the loop, not the content.
For each scenario:
1. Execute it (drive the browser / hit the endpoint, see reference for tooling). 2. Capture the outcome and the *evidence*: a screenshot, the network log, the response body, the spans emitted, the console output. Evidence is what makes the fix-and-retest loop possible. 3. Record: `pass`, `fail`, or `blocked` (depends on a prior scenario failing).
If P0 fails, stop the cascade, fix P0 first, then restart from P0. P0 is "did the feature even load?", if not, everything else is noise. P1 onwards can collect failures and triage them together.
**No retries on flake.** A scenario that passes on second attempt without an intervening change is a defect, not a config setting. Investigate. Race conditions, hydration timing, and connection-pool warmup all hide behind retries.
---
Step 5: Fix-and-retest
For every `fail`, fix it before exit. Not "log it for later." Not "tracked in the PR description." Fixed.
Loop:
1. Pick the highest-priority failure. 2. Diagnose using the evidenc
Showing the first part of this file.
Thirty-two skills that wrap around your development cycle in Claude Code. They turn tickets into ATDD plans, smoke-test features against a running app or service, hunt down bugs with runtime evidence, guard commits against doc drift, run seven-axis code
Repo: Flagrare/agent-skills
Other skills on flagrare-agent-skills.
- /atdd-plan
Produce an ATDD-first implementation plan in Claude Code's native plan mode, with named design patterns called out where they earn their keep. The skill enters plan mode automatically (via the EnterPlanMode tool), runs /flagrare:codebase-explore to ground the plan in the actual
Open skill - /brag-doc
Generate a comprehensive, impact-framed brag-doc entry for a chosen time window (day, week, biweek, month, or custom). Pulls authored PRs, reviews given, commits, deploys, and linked tickets across GitHub, local git, and configured MCPs, then synthesises a themed narrative,
Open skill - /bug-bash
Programmatic bug bashing, ingest a prescribed test plan (Notion, markdown, pasted spec), drive a real running system (browser via Chrome DevTools / Playwright MCP, backend via API tools when relevant), run every prescribed case with evidence, then do exploratory passes
Open skill - /codebase-explore
Explore the codebase to map conventions, reusable utilities, analogous features, and data flows relevant to a planned change. Returns raw findings (file paths, patterns, code snippets), does NOT produce a plan. Used by /flagrare:atdd-plan as its codebase understanding step.
Open skill - /daily-code-review
Generate a daily code review report showing stale PRs, items needing your attention, and active work for your team. Use whenever the user asks for a PR report, code review status, daily standup prep, team PR overview, "what needs review", "what's stale", "show me open PRs",
Open skill - /debug-hunt
Evidence-first debugging for bugs that are hard to reproduce, intermittent, performance-related, or where previous static-analysis fixes have failed. Declares an explicit goal via /goal (the bug no longer reproduces), then loops through Hypothesis → Instrument → Reproduce →
Open skill

