shiplight
Runs quality tests and verification checks for Shiplight projects from one command.
Installation
Paste this into Claude Code, Cursor, or any agent that can run commands.
SKILL.mdShow the author's original SKILL.md
---
name: shiplight
description: "Shiplight QA toolkit — the single entry point for all Shiplight test/QA work. Use ONLY when the user explicitly says 'shiplight' (e.g. 'write a shiplight test', 'use shiplight to verify X', 'shiplight cover') or invokes /shiplight. Routes to subcommands: init, setup-test-auth, update, create-yaml-tests, create-agent-verification, cover, fix, verify, review, ci, cloud, support, help."
---
# Shiplight
The single entry point for Shiplight QA work. This skill takes a **subcommand**
and routes it to the right workflow. Everything Shiplight-branded comes through
here; the description above is deliberately gated so this skill fires only when
the user names "shiplight" or types `/shiplight` — never on a generic "write a
test".
## Routing contract
1. **Identify the subcommand.** Match the argument against the dispatch table —
do **not** rely on the first token alone, because synonyms are often multi-word
(`yaml test`, `set up tests for my app`) and intents may lead with a non-token
word (`create yaml test`, `show failing tests`). In order: (a) an exact
canonical token as the leading word; (b) the longest canonical-token or synonym
**phrase** the argument contains; (c) overall intent against the synonym/intent
column. Pick the single best-matching subcommand.
2. **Pass-through context.** Forward whatever the selector didn't consume to the
subcommand as context. **Natural phrasing is expected — users won't type the
exact hyphenated token; match the intent and treat the rest as the target.**
Examples:
- `/shiplight cover checkout flow` → `cover` + context `checkout flow`
- `/shiplight create a yaml test for login` → `create-yaml-tests` (matched on
"yaml test") + context `for login`
- `/shiplight create agent verification for the signup flow` →
`create-agent-verification` (matched on "agent verification") + context
`for the signup flow`
3. **Dispatch.** Read the matching `references/<subcommand>.md` (or
`references/<subcommand>/index.md` for nested subcommands) and follow it,
carrying the context forward.
4. **Clarify, don't guess.** If the selector is empty (`/shiplight` alone) or
ambiguous (see Ambiguity notes), show the menu and ask **one** clarifying
question — the user wants to *act* but didn't say how. This differs from
`help`, which is informational: `help` lists/explains subcommands and **never
executes** (see `references/help.md`).
5. **Confirm destructive actions.** Never auto-run `init` against a non-empty
project — confirm first.
## Shared layer
- On every subcommand invocation (skip for `help` and `support`), identify the test project
root, then run `references/_shared/update-check.md` once (daily skill refresh +
`shiplightai` CLI version gate). It can **halt** the run: a CLI behind the
latest published version stops the subcommand before it starts, and offers an
upgrade.
- Each subcommand names the `references/_shared/` modules it needs (auth, mcp,
evidence-and-report, project-layout, ground-truth, knowledge, secrets,
vocabularies, test-spec-template). Read those before acting — they are the
single source of truth, not restated per subcommand.
## Subcommands (menu)
Show this grouped menu when invoked bare or when clarifying.
**Setup**
- `init` — scaffold a Shiplight test project + write `specs/context.md`
- `setup-test-auth` — configure login for the application under test and save reusable browser/Playwright state
- `update` — refresh installed Shiplight skills + the `shiplightai` CLI
**Author**
- `create-yaml-tests` — implement deterministic YAML E2E tests from a spec
- `create-agent-verification` — create a reusable agent-run verification script
- `cover` — decide test format + effort, plan, drive the producers, report
**Maintain**
- `fix` — reproduce and repair failing or drifted tests
**Check**
- `verify` — verify UI changes in the browser during local development
**Review**
- `review` — app-quality review (security, privacy, design, performance, …)
**Ship**
- `ci` — wire CI workflows + failure-triage pipeline
- `cloud` — read Shiplight Cloud test results (runs, failing/flaky tests, artifacts) and analytics (health summary, pass-rate/run trends, slowest/flaky rankings, failure attribution)
**Help**
- `help` — list subcommands, or `help <subcommand>` for details (does not execute)
- `support` — get human help: file a support ticket with session diagnostics, check replies
End the menu with one footer line:
`Stuck? /shiplight support reaches a human — the ticket drafts itself from this session.`
## Dispatch table
| Canonical | Synonyms / intents | Reference |
|-----------|--------------------|-----------|
| `init` | set up shiplight, new test project, scaffold | `references/init.md` |
| `setup-test-auth` | test app auth, application-under-test login, authenticated test account, save test session, storage state | `references/setup-test-auth.md` |
| `update` | self-update, upgrade skills, refresh skills, upgrade the shiplight cli, bump shiplightai, cli out of date | `references/update.md` |
| `create-yaml-tests` | yaml test(s), create a yaml test, write a yaml/e2e test, deterministic test, e2e test, write a test | `references/create-yaml-tests/index.md` |
| `create-agent-verification` | agent verification, create agent verification, verification script, repeatable agent check, live-env verification, full-stack test, cross-layer test, test the whole stack, drive the UI and check the backend/database, verify the backend state too, release smoke test, pre-release smoke | `references/create-agent-verification/index.md` |
| `cover` | coverage, test coverage, what's untested, coverage gaps, testing strategy, plan tests, write a spec, test plan, set up tests for my app, build tests, test this feature | `references/cover/index.md` |
| `fix` | failing test, triage, repair test, update test for product change | `references/fix.md` |
| `verify` | screenshot, verify the change, check the UI, visual check | `references/verify.md` |
| `review` | security review, review my app, accessibility, privacy, performance, seo | `references/review/index.md` |
| `ci` | github actions, ci setup, pipeline | `references/ci/index.md` |
| `cloud` | cloud results, test run results, failing tests, flaky tests, ci results, download artifacts, test health, pass rate, pass-rate/run trend, slowest tests, flakiest tests, failure attribution, failure breakdown, analytics | `references/cloud/index.md` |
| `support` | I'm stuck, contact support, talk to a human, human help, shiplight is broken, report a shiplight bug, file a ticket, support ticket, ticket status | `references/support.md` |
| `help` | what can shiplight do, list commands, usage, `?` | `references/help.md` |
## Ambiguity notes
- **"test" / "write a test"** → could be `create-yaml-tests` (deterministic, UI
focused) or `create-agent-verification` (spans UI **and** backend state). Default
to `create-yaml-tests` unless the user signals a core journey, backend/
cross-layer proof, release smoke, or live-env judgment — but if unclear, ask.
- **"smoke test"** → ambiguous alone. A quick UI pass over key screens is
`create-yaml-tests`; a pre-release check that a core journey works **and** left
the right backend state is `create-agent-verification`. Ask which, unless the
user names a backend expectation or a release gate.
- **"verify" / "verification"** → the *verb* (check a change now) is `verify`;
*creating a reusable verification script* is `create-agent-verification`. The
`create-` framing is the tell. Ask if the user's phrasing doesn't disambiguate.
- **"triage"** → in Shiplight this means `fix` (repair failing tests). Do not
confuse with `review`'s internal triage/plan step.
- **"failing tests" / "flaky tests"** → *reading* them from CI ("in the cloud",
"from the last run", plural reporting) is `cloud` (hosted results); *repairing* a
broken test ("my test is failing", "fix this") is `fix`. Ask if the phrasing
doesn't say which.
- **"report a bug" / "X is broken"** → depends on *what* is broken. The user's
app misbehaving is ground truth to report (`_shared/ground-truth.md`), not a
subcommand; Shiplight itself misbehaving (skill, CLI, cloud API) is
`support`. Ask if unclear which one the user means.
- **"login" / "auth"** → ask what is being authenticated when the target is
absent. Authentication for the application under test is `setup-test-auth`;
Shiplight platform authentication and `SHIPLIGHT_API_TOKEN` setup is the CLI
command `npx shiplight setup-api-token`, not a `/shiplight` subcommand.
## After a subcommand completes or aborts (next-step suggestion)
After a subcommand's final report — including the report of an aborted run —
optionally append **one** next-step suggestion. Rules:
- **Evidence-only.** A suggestion must be triggered by something already
observed during the run — the diff analyzed, the failure diagnosed, the
project state read. Never run extra analysis (a new git diff, file scan, or
browser session) just to decide a suggestion.
- **Silence is the default.** No trigger from the table → no suggestion line at
all. Failure states mostly suggest nothing: the user's next step is fixing
the product, not another Shiplight command. Suggestions fire on success —
"you proved it works; now make that durable / continuous / visible." The one
failure that does fire is the **Shiplight-side** failure row (`support`), and
it fires wherever the run stops — a mid-run abort report counts.
- **Gate on the nature of the change.** When the run started from a code change
that is backend-only or barely touches UI, suppress the browser-flavored
suggestions (`verify`, `create-yaml-tests`, `review design`); `cover` (picks
unit/contract/integration via its capability map) and
`create-agent-verification` (cross-layer live checks) are the useful pointers
there.
- **One line, statement not question.** Format:
`Next: /shiplight <cmd> — <reason from this run>`. Never auto-run the
suggested command; never ask a blocking yes/no. The user decides.
- **At most one suggestion** — two only when genuinely forked (e.g. `cover` vs
`create-yaml-tests` by scope).
- **Skip entirely in CI / non-interactive mode**, and after `update` / `help` /
`support`.
| After | Trigger observed during the run | Suggest |
|-------|--------------------------------|---------|
| `init` | app has login/authed routes | `setup-test-auth`; otherwise `cover` |
| `setup-test-auth` | invoked to unblock another command | resume that command; otherwise nothing |
| `verify` | passed on a meaningful flow with no YAML test covering it | `cover` (feature-level) or `create-yaml-tests` (single narrow flow) — verify is ephemeral, lock it in |
| `verify` | UI smells seen while driving: missing labels/roles, no `data-testid`s, brittle DOM, console warnings | `review design` (accessibility + testability) |
| `verify` | check failed, or the change was trivial | nothing |
| `fix` | diagnosis was **product change** and the change extends beyond the repaired tests | `cover <feature>` to refresh the testing-what spec |
| `fix` | repeated **locator drift** / no stable semantic hooks | `review design` (testability) — root-cause the drift instead of re-fixing every sprint |
| `fix` | repro came from a CI failure, or several tests shared one source | `cloud` to check blast radius / confirm the next run is green |
| `fix` | diagnosis was an **app bug** | nothing — report the bug (`_shared/ground-truth.md`) |
| `create-yaml-tests` | tests pass and no CI E2E workflow exists | `ci` |
| `create-yaml-tests` | flow's confidence needs API/DB/log state better judged than asserted | `create-agent-verification` |
| `create-agent-verification` | case `PASS` on a now-stable path **whose proof reduces to fixed conditions** | `create-yaml-tests` (promote to deterministic) — not when its worth is the judgment across evidence |
| `create-agent-verification` | `BLOCKED` on login/session bootstrap | `setup-test-auth` |
| `cover` | produced Shiplight tests, no CI wiring | `ci` |
| `cover` | report rows `BLOCKED` on auth/env | `setup-test-auth` |
| `review` | user fixed UI findings in-session | `verify` to confirm the fixes render |
| `review` | high-severity findings without regression coverage | `cover` |
| `ci` | workflow wired | push / open a PR to trigger it, then `cloud` for the first run's results |
| `ci` | no tests exist yet | `cover` first (precondition, per `ci/index.md`) |
| `cloud` | failing/flaky tests attributed `spec_issue` / drift | `fix` |
| `cloud` | attribution dominated by `app_regression` | nothing to run — an app bug to report |
| `cloud` | recorder sessions covering untested flows | `create-yaml-tests` from the recording |
| any | the run stopped on a **Shiplight-side** failure with no known fix — CLI crash, unexplained Shiplight API error, or the same step failing twice identically | `support` — the diagnostics for a ticket are already in this session |
Ships with 50 supporting files:
- references/_shared/auth.md
- references/_shared/evidence-and-report.md
- references/_shared/ground-truth.md
- references/_shared/knowledge.md
- references/_shared/mcp.md
- references/_shared/project-layout.md
- references/_shared/secrets.md
- references/_shared/update-check.md
- references/_shared/vocabularies.md
- references/ci/assets/ci-failure-triage.yml
- references/ci/assets/e2e-github-hosted.yml
- references/ci/assets/e2e-shiplight-hosted.yml
- references/ci/github-hosted.md
- references/ci/index.md
- references/ci/notifications.md
- references/ci/shiplight-hosted.md
- references/ci/triage.md
- references/cloud/index.md
- references/cover/assets/test-report-template.md
- references/cover/assets/test-spec-template.md
- … and 30 more
Mirrored from the author's public source. Install counts from the open skills registry.