smoke-test — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited smoke-test (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A smoke test (a.k.a. build-verification test / build-acceptance test / intake test) is a small, fast, broad-but-shallow suite that verifies a fresh build is stable enough to bother testing further. It is the release gate that protects the rest of the pipeline from wasting time on fundamentally broken code. The name comes from electrical engineering: power on the board and watch for smoke. If it smokes, stop.
This skill helps you design + scaffold one for the user's project. It is not a regression-suite generator and not a full QA strategy: smoke tests stay focused on a handful of critical happy-paths and connectivity checks.
Use it when the user wants any of:
Skip it for:
scope)
Smoke tests have a different shape from other tests. The user may not know these, so anchor every recommendation in them:
edge cases, validation rules, error-message wording. If the smoke suite is failing on something that needs a debate, it is too detailed.
milliseconds and rarely flake. UI checks finish in seconds and flake often. Reserve UI smoke for flows that cannot be observed at the API layer (login redirects, SPA boot).
developers will start skipping the gate; >15 min and the gate is effectively dead.
enterprise app. More than that is a regression suite in disguise.
often in production. They must not leave artefacts behind. Write paths either use ephemeral test data with cleanup, or are guarded so they can be skipped against prod.
Subsequent test stages do not run.
on call needs the failing payload, the response, the correlation id — not just "test 4 failed".
The full research distillation is in references/principles.md. Read it when the user asks "why" about any of the above, or when you need the formal definitions of smoke vs sanity vs regression vs retest.
Run the bundled detector and read its JSON output:
python <skill-path>/scripts/detect_stack.py <repo-path>It identifies the language(s), web/API framework, test runner(s), candidate entry points, discovered HTTP routes, and existing CI config. Route discovery is greedy/grep-based — treat the list as candidates the user should confirm, not ground truth.
If detection finds no language manifest (Analyzed 0 style result) or no framework and the user is asking specifically about HTTP smoke, say so plainly to the user and ask for the stack. Do not invent.
Before writing any code, present a short numbered list of what the smoke suite will cover. Each check should fit one line. Default shape:
/health, /healthz,/readyz, or framework default)
with 401)
record and returns its id
message bus
unauthenticated)
Adapt this list to the routes the detector found. Cross out items that do not apply. Add domain-specific items (checkout funnel, login, etc.) when obvious from the routes table. Cap at 10.
Confirm the list with the user before generating code. The user may know that "X is owned by another team and not in our smoke contract" or "the /admin path is irrelevant" — let them prune.
Match the detected stack to a template in references/templates/:
fastapi-pytest.md — FastAPI / Starlette + pytest + httpx (in-processTestClient)
flask-pytest.md — Flask + pytest + Flask test_client()django-pytest.md — Django / DRF + pytest-django + Django Clientexpress-vitest.md — Express + Vitest + supertestfastify-vitest.md — Fastify + Vitest + app.inject()go-httptest.md — Go net/http + standard testing +net/http/httptest.NewServer
gin-httptest.md — Go + Gin + gin.Engine.ServeHTTP + httptestaxum-tower.md — Rust / axum + tokio test + tower::ServiceExtFor frameworks not yet covered (Rails, NestJS, Spring, .NET, Actix, Rocket, …) read the closest template (HTTP-method-based ones for Rails/NestJS, axum-tower for Actix/Rocket) and adapt the imports + assertion library. Note explicitly in your response that the template is adapted rather than canonical, so the user calibrates trust.
The generated file should:
tests/smoke/,test/smoke/, cmd/<service>/smoke_test.go, etc.)
must pass; assertions reference the real routes — but env-specific values (base URL, bearer token, test user id) are clearly marked TODO/os.getenv("SMOKE_BASE_URL", "http://localhost:8080") so the user can wire them in.
not regression), runtime budget (<2 min), how to run locally, how to run in CI.
sleep(n) — use the framework's polling/waitprimitives (httpx retries, vitest vi.waitFor, Go eventually helpers).
After writing the file, show the user the runnable command. Example: "pytest tests/smoke -q -s — should run in <5 s against the in-process TestClient; set SMOKE_BASE_URL to hit a deployed environment instead."
If the detector found GitHub Actions / GitLab CI and the user asked about CI, append a minimal job snippet to the recommended file path. Otherwise mention the option in one sentence and stop. Do not stuff CI config the user did not ask for.
Close with a short reminder of the failure-debugging expectations:
Lead with the plan (the 5-10 list), then the artefact (the scaffold file path), then runtime + caveats. Do not paste the test code into the chat — point at the file. Example shape:
Detected: FastAPI 0.110, pytest + httpx, 4 routes (/health, /users/{id}, /orders, /orders/{id}). Proposed smoke suite (6 checks):
>
1. GET /health returns 200 + {status: ok} 2. GET /users/1 returns alice 3. GET /users/9999 returns 404 4. POST /orders without auth returns 401 5. POST /orders with bearer + known user returns 201 + id 6. GET /orders/{id} for the order created in #5 returns the same body
>
Wrote tests/smoke/test_smoke.py — pytest will run in <2 s in-process. TODO markers at the top set SMOKE_BASE_URL + SMOKE_TOKEN for deployed-env runs. Caveat: I did not detect a CI config; let me know if you want a GitHub Actions snippet that runs this on every PR.The research informing this skill covers smoke testing across many domains (mobile, ML, ERP, messaging). The current version of this skill focuses on web/API/software services. If the user asks for mobile or ML-pipeline smoke testing, say so plainly — the principles still apply (broad/shallow, API-first, fail fast) but the templates do not yet exist. Point them at references/principles.md for the conceptual guidance and offer to draft something stack-specific by hand.
Process metrics (Defect Escape Rate, MTTD, MTTR) are documented in references/principles.md for the user's awareness but are not emitted by this skill — they belong in a longer-running QA dashboard, not a per-build gate.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.