Sniff

io.github.AboudjemPublished by GitHub account Aboudjemv0.7.1Updated Oct 24, 2026

QA + a11y scanner: walks your running app's real user flows and reports what's broken.

The publisher's own server: Sniff Mcp

Overview

AI-generated overview

Sniff walks a running web app in a real browser, clicks and fills forms like a user, and reports broken flows with proof.

What you can do
Sniff opens your running app in a real browser and exercises real user flows, then reports what actually broke. It covers twelve classes of bugs, including HTTP 500 routes, dead links, placeholder data, dead submit buttons, forms wiped by the back button, stuck spinners, and mobile overflow. Each finding carries the route, the ordered steps, a screenshot, and a console or network excerpt; findings without steps are not reported. It also offers a source-only scan and saved-result reading, and can emit terminal, HTML, or JSON reports.
When to use it
Use it when you want automated QA and accessibility-style checks against a running dev or staging app without writing and maintaining end-to-end tests. It suits pre-release smoke checks and CI gates, since a walk that finds bugs exits non-zero. It is less useful if you have no running app, in which case it falls back to a source-only scan.
Requirements
Runs locally as a stdio MCP server via npx; Node.js 22 or newer is required. It needs a running app to walk, usually on a local dev server, and the first walk downloads and caches a Chromium build, so that run needs internet access. No API key, account, or signup is required. An optional storage-state file can be supplied to walk a logged-in app.
Before you install
A walk clicks buttons and submits real forms, so it can create real data; point it at a dev or staging app, not production. Dead-link checking follows external links, so a walk makes requests to third-party URLs your pages already link to. Cookie and token values from a storage-state file are redacted from report text but not from screenshot pixels. The fix command is the only one that rewrites code, and only when you run it.

Installation

In SourceWeft

  1. Open Sniff in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

[sniff]

[npm version] [CI] [License Apache 2.0] [Stars]

English · 简体中文 · 日本語 · Español · Français

Point it at your running app. It walks your real user flows in a real browser and tells you what is actually broken, with proof.

What it does · Install · Use it · What you get · Works in your editor · Good to know

[sniff walking a buggy app and streaming findings with severity, confidence, steps to reproduce, and a fix]
bash
claude plugin marketplace add Aboudjem/10xclaude plugin install sniff@10x

What it does

Most linters read your source without ever running your app, and end-to-end frameworks ask you to write and maintain the tests yourself. sniff opens your running app in a real browser, clicks and fills things like a user would, and judges what actually happened.

  • It finds 12 classes of bugs, from HTTP 500 routes and dead links to placeholder data, dead submit buttons, forms wiped by the back button, stuck spinners, and mobile overflow.
  • It proves every one. Every finding carries the route and the ordered steps that produced it, plus the screenshot and the console or network excerpt the check captured. No steps, no finding.
  • It has been measured. On a fixture app planted with 21 bugs across all 12 classes, plus a clean control page, sniff finds 21 of 21 and reports nothing on the control page.

Install

The block above is the Claude Code path, through the 10x marketplace. For any other agent, the Vercel skills CLI installs the same three skills:

bash
npx skills add Aboudjem/sniff

To use it as a plain command line tool, with no editor involved:

bash
npx sniff-qa --url http://localhost:3000

The npm package is sniff-qa and the binary it installs is sniff. Do not run npx sniff, which is an unrelated package.

Node version, project install, and CI

Node.js 22 or newer. npm install -D sniff-qa adds it to a project's devDependencies, and npx sniff-qa ci writes a GitHub Actions workflow with browser caching and report artifacts.

Use it

1. Start your app, with whatever dev server your project already uses.

bash
npm run dev

2. Walk it, from a second terminal. sniff auto-detects a dev server on the common ports, so --url is optional, but passing it takes the guesswork out.

bash
npx sniff-qa --url http://localhost:3000

3. Read the findings. They print grouped by severity. Below is an abridged real run against this repo's own planted-bug fixture, from npx sniff-qa --url http://localhost:4321 --ci --max-pages 12:

text
sniff v0.8.0  walking http://localhost:4321
  26 findings (+1 low-confidence hidden; use --all)
  CRITICAL (1)    • [confirmed] Page returns HTTP 500      /crash  (route/broken-page)        - Navigate to /crash        - Server responded with HTTP 500      fix: The route throws server-side. Check the server logs/handler for this path and return a valid page or a proper error page.      shot: sniff-reports/crawl/_crash-desktop.png
✓ Scan complete: 26 issue(s) found. Exit code 1 so CI fails on bugs; pass --fail-on none to always exit 0.

Add --report for a self-contained HTML page you can send to someone. Run npx sniff-qa doctor if the environment looks wrong.

[How sniff works: crawl, act, assert, prove, report]

What you get

[The 12 classes of bugs sniff finds]
  • A terminal report grouped by severity, each finding with steps, a fix, and a screenshot path.
  • A shareable file, a self-contained HTML report with --report or JSON with --json.
  • An exit code, non-zero when findings reach the --fail-on severity, so CI fails on real bugs.
  • A confidence label on each. uncertain is hidden from the terminal unless you pass --all.

New in 0.8.0:

  • --caps scan,report narrows the MCP server to the source scan and the saved-results reader, with no browser launch and no browser download.
  • --storage-state auth.json walks a logged-in app. Cookie and token values from that file are redacted from the text of every written report, though not from screenshot pixels.
  • An assert block in sniff.config caps findings by severity (maxCritical, maxHigh, maxTotal), enforced on the command line by the walk, the source scan, and discovery.

Works in your editor

Works in Claude Code, Cursor, Codex, Copilot, Gemini CLI, and 70+ other agents through npx skills add. The skills are Markdown, so they run on whatever model your editor points at.

AgentOne-line install
Claude Codeclaude plugin install sniff@10x
Any of 70+ agentsnpx skills add Aboudjem/sniff
Codex, Gemini CLI, OpenCode, Pi./install.sh codex
VS Code (Copilot)./install.sh copilot
Everything elsesee docs/editors.md
Add it as an MCP server instead
bash
claude mcp add sniff-qa npx -- -y sniff-qa --mcpcodex mcp add sniff-qa -- npx -y sniff-qa --mcp

Cursor, VS Code, Gemini CLI, Windsurf, Continue, OpenCode, and Zed take the same command as a JSON or TOML entry. Every per-editor snippet is in docs/editors.md.

Good to know

[!IMPORTANT] No API key, no account, no signup, and no AI provider unless you set one up yourself. Walking and scanning never edit your source. sniff fix is the only command that rewrites code, and only when you run it.

[!NOTE] A walk clicks buttons and submits real forms, so it can create real data. Point it at a dev or staging app, not at production. The first walk also downloads a Chromium build and caches it, so that one run needs internet access.

  • It wants a running app. With no dev server up it falls back to a source-only scan and tells you how to start the real walk. npx sniff-qa scan runs that scan on purpose.
  • Dead-link checking follows external links, so a walk makes requests to the third-party URLs your own pages already link to.
  • A walk that finds bugs exits 1 on purpose, so CI fails the build. That is not a crash. --fail-on none turns off the severity gate, though an assert budget can still fail the run.

Learn more


Built by Adam Boudjemaa · Apache 2.0 · standing on Playwright and axe-core

Source: README.md at commit d65a038

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v0.7.1LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

Other Sniff integrations