HN 日本語サマリー

← 一覧へ戻る
プログラミング

Show HN: AIエージェント向け検証ブラウザ – 13msのウィンドウ、ワンコールチェック

Show HN: A verification browser for AI agents – 13ms windows, one-call checks (github.com)

8 pointsby hongnoul_1 コメント

要約

hwatuは、AIエージェントがウェブページを検証する際の速度と効率を劇的に向上させるブラウザです。従来のツールが複数回のAPIコールや遅延を必要とするのに対し、hwatuはワンコールで約35msという高速なチェックを実現し、リソース消費も最小限に抑えます。これにより、エージェントの応答性を高め、開発者の生産性向上に貢献します。

全文翻訳

hwatu AIエージェントのハーネスループを、リアルな目を与えることで瞬時に高速化します。 エージェントが「ピクセルパーフェクト」と主張するのを止めさせましょう。97.49%を証明させましょう。 ページチェックごとに5回のツールコールを支払うのを止めましょう。hwatuのチェックはワンコール、約35msです(ウォームサーバーのPlaywrightを約9倍上回ります)。 ブラウザウィンドウがフォーカスを奪うのを止めましょう。デフォルトでヘッドレスなので、あなたはタイピングを続けられます。 Chromiumの170MBを配布するのを止めましょう。1つの静的バイナリとあなたのディストリビューションのwebkitgtkのみです。 ドキュメント ビジョン: 耐久性のある製品原則、ネイティブプラットフォーム戦略、スウォームモデル エージェントガイド: プロトコル、プリミティブ、検証ループ ヒューマンガイド: タイリングWMブラウザサイド ベンチマーク: 全ての数値、測定済み、方法論付き ロードマップ: 記録された計画、優先順位、非目標 継続的改善: アクティベーションメトリック、フィードバックループ、週次ケイデンス ローンチキット: 再利用可能なコピー、チャネル、測定計画 クイックスタート インストール → ワークフローを検出 → エージェントを接続 → ページを検証 → 人間に引き継ぐ curl -fsSL https://raw.githubusercontent.com/hongnoul/hwatu/main/scripts/install.sh | bash hwatu setup 1つの静的バイナリとあなたのディストリビューションのwebkitgtk-6.0(インストーラーがチェックします)。 Archの場合: yay -S hwatu。 ソースから: cargo build --release。 インストーラーはバイナリのみをインストールします。 hwatu setupはサポートされているコーディングエージェントを検出し、設定を変更せずに利用可能な接続を表示します。 準備ができたらクライアントを明示的に選択してください: hwatu doctor hwatu setup --client claude --scope project --dry-run hwatu setup --client claude --scope project hwatu demo インストール: 2つのバイナリをダウンロードし、WebKitGTKをチェックします。 検出: Claude Code、Cursor、Jcode、または汎用MCPワークフローを見つけます。 接続: Jcodeのネイティブソケット、MCP、またはCLIフォールバックを使用します。 検証: doctorまたはdemoでヘッドレスレンダリングされたスモークテストを実行します。 引き継ぎ: 人間が必要な場合にのみ、同じライブセッションを具体化します。 セットアップはプレビュー可能で、冪等性があり、同じクライアントとスコープに--undoを追加することで元に戻すことができます。 プロジェクトスコープは共有可能な設定を作成します。ユーザー スコープは個人的な設定を保持します。 Claude Codeは、各ユーザーにプロジェクトスコープのMCPサーバーを承認するように求めます。 手動MCP設定は、1つのポータブルエントリのままです: { "mcpServers": { "hwatu": { "command": "hwatu", "args": ["mcp"] } } またはMCPを完全にスキップします。全てのコマンドは短いCLI呼び出し、またはUnixソケット経由の1行の改行区切りJSONラインです。 hwatu localhost:3000 # ターミナルを開くようにウィンドウを開く hwatuを試しましたか? 成功したチェック、失敗したインストール、見つからないワークフローはすべて有用なシグナルです。 2分間の使用レポートを共有するか、バグを報告してください。 機能 ピクセル差スコアリング: 一致率 + 差分領域 + ヒートマップ(差分) アニメーションを数値化: 期間、イージング、速度(モーション) 決定論的なアニメーションフレーム: 全てのアニメーションを時間tで固定(シーク) ページの状態をJSONで、ピクセルではなくトークンで(スナップショット) 構造化されたエラー付きのリアルな入力イベント(クリック/タイプ/スクロール/アップロード) JSエラー、コンソール出力、失敗したリクエスト(コンソール) JSONラインまたはMCP通知としてのプッシュイベントサブスクリプション(ウォッチ) ポーリング付きのワンコールページアサーション(expect) ヘッドレス/バックグラウンド/フォーカスを各ウィンドウのプロパティとして、ライブで切り替え可能 人間への引き継ぎ: hwatu focus <id> は、ライブセッションをタイリングWMにドロップします 構造化された待機/再開(チャレンジ)付きのCAPTCHA / アンチボット検出 MCPサーバー、プレーンCLI、および1行のJSONソケットプロトコル 人間向けの最小限のWebKitブラウザ: ネイティブ広告ブロック、vimスタイルのバー、クラッシュ復旧 なぜPlaywrightやchrome-devtools-mcpではないのか? エージェントにブラウザを提供するには3つの方法がありますが、そのうち2つはうまく機能しません。 どのように実行されるか | エージェントループにどれだけコストがかかるか コールドライブラリ(Playwright、タスクごとに起動) | エンジンはスクリプトが開始すると起動します 呼び出しは速いが、実行は遅い: 各チェックでエンジンの起動コストが発生し、タスク間で状態は引き継がれません ウォームブラウザ(あなたのChrome + devtools-mcp) | フルヒューマンブラウザが常駐します リソースはタブ、拡張機能、同期、UIに費やされます あなたはレンダリングせず、作業中にウィンドウがフォーカスを奪います hwatu 「最もコールドなウォームデーモン」: エンジンはホット、他はすべて不在 8msの起動、35msの検証済みチェック、要求されるまで見えない(フォーカス)、双方向に中断可能 hwatuはチェックを瞬時に行うために必要なもの(エンジン、GPUコンテキスト、コンパイル済み広告ブロッカー、事前にウォームアップされたWebView)を保持し、前に座っている人間には役立たないものはすべて排除しています。 だからこそ、タブバーなしでウォーム状態を維持し、同じ方法で駆動されたウォーム状態のPlaywrightサーバーがクライアントあたり341msかかるのに対し、hwatuは39msで済むのです(ベンチマーク)。 2つ目の違いは、返ってくるものです。Playwrightとchrome-devtools-mcpは、その核となる部分ではオートメーションAPIです。エージェントがブラウザを操作できるようにし、生のスクリーンショットとDOMをエージェントに渡して確認させます。 hwatuは異なります。これは検証ブラウザです。測定プリミティブが組み込まれており、ブラウザ自体はウォームデーモンであり、ウィンドウのコストは13ms、ヘッドレスは起動モードではなくウィンドウのプロパティです。 だからこそ、ループは実際のコマンド、実際の出力のように見えます。 hwatu --headless localhost:3000 # そのウィンドウ; あなたは決して見ない hwatu --headless staging.example.com # 参照 hwatu diff --id 2 --other 1 --heatmap /tmp/heat.png # {"match_percent":85.13,"regions":[{"x":0,"y":160,"w":2048,...}]} hwatu motion --id 1 # 参照のアニメーションを数値で # イージング cubic-bezier(0.25,1,0.5,1), 300ms, マーキー 29.78px/s ... # ...エージェントがコードを編集... hwatu diff --id 2 --other 1 # {"match_percent":97.49} # クローリングは推測を上回る stripe.comのランディングページのクローンに対してこのループを実行しました。エージェントは85.1%から98.8%のピクセル一致率に向上させました。再現するには: scripts/demo/。 完全な検証パス(オープン、ロード、評価、スクリーンショット、クローズ)は、1つのコマンド、1つのツールコール、約35msの中央値です(ベンチマーク)。 hwatu check localhost:5173 --eval 'document.title' --shot=/tmp/after.png # {"title":"My App","eval":"My App","shot":"/tmp/after.png", # "console":[...],"load_ms":13,"total_ms":35} 生成されたHTMLを手元に持ち、サーバーがない場合? hwatu renderは、マークアップを入力として同じワンコールパスを実行します。一時ファイルなし、python3 -m http.serverなし: echo '<h1>generated</h1>' | hwatu render --stdin --shot=/tmp/gen.png # {"rendered":true,"shot":"/tmp/gen.png","load_ms":5,"total_ms":28} ロード、コンソール、ダウンロード、ウィンドウイベントにポーリングなしで反応します。 hwatu watch --kinds load,console # {"event":"load","seq":1,"window_id":7,"data":{"state":"started",...}} MCPクライアントは、通知/hwatu/eventと同じストリームのsubscribe_eventsを呼び出すことができます。 各接続はゼロから始まる厳密に単調増加するシーケンスを取得します。接続のクローズまたは停止は、デーモンをブロックせずにサブスクリプションをドロップします。 PlaywrightのウォームインプロセスCDP接続の同じパス、その最良ケースは82msで5つのAPIコールです。 hwatuが実際に実行する方法(チェックごとに新しいクライアント、ウォーム状態のエンジン)で整形されたPlaywrightのパスは、341ms対hwatuの39msです。 hwatuは設計上ウォームデーモンであり、Playwrightは自分でウォーム状態を保つ必要があるライブラリです。 そして、エージェントがCAPTCHAや判断の難しい状況に遭遇したとき、hwatu focusはそのライブセッション(クッキーと状態をそのままに)をあなたのタイリングWMに具体化します。あなたは10秒間操作します。そして、それは再び引き継ぎます。 これは他のどのツールも主張できない形容詞です: 中断可能。 他のどこでも、ヘッドレスは起動時に決定され、人間はどんな犠牲を払ってもセッションを見ることはできません。 hwatuでは、それはウィンドウのプロパティであり、双方向にライブで切り替え可能です。 速度は同じ設計決定から来ています。hwatuはウォームデーモンであり、起動するライブラリではありません。 エンジン、GPUコンテキスト、コンパイル済みの広告ブロックルールセット、および事前にウォームアップされたWebViewは、すべてのタスクを超えて存続するため、チェックはコールドプロセスではなくホットパイプラインから開始されます。 Playwrightはライブラリであり、本質的にコールドです。それをウォーム状態に保つことは、あなたが構築するもの(サーバープロセス、接続管理、コンテキストプーリング)です。hwatuはデフォルトでウォーム状態のまま出荷され、唯一のモードです。 hwatuの比較 凡例: ✅ はい / 組み込み · 🟡 部分的 / 限定的 · ❌ いいえ 機能 | Playwright | chrome-devtools-mcp | hwatu 検証パス(ロード+評価+スクリーンショット)、ウォームインプロセス | 82ms | n/a | 35ms ウォームサービスとしての検証パス(チェックごとに新しいクライアント) | 341ms | n/a | 39ms 検証パスあたりのツールコール数 | 5 | 5 | 1 ピクセル差スコア + 再