sniff について
sniff は、実行中の Web アプリを実ブラウザーで操作して再現可能な問題を報告する QA・アクセシビリティスキャナーです。検出結果には根拠が付き、コマンドラインツールや MCP サーバーとしても動作します。
主な機能
- 01実ブラウザーでアプリのフローを巡回
- 0212 種類の問題を検査
- 03手順と根拠付きの検出結果
- 04ターミナル・HTML・JSON レポート
- 05重要度に応じた CI 終了コード
- 06ログイン状態での巡回とソーススキャン
活用シーン
- 01リリース前の開発アプリの確認
- 02根拠に基づくブラウザーフローの不具合再現
- 03検出した問題の重要度による CI ビルドの制御
- 04ログインが必要なアプリフローの検査
MCP 対応
sniff は MCP サーバーとしてエージェントから利用できます。README には Claude Code と Codex への追加方法があり、ブラウザーを起動せずにスキャンと保存済み結果の読み取り機能を選択できると記載されています。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
English · 简体中文 · 日本語 · Español · Français
実行中のアプリを指定するだけです。実際のブラウザーで実際のユーザーフローをたどり、何が本当に壊れているのかを証拠とともに報告します。
できること · インストール · 使い方 · 得られるもの · エディターでの動作 · 知っておくとよいこと
claude plugin marketplace add Aboudjem/10x
claude plugin install sniff@10x
できること
多くのリンターはアプリを一度も実行せずにソースを読み取り、エンドツーエンドのフレームワークではテストを自分で作成して保守する必要があります。sniff は実行中のアプリを実際のブラウザーで開き、ユーザーと同じようにクリックや入力を行い、実際に起きたことを判定します。
- 12 種類のバグを検出します。 HTTP 500 が返るルートやリンク切れから、プレースホルダーデータ、動作しない送信ボタン、戻るボタンによるフォーム入力の消失、止まったままのスピナー、モバイル画面でのはみ出しまで検出します。
- すべてを証明します。 各検出結果には、その結果が得られたルートと順序どおりの手順に加えて、スクリーンショット、およびチェックで取得したコンソールやネットワークの抜粋が含まれます。手順がなければ、検出結果もありません。
- 性能を測定済みです。 12 種類すべてにわたる21個のバグを仕込んだテスト用アプリと、問題のない対照ページを使ったテストでは、sniff は21個すべてを検出し、対照ページでは何も報告しません。
インストール
上のブロックは、10x マーケットプレイスを利用する Claude Code 向けの方法です。それ以外のエージェントでは、Vercel skills CLI を使うと、同じ3つのスキルをインストールできます。
npx skills add Aboudjem/sniff
エディターを使わず、通常のコマンドラインツールとして使う場合:
npx sniff-qa --url http://localhost:3000
npm パッケージ名は sniff-qa、インストールされるバイナリ名は sniff です。無関係なパッケージなので、npx sniff は実行しないでください。
Node のバージョン、プロジェクトへのインストール、CI
Node.js 22 以降が必要です。npm install -D sniff-qa を実行すると、プロジェクトの devDependencies に追加されます。また、npx sniff-qa ci を実行すると、ブラウザーのキャッシュとレポートのアーティファクトを設定した GitHub Actions ワークフローが作成されます。
1. アプリを起動します。 プロジェクトで既に使っている開発サーバーを使ってください。
npm run dev
2. 別のターミナルから巡回します。 sniff は一般的なポートで開発サーバーを自動検出するため、--url は省略できますが、指定すれば推測する必要がなくなります。
npx sniff-qa --url http://localhost:3000
3. 検出結果を確認します。 重大度別にまとめて表示されます。以下は、このリポジトリに仕込まれたバグを含むフィクスチャに対して、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.
誰かに送れる単独で完結した HTML ページを作成するには、--report を追加してください。環境に問題があるように見える場合は、npx sniff-qa doctor を実行してください。
得られるもの
- ターミナルレポート: 重大度別にまとめられ、各検出結果に手順、修正方法、スクリーンショットのパスが記載されます。
- 共有可能なファイル:
--reportで単独で完結した HTML レポートを、--jsonで JSON を作成できます。 - 終了コード: 検出結果が
--fail-onの重大度に達するとゼロ以外の終了コードが返されるため、実際のバグがある場合に CI が失敗します。 - 各検出結果の信頼度ラベル:
uncertainは、--allを指定しない限りターミナルには表示されません。
0.8.0 の新機能:
--caps scan,reportを指定すると、MCP サーバーをソーススキャンと保存済み結果の読み取りに限定できます。ブラウザーの起動もダウンロードも行いません。--storage-state auth.jsonを指定すると、ログイン済みのアプリを巡回します。このファイルの Cookie とトークンの値は、書き出されるすべてのレポートのテキストから秘匿されますが、スクリーンショットのピクセルからは秘匿されません。sniff.configのassertブロックで、重大度別に検出結果の上限(maxCritical、maxHigh、maxTotal)を設定できます。この上限はコマンドラインでの巡回、ソーススキャン、検出に適用されます。
エディターで使う
npx skills add を使うことで、Claude Code、Cursor、Codex、Copilot、Gemini CLI、その他 70 以上のエージェントで使えます。スキルは Markdown 形式なので、エディターが指定するどのモデルでも動作します。
| エージェント | 1 行でインストール |
|---|---|
| Claude Code | claude plugin install sniff@10x |
| 70 以上のエージェント | npx skills add Aboudjem/sniff |
| Codex、Gemini CLI、OpenCode、Pi | ./install.sh codex |
| VS Code(Copilot) | ./install.sh copilot |
| その他すべて | docs/editors.md を参照 |
代わりに MCP サーバーとして追加する
claude mcp add sniff-qa npx -- -y sniff-qa --mcp
codex mcp add sniff-qa -- npx -y sniff-qa --mcp
Cursor、VS Code、Gemini CLI、Windsurf、Continue、OpenCode、Zed では、同じコマンドを JSON または TOML のエントリーとして使えます。エディターごとの設定例はすべて docs/editors.md にあります。
知っておくとよいこと
重要
API キー、アカウント、登録は不要です。自分で設定しない限り、AI プロバイダーも必要ありません。巡回やスキャンによってソースコードが編集されることはありません。コードを書き換えるのは
sniff fixだけで、実行した場合に限られます。
メモ
巡回ではボタンをクリックし、実際のフォームを送信するため、実データが作成されることがあります。本番環境ではなく、開発環境またはステージング環境のアプリを指定してください。最初の巡回では Chromium のビルドがダウンロードされ、キャッシュされるため、その実行にはインターネット接続が必要です。
- 起動中のアプリが必要です。 開発サーバーが起動していない場合は、ソースのみのスキャンに切り替わり、通常の巡回を開始する方法が表示されます。
npx sniff-qa scanは、このスキャンを意図的に実行します。 - リンク切れのチェックでは外部リンクもたどります。 そのため、巡回中に各ページからリンクされているサードパーティーの URL にリクエストが送信されます。
- バグが見つかった場合、巡回は意図的に終了コード 1 で終了します。 これにより CI でビルドが失敗します。クラッシュではありません。
--fail-on noneで重大度の判定を無効にできますが、assertの予算を超えた場合は引き続き実行に失敗することがあります。
詳細はこちら
- docs/editors.md:サポートされているすべてのエージェント向けのインストール方法と MCP のスニペット
- docs/authenticated-walks.md:
--storage-stateを使ってログイン済みのアプリを巡回する方法 - docs/assert-budgets.md:
sniff.configで重大度ごとの検出数に上限を設定する方法 - docs/comparison.md:sniff がリンター、リンクチェッカー、E2E フレームワークとどう異なるか
- docs/faq.md:このページで回答していない質問
- CHANGELOG.md · CONTRIBUTING.md · LICENSE
Adam Boudjemaa が開発 · Apache 2.0 · Playwright と axe-core を基盤にしています
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。