sniff-216ddf — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited sniff-216ddf (Plugin) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
<picture> <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/Aboudjem/sniff/main/.github/assets/hero-dark.svg"> <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/Aboudjem/sniff/main/.github/assets/hero-light.svg"> <img alt="sniff" src="https://raw.githubusercontent.com/Aboudjem/sniff/main/.github/assets/hero-light.svg" width="100%"> </picture>
<p align="center"> <a href="https://www.npmjs.com/package/sniff-qa"><img src="https://img.shields.io/npm/v/sniff-qa?style=flat-square&color=FF006E&logo=npm&label=npm" alt="npm version"></a> <a href="https://github.com/Aboudjem/sniff/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/Aboudjem/sniff/ci.yml?style=flat-square&color=00D4FF&label=CI" alt="CI"></a> <a href="LICENSE"><img src="https://img.shields.io/badge/license-Apache_2.0-7C3AED?style=flat-square" alt="License Apache 2.0"></a> <a href="https://github.com/Aboudjem/sniff/stargazers"><img src="https://img.shields.io/github/stars/Aboudjem/sniff?style=flat-square&color=2BE8C8" alt="Stars"></a> </p>
<p align="center"><b>English</b> · <a href="READMEs/zh-CN.md">简体中文</a> · <a href="READMEs/ja.md">日本語</a> · <a href="READMEs/es.md">Español</a> · <a href="READMEs/fr.md">Français</a></p>
<p align="center"><b>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.</b></p>
<p align="center"><a href="#what-it-does">What it does</a> · <a href="#install">Install</a> · <a href="#use-it">Use it</a> · <a href="#what-you-get">What you get</a> · <a href="#works-in-your-editor">Works in your editor</a> · <a href="#good-to-know">Good to know</a></p>
<img alt="sniff walking a buggy app and streaming findings with severity, confidence, steps to reproduce, and a fix" src="https://raw.githubusercontent.com/Aboudjem/sniff/main/.github/assets/demo.gif" width="100%">
claude plugin marketplace add Aboudjem/10x
claude plugin install sniff@10xMost 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.
submit buttons, forms wiped by the back button, stuck spinners, and mobile overflow.
plus the screenshot and the console or network excerpt the check captured. No steps, no finding.
clean control page, sniff finds 21 of 21 and reports nothing on the control page.
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:
npx skills add Aboudjem/sniffTo use it as a plain command line tool, with no editor involved:
npx sniff-qa --url http://localhost:3000The npm package is sniff-qa and the binary it installs is sniff. Do not run npx sniff, which is an unrelated package.
<details> <summary>Node version, project install, and CI</summary>
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. </details>
1. Start your app, with whatever dev server your project already uses.
npm run dev2. 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.
npx sniff-qa --url http://localhost:30003. 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:
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.
<img alt="How sniff works: crawl, act, assert, prove, report" src="https://raw.githubusercontent.com/Aboudjem/sniff/main/.github/assets/how-it-works.svg" width="100%">
<picture> <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/Aboudjem/sniff/main/.github/assets/features-dark.svg"> <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/Aboudjem/sniff/main/.github/assets/features-light.svg"> <img alt="The 12 classes of bugs sniff finds" src="https://raw.githubusercontent.com/Aboudjem/sniff/main/.github/assets/features-light.svg" width="100%"> </picture>
--report or JSON with --json.--fail-on severity, so CI fails on real bugs.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, withno browser launch and no browser download.
--storage-state auth.json walks a logged-in app. Cookie and token values from that file areredacted from the text of every written report, though not from screenshot pixels.
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 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.
| Agent | One-line install |
|---|---|
| Claude Code | claude plugin install sniff@10x |
| Any of 70+ agents | npx skills add Aboudjem/sniff |
| Codex, Gemini CLI, OpenCode, Pi | ./install.sh codex |
| VS Code (Copilot) | ./install.sh copilot |
| Everything else | see docs/editors.md |
<details> <summary>Add it as an MCP server instead</summary>
claude mcp add sniff-qa npx -- -y sniff-qa --mcp
codex mcp add sniff-qa -- npx -y sniff-qa --mcpCursor, 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. </details>
[!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.
you how to start the real walk. npx sniff-qa scan runs that scan on purpose.
your own pages already link to.
--fail-on none turns off the severity gate, though an assert budget can still fail the run.
--storage-statesniff.config<p align="center"><sub>Built by <a href="https://github.com/Aboudjem">Adam Boudjemaa</a> · <a href="LICENSE">Apache 2.0</a> · standing on <a href="https://playwright.dev">Playwright</a> and <a href="https://github.com/dequelabs/axe-core">axe-core</a></sub></p>
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.