Agent skill

Smoke Test

by tobihagemann in tobihagemann/turbo

Launch the app and hands-on verify that it works by interacting with it.

MITAuto-check passedTesting & QA

Install Smoke Test

skills CLI
$ npx skills add tobihagemann/turbo --skill smoke-test -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install tobihagemann/turbo smoke-test --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/tobihagemann/turbo.git skills-src && mkdir -p .claude/skills && cp -r skills-src/codex/skills/smoke-test .claude/skills/smoke-test && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
smoke-test
GitHub stars
408
Token cost
~3.5k tokens
SKILL.md length
2,042 words
Files
1
Skills in repo
81
Repo updated
First seen
Licence
MIT

At a glance

Launch the app and hands-on verify that it works by interacting with it.

  • Works in 6 steps: Determine Scope → Determine Testing Approach → Run $test-run-rules Skill → …
  • The user asks to smoke test
  • SKILL.md covers Step 1: Determine Scope, Step 2: Determine Testing…, Step 3: Run $test-run-rules… and Step 4: Plan Smoke Tests, plus 3 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Smoke Test is an agent skill from tobihagemann/turbo. Launch the app and hands-on verify that it works by interacting with it. Falls back to an existing integration test suite when there is no interactive surface in scope. Use when the user asks to "smoke test", "test it manually", "verify it works", "try it out", "run a smoke test", "check it in the browser", or "does it actually work". Not a unit test runner.

Its SKILL.md is about 3.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Testing & QA, covering QA and bug reports. The repository describes itself as: Reusable workflows for planning, building, reviewing, and shipping with Claude Code and Codex. The licence is MIT.

When your agent uses it

  • The user asks to smoke test
  • Test it manually
  • Verify it works
  • Run a smoke test

Example prompts

  • “smoke test”
  • “test it manually”
  • “verify it works”
  • “/smoke-test”

Workflow steps

6 steps, taken from the step headings in SKILL.md.

  1. Determine Scope
  2. Determine Testing Approach
  3. Run $test-run-rules Skill
  4. Plan Smoke Tests
  5. Execute
  6. Report

What it can do on your machine

Read from SKILL.md and the folder at commit 931eda5. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Smoke Test loads about 3.5k tokens when it runs. Until then it costs about 93 tokens; SKILL.md has 2,042 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~93
When it runs · the whole SKILL.md, loaded when a task matches
~3.5k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from tobihagemann/turbo at commit 931eda5, republished under its MIT licence (© tobihagemann). 2,042 words, ~3,490 tokens.

