Argus — Testing for Coding Agents について
Argusは、コーディングエージェントがブラウザーでユーザーフローを実行し、WebアプリをテストするためのMCPサーバーです。目標のカバレッジと検証を支援し、観察した症状と独立して再現した結果を区別して、証拠付きレポートを作成します。
主な機能
- 01ブラウザー操作とページ観察
- 02目標とテストカバレッジの追跡
- 03症状の独立した再検証
- 04発見事項とテスト証拠の紐付け
- 05HTML・JSON・JUnit・SARIFレポートの出力
活用シーン
- 01Webアプリのユーザーフローをテスト
- 02疑わしい不具合が再読み込み後も続くか確認
- 03テスト証拠と未完了の目標を確認
MCP 対応
Argusは、操作、観察、検証、カバレッジ、発見事項、レポートなどのブラウザーテストツールをMCPクライアントに公開します。進捗を要求するクライアントには、ワークフローのフェーズ通知も送信できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
翻訳後に原文が更新されています。最新の内容は原文をご確認ください。
Argus
実際のテストエンジニアのようにアプリをテストする MCP サーバーです。ユーザージャーニーを探索し、スクリプト化されていないバグを発見し、各発見事項を報告前に検証します。
Argus は MCP サーバーです。Claude Code、Codex、Cursor、または任意の MCP ホストに、ホスト側エージェントの役割やより広範なコーディングタスクを引き継ぐことなく、証拠を重視したブラウザー QA を追加します。エージェントは探索、調査、永続化の確認、再現可能なバグの記録を行います。認定された発見事項はすべて、報告前にクリーンなページ読み込みから独立して再確認されます。
出力
URL を渡すと、バグのレポートが得られます。それぞれに、Argus が独立して再現したのか、単に観察しただけなのかが示されます。
緑色のバッジこそが重要なポイントです。LLM にバグを主張させることなら誰にでもできます。Argus はページを最初から読み込み直し、症状を再確認してからVERIFIEDと判定します。そのため、このレポートは仕分けが必要な推測の一覧ではなく、信頼できるバグの一覧です。
仕組み
flowchart LR
A(["observe"]) --> B{"looks wrong?"}
B -->|not sure| C["act: click · type · resize · verify"]
C --> A
B -->|bug| D["verify_persistence — reload from a clean state"]
D -->|symptom repeats| E(["VERIFIED"])
D -->|symptom gone or uncertain| F(["not certified"])
E --> G[["report: HTML · JSON · JUnit · SARIF"]]
インテリジェンスを担うのはエージェントです。Argus は簡潔な QA ガイダンス、説明文をキーにしたツール群(click(7)ではなくclick_what("Login button"))、目標カバレッジ台帳、そして「モデルがこれをバグだと思っている」を「このバグは実在します。これが証拠です」に変える再現証明エンジンを提供します。
証明が確認するのは、指定された観測可能な症状であり、考えられるすべての根本原因ではありません。クリーンな読み込みでは、デフォルトで認証状態とブラウザーのストレージが保持されます。再生によって、実際の書き込みが再実行される場合があります。定性的な観察や結論が出ない確認は、検証済みの発見事項とは区別されます。
クイックスタート
uv がインストールされていれば、Python パッケージをグローバルにインストールする必要はありません。Chromium を一度インストールします。
uvx --from playwright playwright install chromium
次に、Argus を MCP クライアントに接続します。
Claude Code
claude mcp add argus -- uvx --from argus-testing argus-mcp
Codex と ChatGPT デスクトップアプリ
Codex CLI、Codex IDE 拡張機能、ChatGPT デスクトップアプリは、同じローカル MCP 設定を使用します。
codex mcp add argus -- uvx --from argus-testing argus-mcp
Cursor
このボタンで Argus を Cursor に追加できます。初回テストの前に、上記の Chromium インストールコマンドを一度実行してください。
あらゆる stdio MCP クライアント
{
"mcpServers": {
"argus": {
"command": "uvx",
"args": ["--from", "argus-testing", "argus-mcp"]
}
}
}
デフォルトの core プロファイルでは、ホストに専門ツールをすべて読み込ませることなく、主要な Web テストのワークフローを利用できます。選択中のプロファイルを確認するには uvx --from argus-testing argus-mcp --list-tools を実行します。ネイティブ macOS のテストには --tool-profile screen を、上級者向け機能をすべて利用するには --tool-profile full を指定します。環境変数 ARGUS_TOOL_PROFILE でも同じ設定ができます。
あとは、エージェントとのセッションでこう依頼するだけです。
「http://localhost:3000 のアプリをテストして、実際のバグを見つけてください。」
これで完了です。操作はエージェントが進め、Argus が結果の信頼性を保ちながらレポートを作成します。
範囲を絞ってレビューする場合、ホストは start_session に明示的な goals、constraints、および参考値としての time_budget_minutes を渡せます。Argus はテストプロトコル全体を一度だけ返し、その後の観測でも未達成の目標と検出済みのページを確認できるようにします。各目標の検証に進む前に in_progress とし、coverage_update で exercised または blocked に変更する際には、具体的な説明が必要です。また、Argus はそのテスト期間中に生成された URL、値を伏せたアクション、スクリーンショット、永続性チェック、バグ、観測結果を自動的に関連付けます。最終的な HTML および JSON レポートには完了済みと未完了の両方のカバレッジが記録され、不完全なテストを網羅的なものと誤解させません。
pip によるインストール
pip install argus-testing
playwright install chromium
claude mcp add argus -- argus-mcp
CLI モード(MCP ホストなし — LLM はご自身で用意してください)
# Uses a LiteLLM-backed planner. Set a provider key (OPENAI_API_KEY, DEEPSEEK_API_KEY, …).
uvx --from argus-testing argus http://localhost:3000 --model deepseek/deepseek-chat
# Higher recall: union N independent passes (deduped, proven instance kept)
uvx --from argus-testing argus http://localhost:3000 --passes 3
スクリーンモード(macOS) — Web だけでなく、あらゆるネイティブアプリをテスト
pip install 'argus-testing[mac]'
brew install cliclick # keystroke / coordinate fallback
argus-mcp --doctor # check Screen Recording + Accessibility grants
claude mcp add argus-screen -- argus-mcp --tool-profile screen
説明に基づく同じツールを使いますが、対象は macOS のフォアグラウンドにあるアプリです。Notes、Cursor、Safari、開発中の機能などが対象になります。ヘッドレス Chrome も、スクリプト化された Playwright も使いません。Argus はアクセシビリティツリーを通じて、あなたが見ているものを確認します。
成果物とリソースの制限
Argus は各実行のスクリーンショットを専用の実行ディレクトリに保存するため、後続のテストで以前の証拠が上書きされることはありません。長時間のブラウザーセッションでも、メモリ内のイベントログは上限内に保たれ、内容を検査できる API 通信のレスポンス本文だけを読み込みます。バイナリデータやサイズ超過の本文は、Python のメモリに取り込まれる前にスキップされます。
レポートのクリーンアップは明示的に行い、デフォルトではドライランになります。この例では、最新の完了済み実行 20 件が保護されます。.argus のジャーナルと状態カプセルは削除されません。
argus-cleanup --output ./argus-reports --keep-runs 20
argus-cleanup --output ./argus-reports --keep-runs 20 --apply
より厳しいポリシーを適用するには、--older-than-days と --max-size-mb を使用します。上級者向けの制限は、ARGUS_MAX_NETWORK_EVENTS、ARGUS_MAX_ERROR_EVENTS、ARGUS_MAX_DOWNLOAD_EVENTS、ARGUS_MAX_DIALOG_EVENTS、ARGUS_MAX_RESPONSE_BODY_BYTES、ARGUS_MAX_RESPONSE_READ_BYTES で調整できます。長さが宣言されていないレスポンスはデフォルトでスキップされます。読み込みを許可するには ARGUS_CAPTURE_UNKNOWN_LENGTH_BODY=1 を設定します。制限により古い証拠が破棄された場合、Argus はツールの出力と最終的なセッション概要でその旨を通知します。
ライブモニタリング(0.7)
MCP クライアントが起動するコマンドにモニターポートを追加します。
argus-mcp --monitor-port 8765
# Or choose an available port automatically:
argus-mcp --monitor-port 0
セッションの状態、実行中の操作と所要時間、直近の進捗、呼び出し、運用上の失敗、検出結果、最近のイベントを確認するには、http://127.0.0.1:8765 を開きます。選択された URL は stderr に出力されるため、stdio MCP メッセージはそのまま保たれます。ARGUS_MONITOR_PORT も同じ設定です。モニタリングはデフォルトで無効です。
| ルート | 出力 |
|---|---|
/ | ローカルのライブダッシュボード |
/healthz | HTTP プロセスの稼働状態 |
/readyz | ランタイムが初期化済みで、シャットダウン中ではない状態。それ以外の場合は 503 |
/api/status | バージョン付きの状態スナップショット、カウント、キャプチャのドロップ数 |
/api/events | Server-Sent Events、Last-Event-ID による再接続、ギャップ通知 |
/metrics | Prometheus テキスト形式のカウンターと操作の所要時間の合計・回数 |
モニターは 127.0.0.1 のみにバインドされ、無関係な Host/Origin ヘッダーを拒否し、アクションエンドポイントを持ちません。ページ内容、URL、入力値、スクリーンショット、ツールの引数は出力しません。認証されたリモートサービスではありません。公開プロキシ経由で公開しないでください。イベント保持数には上限があり(デフォルトは 512 件)、同時に接続できる SSE サブスクライバーは最大 32 件です。
ランタイム設定は起動時に検証されます。明示的なコマンドラインオプションが環境変数より優先され、環境変数はデフォルト値より優先されます。
| 環境変数 | デフォルト |
|---|---|
ARGUS_OPERATION_TIMEOUT_S | 120 秒 |
ARGUS_QUEUE_TIMEOUT_S | 5 秒 |
ARGUS_CLEANUP_TIMEOUT_S | バックエンドごとに 10 秒 |
ARGUS_EVENT_CAPACITY | 512 件のイベント |
ARGUS_OUTPUT_DIR | ./argus-reports |
1 つのランタイムが所有できるアクティブなセッションは 1 つです。アクションとライフサイクルの変更は順次実行されます。操作がタイムアウトすると、アクションをキャンセルしてバックエンドを終了します。副作用のあるアクションが自動的に再試行されることはありません。別のセッションを独立して制御するには、別個の MCP プロセスを実行する方法がサポートされています。
回帰テストのゲートとエビデンスのプライバシー
argus-regression http://localhost:3000 --output ./argus-reports
終了コード:0 既知の症状が再現されなかった(またはジャーナルがない)、1 既知の症状が引き続き再現される、2 運用上またはストレージ上の失敗、3 判断不能。終了コードが 0 でも、アプリケーションが完全に正しいことを証明するものではありません。自動回帰テストでは組み込みのテキスト/HTTP チェックを使用し、書き込みを伴うリプレイは行いません。
入力、貼り付け、選択された値はセッション内でのみ使われる入力ボルトに保持され、アクショントレースやエクスポートされたリプレイ手順には含まれません。入力が必要なエクスポート済み手順には requires_input の印が付き、秘匿された値を実際の値として扱ってリプレイすることはできません。カプセルには意図的に認証情報が含まれており、POSIX では所有者のみがアクセスできるファイル権限で保存されます。レポートやスクリーンショットには、引き続きアプリケーションの表示データが含まれる場合があります。プライバシーをご覧ください。
Argus の違い
既存のテストツールでテストできるのは、スクリプトに書いた内容だけです。 Playwright と Cypress は、記述したアサーションを実行します。Argus は、テスト対象として思いつかなかったバグを 発見 し、さらに LLM だけでは信頼して任せられないこと、つまり、バグを証明します。
| 自律型でブラックボックス | テスト計画ではなく URL を渡します。リポジトリへのアクセスやスクリプト化された手順なしに、実際のユーザーのように探索します。 |
| カバレッジの契約 | 任意の自然言語による目標、ユーザーの制約、発見したページ、時間の予算は、セッション全体を通して、また最終レポートでも確認できます。 |
| 再現の証拠 | バグを認定する前に、クリーンな状態からページを再読み込みし、症状を再確認します。誤認定ゼロを目指して設計されています。 |
| 人の目でわかるバグを発見 | 偽の「残りわずか 3 点!」表示、保存されない「保存しました」トースト、価格が下がっていないのに表示されるセールバッジ、名前変更後に古いままのナビゲーションバーなどです。静的解析では、こうした問題は検出できません。 |
| 発見 → ガード | 検出結果はジャーナルに記録されます。argus-regression は、LLM コストゼロでビルドのたびに再チェックし、既知のバグの再発を防ぐ実際の CI ゲートとして、ゼロ以外の終了コードを返します。 |
| 機械可読 | 各レポートは JSON、JUnit、SARIF も出力するため、検出結果をパイプラインのゲートとして使い、インラインの GitHub PR 注釈として表示できます。 |
比較
バグを見つけるうえで重要な軸、つまり 自律的に発見し、独立して検証し、報告する という点で、Argus はブラウザー MCP 系ツールとは異なる位置づけです。
| Argus | Playwright MCP | Chrome DevTools MCP | browser-use | |
|---|---|---|---|---|
| 未知のバグを自律的に発見 | はい | いいえ (ドライバー) | いいえ (デバッガー) | 一部 (タスクの範囲内) |
| 発見事項を個別に独立検証 | はい (証跡) | いいえ | いいえ | いいえ (LLM によるスコア) |
| エビデンスが豊富なバグレポート | はい | いいえ | いいえ | 一部 |
| ブラックボックス(リポジトリ/ソースへのアクセスなし) | はい | はい | はい | はい |
| LLM 不要の CI 回帰ゲート | はい | 一部 | いいえ | 一部 |
これらは「劣った」ツールではなく、役割が異なります。Playwright MCP はエージェントに優れた操作能力を提供し、Chrome DevTools MCP は Argus にはない詳細なネットワーク/パフォーマンス/メモリの検査機能を提供します。Argus は 何がバグかを判断し、それを立証する レイヤーです。併用してください。
ベンチマーク
$ python -m argus.bench --target all
buggytasks 22 / 22 = 100 % · mechanical bugs (console errors, fake delete, auth bypass…)
darkshop 12 / 12 = 100 % · human-eye bugs (fake scarcity, lying toasts, stale state…)
──────────────────────────────────────────────────────────────────────
total 34 / 34 = 100 % · reproducible from git clone in two commands
34 / 34 は、決定論的なスクリプトで測定した機能上の上限、つまりツールのインターフェイスを通じて 発見可能なもの を示します。これは、特定の LLM がどれだけうまくツールを使うかを示す 実際の頻度 とは意図的に分けており、その結果はばらつきが大きいため、以下で率直に報告します。
実際の LLM による再現率 — 実際の数値(および幅を報告する理由)
python -m argus.bench.agent_runner は、実際のモデルをドライバーとして実行し、複数の試行にわたって再現率を評価します。実行を通じて分かったことは次のとおりです。
- 実際の再現率は
34/34の上限を大きく下回ります。 実行中のドライバーは、1 回の実行で仕込まれたバグの一部しか見つけません。上限が 発見可能なもの を示すのに対し、こちらはモデルが 発見するもの を示します。 - ばらつきが大きいため、数回の実行だけでモデルの順位をつけないでください。 試行ごとの再現率は大きく変動します。単一の目を引く数値ではなく、分布を報告します。
- ベンチマークを実際に使ったことで、Argus 自体の実バグも見つかりました。 文字列引数による
record_bugのクラッシュで発見事項が気づかれないまま破棄される問題や、一般的な言い回しでリゾルバーが見つけられない問題などです。ツールをテストするツール自体がテストされました。 - ドライバーに関係なく、適合率は維持されます。 すべての試行で、再現証跡によって誤認証はゼロに抑えられました。性能の低いモデルは見つけるバグが少なくなりますが、VERIFIED と判定されたバグは依然として実在します。
フィクスチャに仕込まれているもの
BuggyTasks(:5555)— タスクアプリに仕込まれた機械的なバグ 22 件:コンソールエラー、リンク切れ、見せかけの削除(UI には「削除しました!」と表示されますが、再読み込みしてもデータが残る)、認証の迂回、NaN の日付、1 件ずれた件数、競合状態など。「スクリプト化された E2E テストで発見できる」段階のバグです。
DarkShop(:5556)— 洗練されて見えるストアに仕込まれた、人間の目で見つけるバグ 12 件:ハードコードされた「残り 3 点のみ!」という希少性の強調、セール価格が元の価格と同じなのに表示される -50% バッジ、「50 ドル以上で送料無料」というバナーと、チェックアウト時に一律で請求される $5 との矛盾、視覚的な階層の逆転(目立つ「定期購入」の下に「カートに追加」が配置される)、ページ間の状態のずれ(名前の変更は /account に反映されるのに、ナビゲーションバーの挨拶には反映されない)など。静的解析では、これらのほとんどを検出できません。ページを読み取り、推論する エージェントが必要です。
python test-site/app.py # BuggyTasks :5555
python human-eye-fixture/app.py # DarkShop :5556
python -m argus.bench --target all
ツール一覧
argus-mcp は、用途を絞った core Web プロファイルで起動します。公開されている各ツールについて、以下で説明します。ツール数は、インストール済みサーバーから直接確認することもできます。
uvx --from argus-testing argus-mcp --list-tools
uvx --from argus-testing argus-mcp --tool-profile screen --list-tools
uvx --from argus-testing argus-mcp --tool-profile full --list-tools
| プロファイル | 公開ツール | 想定用途 |
|---|---|---|
core | 30 | ブラウザー QA の主要ワークフロー。デフォルトです。 |
screen | 14 | アクセシビリティ機能とスクリーンショットを使った、macOS ネイティブアプリの集中的なテスト。 |
full | 77 | core と screen のすべてに加え、ブラウザー、状態、ネットワーク、座標、クロールの各種専門機能を利用できます。 |
Core プロファイル — 30 ツール
| ツール | 目的 | |-------|---------| | `start_session` | `exploratory`、`visual`、または `regression` のブラウザーレビューを開始します。必要に応じて `goals`、`constraints`、`time_budget_minutes` を指定できます。一度限りのプロトコルと初期状態の観測結果を返します。 | | `observe` | URL、タイトル、説明に紐づけられたインタラクティブ要素、件数、表示されているフィードバック、ARIA ツリー、ビューポートの状態を返します。 | | `coverage_update` | `in_progress` で目標のエビデンス記録を開始し、その後 `exercised` または `blocked` に設定します。終了状態には説明が必要で、セッションのエビデンスが自動的にリンクされます。 | | `click_what` | 自然言語による説明に最もよく一致する要素をクリックします。曖昧な場合は推測せず、候補を返します。 | | `type_into` · `select_into` | 説明からフィールドを特定し、テキストを入力するか、オプションを選択します。 | | `hover_what` · `press_key` | 説明に紐づけられた対象に対して、ホバー状態やキーボード操作をテストします。 | | `resize` · `emulate_device` | レスポンシブのブレークポイントをテストするか、実際のモバイルのタッチ、UA、DPR、ビューポート設定でページを再度開きます。 | | `upload_file` | 一致するファイル入力欄に、1つ以上のローカルファイルを添付します。 | | `navigate` · `go_back` · `scroll_down` | 直接移動するか、ブラウザーの履歴を戻るか、スクロール位置より下のコンテンツを表示します。 | | `inspect_element` · `check_layout` | 計算済みスタイル、ARIA、マークアップ、または範囲を限定したオーバーフロー、クリッピング、小さなターゲット、オーバーレイの兆候を調べます。 | | `screenshot` · `screenshot_diff` | ビューポート、ページ全体、または要素のエビデンスをキャプチャし、赤みを重ねたピクセル差分画像を生成します。 | | `get_errors` | 前回の読み取り以降に取得された、関連するコンソールエラーと HTTP 4xx/5xx イベントを取り出します。 | | `capsule_save` · `capsule_restore` | 名前付きの認証済みまたはシード済みブラウザー状態を保存・復元します。任意で稼働確認もできます。 | | `verify_persistence` | ページを強制的に再読み込みし、対象のテキストが存在するかどうかを確認します。「Saved!」のトーストは証明になりません。この確認が証明になります。 | | `test_action` · `test_form` | 説明に紐づけられた操作またはフォーム送信を実行し、結果の状態差分を1回の往復で返します。 | | `check_links` · `check_performance` | 現在のページ内リンクを検査し、一般的な監査結果を自動認定せずに、生のブラウザー性能指標を表示します。 | | `regression_check` | 追加の探索パスを必要とせず、現在のオリジンについて記録済みの指摘を再テストします。 | | `record_bug` · `record_observation` | エビデンスとレシートを添えて再現可能な不具合を記録するか、定性的なレビューメモを認定済みのバグとは分けて記録します。 | | `end_session` | アクティブなセッションを終了し、HTML、JSON、JUnit、SARIF レポートを出力します。 |レポートでは元のスクリーンショットをエビデンスとして保持し、デフォルトでは、フルサイズの PNG をすべて HTML に Base64 で埋め込む代わりに、コンパクトな WebP プレビューを report-assets/ に出力します。サイズよりも単一の自己完結型 HTML ファイルを優先する場合は、ARGUS_PORTABLE_REPORT=1 を設定してください。JSON 出力には、完全な再現レシート、カバレッジ契約と構造化されたエビデンス参照、制約、レビューモード、ツール呼び出し数と記録済みステップ数、スクリーンショットのメタデータ、定性的な観察結果が含まれます。JUnit のスイート失敗数は、出力された <failure> ノードの数と一致します。
画面プロファイル — 14個のツール
| ツール | 目的 | |-------|---------| | `start_screen_session` | 画面収録とアクセシビリティの権限を確認したうえで、フォアグラウンドの macOS アプリ、または名前を指定した macOS アプリに接続します。 | | `screen_observe` | フォアグラウンドのアプリ、ウィンドウタイトル、範囲を制限した AX ツリー、画面座標、新しいスクリーンショットを返します。 | | `screen_click_what` · `screen_type_into` · `screen_press_key` | AX ツリーに基づいて対象を特定し、ネイティブのアクセシビリティ機能を介して操作します。利用できない場合は `cliclick` にフォールバックします。 | | `screen_wait_for_stable` | 設定可能なしきい値の範囲内で対象ウィンドウの表示が安定するまで待機します。 | | `screen_launch` · `screen_quit` · `screen_is_running` | ローカライズ名、バンドル ID、または絶対パスを指定して、アプリを操作・確認します。 | | `screen_screenshot_region` | 詳細な視覚的証拠を得るため、画面の指定した矩形領域を正確にキャプチャします。 | | `screen_session_status` | 経過時間、残りのセッション時間、アクション数、アボートファイルのパスを報告します。 | | `record_bug` · `record_observation` · `end_session` | 画面モードで共通の証拠記録、報告、終了処理ツールを使用します。 |安全性: 呼び出しごとのタイムアウト、30 分のセッション上限、以降のすべてのアクションを停止する ~/.argus/abort パニックファイル、および各アクションの前後に自動で記録されるスクリーンショット。
フルプロファイル — 77 ツール
フルプロファイルには、上記のすべてのコアツールと画面ツールに加えて、以下の 36 個の専門ツールが含まれます。低レベルの状態、フォールトインジェクション、複数タブの制御、座標、またはクロールがワークフローで実際に必要な場合に使用します。
| 追加ツール | 目的 |
|---|---|
paste_into · right_click | 実際のクリップボード貼り付けイベントを発生させるか、対象のコンテキストメニューを開きます。 |
emulate_media | ダーク/ライトのカラースキームと、動きを減らす設定をエミュレートします。 |
click_at · type_at · hover_at · drag_at · drag_what | 座標または説明を指定して、キャンバス/WebGL、ホバーで表示される要素、ドラッグ&ドロップのインターフェースを操作します。 |
drop_file | 条件に一致するドロップゾーンに、実際のファイルドロップを実行します。 |
set_dialog_handler | 次に表示される JavaScript ダイアログに対する、承認、却下、またはプロンプトへの応答をキューに登録します。 |
eval_js | ページのコンテキストで任意の JavaScript を実行します。サーバーの起動時に --unsafe も指定しない限り、無効のままです。 |
network_requests · network_request | 範囲を制限したリクエストログを確認するか、一致するリクエストの詳細をすべて取得します。 |
network_mock · network_unmock · network_clear_mocks · network_clear_log | 事前設定した HTTP レスポンスを注入し、有効なモックまたは記録した通信を個別にリセットします。 |
cookies_get · cookies_set · cookies_clear | ブラウザーコンテキストの Cookie を確認、設定、または消去します。 |
storage_get · storage_set · storage_remove · storage_clear | ページ固有の localStorage または sessionStorage を確認・変更します。 |
tabs_list · tabs_switch · tabs_close | OAuth、決済、その他のポップアップや複数タブを使う操作を制御します。 |
wait_for_text · wait_for_request | 特定の表示テキスト、または条件に一致する送信トラフィックが発生するまで、時間の上限を設けて待機します。 |
get_downloads | パスやサイズを含め、セッション中にダウンロードされたファイルを確認します。 |
crawl_site | 範囲を制限した内部ページをクロールし、ブラウザーイベント、リンクの結果、パフォーマンスの証拠を収集します。 |
screen_click_at · screen_hover_at · screen_drag · screen_keys · screen_type_at | ネイティブアプリに役立つ AX 要素がない場合、画面の絶対座標と複数キーのシーケンスを使用します。 |
無効化された安全性スタブではなく、運用可能なツールとして eval_js を公開するには:
uvx --from argus-testing argus-mcp --tool-profile full --unsafe
ローカル優先のセキュリティとプライバシー
Argus はお使いのマシン上で動作し、Argus が運営するサービスにテレメトリを送信しません。レポートとスクリーンショットは、デフォルトで ./argus-reports 内に保存されます。ただし、MCP ホストと、そこで設定されたモデルプロバイダーには、会話に含まれるツールの結果が引き続き送信される可能性があります。ブラウザー操作や macOS ネイティブのコントロールは実際の副作用を引き起こす可能性があるため、可能な限りテスト用アカウントと本番環境以外のデータを使用してください。
機密性の高いシステムで Argus を使用する前に、プライバシー開示とセキュリティポリシーを全文お読みください。
ローカルファイルのアップロードと file:// ページには、明示的なフィクスチャディレクトリが必要です。
Cookie/ストレージの検査では、デフォルトで値が非表示になります。これらの機能は、ページコンテンツやツールの引数ではなく、
MCP ホストのサーバー環境で設定してください。
{
"ARGUS_FILE_ROOTS": "[\"/absolute/path/to/test-fixtures\"]",
"ARGUS_ALLOWED_ORIGINS": "[\"http://localhost:3000\"]"
}
オプションのオリジンポリシーが制限するのはツールの対象であり、ブラウザーのネットワーク送信ではありません。
悪意のある対象に対しては、リダイレクトやページリソースにも引き続きネットワーク分離が必要です。
生の Cookie/ストレージの検査が必要で、ホストが認証情報を受け取る権限を持つ場合に限り、
ARGUS_ALLOW_SENSITIVE_READS=1 を有効にしてください。
基本方針
エージェントを信頼し、知性を模倣しない
Argus は Opus クラスのドライバーを前提としています。スマートレイヤーのふりをする静的ルールは、機能を損ないます。保守の手間や誤検知を増やし、エージェントが実際に見たものから注意をそらすためです。そのため、detector.py は小規模で、エージェントには文字どおり見ることのできない 2 つのチャネル(コンソールイベントストリームと HTTP レイヤー)だけを取得します。「このトースト通知は誤解を招くか? 視覚的な階層構造に問題はないか? この数値はずれていないか?」——エージェントが observe() を読み取り、判断します。
レビューを導き、ホストのタスクを乗っ取らない
グローバル指示は意図的に短くし、すべての MCP ツールの説明で長い QA プロンプトを繰り返さないようにしています。start_session は、証拠を優先する一連の手順、目標、制約、予算を一度だけ返します。その後の観察では、簡潔なリアルタイムのカバレッジ一覧のみが示されます。Argus はユーザーの現在のタスク内で利用できる機能であり、実装作業を妨げたり、ホストのアイデンティティに取って代わったり、取り消し不能な外部操作を行う権限があるかのように示したりはしません。
インデックスではなく、説明で識別する
click(7) ではなく、click_what("Login button") を使います。要素のインデックスは、単一の observe 内でさえ、実装の詳細が漏れ出る抽象化です。有能なエージェントは、対象が「何であるか」によって操作したい対象を説明し、リゾルバーが適切な要素に対応付けます。曖昧な場合は推測せず、誤クリックを拒否します。
プロジェクト構成
argus/
├── mcp_server.py # process entry point and compatibility imports
├── entrypoints/mcp/ # public tool catalog, profiles and MCP adaptation
├── application/ # session manager and focused QA use cases
├── domain/ # models, errors, states, replay and verification contracts
├── adapters/ # monitoring, logs, file journal, report exporters, JS assets
├── bootstrap.py # composition root: injected backend/repository factories
├── ports.py # narrow lifecycle, observation, verification and storage protocols
├── settings.py # validated, per-runtime configuration
├── browser.py # Playwright adapter (public operations; private page ownership)
├── screen/ # macOS AX adapter, permissions, safety
├── reporter.py # atomic report orchestration and exporter registry
├── resolver.py # description → element (web + screen)
├── cli.py # autonomous exploration and shared regression entry point
└── bench/ # deterministic capability + optional real-LLM harness
test-site/ # BuggyTasks (22 mechanical bugs)
human-eye-fixture/ # DarkShop (12 human-eye bugs)
実装の境界、テスト、拡張ポイントについては、まずアーキテクチャ、設計上の決定事項、 コントリビューションガイドをご覧ください。自律型の LiteLLM 探索ループは独立したワークフローです。 共有回帰テストが MCP サーバーをインポートしたり変更したりすることはありません。
MIT ライセンス · 製品ページ · エージェントのインストールガイド · プライバシー · セキュリティ · Yichen Wu による開発
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。