Skip to content
Back to skills

Verify

ASecurity

Project override for verifying a change in this repository. Activates whenever you are about to confirm that a change actually works — "verify this", "does this work", "check the page renders", "confirm the dashboard loads", "test this in a browser" — or whenever you are about to tell the user you could not verify something locally. In this repo a real headless Chromium IS available via `launchBrowser()`, so browser-testable changes must be verified locally rather than deferred to CI.

  • 14 stars
  • 0 votes
  • 0 copies
  • 5 views
  • Added September 2, 2026
ai-agentsrustgoshelltestingsecurity

Security analysis

A100/100

Scanned September 2, 2026

npx -y skills add app-vitals/shipwright --skill verify --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Verify?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Verify
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/app-vitals-verify/badge)](https://www.skillsdirectory.com/skills/app-vitals-verify)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: verify
description: >-
  Project override for verifying a change in this repository. Activates whenever you are about
  to confirm that a change actually works — "verify this", "does this work", "check the page
  renders", "confirm the dashboard loads", "test this in a browser" — or whenever you are
  about to tell the user you could not verify something locally. In this repo a real headless
  Chromium IS available via `launchBrowser()`, so browser-testable changes must be verified
  locally rather than deferred to CI.
---

# Verify — project override for this repository

This repo ships its own headless Chromium. **Do not fall back to "I can't test this locally,
trust CI"** for a change on a browser-testable surface here. That framing is wrong in this
repository, and using it hides regressions until after a PR is open.

## The rule

Before claiming a change is unverifiable locally, check which case you are in:

| Situation | What to do |
|---|---|
| The change touches a browser-testable surface **in this repo** | Verify it locally with `launchBrowser()`. Do not defer to CI. |
| The executing environment genuinely lacks the capability | Say so explicitly, name the missing capability, then fall back to CI. |
| The change is in **another repo** without this capability | Fall back to CI — this skill's guarantee is repo-local. |

"Genuinely lacks the capability" means Playwright's chromium-headless-shell is not installed —
e.g. non-agent-image local dev where `bun install` did not pull browsers. It does **not** mean
"running headless", "no display", or "in a container". Those are all supported.

## The local-verification path

`launchBrowser()` lives in [`agent/src/browser.ts`](../../../agent/src/browser.ts) (added in
PW-1.2). It returns a Playwright `Browser` already configured for this repo's restricted
container `securityContext` — headless, `chromiumSandbox: false`, and
`--no-sandbox --disable-setuid-sandbox`. You do not need to configure any of that yourself.

```ts
import { launchBrowser } from "./agent/src/browser.ts";

const browser = await launchBrowser();
try {
  const page = await browser.newPage();
  await page.goto("http://localhost:3460/dashboard");
  await page.waitForSelector("[data-testid=…]");
  // assert on rendered output, console errors, network failures
} finally {
  await browser.close();
}
```

Always close the browser in a `finally` — a leaked Chromium process will hang the test run.

## Browser-testable surfaces in this repo

- `site/*.spec.ts` — the Astro marketing site (Playwright, run from `site/`, **not** part of
  root `bun test`)
- `metrics/e2e/` — the metrics dashboard (`dashboard.e2e.ts`, served by `test-server.ts`)
- `admin/e2e/` — the admin console (`agents-page.e2e.ts`, `login-page.e2e.ts`)

A change to the server-rendered dashboard, the admin console UI, or the marketing site is
browser-testable. Verify it.

## What this does not change

This skill governs **how you verify**, not what tests you commit. The repo's test-layer
conventions still apply — tests land with the code, at the correct layer, in the same PR, with
the layer encoded in the filename (see `docs/testing.md`). Running a browser to confirm a
change works is not a substitute for landing the appropriate `*.e2e.ts` / `*.smoke.test.ts`
coverage.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.