Download SKILL.mdSave it as .claude/skills/smoke-test/SKILL.md (or your agent's skills folder).
name
smoke-test
description
Launch the app and hands-on verify that it works by interacting with it. Falls back to an existing integration test suite when there is no interactive surface in scope. Use when the user asks to "smoke test", "test it manually", "verify it works", "try it out", "run a smoke test", "check it in the browser", or "does it actually work". Not a unit test runner.

Smoke Test

Launch the app and hands-on verify that it works by interacting with it. Every smoke test is a concrete interaction with the running app: navigating a screen, clicking a control, filling a form, running a CLI command, and observing the result.

Step 1: Determine Scope

Resolve scope using the first match:

  1. User-specified — the user says what to test. Use that.
  2. PR — a PR URL or number is provided. Fetch the PR details (title, description, changed files, comments) and read the changed code.
  3. Conversation context — prior conversation contains recent work (a feature, fix, or refactor). Extract what changed, where it lives, and expected behavior.
  4. App-level discovery — fresh context with no prior work. Examine the project (entry points, routes, commands, README) to identify the app's core user-facing flows. Design tests that verify the app launches and its primary functionality works end-to-end.

Step 2: Determine Testing Approach

Always check for project-specific testing skills or MCP tools first. Use the fallbacks below when nothing project-specific is available:

  • Web app → browser-use@openai-bundled plugin
  • UI/native app → computer-use@openai-bundled plugin
  • CLI tool → direct terminal execution
  • Library with no entry point → report that smoke testing is not applicable and stop, unless the scope changes a check's configuration; then use direct terminal execution

Step 3: Run $test-run-rules Skill

Run the $test-run-rules skill to load the rules for launching and driving the app.

Step 4: Plan Smoke Tests

Before drafting tests, check whether there is something to exercise:

  • The scope changes a check's configuration (linter, formatter, type checker, or CI gate rules) — for that part of the scope, the check itself is the surface; plan tests against it and run them via the CLI Path in Step 5. Export the tree carrying the change to a scratch directory outside the checkout, add input there that each changed rule should flag or accept, and run the check on it. Pair each case with the same input under the configuration at the ref the resolved scope is measured against as its control, so a verdict the old configuration also produces is not credited to the change. Reach the check's installed toolchain and plugins from the scratch directory without installing into or modifying the checkout; when the check cannot run there, report the case unverified. When the change adds or narrows a suppression and the check reports unused suppressions, add a case with the suppressed cause removed and confirm the check reports the stale suppression.
  • No user-visible change in the resolved scope — look for an existing integration test target that covers the change and is not part of the default test suite (so it hasn't already run in this session). If one exists, run it via the Integration Test Path in Step 5. If nothing exists, report that there is no interactive surface to verify and no separate integration suite to fall back on, then stop.
  • Required infrastructure cannot be stood up in this session (backend service, auth provider, external dependency) — look for a stub under the test run rules before reporting blocked. When a stub works, record its response shapes and state transitions in the Setup contract's Mock boundaries item, along with the re-install condition for a call-site stub, and the PID and port of any stub process in Owned cleanup, then carry on with the plan. When the rules leave the scenario blocked, report blocked, naming what is missing and what was tried, then stop.
  • A test needs privileged state or a second participant (an entitlement or plan tier, an elevated role, seed data, a second concurrent client or session) — provision it under the test run rules. Keep the test in the plan once provisioning succeeds, and record the granted state in the Setup contract's Test identity item and every session, role, and record this run creates in Owned cleanup. Drop the test to unverified only after an attempt failed.

Otherwise, design targeted smoke tests. Each test should:

  1. Exercise a specific flow from the determined scope
  2. Verify the happy path works end-to-end
  3. Check one obvious edge case if applicable

Confirm any control, command, or other affordance a test names exists in the code before writing the test: search for the API that would implement it rather than inferring it from what the feature does. Where it cannot be confirmed, write the test against the outcome to verify and leave the affordance to be found during execution.

Confirm as well that the surface accepts a test's action in the state the test sets up. When the code refuses or swallows that action there, drive a state or entry point where the action goes through, or make the refusal itself the observation. When a scenario claims an affordance is available in a state, drive each such affordance in that state to its first observable effect and make that effect the pass condition; a refusal or swallowed action there fails the scenario. For an affordance whose effect is not cleanly undoable, stop at its confirmation step and cancel it. When the affordance has no confirmation step, act on a record this run created, record it in Owned cleanup, and carry any write to a shared external system through the test run rules' write sequence; plan the scenario as unverified when no such record can be created.

Output the plan as text:

Smoke Test Plan:
1. [Interaction with the running app] — what the interaction verifies
2. [Interaction with the running app] — what the interaction verifies
3. [Interaction with the running app] — what the interaction verifies

Approach: [browser-use@openai-bundled / computer-use@openai-bundled / terminal]
Dev server command: [command]

When another agent will execute this plan, append a Setup contract capturing what the executor needs and cannot safely rediscover:

  • Start environment — commands and variables to bring up each service in isolation
  • Test identity — the account or credentials the run authenticates as
  • Seed/reset — operations that establish or restore baseline data, plus the enumeration, the pre-run manifest, and the revert procedure of every write the plan authorizes
  • Required state — fixtures or preconditions each scenario depends on, including the validation constraints any payload the plan injects must satisfy to reach the code under test
  • Mock boundaries — external services stubbed, with the response shapes and state transitions to return
  • Owned cleanup — named sessions, ports, PIDs, and scratch resources this run creates and must release

Include an item when the executor would otherwise derive it from application source, or when it is state this run generated that the executor cannot rediscover safely; omit anything the running app makes self-evident. Require these details when the chosen testing approach prohibits reading application source as setup documentation.

Write each precondition as an observation the executor makes rather than a fact it can rely on, and say what to do when it does not hold: name the substitute setup, or direct the executor to report the precondition as wrong rather than the scenario as failed.

When the scope's happy path writes to a shared external system and those writes are not cleanly undoable, scope the plan to a path that provably cannot write: choose fixture data with nothing to act on, as the test run rules direct. State that scoping choice in the plan so the executor does not widen it back. When the writing path must run, work through the test run rules' write sequence.

When a scenario's pass condition is that nothing happens — no write, no call, no state change — pair it with a control that differs only in the dimension under test and whose expected outcome is that the effect does occur. A lone negative scenario cannot distinguish the behavior under test from a harness that never reached it. Pair each guard separately.

Show full SKILL.md (810 more words)Show less

When the scenario drives one of the inputs below, establish while writing the plan that it reaches the code under test. An input refused before it gets there produces the expected absence for the wrong reason, and the control does not distinguish that from the behavior under test:

  • Crafted payload — establish that the payload satisfies every validation layer between the injection point and the code under test, and record those constraints in the Setup contract's Required state item: a payload rejected at a parse boundary is refused before the code under test. State which layers the trace cannot settle rather than presenting the path as clear, and plan the scenario as inconclusive when the payload's reachability stays unestablished.
  • Repeat invocation — when the guard under test rejects a repeat invocation, establish that the affordance the scenario drives can be invoked a second time: a busy or pending state on that affordance refuses the repeat before the guard sees it. Name an entry point carrying no such state when the primary one has it, and plan the scenario as inconclusive when the repeat's reachability stays unestablished.

Run the control through a stub that intercepts the mechanism, introducing one when the negative scenario was scoped by fixture data alone, so observing the effect there establishes that the interception point is reached:

  • A call the code under test makes — a call-site stub is the cheapest interception: keep it installed across both runs and vary only the dimension under test, so the control's call is observed at the stub instead of reaching the real dependency.
  • No stub can intercept the mechanism — carry the control through the test run rules' write sequence, and record it in the plan as authorized scope rather than a widening.
  • Neither control can run — plan the negative scenario as inconclusive and say so.

Step 5: Execute

If a project-specific testing skill or MCP tool was identified in Step 2, use that. The paths below are fallbacks.

Web App Path

Start or reuse a dev server under the test run rules. Use the browser-use@openai-bundled plugin to interact with the app.

Core verification loop per test:

  1. Navigate to the relevant page/route
  2. Snapshot and verify expected UI elements exist
  3. Interact (fill forms, click buttons, navigate)
  4. Re-snapshot and verify the expected outcome
  5. Record pass/fail

Close the browser session and stop the dev server when done.

UI/Native App Path

Launch the app. Use the computer-use@openai-bundled plugin to interact with the UI.

Core verification loop per test:

  1. Capture the UI state
  2. Interact with the relevant controls
  3. Re-capture and verify the expected outcome
  4. Record pass/fail
CLI Path

Run commands directly.

Core verification loop per test:

  1. Run the command with expected inputs
  2. Check stdout/stderr for expected output
  3. Verify side effects (files created, data changed)
  4. Record pass/fail
Integration Test Path

Fallback when Step 4 routed here because nothing was interactive. Run multiple integration targets sequentially when they reset or mutate a shared test database, even when the checks are otherwise independent. Tail output in a background shell for long-running suites so failures surface as they happen.

Core verification loop per run:

  1. Run the command
  2. Capture the command's own exit code and its full summary output, never output filtered for selected summary lines
  3. Record pass/fail per named test when the output exposes them, otherwise overall. A nonzero exit fails the run even when every named test passed

Do not invent a target if none was found in Step 4 — that gate already stopped.

Step 6: Report

Record a test the test run rules leave blocked as UNVERIFIED and one they leave inconclusive as INCONCLUSIVE.

Before reporting a planned test as unverified, retry its setup under the test run rules for unavailable infrastructure and for privileged state, unless Step 4 already tried them and they failed. When the setup succeeds, run the test and record its result. Report a test as unverified only after that attempt, naming what was tried and what blocked it. Treat an existing unit test over the same behavior as no substitute: it leaves the interactive path unexercised.

Report a negative test and its control together: the negative reads as passed only when its control produced the effect, and as inconclusive otherwise.

Present a summary:

Smoke Test Results:
- [PASS] Test 1: description — [substitution, when one was driven]
- [FAIL] Test 2: description — [what went wrong]
- [UNVERIFIED] Test 3: description — [what was tried, what blocked it]
- [INCONCLUSIVE] Test 4: description — [why the result cannot be read]

Overall: X/Y passed, Z unverified, W inconclusive

If any test failed, include the relevant snapshot, screenshot, or output showing the failure.

Then call update_plan to mark this step completed and continue with the next step of the active workflow.

Rules

  • Keep tests focused on the determined scope.
  • When the scope has an interactive surface, drive that surface directly — a CLI command, HTTP request, or UI interaction — rather than importing an internal function to print its result or re-running the unit test suite. The Integration Test Path is the only sanctioned non-interactive fallback.
  • To diagnose failures, run the $investigate skill on the smoke test report.

© tobihagemann, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in codex/skills/smoke-test of tobihagemann/turbo.

Open the folder on GitHubat commit 931eda5

Compare with similar skills

Smoke Test next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Smoke Test compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Smoke Test this skilltobihagemann/turbo408—~3.5kAutomated safety check: PassMIT
Reproduce Chat Statesdifferent-ai/openwork24k—~673Automated safety check: PassCustom licence
Dynamo Jira TicketDynamoDS/Dynamo2k—~1.1kAutomated safety check: PassApache-2.0
Moav E2EMotherofallVPNs/MoaV449—~1.9kAutomated safety check: NotesMIT
Creating A Coral TaskHuman-Agent-Society/CORAL1.1k—~2.2kAutomated safety check: PassApache-2.0
Launch Rlmarin-community/marin3.9k—~894Automated safety check: PassApache-2.0

Similar skills

  • Reproduce Chat States

    different-ai/openwork

    Fires known chat states in the running OpenWork desktop app, such as provider errors, retries and tool steps, so you can check how each renders.

    24k GitHub stars~673 tokensUpdated today
    Testing & QAAuto-check passed
  • Dynamo Jira Ticket

    DynamoDS/Dynamo

    Create structured Jira tickets for Dynamo from bug reports, failing tests, or feature requests.

    2k GitHub stars~1.1k tokensUpdated yesterday
    Testing & QAAuto-check passed
  • Moav E2E

    MotherofallVPNs/MoaV

    Run and debug MoaV's end-to-end tests — real protocol connectivity (client-test.sh) and the moav CLI smoke test — against a LIVE server, via the self-hosted e2e workflow or a local test VPS.

    449 GitHub stars~1.9k tokensUpdated 3 days ago
    Testing & QAAuto-check: notes
  • Creating A Coral Task

    Human-Agent-Society/CORAL

    Author a new CORAL task — the three pieces that must line up (task.yaml, seed/, a packaged grader/), the coral init → coral validate → smoke-test loop, and how to pick a grader pattern (stdout…

    1.1k GitHub stars~2.2k tokensUpdated 1 mo ago
    Testing & QAAuto-check passed
  • Launch Rl

    marin-community/marin

    Define, validate, submit, or restart a Marin SkyRL experiment through its artifact main.

    3.9k GitHub stars~894 tokensUpdated today
    Testing & QAAuto-check passed
  • Actionbook Web Test

    actionbook/actionbook

    Run browser-based web tests against websites using Actionbook CLI.

    1.6k GitHub stars~9.7k tokensUpdated 1 mo ago
    Testing & QAAuto-check passed

More from tobihagemann/turbo

All 81 skills in this repo
  • Consult Oracle

    tobihagemann/turbo

    Consult ChatGPT Pro via ChatGPT browser automation for problems that resist standard approaches.

    408 GitHub stars~1.1k tokensUpdated yesterday
    Auto-check passed
  • Fetch PR Comments

    tobihagemann/turbo

    Fetch and summarize review feedback and conversation from a GitHub PR (unresolved review threads, review bodies, and PR conversation comments) without making changes.

    408 GitHub stars~967 tokensUpdated yesterday
    Auto-check passed
  • Recall Rationale

    tobihagemann/turbo

    Recall why a past change was made by locating the Claude Code transcript that produced it.

    408 GitHub stars~1.3k tokensUpdated yesterday
    Auto-check passed
  • Resolve PR Comments

    tobihagemann/turbo

    Evaluate, fix, answer, and reply to GitHub pull request review comments and conversation comments.

    408 GitHub stars~3.8k tokensUpdated yesterday
    Auto-check passed
  • Resolve PR Comments

    tobihagemann/turbo

    Evaluate, fix, answer, and reply to GitHub pull request review comments and conversation comments.

    408 GitHub stars~3.8k tokensUpdated yesterday
    Auto-check passed
  • Assess Technical Debt

    tobihagemann/turbo

    Assess project-wide structural technical debt: complexity hotspots, deprecated API usage, duplication clusters, architecture rot, and low-value tests.

    408 GitHub stars~2.8k tokensUpdated yesterday
    Auto-check passed

Categories

Questions about Smoke Test

What does Smoke Test do?

Launch the app and hands-on verify that it works by interacting with it. Smoke Test is an agent skill from tobihagemann/turbo. Launch the app and hands-on verify that it works by interacting with it.

When should I use Smoke Test?

Smoke Test fits situations like: the user asks to smoke test; test it manually; verify it works; run a smoke test.

How do I install Smoke Test in Claude Code?

Run `npx skills add tobihagemann/turbo --skill smoke-test -a claude-code`. Or copy the skill folder (codex/skills/smoke-test in tobihagemann/turbo) into .claude/skills/smoke-test in your project. Claude Code loads it when a task matches its description.

How do I install Smoke Test in Codex?

Run `npx skills add tobihagemann/turbo --skill smoke-test -a codex`. Or copy the skill folder (codex/skills/smoke-test in tobihagemann/turbo) into .agents/skills/smoke-test in your project. Codex loads it when a task matches its description.

Can I use Smoke Test in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add tobihagemann/turbo --skill smoke-test -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/smoke-test, .gemini/skills/smoke-test, .github/skills/smoke-test and .opencode/skills/smoke-test in your project.

What does Smoke Test need to run?

SKILL.md names no scripts, command-line tools or credentials: Smoke Test is instructions for the agent only.

Does Smoke Test access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Smoke Test safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Smoke Test use?

Smoke Test is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Smoke Test use?

About 3.5k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Smoke Test?

Skills that share tags, products or a category with Smoke Test: Reproduce Chat States (different-ai/openwork, 24k stars), Dynamo Jira Ticket (DynamoDS/Dynamo, 2k stars), Moav E2E (MotherofallVPNs/MoaV, 449 stars) and Creating A Coral Task (Human-Agent-Society/CORAL, 1.1k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Smoke Test?

tobihagemann (a GitHub user) maintains it in tobihagemann/turbo, which has 408 GitHub stars. The repository holds 81 skills in this directory. The repository was last updated on October 9, 2026.

Source: tobihagemann/turbo on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.