vibatchium について
vibatchium は、複数のログイン済み Chrome セッションを無人で動かす、エージェント向けのセルフホスト可能なブラウザー自動化デーモンと CLI です。認証情報の制御、ページ内容のスキャン、ブラウザーを使わない取得・検索機能も備えています。
主な機能
- 01永続 Chrome セッションの並列実行
- 02セッション復旧・リース・予算管理
- 03オリジン限定のシークレット入力
- 04ページテキストのインジェクション検査
- 05Cookie を使った取得とウェブ検索
- 06CLI と MCP サーバー
活用シーン
- 01ログイン済みアカウントで無人タスクを実行
- 02認証情報を読ませずにエージェントに使用させる
- 03セッション Cookie で認証済みエンドポイントを調査
MCP 対応
`vb setup` で MCP サーバーを登録するか、`vb mcp` で起動できます。ブラウザー自動化ツールを MCP クライアントに公開し、`vb mcp --caps min` による最小機能モードにも対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
87掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| lease | string | いいえ | 対象セッションがリース中の場合に渡す任意のリーストークン(0.7.0)。呼び出しごとにスレッド経由で渡し、サーバーの env から読み取ることはありません。 |
| scale | number | いいえ | このセッションの devicePixelRatio(1~4、永続化)。Retina 解像度のスクリーンショットが必要な場合は 2 に設定します。ヘッドレスの単発キャプチャでは到達できないインタラクティブな状態(モーダル、ホバー、ログイン済みビュー)も含みます。トレードオフとして、スケーリングされたセッションではビューポートが固定され、デバイスメトリクスがエミュレートされます(screen == viewport)。そのため、ボット対策の壁にはスケーリングされていないセッションを使用してください。コールドスタート時のみ有効です。すでに起動しているブラウザーには適用できません。Patchright のみ。 |
| backend | string | いいえ | ステルスバックエンド:patchright(デフォルト)| nodriver | auto。nodriver には `pip install vibatchium[nodriver]` が必要です。 |
| profile | string | いいえ | 永続プロファイルディレクトリ(デフォルト:キャッシュディレクトリ)。 |
| session | string | いいえ | 対象セッション名(省略すると共有の 'default' を使用)。他のエージェントと共有するデーモンで状態を伴う複数ステップ操作(go→click→fill)を行う場合は、'default' との競合を避けるため、必ず一意の名前を渡してください。 |
| headless | boolean | いいえ | ヘッドレスモード — MCP のデフォルトです。UA のヘッドレス識別情報は自動的に除去されます。ヘッドありでは残存する GPU/画面の痕跡が消えるため、突破が難しいブロック画面で再試行する価値があります。 |
| ephemeral | boolean | いいえ | 終了時にこのセッションのプロファイルディレクトリを削除します。ログイン状態をディスクに残したくないワンショット操作向けです。実行ごとにセッションを作成した際のプロファイル肥大化を防ぎます。 |
詳細
vibatchium
常時稼働するマシンのためのブラウザレイヤーです。 複数のログイン済みIDを、実際のChrome上でステルス機能をデフォルトで有効にして、すべて同時に無人で実行できます。AIが認証情報にアクセスすることを許可するためのセキュリティモデルも備えています。
1つのデーモン、N個の永続的なChromeセッション、vb CLI、MCP サーバーを提供します。
セルフホスト可能で、無料、Apache-2.0です。
pipx install 'vibatchium[all]'
patchright install chrome
vb setup # register the MCP server + agent skill (Claude Code, Codex, Cursor)
vb explore https://example.com
これはあなたに向いていますか?
| 目的 | 使用するもの |
|---|---|
| あなたが見守るなか、エージェントに自分のログイン済みブラウザを操作させたい | Claude in Chrome、Chrome Auto Browse — ファーストパーティで無料、より適切に統合されています |
| 購入できる最もステルス性の高い単一ブラウザが欲しい | CloakBrowser — ChromiumのC++でフィンガープリントを修正済み(同時実行には有料プランが必要です) |
| 1つのエージェント向けに最も軽量なドライバーが欲しい | bladebro — 5つのツールと1つのRustバイナリ |
| ボット対策の圧力を受けずにブラウザを自動化したい | playwright-mcp、agent-browser — より大規模で歴史が長く、テストも充実しています |
| 1台のマシンで多くのアカウントを無人実行し、自動化に対抗するサイトを利用したい | vibatchium |
最後の行こそが、vibatchiumの最大の特長です。監視付きエージェントはログイン画面やCAPTCHAに遭遇するたびに制御をあなたに返します。一方、ライブラリを使う場合、セッション、予算、クラッシュからの復旧、認証情報などの管理は自分で構築する必要があります。vibatchiumは、そのためのフリートレイヤーです。
比較
2026-10-06時点で、各プロジェクトのREADME、ソースコード、リリースノートに基づいています(MCPのコストの行は、当社による独自測定¹です)。不利な項目も意図的に掲載しています。
| vibatchium | CloakBrowser | bladebro | agent-browser | playwright-mcp | |
|---|---|---|---|---|---|
| N個のログイン済み永続セッションを同時に実行 | はい、無料、1つのデーモン | 無料版は1つ(最新ビルド)・Proでは追加可能 | エージェントセッションごとにChromeを1つ | はい、セッションごとに1つのデーモン | プロファイルディレクトリごとに1つ |
| 無人運用:クラッシュの自動復旧、リース、予算、アイドル時のフリーズ、目標 | すべて対応 | — | 一部対応(クラッシュ時の再起動、アイドルタイムアウト) | 一部対応(アイドルタイムアウト、復元) | アイドルタイムアウト |
| エージェントがシークレットを利用できるが、読み取れない(オリジンに紐付いた入力、読み戻し拒否、TOTP) | はい | — | — | ボールト、オリジンチェック | --secrets によるマスキング |
| ページコンテンツのプロンプトインジェクションスキャン | はい | — | — | 境界マーカー(オプトイン)、スキャンなし | — |
| セッション固有のCookieとChrome TLSフィンガープリントを使ったブラウザレスHTTP・キー不要のウェブ検索 | はい | — | — | — | — |
| ブラウザ | 標準のChrome | 独自のChromiumビルド | 標準のChromium | デフォルトはChrome for Testing | 標準のChrome |
| ステルスレイヤー | CDPレベル(Patchright) | エンジンレベル(C++パッチ87件) | CDPレベル(「6層」)、Runtime.enable は不使用 | コアにはなし。クラウドプロバイダー経由で利用可能 | なし |
| 公開済みステルススコア | まだなし | 独自の検出リストで30/30 | Stealth Bench V1で68/80(自己測定) | — | — |
| Claude CodeでのMCP起動コスト¹ | 約2.7kトークン(87ツール、常時読み込みは5つ) | 対象外 | 約3.4kトークン(5ツール) | 未測定 | 未測定 |
| プラットフォーム | Linux(macOS:CIでの確認のみ、非対応) | Linux・macOS・Windows | Linux・macOS・Windows | すべて | すべて |
¹ stdio経由で測定した、tools/list のバイト数÷4とサーバーの指示文です。ツール検索に対応していないクライアントはすべてのツールを読み込みます。vb mcp --caps min は12ツールで、約3.8kトークンです。bladebroのREADMEには約1.9kと記載されています。
他のプロジェクトが明確に優れている点: CloakBrowserのエンジンレベルのパッチは、CDPレベルのレイヤーでは実現できないほど深く対応しています。また、vb start --browser-binary を使えば、用意したChromiumビルドを操作できます。bladebroにはステルスベンチマークの数値がありますが、こちらにはありません。数値が出るまでは、ステルス性に関する主張は、本番環境の壁ではなく、以下に示すスコアボードで測定したものとしてご覧ください。どちらも、より多くのOSで動作します。
vibatchium にしかできないこと
1. 1台のマシンで、ログイン済みの複数の ID を運用できます。 各セッションは専用の Chrome とプロファイルを持ち、それぞれに専用のプロキシ、タイムゾーン、GPU ノードが割り当てられます。また、vb persona set でオプトインすると、専用の画面とウィンドウも持てます。デフォルトでは、同じマシン上のヘッドレスセッションはすべて同じ 800×600 の画面を報告するためです。vb fleet-check で、セッション同士の見た目がどれほど似ているかを測定できます。セッションは、稼働状態を維持する単一のデーモン上で並列実行されます。レンダラーがクラッシュした場合は同じプロファイルで再起動され、待機中のセッションではレンダラーが停止され、次の呼び出しで再開されます。リースによって2つのエージェントが同じセッションを奪い合うのを防ぎ、目標によってデーモンの再起動後も維持されるステップ数・支出額・時間の予算をタスクに設定できます。
vb --session alice start && vb --session alice go https://x.com # log in once, stays logged in
vb --session bob start && vb --session bob go https://x.com
vb --session alice act "open notifications" & vb --session bob extract & wait
vb fleet-check --sessions alice,bob # how twinned are they?
2. エージェントが使えて、値を見られない認証情報。 ボールトは、パスワードや有効な TOTP コードをモデルのコンテキスト、スクリーンショット、ログに値を渡すことなくページに入力します。入力先は、その認証情報が属するサイトだけです。MCP 経由であれば、プロンプトインジェクションを受けたエージェントが、似せかけのページに GitHub のパスワードを入力したり、フィールドに値がある間に value や eval で読み戻したり、ボールトを編集したりコードを取得したりすることはできません。シェルを使えるエージェントはオペレーターです。CLI には意図的に回避手段を用意しています。その境界が重要であれば、Bash ではなく MCP をエージェントに渡してください。
printf %s "$GH_PASSWORD" | vb secret set github.com password --stdin
printf %s "$GH_TOTP_SEED" | vb secret set github.com totp-seed --stdin
vb --session work fill @e7 --use-secret github.com:password
vb --session work fill @e9 --use-secret github.com:totp
vb wait-email-code github.com # operator CLI: polls IMAP and prints the code; refused over MCP
3. ページ上のテキストは信頼できないものとして扱われます。 各セッションは、返すページ上のテキストをスキャンし、エージェントに向けた指示をデフォルトで検出してフラグを付けます。wrap はそれらを隔離し、redact は削除します。呼び出し元が指定したファイルパスも制限されるため、プロンプトインジェクションを受けたエージェントが ~/.ssh をアップロードしたり、.git/hooks に書き込んだりすることはできません。
4. 同じ ID で使える、ブラウザー不要の経路。 vb fetch は、Chrome の TLS フィンガープリントとクライアントヒントを使って、セッションの Cookie とプロキシを再利用します。ログインが必要な JSON エンドポイントに curl 並みの速度でアクセスでき、ブラウザーと一致させられない場合はその旨を知らせます。vb search は API キーもセッションごとの予算も使わずに URL を見つけます。
vb --session work fetch https://api.example.com/v1/me
vb search "site reliability postmortem" -n 20 --urls
ステータス: アルファ版、開発中です。CI では 2,027 件のテストが成功しています(Linux、Python 3.11–3.14)。コーディングエージェントは、まず AGENTS.md を読んでください。1回の呼び出しで使えるレシピや、避けるべき落とし穴が記載されています。
以下に引用する検出器のスコア(bot.sannysoft、CreepJS、Cloudflare のコールド起動)は、手動で確認した結果であり、CI でのアサーションではありません。テストスイートにはスコアを合否判定に使うテストはなく、手動で最後に実行した時点の状態しか反映していません。測定スコアの下にある生成ブロックを参照してください。
インストール
pipx install vibatchium # core: browse / extract / screenshot / N parallel sessions
pipx install 'vibatchium[all]' # + fetch/search lanes, credential vault, VLM read, REST shim
# (or pick extras: [fetch], [secrets], [llm], [rest])
patchright install chrome
vb setup # register MCP + an auto-discoverable skill (idempotent)
vb install # report which optional lanes are available
uv の仮想環境(pip なし)では、uv pip install --python <venv>/bin/python curl_cffi で追加機能をインストールできます。master の最新開発版をインストールするには、pipx install 'git+https://github.com/trueoriginlabs/vibatchium#egg=vibatchium[all]' を実行します。
スキル/プラグインとしてインストール
vb setup は、このマシン上のエージェントをセットアップします。エージェントスキルだけを、skills.sh に対応する任意のエージェント(Claude Code、Codex、Cursor、Gemini CLI、Copilot など)に追加する場合、またはスキルと MCP サーバーをまとめて Claude Code プラグインとしてインストールする場合:
npx skills add trueoriginlabs/vibatchium # skill only, any agent
/plugin marketplace add trueoriginlabs/vibatchium # Claude Code: skill + `vb mcp`
/plugin install vibatchium@vibatchium
どちらの場合も vb CLI が PATH 上に必要です(pipx install 'vibatchium[all]')。スキルは vb を実行し、プラグインの MCP サーバーは vb mcp そのものです。Claude Code では、プラグインか vb setup のどちらか一方を選んでください。両方使うとサーバーが二重に登録されます。スキルファイルは vibatchium/setup_cmd.py から生成されます。編集後、python scripts/sync_skill.py を実行してください。
クイックスタート
vb explore https://example.com # one call: text-first, auto-closes
vb research --target https://example.com \ # parallel fan-out, N intents
--intent "pricing model" --intent "customers" --intent "tech stack"
本物の Chrome と偽物の Chrome
「AI エージェント向けヘッドレスブラウザー」ツールが次々と登場し、メモリ使用量を抑え、ページ読み込みを 100 ミリ秒未満にするために、ブラウザーを一から再構築しています (Rust + V8、Blink/Skia なし)。ただし、構造上の問題があります。レンダリングエンジンがないため、実際のデバイスのフィンガープリントを生成できず、合成するしかありません。 そして、合成フィンガープリントは安定しません。
vibatchium は 実際の Google Chrome を動かすため、フィンガープリントは本物です。さらに重要なのは、安定していることです。両者を分ける唯一のテストは、ページ遷移をまたいだフィンガープリントの安定性です。同じセッション内の 2 つのページで、同じ canvas + WebGL プローブを実行します。
| vibatchium(実際の Chrome) | 合成フィンガープリントのエンジン | |
|---|---|---|
| canvas ハッシュ、ページ A → ページ B | 同一 | ページ遷移ごとに再シード |
WebGL readPixels | 実際の、決定論的なピクセル | 多くの場合 Math.random() |
| WebGL レンダラー | 実際の ANGLE レンダラー¹ | スタブ/ゼロ |
¹ デフォルトでは Chrome 独自のソフトウェアレンダラー(SwiftShader)です。スタブではなく、一貫性のある決定論的な Chrome の値です。ハードウェア GPU の文字列(例:ANGLE (Intel …))には、オプトインの --gpu フラグが必要です。
実際のデバイスはページを読み込むたびに同じフィンガープリントを返しますが、Date.now() を基にしたフィンガープリントはそうなりません。そして、その不一致こそが、偽装検出を行うフィンガープリンター(CreepJS など)が検出するものです。実測では、vibatchium の canvas ハッシュと WebGL の読み取り結果はページ遷移をまたいでもバイト単位で完全に一致し、直近の手動実行では CreepJS がステルス改変 0 %(合成環境の痕跡なし)と報告しました。この数値は回帰テストで検証されていません。保証ではなく、観測結果として扱ってください。
これは、検出されないという主張ではありません。 強みはフィンガープリントの真正性であり、ブラウザーが自動化されていることを隠すことではありません。vibatchium は、ヘッドレス固有の兆候では依然としてヘッドレスと判定されます(正直な制約を参照)。また、実 GPU の WebGL(--gpu)はオプトインです。しかし、本物で一貫性のあるフィンガープリントは、合成フィンガープリントが構造上通過できない一貫性の基準を通過します。そして、その基準こそがログイン画面の壁を越えられるかどうかを左右します。
10 行でマルチセッション
vb session new work
vb --session work start
vb --session work go https://github.com # log in by hand once
vb session new banking
vb --session banking start
vb --session banking go https://bank.example.com
vb --session work click @e3 & # truly parallel —
vb --session banking fill @e5 hi & # separate Chromes, no cookie bleed
wait
vb session list
アクティブセッションの解決順序:--session FLAG → $VIBATCHIUM_SESSION 環境変数 → ~/.config/vibatchium/active-session → default。上限は VIBATCHIUM_MAX_SESSIONS=8 で設定します(デフォルトは 8)。
マルチエージェント:共有セッションとプライベートデーモン
1 つの共有デーモンでは、状態はセッションごとに分離されます(Chrome とプロファイルが個別に用意され、Cookie が混ざることはありません)が、フィンガープリントは自動的に分離されません。同じマシン上では同じ画面を報告し、--gpu --node を指定しない限り、同じソフトウェア GPU を使用します。ただし、vb persona を設定すれば別です。vb fleet-check で確認できます。また、セッション数の上限、メモリ、OOM やデーモンの再起動による影響範囲など、ホストも共有します。信頼レベルに応じて、次の 2 つのモデルを選択してください。
- 協調するエージェント(独自のフリート):共有デーモンが適しています。各エージェントに一意の
--session名を割り当てるだけで、状態を保持するフローがdefaultで衝突しなくなります。vb session leaseは共有名の使用を調整します。 - 影響範囲を個別に分離する場合:エージェントごとに、専用のソケットと
HOMEを持つプライベートデーモンを使用します。プロファイル、設定、状態、セッション数の上限がそれぞれ分離され、共有デーモンとは一切接触しません。vb daemon start --isolatedは、後続の呼び出しでエクスポートするXDG_RUNTIME_DIR/HOMEを出力します。vb mcp --isolatedは、独自のプライベートデーモン上で MCP サーバーを直接実行します。vb daemon reapは、放置されたデーモンをクリーンアップします。(同じ UID は同じ信頼ドメインです。これは影響範囲を制限するものであり、信頼しないテナント間のセキュリティ境界ではありません。テナントを分離するには、UID/コンテナを分けてください。)
リソース管理。セッション上限が制限するのは、プロセスの数であり、バイト数ではありません。共有マシンでは、空きメモリが少ないときに新しい起動を拒否するよう、VIBATCHIUM_SESSION_RAM_FLOOR_MB を設定してください(移植可能な起動制限です)。厳密な上限を設けるには、デーモンを cgroup 内で実行します。systemd-run --user --scope -p MemoryMax=4G vb daemon start を実行すると、デーモンとすべての Chrome が 1 つの cgroup に入り、上限を共有します。これはデーモン全体に対する合計上限であり(レンダラーごとの上限ではありません)、上限を超えるとスコープ内のプロセスが OOM によって強制終了され、デーモンが対象に含まれることもあります。競合状態を起こさずにメモリを制限する唯一の方法なので、すべての並列処理を考慮して上限を設定してください。
**アイドル時の CPU 使用率。**停止中のセッションが CPU コアを使い続けることもありません。デーモンは、VIBATCHIUM_IDLE_FREEZE_AFTER 秒間(デフォルトは 90 秒)操作がないと、起動済みセッションのレンダラープロセスに SIGSTOP を送信し、次の呼び出し時に再開します。これにより、アイドル状態の WebGL/アニメーションページは、終了させることなく CPU 使用率がゼロになります(デフォルトで有効。無効にするには VIBATCHIUM_IDLE_FREEZE=0 を設定)。
終了ではなくフリーズを選ぶのは、意図的なトレードオフであり、両面があります。playwright-mcp の --idle-timeout(v0.0.81。ヘッドレスではデフォルト 1 時間)は、アイドル状態のブラウザーを終了します。メモリは解放され、永続プロファイルに Cookie は保持されますが、開いているタブとページ内の状態は失われ、次の呼び出しでは起動し直す必要があります。フリーズしたセッションはメモリを使用し続けますが、タブ、ページの状態、ログイン状態を保ったまま次の操作で再開します。これは、フローの途中で長時間維持する必要がある認証済みセッションに適した動作です。メモリは終了ではなく、前述した 2 つの手段、RAM の下限と cgroup によって制限します。
ステルスの段階 — 何を突破できるか
ステルスは二択ではなく、段階的なものです。対象を突破できる最も低い段階を選んでください (段階が上がるほど、セットアップの手間/目に見えるブラウザー/手動ログインが必要になります)。vibatchium は、行動ベースの壁をコールド起動で突破できるとは主張していません。こうした壁には人間が実際に操作するセッションが必要であり、正直な答えはアタッチモードです。
アーキテクチャに関する注意点。 以下のすべての段階は、x86-64 Linuxで測定されています。 Patchrightには既知のarm64/Apple Siliconの検出ギャップが未解決のままあるため、これらの結果がARMホストでも得られるとは限りません。そこで実行する場合は、結果を当てにする前に測定してください。
| 段階 | 方法 | 突破できるもの | 突破できないもの |
|---|---|---|---|
| 標準(デフォルト) | ヘッドレスでのコールド起動、実際のchannel=chrome、Headlessを除去したUA | Cloudflare IUAM/managed challenge、bot.sannysoft 31/31、JSランタイムのフィンガープリンティング | 厳しいTurnstile、DataDome/Kasada、ログインが必要なものすべて |
| 強化 | --headedで再試行、vb humanize on + humanize ambient on(アクション間のポインター操作)、vb persona set(IDごとの画面設定)、最も厳しいCloudflareのゲートには--backend nodriver(pip install vibatchium[nodriver]、AGPL) | 厳しいCloudflare/Turnstile、ヘッドレスで露見するGPU/画面の特徴 | 行動バイオメトリクス、DataDome/Kasadaのセンサーフュージョン |
| アタッチ | あなたが起動してログインしたChromeにvb attachで接続 | DataDome/Kasada/HUMANの行動ベースの壁、および認証済みセッション全般 — 実際のフィンガープリントとCookieを使用 | コールド起動による自動化は一切できません。まず人間がログインする必要があります |
測定スコア
vb evals run --update-readmeを実行すると、以下のブロックに測定値が書き込まれます。そのため、公開する数値は主張ではなく、実行結果から生成されます。誰かが実行するまでは空欄です。空のブロックは正直な表示ですが、実行に裏付けられていない数値はそうではありません。
x86-64 Linux、2026年8月25日、Chrome 150、--gpu(実際のレンダーノード)で実行。
--gpuは自分で指定してください。GPUの経路が使えない場合、ヘッドレスChromeはSwiftShaderにフォールバックします。ソフトウェアGL自体が検出シグナルになるため、これを指定せずに測定した数値は、GPUを使うデプロイ環境で得られる値より低くなります。
| 対象 | バックエンド | ヒューマナイズ | GPU | スコア | ステータス | 時間 |
|---|---|---|---|---|---|---|
| sannysoft | patchright | オフ | 実際 | 100 | OK | 17.78s |
| creepjs | patchright | オフ | 実際 | 44 | OK | 7.88s |
| brotector | patchright | オフ | 実際 | 10 | OK | 7.13s |
| sannysoft | nodriver | オフ | 実際 | 100 | OK | 19.85s |
| creepjs | nodriver | オフ | 実際 | 44 | OK | 9.72s |
| brotector | nodriver | オフ | 実際 | 10 | OK | 7.73s |
正直に読み取ってください — 3つのうち2つはよくありません。
-
sannysoft 100は、このカテゴリの誰もが突破できる最低ラインであり、差別化要因ではありません。
-
creepjs 44は平凡です。CreepJSは敵対的な嘘発見器です。メインスレッドとワーカースレッドの主張を照合して信頼度を評価するため、中程度のスコアは、環境に一貫性はあるものの、区別できないほどではないことを意味します。
-
brotector 10は低いスコアで、その理由は正確に把握しています。発火しているシグナルは
UA_Override / HighEntropyValues.emptyで、原因は私たち自身のHeadless除去の修正です。 Chrome 150で、ヘッドレス、同一プロファイルを使い、HeadlessChromeを除去するために設定した--user-agentフラグの有無を比較して測定しました。architecturebitnessuaFullVersionUA文字列 フラグなし x8664150.0.7871.114HeadlessChromeと表示 フラグあり 空 空 空 Chromeと表示 UA を明示的に渡すと、Chrome は高エントロピーのクライアントヒントの生成を停止するため、UA 文字列による手掛かりを、UA-CH が空であることによる手掛かりと引き換えることになります。これは解決済みではありません。明白な修正( userAgentMetadataを指定したEmulation.setUserAgentOverride)はターゲット単位で適用されるため、メインスレッドとワーカーの不一致が再び生じ、どちらか一方の漏えいよりも強い手掛かりになります。ターゲットを除外せずにこれを公開することに意味があります。成果だけを報告するスイートは、宣伝にすぎません。 -
nodriverは 3 項目すべてでpatchrightと同じスコアです。 エスカレーション段階にしても、静的なスコアボード上では測定可能な効果はありません。この段階の根拠となるのは、これらのターゲットが検査しない自動化プロトコルの軸です。以前の実行では、creepjs でnodriverがわずかに上回っていました(50 対 44)。しかし、その実行ではpatchrightには実際の GPU が割り当てられていた一方、nodriverには気付かれないまま GPU が使えない状態にされていたため、不利な条件でスコアを測っていました。両方に実際のレンダラーを割り当てると、差はなくなります。この段階に進む前に知っておく価値があります。上流では **nodriver 0.50.3(2026-05-13)**以降リリースされておらず、>=0.50.0,<1.0の指定で解決されるバージョンは、すでに数か月前のものです。この段階は今も機能しますが、もはや更新されていません。
これらでカバーされること、されないこと。 これらはフィンガープリントのスコアボード、つまり静的な軸を測るものです。2026 年までに、主要なボット対策ベンダーはセッションの存続期間を通じた行動スコアリングへ移行しましたが、これらのターゲットはそのいずれも測定しません。また、当社も商用ベンダーに対しては何も測定していません。ここで良いスコアが出ても、それは環境の一貫性についての証拠とだけ捉えてください。
行動の軸そのものについては、vb oracle run がセルフホスト可能なプローブです。humanize をオフにした状態とオンにした状態でページを操作し、軌道の曲率、滞在時間、キー入力の間隔、スクロールの動きを、人間らしい範囲と照合して評価します(vb oracle record は実際のオペレーターのベースラインを記録します。記録するまでは文献に基づく既定値を使用します)。これは特定のベンダーではなく、当社の人間モデルを測定するものですが、「人間らしく動作させる」をオン/オフの差として測定可能にします。また、合成入力では到達できない唯一の軸についても、実態を隠しません。CDP 入力は生のポインターイベントや統合イベントを送出しないため、これを補えるのは実際のハードウェアに対するアタッチモードだけです。
壁に阻まれたときのエスカレーション手順:ヘッドレス → --headed → humanize on → --backend nodriver → 手動ログイン後にアタッチモード。 Patchright の CDP レイヤーのパッチは、アタッチ(connect_over_cdp)を含むすべての段階で適用されます。
fetch動詞は段階とは独立した高速パスです。ブラウザーで壁を越えた後、vb fetchを使うと、そのセッションの Cookie とプロキシを再利用し、TLS フィンガープリントが正しい状態で JSON/API エンドポイントにアクセスできます。ただし JavaScript は実行しないため、それ自体で JavaScript チャレンジをクリアすることはできません。
キャプチャ — 到達するためにクリックが必要だった状態の 2× スクリーンショット
vb --session shots start --scale 2 # devicePixelRatio 2 (1–4, persisted; --scale 1 clears)
vb --session shots go https://example.com
vb --session shots click @e3 # open the modal…
vb --session shots screenshot -o card.png # …then capture it at 2560×1600
# (2× the 1280×800 pin; vb viewport W H to resize)
既定のセッションでは CSS ピクセル 1 つにつき画像ピクセル 1 つをキャプチャするため、Retina 用アセットを意図した切り抜きは、必要な解像度の半分になります。chrome --force-device-scale-factor=2 --screenshot は正確ですが、クリックできないため、モーダル、ホバー状態、ログイン済みビューをキャプチャすることはできません。--scale なら両方を実現できます。
これはキャプチャ用の設定であり、ブラウジング用ではありません。 Chromium はコンテキスト作成時にのみ deviceScaleFactor を受け取り、Playwright は no_viewport との併用を拒否するため、スケーリングしたセッションではビューポートが固定され、デバイスメトリクスがエミュレートされます。つまり screen == viewport となり、start にはその旨が screen_coherent: false と表示されます。Cloudflare/DataDome の壁にはスケーリングしたセッションを使わないでください。通常のセッションでブラウジングし、画像用に別のセッションをスケーリングしてください。コールドスタート時のみ使用できます(稼働中のセッションでは scale_pending)。Patchright 専用です(nodriver では scale_ignored)。max_screenshot_px の単位はデバイスピクセルです。2× では、高さのあるページは CSS 高さの半分で切り詰められます。詳しくは AGENTS.md の Retina / 2× captures を参照してください。
検索 — URLを読むだけでなく、見つける
アクセス制限されたページを読むのは、調査の一連の流れの半分にすぎません。もう半分は発見ですが、検索エンジンもほかのすべてと同じようにボット対策でアクセスを制限しています。vb search は同じ curl_cffi 経由で検索結果ページを取得します。ブラウザーも、セッションも、API キーも不要で、実行中に使い切るセッションごとの呼び出し上限もありません。
vb search "playwright stealth detection" -n 5
vb search "cdp leak" --site github.com -n 20
vb search "postmortem" --urls | xargs -I{} vb fetch --no-cookies {}
検索エンジンは順番に試されます(ddg → ddg-lite → bing)。結果を返すエンドポイントは変わりやすく、今は応答していても次の呼び出しではレート制限(HTTP 202)される場合があるためです。--json は、応答しなかった各エンジンとその理由を示す attempts 配列と、すべてのエンジンがアクセスを制限している場合とウェブ上に情報がない場合を区別する reason を返します。この2つは問題も対処法も異なり、CLI がゼロ以外の終了コードを返すのは前者のみです。
セッション Cookie は再利用しません(検索結果ページにログインは不要で、Cookie を付けるとリクエストの匿名性が損なわれます)。そのため、fetch の上限を使うのではなく、独自の search 上限を設けています。日付フィルターは意図的に公開していません。DuckDuckGo は記事の日付を誤って表示することが多く、時系列を損なうためです。検索エンジンは IP ごとにレート制限を行います。以下のプロキシをご覧ください。
プロキシ — 2つのステルス経路でリクエストごとに送信元を切り替える
送信元は多くの人が誤解する要素なので、曖昧にせず正確に説明します。どちらの curl_cffi 経路でも --proxy scheme://[user:pass@]host:port を指定できます。
vb fetch --no-cookies https://api.example/v1 --proxy http://user:pass@gw:12323
vb search "site reliability postmortem" -n 20 --proxy http://user:pass@gw:12323
vb --session work proxy set http://user:pass@gw:12323 # or per-session, for the browser
主張ではなく実測値です。同じマシン、同じコマンドで、--proxy だけを変えています。
| 送信元 IP | |
|---|---|
| 直接接続 | 115.70.50.70 |
--proxy(認証付きゲートウェイ) | 212.69.0.85 |
知っておくべき点は4つあります。
- 未設定の場合は直接接続となり、その動作が保証されます。 デーモンは libcurl に明示的な空のプロキシを渡します。これが、起動時の環境変数から
HTTP(S)_PROXY/ALL_PROXYを読み込ませない唯一の値です。長時間稼働するデーモンは最初に起動したシェルの環境を引き継ぐため、これがないと、残っていたHTTPS_PROXYによってすべてのリクエストがひそかに別経路へ転送される一方、レスポンスには直接接続と表示されてしまいます。(0.19.0 までは実際にそうなっていました。変更履歴をご覧ください。) - 特に
searchで重要です。 検索エンジンは IP ごと にレート制限を行うため、1つのアドレスから大量の調査リクエストを並行して送ると、すべてのクエリが検索エンジンの順序の最後の段階に回されやすくなります。レスポンスにはproxied: true|falseが含まれるため、結果が少ない場合にどの IP から取得したのかを確認できます。 - プロキシアドレスにも、対象 URL と同じ SSRF 保護が適用されます。
--allow-internalを指定すると、自身の LAN 上のプロキシを許可できます。保護されていないプロキシは内部サービスにアクセスし、接続エラーだけでなくレスポンス本文も返します。 - プロキシの不具合はエラーとなり、フォールバックはしません。 特定の IP を指定したのに、ホストの IP からひそかに接続するより、失敗するほうが適切です。指定した理由は、ホストの IP を使ってはならないからです。プロキシ URL は動詞ログでは伏せられ、レスポンスには URL ではなく真偽値だけが含まれます。
ブラウザーセッションでは、vb proxy set によって WebRTC リーク防止機能 も設定されます。この機能がないと、HTTP リクエストをトンネル経由で送っても、STUN を通じて実際の IP が漏れてしまいます。
アタッチモード — Cloudflare 対策の実用的な回避策
DataDome / Kasada / 強化された認証など、コールド起動の自動化をブロックする場合:
google-chrome --remote-debugging-port=9222 \
--disable-blink-features=AutomationControlled \
--user-data-dir=/tmp/cdp-profile &
# log into the walled site by hand
vb attach http://localhost:9222
vb go https://target.example.com # now reads as your real browser
connect_over_cdp 経由でも、Patchright の CDP レイヤーのステルス機能は引き続き適用されます。アタッチモードでは、コールド起動と同じプロトコルレベルのパッチに加え、実際のブラウザーのフィンガープリントと、手動ログイン時の Cookie を利用できます。
この階層では起動フラグは自分で指定します。 コールド起動では、バックエンドが
--disable-blink-features=AutomationControlledを指定してくれます。アタッチ接続するのは すでに起動している Chrome のため、vibatchium が後から起動フラグを追加することはできません。Chrome をこのフラグなしで起動した場合、その痕跡はセッション全体に残ります。上記のコマンドにこのフラグを含めてください。
--remote-debugging-portは外部に開かれた入口です。 マシン上のすべてのプロセスにブラウザーの完全な制御権を与えます。また、アクセスしたページから localhost を調べて、デバッグポートを見つけられる可能性があります。信頼できるマシンでのみ使用し、作業が終わったら Chrome を終了してください。
セキュリティモデル
vibatchiumは、信頼できないエージェントのループから実際のログインを実行するように作られているため、脅威モデルは「認証情報がモデル、スクリーンショット、ログに決して渡らないこと」です。
- 暗号化されたボールト。 パスワードとTOTPシークレットは、OSのキーチェーンまたは
VIBATCHIUM_SECRETS_KEYを鍵として使うXSalsa20-Poly1305ボールトに保存されます。解決済みのシークレットは、ログ、HARキャプチャ、監視キャッシュ、エージェントに表示される応答フィールドのいずれにも現れません(CIでgrepテスト済みです)。 - シークレットは平文で表示されません。
fill --use-secretは値を書き込む前に、フィールドをページ上でマスクします(-webkit-text-security)。これにより、ビューポートをバイト列に変換するすべての経路、すなわちscreenshot動詞、5 fpsのライブビュー・ストリーム、フレームをモデルに送るVLMのvision_*呼び出しで、値ではなくドットがキャプチャされます。マスクの確認に失敗した場合はフェイルクローズとなり(値を書き込みません)、パスワードフィールドも対象にするため、パスワード表示の切り替えでマスクを解除できません。また、map/diff_mapが返すアクセシビリティスナップショットでは、マスクされた値が除去されるため、シークレットがテキストとしてモデルのコンテキストに漏れることもありません。 - シークレットはオリジンに紐づけられます。
fill --use-secret github.com:passwordが書き込めるのは、そのサイト上のドキュメント(https、github.comまたはそのサブドメイン。フィールドを所有するフレームに基づいて判定されるため、iframeがトップページのオリジンを借用することはできません)、またはエントリの明示的なoriginsリストに含まれるドキュメントだけです。それ以外では、シークレットを解決する前に拒否されるため、プロンプトインジェクションを受けたエージェントが、見た目がそっくりなページにパスワードを入力することはできません。フレーム内のログインページ、about:blankフレーム、エージェントがすでにevalを実行したページも拒否されます。シークレットがフィールドにある間は、読み戻しを防ぐためvalue/evalも拒否されます。また、書き込みにはフィールド独自の値セッターを使い、フォーカスしてキーボード入力することはないため、ページスクリプトによるリダイレクトも防げます。入力中にフィールドが置き換えられた場合は、値を消去して呼び出しを失敗させます。回避手段(--allow-cross-origin、2つのデーモン環境変数)はシェル専用です。MCPでは、ボールトの編集やsecret totpとともに使用できません。 - ライブビューは認証されます。 WebSocketにはサーバーごとのトークンが必要で、外部の
Originからの接続(CSWSHの類)を拒否します。また、ページを操作するためのトークンは閲覧専用のトークンとは別です。読み取り専用リンクは、キーボード操作権を渡さずに共有できます。デフォルトでは127.0.0.1にバインドされます(変更するには--insecure-publicを指定します)。 - スクレイピングしたコンテンツには、信頼できないデータとして印が付けられます。 ページ由来のテキストを返すMCP動詞には
openWorldHintが付いているため、ホストはスクレイピングしたページを指示として扱うのではなく、出力を汚染済みとして扱ってプロンプトインジェクションに備えられます。読み取り専用のプローブにはreadOnlyHintが、変更を行う動詞(stop、secret_delete、storage_restore)にはdestructiveHintが付いています。 - RESTシム。
--capsを指定しない場合、ベアラートークンですべての動詞(eval、secret_*、ファイル書き込みを行う動詞を含む)を実行できます。これはローカルコードと同等の権限となるため、ホストモードでは必ず--caps=...を指定してください。vibatchiumが書き込むファイルはすべて0600、ディレクトリは0700です。
正直な制限事項
-
同時に5セッション以上を実行すると、1~2GBのRAMが必要です。 永続コンテキストを使うChromeは1つあたり約200~400MBです。上限は
VIBATCHIUM_MAX_SESSIONS=8で引き上げられます。 -
ビジョン関連の支出上限はプロセス全体に適用されます。 N個のファンアウトエージェントで、1つの日次/生涯予算を共有します。
-
initスクリプトはpatchrightバックエンドでは動作しません。
chrome.runtimeはundefinedのままです。ステルス性を高めるために受け入れている代償です。 -
ログインが必要なサイト(X、LinkedIn)ではアタッチモードが必要です。 コールドローンチのファンアウトでは、認証済みセッションを必要とするサイトには対応できません。
-
合成入力にはCDPの座標シグネチャがあります。 すべての
click/type/hover/scrollは、Playwright経由でCDPのInput.dispatchMouseEvent/dispatchKeyEventを使います(pageX==screenX、CoalescedEventsなし)。Patchrightが修正するのはJSコンテキストの漏えいであり、Inputドメインではありません。また、humanize onは軌道やタイミングの自然さを高めますが、イベントごとのシグネチャは変わりません。これをフィンガープリントで検出する行動ベースの防御(DataDome/Kasada/HUMAN)には、実際に操作する実Chromeを使ったアタッチモードが必要です。OSレベルの合成入力(CDP-Patches)は、ヘッドフルかつアクティブタブのみで動作するため、ヘッドレスでN並列のデーモンには適しません。 -
fetchは静的フィンガープリント向けの手段であり、ブラウザーではありません。 curl_cffiのfetch動詞はChromeのJA3/HTTP2に一致しますが、JavaScriptは実行しません。TLSフィンガープリントのゲートは通過できますが、DataDome/Kasada/TurnstileのJSチャレンジには対応できません。その場合はgoに切り替えてください。 -
単一のデーモンには単一障害点があります。 HAは組み込まれていません。
-
行動検出は、人間らしさを加える仕組み自体を直接標的にするようになりました。 Cloudflareの2026年のボット検出に関する取り組みでは、数学的に理想的なベジェ曲線のカーソル軌道や、人間を超えるクリック精度が検出の手がかりとして挙げられています。
humanizeは何もしない場合より改善しますが、生理学に基づくものではなく、ポインター軌道のモデルです。また、デフォルトではオフであり、行動スコアリングを行うサイトでは、オンとオフのうち、より目立つのはオフの状態です。 -
1つのプロファイルが検出されると、それを共有するすべてのアカウントに悪影響が及ぶ可能性があります。 ベンダーは現在、セッション間だけでなくアカウント間でもデバイスのテレメトリーを関連付けています。アカウントごとに1つのプロファイルを使い、異なるID間で共有しないでください。また、すでにチャレンジを受けたプロファイルは再利用しないでください。
-
fetchレーンとsearchレーンは、プロンプトインジェクションスキャンの対象外です。 スキャナーが対象とするのは、ページ内容を扱う動詞(text、html、extract、map、…)です。SERPのタイトルや取得した本文は、エージェントのコンテキストに直接渡されるサードパーティーのテキストであり、現時点ではスキャンされません。信頼できない入力として扱ってください。 -
Cloudflareの2026-09-15時点のデフォルトは、検出ではなくポリシーです。 新しいドメインおよび無料プランのゾーンでは、広告収益化されたページに対し、CloudflareはTrainingおよびAgentクローラーをデフォルトでブロックするようになりました。これは、自らを明示する(ユーザーエージェントまたはWeb Bot Auth署名を使う)クローラーが対象なので、実際のChromeセッションの見え方は変わりません。一方、上記のフィンガープリントと行動スコアリングは別の要素であり、ブログ記事で発表される内容とは無関係に変化します。
更新
vb update # upgrade + bounce the daemon + refresh the agent skill
vb update --version 0.19.0 # or pin a specific version
vb updateはvibatchiumのインストール方法(pipx、uv tool install、pipを使わないuv venv、またはPEP-668の--break-system-packagesフォールバック)を検出し、実行中のデーモンを停止して次のコマンドで新しいコードが読み込まれるようにし、さらにエージェントスキル/ドキュメントのブロックを書き換えて、コーディングエージェントに新バージョンで追加された動詞を確実に伝えます(オプトアウトするには--no-restart/--no-setupを指定します)。
同等の手順を手動で行う場合:
pipx upgrade vibatchium # or: uv tool upgrade vibatchium / pip install -U vibatchium
vb shutdown # bounce the daemon — it serves old code until you do
vb setup # refresh the agent skill + docs
vb --version # confirm
デーモンの再起動手順は見落とされがちです。長時間実行されるデーモンは、再起動するまで古いバージョンを提供し続けます。
vb updateは自動で対応しますが、手動でアップグレードする場合はvb shutdownを実行してください(次にvbを呼び出すと、新しいバージョンが自動で再起動します)。オプション機能をアップグレードするには、pipx install 'vibatchium[all]' --forceを実行してください。
git チェックアウトから実行する
git pull はソースを更新しますが、vb が実際に実行するものも更新されるかどうかはインストール方法によって異なります。また、更新に失敗する3つのケースのうち2つは、何も通知されません。
vb --version && git describe --tags # do they agree? if not, the install COPIED
# the source — reinstall editable:
# uv pip install -e '.[all]'
vb status # warns when the daemon predates the source
# ("stale_code") — bounce with `vb shutdown`
バージョン文字列の比較では、チェックアウトの更新を検出できません。git pull は __version__ を変更せずにコードを更新するためです。vb status は代わりに、デーモンの起動時刻と最新のソースファイルを比較します。また、vb update は明らかに更新が必要な場合にのみデーモンを再起動するため、理由もなく実行中のセッションが終了することはありません。
新しい cap バケットには再登録が必要です
MCP サーバーの --caps リストは、最初の登録時にエージェントの設定へ固定されます。そのため、後のリリースで追加されたバケット(0.19.0 では search が追加されました)は、何度アップグレードしても表示されません。vb setup を再実行すると設定の差異が報告されますが、手動で設定した --caps は意図的に上書きされません。
vb setup # reports any cap drift, changes nothing
vb setup --force --caps lean,search # apply it — exposes `vb search` as a tool
その後、エージェントのセッションを再起動してください。MCP ツールのリストは起動時に一度だけ読み込まれます。
サーバーモード
| モード | インターフェース | 認証 |
|---|---|---|
vb mcp | stdio JSON-RPC。デフォルトは軽量な87動詞のプロファイルです(ツール検索に対応していないクライアント向けの --caps min は12個のツール、--caps=full/all は163個、カスタムのバケットセットには --caps=... を指定) | 該当なし(stdio) |
vb serve | 127.0.0.1:8000 で動作する FastAPI。すべての動詞は POST /v1/<verb> で利用でき、WebSocket によるライブビューは /v1/stream/<session> で利用できます | ベアラートークン(~/.cache/vibatchium/rest-token、モード 0600) |
REST の機能制限:vb serve --caps=core,nav,input,vision を指定すると、mcp --caps と同様に HTTP インターフェースが制限されます。指定しない場合、REST はローカルコードと同等のアクセス権限を許可します(eval、secret_*、ファイル書き込みの動詞をすべて公開)。localhost での開発には安全ですが、ホスティング環境やマルチテナント環境では安全ではありません。
ドキュメント
AGENTS.md— コーディングエージェント向け契約(Codex/Cursor/Claude Code)
許可された用途
vibatchium は、ご自身が所有するセッションを、ご自身の認証情報を使って、ご自身のマシン上で操作するために作られています。ご自身のアカウント、勤務先のアカウント、または書面による許可を得たクライアントのアカウントが対象です。すでに利用権限のあるアクセスを自動化するためのツールです。
ただし、この境界は形式的なものではありません。関連する法律は2026年に変化しました。米国の地方裁判所は、AI エージェントがユーザー自身のログイン済みアカウントを通じてパスワード保護されたページにアクセスした事案で、ユーザーの許可はプラットフォームの承認には当たらないとして、仮差止命令を出していました。2026年8月4日、第9巡回区控訴裁判所はこの差止命令を破棄して差し戻し(Amazon.com Services, LLC v. Perplexity AI, Inc., No. 26-1444, 公刊判決)、運用者はCFAA上、原告のコンピューターに「アクセス」していないと判断しました。「アクセスしたのはユーザーであり、[その] AI エージェントの助けを借りていた」のです。同じ理由で、カリフォルニア州のCDAFAに基づく請求も棄却されました。
この判決は限定的に捉えてください。判断されたのは誰がコンピューターにアクセスしたかであり、技術的なブロックを回避することが「無許可の」アクセスに当たるかどうかではありません。パネルは回避行為について判断していません。差し戻し後に破棄された仮差止命令は本案に関する判決ではなく、契約、利用規約、不法侵入、著作権に関する主張には一切触れていません。この判決が裏付けているのは、ツールの設計方針です。ブラウザーはご自身のマシン上で、ご自身のログイン状態のもとで動作します。この判断ではまさにその点が重視され、運用者のコンピューターは相手側のサーバーに一切アクセスしていません。
公開されているサイトのページをスクレイピングすること、自分のアカウントがないサイトの壁を回避すること、利用規約で禁止されているアカウントを自動化することは、引き続きご自身で判断する必要があり、その結果もご自身の責任です。
自動化するサイトの利用規約を確認してください。他者のために作業する場合は、書面で許可を得てください。
ライセンス
コア部分は Apache-2.0 です。デフォルトインストールに含まれる追加コンポーネントもすべて許容的なライセンスです。fetch レーンの curl_cffi は MIT ライセンスです。コピーレフトの選択肢は、オプトインの nodriver バックエンド(AGPL-3.0)のみです。商用利用に統合する前に、ライセンスを確認してください。基本インストールにも [all] にも GPL/AGPL のソフトウェアは含まれません。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。