npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

superghost

v0.4.0

Published

Plain English test cases with AI execution and instant cached replay for CI/CD

Readme

SuperGhost

Plain English test cases with AI execution and instant cached replay for CI/CD.

Write tests in YAML. An AI agent executes them in a real browser or via API calls. Results are cached step-by-step so re-runs are instant and deterministic -- no flaky tests, no test code to maintain.

SuperGhost Demo

Install

Zero-install (recommended)

bunx superghost --config tests.yaml

Homebrew (macOS / Linux)

brew install lacion/tap/superghost
superghost --config tests.yaml

Global install

bun install -g superghost
superghost --config tests.yaml

Standalone binary

Download the latest binary for your platform from GitHub Releases.

chmod +x superghost-darwin-arm64
./superghost-darwin-arm64 --config tests.yaml

On first run, the standalone binary automatically installs MCP server dependencies to ~/.superghost/.

Quick Start

Create a tests.yaml file:

baseUrl: https://example.com
model: claude-sonnet-4-6

tests:
  - name: Homepage loads
    case: Navigate to the homepage and verify the page title contains "Example"

  - name: API health check
    case: Send a GET request to /api/health and verify the response status is 200

Run it:

bunx superghost --config tests.yaml

CLI

Usage: superghost [options]

Options:
  -c, --config <path>  Path to YAML config file (required)
  --headed             Run browser in headed mode (visible browser window)
  --only <pattern>     Run only tests matching glob pattern
  --no-cache           Bypass cache reads (still writes on success)
  --dry-run            List tests and validate config without executing
  --verbose            Show per-step tool call output during execution
  --output <format>    Output format (json)
  -V, --version        Output the version number
  -h, --help           Display help

Exit Codes

| Code | Meaning | |------|---------| | 0 | All tests passed | | 1 | One or more tests failed | | 2 | Configuration or runtime error (invalid config, missing API key, unreachable baseUrl) |

Test Filtering

Use --only to run a subset of tests by glob pattern:

superghost --config tests.yaml --only "Homepage*"
superghost --config tests.yaml --only "*API*"

The pattern is matched case-insensitively against test names.

Dry-Run Mode

--dry-run validates your config and lists all tests without executing them. Each test is labeled with its source — cache if a cached result exists, or ai if it would require an AI call:

superghost --config tests.yaml --dry-run

JSON Output

--output json writes machine-readable JSON to stdout. Human-readable progress still goes to stderr, so you can pipe the JSON output:

superghost --config tests.yaml --output json > results.json
superghost --config tests.yaml --output json 2>/dev/null | jq .

Combines with other flags like --dry-run and --only.

Verbose Mode

--verbose prints per-step tool call output during execution, useful for debugging test failures.

Provider Setup

SuperGhost supports four AI providers. Set the appropriate environment variable for your chosen provider.

Anthropic (default)

export ANTHROPIC_API_KEY=sk-ant-...
model: claude-sonnet-4-6

OpenAI

export OPENAI_API_KEY=sk-...
model: gpt-4o
modelProvider: openai

Google Gemini

export GOOGLE_GENERATIVE_AI_API_KEY=...
model: gemini-2.5-flash
modelProvider: gemini

OpenRouter

export OPENROUTER_API_KEY=sk-or-...
model: anthropic/claude-sonnet-4-6
modelProvider: openrouter

Configuration

All fields in tests.yaml:

| Field | Type | Default | Description | |-------|------|---------|-------------| | baseUrl | string | — | Base URL for all tests | | model | string | "claude-sonnet-4-6" | AI model identifier | | modelProvider | string | "anthropic" | Provider: anthropic, openai, gemini, openrouter | | browser | string | "chromium" | Browser engine: chromium, firefox, webkit | | headless | boolean | true | Run browser in headless mode | | timeout | number | 60000 | Global timeout in ms | | maxAttempts | number | 3 | Max retry attempts per test (1–10) | | recursionLimit | number | 500 | Max AI reasoning steps | | cacheDir | string | ".superghost-cache" | Directory for cached test steps | | context | string | — | Global context passed to every test | | tests | array | (required) | Array of test definitions | | tests[].name | string | — | Display name for the test | | tests[].case | string | (required) | Plain English test instruction | | tests[].baseUrl | string | — | Per-test URL override | | tests[].timeout | number | — | Per-test timeout override | | tests[].type | string | "browser" | Test type: browser or api | | tests[].context | string | — | Per-test context for the AI agent |

How It Works

  1. First run: The AI agent reads your plain English test case and executes it step-by-step in a real browser (via Playwright MCP) or via API calls (via curl MCP). Each step is recorded to a cache file.

  2. Subsequent runs: Cached steps are replayed directly against the browser/API without calling the AI. This makes re-runs instant and deterministic.

  3. Self-healing: If a cached step fails during replay (e.g., a selector changed), SuperGhost automatically falls back to the AI agent to re-execute that test. The new steps replace the stale cache.

Example App (E2E)

The e2e/ directory contains a fullstack Task Manager app that validates SuperGhost end-to-end and serves as a reference for writing test configs.

# Start the example app
bun run e2e:app
# Open http://localhost:3777

# Run smoke tests (2 tests — requires an AI API key)
bun run e2e:smoke

# Run browser UI tests (7 tests)
bun run e2e:browser

# Run API endpoint tests (7 tests)
bun run e2e:api

# Run all 16 tests
bun run e2e:all

The test runner exits gracefully when no API key is configured, making it safe for CI environments. See e2e/README.md for details.

Standalone Binary

When running as a standalone compiled binary (downloaded from GitHub Releases), SuperGhost cannot use bunx to spawn MCP server packages. Instead:

  • On first run, MCP dependencies (@playwright/mcp, @calibress/curl-mcp) are automatically installed to ~/.superghost/
  • Subsequent runs skip the install step
  • You must have a Playwright-compatible browser installed on your system (Chromium, Firefox, or WebKit)
  • SuperGhost does not auto-install browser binaries -- if Playwright cannot find a browser, it will display its own error message with install instructions