acrawl について
acrawl は、Web 自動化とクロールを行う Rust 製エージェントです。ブラウザー操作とページ診断が必要な開発者や自動化処理向けに、目標ベースの操作、決定論的スクリプト、ネットワーク・コンソール・性能・アクセシビリティの確認を単一バイナリにまとめています。
主な機能
- 01目標ベースのナビゲーションとデータ抽出
- 02クリック、フォーム操作、JavaScriptページ対応
- 03ネットワークリクエストとコンソールログの確認
- 04性能、Cookie、アクセシビリティの検査
- 05JSONスクリプトと並列サブエージェント
- 06単一のRustバイナリ
活用シーン
- 01複数ページの商品一覧から構造化データを収集
- 02Webフォームの入力と送信
- 03ネットワークやコンソールのエラーを調査
- 04CIでブラウザーテストと自動化を実行
MCP 対応
MCP サーバーとして、ブラウザーや DevTools のツールと run_goal をクライアントに公開します。また MCP クライアントとして他のサーバーに接続し、ツールを追加できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
翻訳後に原文が更新されています。最新の内容は原文をご確認ください。
█████╗ ██████╗██████╗ █████╗ ██╗ ██╗██╗ ██╔══██╗██╔════╝██╔══██╗██╔══██╗██║ ██║██║ ███████║██║ ██████╔╝███████║██║ █╗ ██║██║ ██╔══██║██║ ██╔══██╗██╔══██║██║███╗██║██║ ██║ ██║╚██████╗██║ ██║██║ ██║╚███╔███╔╝███████╗ ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚══╝╚══╝ ╚══════╝
操作と観察を行うブラウザー自動化エージェントです。 ナビゲート、クリック、抽出に加え、ネットワークトラフィックの調査、コンソールエラーのデバッグ、パフォーマンスのプロファイリング、アクセシビリティの監査も行えます。Rust 製の単一バイナリです。
Rust 製の単一バイナリ。DevTools の全機能を可視化。43 個のツール。25 種類の LLM プロバイダー。MCP サーバーを内蔵。
acrawl を選ぶ理由
多くのブラウザーエージェントができるのは、ナビゲートとクリックまでです。acrawl はさらに、ネットワークリクエストの調査、コンソールエラーの分析、ページパフォーマンスの測定、アクセシビリティの監査、ネットワーク呼び出しのインターセプトも行えます。DevTools のあらゆる機能を、エージェントのファーストクラスツールとして利用できます。
Rust 製の単一バイナリとして提供されます。Python ランタイムも Node ランタイムも Docker も必要ありません。任意のサーバーや CI パイプラインに配置して目標を説明すれば、エージェントが訪問先、クリックする場所、調査する内容、完了のタイミングを判断します。
- 単一バイナリで、ランタイムは不要です。
cargo build --releaseで自己完結型の実行ファイルが生成されます。Python も Node ランタイムも不要です。ブラウザー自動化に必要なのは Rust と Chromium のダウンロードだけです。 - 操作と観察を行います。 エージェントは DevTools の全機能をファーストクラスツールとして利用できます。タイミング情報付きのネットワークリクエストの調査、コンソールログの分析と重複排除、WebSocket メッセージのストリーミング、ページパフォーマンス(TTFB、リソースの内訳)の測定、Cookie とブラウザーストレージの監査、JS/CSS カバレッジの測定、axe-core による WCAG アクセシビリティ監査、ネットワーク呼び出しのインターセプトやモックが可能です。これらすべてを公開するエージェントフレームワークは、ほかにありません。
- 可能なところは確定的に、必要なところは AI で。 ループ、条件分岐、並列ブランチを JSON スクリプトとして定義し、LLM を呼び出さずに実行できます。ページが予想外の動作をした場合は、エージェントに切り替えます。両方の長所を活用できます。
- コードは不要です。 目標を平易な言葉で説明するだけで、エージェントが計画を立て、ナビゲートし、情報を抽出します。
- スマートな取得。 静的ページは HTTP 経由で高速に配信します。JavaScript やインタラクションが必要な場合は、acrawl が JS フレームワークのマーカー(
__next_data__、__nuxt、__vue、ng-app、React のルート)、認証リダイレクト、短い<noscript>本文を検出し、ヘッドレスブラウザーに自動的にエスカレーションします。 - サブエージェントによる並列処理。 独立した状態とステップ予算を持つ別々のブラウザータブで、子エージェントを並行して実行できます。URL を管理するレジストリにより、兄弟エージェントが同じページを重複してクロールすることを防ぎます。
- MCP クライアントとサーバー。 Model Context Protocol サーバー経由でカスタムツールを追加できます。または、逆に
acrawl mcpを実行して、38 個のブラウザーおよび DevTools ツールとrun_goalを Claude Code、Cursor、VS Code、Zed、その他 13 個のクライアントに公開できます。 - 25 種類の LLM プロバイダー。 Anthropic、OpenAI、Google Gemini、DeepSeek、AWS Bedrock、Azure OpenAI、Vertex AI、GitHub Copilot、Groq、Mistral、xAI、Cohere、Alibaba DashScope、OpenRouter などに対応しています。OpenAI 互換のエンドポイントなら、独自のものも利用できます。
どのように異なりますか?
AI ウェブエージェントおよびスクレイピングツールとの比較
| acrawl | browser-use | Stagehand | Skyvern | Firecrawl | Playwright MCP | Scrapy | Playwright scripts | |
|---|---|---|---|---|---|---|---|---|
| コード不要 | はい | いいえ | いいえ | 一部対応 | いいえ | いいえ | いいえ | いいえ |
| 単一バイナリ | はい | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ |
| JS レンダリング | はい | はい | はい | はい | はい | はい | いいえ | はい |
| LLM を活用したナビゲーション | はい | はい | はい | はい | 限定的 | いいえ | いいえ | いいえ |
| Python / Node 不要 | はい | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ |
| フォーム入力 / 操作 | はい | はい | はい | はい | いいえ | はい | いいえ | はい |
| サブエージェントの並列処理 | はい | いいえ | いいえ | 一部対応 | 一部対応 | いいえ | 一部対応 | いいえ |
| 25 種類の LLM プロバイダー | はい | LiteLLM 経由 | 一部対応 | 一部対応 | 該当なし | 該当なし | 該当なし | 該当なし |
| MCP クライアント(ツールを使用) | はい | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ |
| MCP サーバー(ツールとして公開) | はい | いいえ | いいえ | いいえ | はい | はい | いいえ | いいえ |
| ステルスブラウザーを内蔵 | はい | クラウドのみ | Browserbase 経由 | クラウドのみ | いいえ | いいえ | いいえ | いいえ |
| DevTools による可観測性(ネットワーク、コンソール、パフォーマンス、a11y) | はい | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ |
| 決定論的スクリプト層(LLM 呼び出しゼロ) | はい | いいえ | 一部対応 | いいえ | いいえ | いいえ | はい | はい |
| オープンソース | はい | はい(MIT) | はい(MIT) | はい(Apache) | エンジンのみ | はい(MIT) | はい(BSD) | はい(Apache) |
注:
- browser-use(GitHub スター 85k 以上):Python + Playwright、DOM + スクリーンショットに対応し、LiteLLM 経由で GPT/Claude/Gemini/Ollama をサポートします。WebVoyager のスコアは 89.1%です。単一バイナリではなく、Python と
pip installが必要です。すべての操作で LLM を呼び出します。1 ステップあたり 2~5 秒、1 タスクあたり約 $0.02~0.30 かかります。クラウドプランではステルス機能が追加されます。セルフホスト版は基本的な Playwright のみです。 - Stagehand(Browserbase、スター 21k 以上):TypeScript + CDP(v3)を使用し、決定論的な Playwright と AI プリミティブ(
act()、extract()、observe())を組み合わせます。アクションキャッシュにより、LLM を再度呼び出さずに成功したクリックを再利用できます。Node が必要で、本番環境では Browserbase のクラウドホスティングも必要です。 - Skyvern(スター 21k 以上、Apache 2.0):ビジョンを優先する方式(スクリーンショットのみで、DOM は使用しません)を採用し、DOM ツールでは対応が難しいレガシーポータルや政府機関のフォームを処理できます。ノーコードのクラウド UI も利用できます。各ステップでビジョンモデルのトークンが必要となり、1 タスクあたり約 $0.10~0.50 かかります。WebVoyager のスコアは 85.85%です。
- Firecrawl(スター 82k 以上):マネージド型のスクレイピング API です。LLM ですぐに使える Markdown、JSON 抽出、サイト全体のクロールを提供します。エージェント型ツールではなく、複数ステップの操作は最小限です。公式の MCP サーバーが付属しています。料金は月額 $19 からで、ページ単位で課金されます。
- Playwright MCP(Microsoft、スター 29k 以上):アクセシビリティツリーを介してブラウザー操作を公開する MCP サーバーです。操作は 100 ミリ秒未満で、ビジョントークンは不要です。独自の推論機能を備えるのではなく、LLM クライアントのブラウザーを操作するため、自律的な目標ナビゲーションはできません。GitHub Copilot Agent で使用されています。
ネイティブの LLM プロバイダーのブラウジングとの比較
ほとんどの AI プロバイダーは何らかのブラウジング機能を提供していますが、プログラムによるウェブ自動化ではなく、会話形式の情報検索を目的に設計されています。主な制約は次のとおりです。
| acrawl | ChatGPT Agent | Claude Computer Use | Claude in Chrome | Gemini Deep Research | Copilot / Edge | |
|---|---|---|---|---|---|---|
| JavaScript でレンダリングされる実ブラウザー | はい | はい(サンドボックス化されたクラウド VM) | 間接的(開発者が環境を用意) | はい(ユーザーの Chrome) | いいえ(検索 API のみ) | 限定的(Bing による検索) |
| クリック/フォーム入力 | はい | はい(ユーザーの確認が必要) | はい | はい | いいえ | 限定的 |
| プログラム可能/スクリプト可能 | はい | いいえ | はい(API ベータ版) | いいえ | いいえ | いいえ |
| サブエージェントの並列実行 | はい | いいえ | いいえ | いいえ | いいえ | いいえ |
| MCP サーバー(ツールとして公開) | はい | いいえ | いいえ | いいえ | いいえ | いいえ |
| 構造化データを返す | はい | いいえ(テキストの要約) | いいえ(スクリーンショット) | いいえ | いいえ | いいえ |
| ステルス/ボット対策 | はい | いいえ | いいえ | いいえ | いいえ | いいえ |
| ベンダーロックインなし | はい(25 プロバイダー) | OpenAI のみ | Anthropic のみ | Anthropic のみ | Google のみ | OpenAI / Bing のみ |
| 有料サブスクリプションなしで実行可能 | はい(OSS、LLM キーが必要) | いいえ(Plus/Pro/Business) | いいえ(API 費用) | いいえ(Max プラン) | 一部可能 | はい(無料プラン) |
注:
- ChatGPT Agent(OpenAI、2025 年 7 月):独自の Chromium インスタンスを備えた、サンドボックス化されたクラウド仮想マシン上で動作します。ブラウジング、クリック、フォーム入力ができますが、機密性の高い操作(購入、ログイン)ではユーザーの確認のために一時停止します。調査クエリ向けの高速なテキストブラウザーと、操作向けのビジュアルブラウザーという 2 つのモードを使用します。ブラウザー内でコードを実行したり、拡張機能をインストールしたり、ローカルファイルシステムにアクセスしたりすることはできません。プロンプトインジェクションの影響を受ける可能性があります。Plus/Pro/Business のサブスクライバーが利用できます。
- ChatGPT Atlas(OpenAI、2025 年 10 月):サイドバーに ChatGPT が統合されたフル機能の Chromium ブラウザーです。エージェントモードは ChatGPT Agent と同じサンドボックス化されたクラウド VM を操作するため、主な制限も同じです。
- Claude Computer Use(Anthropic API、2024 年 10 月からベータ版):ブラウザーに限らず、あらゆるデスクトップアプリケーションを操作するためのスクリーンショット+マウス/キーボード API です。ビジョンのみで、DOM にはアクセスできません。開発者はコンピューティング環境全体(通常は Xvfb と Firefox を備えた Docker コンテナー)を用意し、管理する必要があります。すぐに使えるバイナリではありません。本番環境で運用するには、かなりのインフラストラクチャが必要です。
- Claude in Chrome(Anthropic の Chrome 拡張機能、2025 年 11 月以降ベータ版):実際の Cookie とログイン情報を使い、既存の Chrome セッション内で Claude を操作できます。Max プランのサブスクライバーが利用できます。オープン API ではなく、プログラムから操作することはできません。個人の対話型タスクには適していますが、バッチ自動化には向いていません。
- Gemini / Deep Research(Google):ブラウジングは、ライブブラウザーセッションではなく、Google Search API の呼び出しに基づいています。Deep Research は多数の検索結果を統合しますが、ページを操作する(クリック、フォーム入力、動的な移動)ことはできません。Project Mariner(実験的なコンピューター操作)は、別の限定的なリサーチプレビューです。
- Copilot / Edge(Microsoft):Edge の Copilot Mode は Bing による検索を使用し、ページを移動する機能も一部備えています。実環境でのテストでは、レイテンシーが高く(複数ページの比較タスクで 6 分以上)、ユーザー確認のために頻繁に中断されることが示されています。開発者向け API ではありません。
クイックスタート
インストール
Linux / macOS(x64 / ARM64):
curl -fsSL https://raw.githubusercontent.com/Mingye-Lu/AgenticCrawler/main/install.sh | bash
Windows(x64、PowerShell):
irm https://raw.githubusercontent.com/Mingye-Lu/AgenticCrawler/main/install.ps1 | iex
最新のバイナリをダウンロードして SHA256 チェックサムを検証し、ステルスブラウザー自動化のために CloakBrowser をセットアップします。ブラウザー機能には Node.js 20+ が必要です。
acrawl は起動時に更新を確認し、新しいバージョンが利用可能になると通知を表示します。
ソースからビルドする
git clone https://github.com/Mingye-Lu/AgenticCrawler.git
cd AgenticCrawler
cargo build --release
# Install CloakBrowser (required for browser automation — binary auto-downloads on first use)
npm install
acrawl Bridge 拡張機能を使うと、ヘッドレスの CloakBrowser インスタンスではなく、実際のブラウザー(セッション、Cookie、既存の拡張機能を含む)を acrawl で操作できます。
- Chrome ウェブストアから acrawl Bridge をインストールし、Chrome に追加をクリックします。同じ掲載ページは Edge、Brave、Arc、Vivaldi、Opera でも利用できます。
- acrawl REPL で
/extensionを実行してブリッジを起動し、ペアリングコードを表示したら、そのコードを拡張機能のポップアップに入力します。この操作は初回のみ必要です。
ストアを使わずにインストールする場合(たとえば、未リリースのビルドを実行する場合)は、extension/README.mdをご覧ください。セットアップの詳細がすべて記載されています。
エージェントスキル(任意)
コーディングエージェントから acrawl を操作する場合(acrawl mcp経由)、エージェントが直接ツール、スクリプト、run_goalをいつ使うか、またネットワーク/コンソール/Cookie ツールでどのようにデバッグするかを把握できるよう、acrawl-mcp スキルをインストールします。
npx skills add Mingye-Lu/AgenticCrawler
これはコミュニティ製のskills CLI を使用します。この CLI はインストール済みのエージェント(Claude Code、Cursor、Codex、Gemini CLI、OpenCode など多数)を検出し、それぞれのスキルディレクトリにスキルをコピーします。ユーザーレベルでグローバルにインストールするには -g を、単一のエージェントを指定するには -a claude-code を追加します。
Node の使用を避けたい場合は、acrawl mcp install --client claude-code --skill を実行すると、MCP サーバーの設定と同じスキルのインストールを一度に行えます(クイックインストールを参照)。
設定
# Set up your LLM provider (interactive prompt)
./target/release/acrawl auth anthropic # or: openai, other
認証情報は ~/.acrawl/credentials.json に保存されます。ACRAWL_CONFIG_HOME で設定ディレクトリを上書きできます。
実行
# Interactive REPL
./target/release/acrawl
# One-shot mode
./target/release/acrawl prompt "scrape all book titles and prices from books.toscrape.com"
# Resume a saved session
./target/release/acrawl --resume session.json /status /compact
使用例
商品カタログをスクレイピングする:
acrawl > scrape all book titles, prices, and ratings from books.toscrape.com
エージェントはサイトに移動してページを読み取り、データを抽出し、全50ページをページネーションで巡回して、構造化された JSON を返します。
フォームに入力して送信する:
acrawl > go to example.com/contact, fill in name "Jane Doe", email "[email protected]",
message "Hello", and submit the form
エージェントはフォームフィールドを特定して入力し、送信ボタンをクリックして、結果を確認します。
価格を監視する:
acrawl > check the current price of "Rust in Action" on books.toscrape.com
1ページのみを抽出します。エージェントは不要なページ移動をせずにページを取得して読み取り、価格を返します。
JavaScript でレンダリングされたページから抽出する:
acrawl > get all repository names and star counts from github.com/trending
ここでは静的 HTTP は機能しません。acrawl は React/Next.js のマーカーを検出し、JavaScript をレンダリングするためにヘッドレスブラウザーへ自動的に切り替えます。
複数ページの並列クロール:
acrawl > scrape the title, author, and price of every book across all 50 pages on books.toscrape.com.
Fork a sub-agent for each page to speed this up.
エージェントは最大5つの並行サブエージェントを起動し、それぞれが独自のブラウザータブを使ってページを並列でクロールします。すべてのサブエージェントが完了すると、結果が統合されます。
機能
43種類のツールを備えたツールボックス
ナビゲーション
| ツール | 説明 |
|---|---|
navigate | URL に移動します(format:markdown/text/html/fit_markdown に対応)。まず HTTP を使用し、JavaScript が検出されると自動的にブラウザーへ切り替えます。page_map を含む構造化コンテンツを返します。fit_markdown は変換前に定型的な DOM ノードを削除し、トークンを節約します。 |
go_back | ブラウザーの戻るボタンです。移動後のページ構造を含む page_state を返します。 |
get_page_info | 現在のページの url、title、ready_state を低コストで読み取ります(DOM の走査や再取得は行いません)。all_tabs: true を指定すると、切り替えずに使用可能なすべてのタブを {index, url, title, active} として一覧表示します。読み取り専用で、seq は進みません。 |
scroll | ピクセル数(pixels、既定値:500)を指定して上下にスクロールします。スクロール後の page_state を返します。 |
switch_tab | インデックスを指定して別のブラウザータブに切り替えます。新しいタブの page_state を返します。 |
wait | CSS セレクターが指定した状態(visible、hidden、attached、detached)になるまで、または指定したタイムアウト(最大300秒)まで待機します。時間のみを指定した待機で page_state の差分を省略してトークンを節約するには、silent: true を設定します。条件が満たされた後の page_state を返します。 |
refresh | 現在のページを再読み込みします。再読み込み後の page_state を返します。インターセプトルールを設定した後に使用すると、ルールを有効にした状態でページの読み込みを再実行できます。時間的観測クエリでは Seq カウンターが増加します。 |
コンテンツ形式
navigate ツールの format パラメーターで、ページの返却形式を指定します。
| 形式 | 説明 |
|---|---|
markdown | HTML 全体を Markdown に変換します。すべてのコンテンツが保持されます。 |
fit_markdown | 推奨。 変換前に定型コンテンツを削除するため、一般的なページではトークン数を 30〜60% 節約できます。 |
text | Markdown なしのプレーンテキストです。 |
html | 生の HTML です。 |
fit_markdown は 2 段階で処理します。
-
ハードブロックの削除:
classまたはid属性に次の文字列が含まれる要素を、ただちに削除します:nav、footer、header、sidebar、ads、comment、promo、advert、social、share。 -
スコアに基づくプルーニング:残りの要素をスコアリングし、0.48 未満の要素を削除します。スコアは次のとおりです。
0.4 × text_density + 0.2 × (1 − link_density) + 0.2 × tag_weight + 0.1 × class_id_score + 0.1 × ln(text_length + 1)タグの重み:
article= 1.5 ·h1= 1.2 ·h2= 1.1 ·h3/p/section= 1.0 ·h4= 0.9 ·h5/table= 0.8 ·h6= 0.7 ·span= 0.3 ·div/li/ul/ol= 0.5。
次の場合は、fit_markdown ではなく markdown を使用してください: sidebar、nav などの名前が付いた要素内に重要なコンテンツがある場合。たとえば、メタデータパネル、関連記事へのリンク、サイドバーの div に保存された著者情報などです。
fit_markdown がすべてのコンテンツをプルーニングした場合(結果が空の場合)、ツールは自動的にプレーンテキストにフォールバックします。
操作
| ツール | 説明 |
|---|---|
click | CSS セレクター、@eN の参照、または表示されているラベルテキストを使って要素をクリックします。ラベルでボタン、タブ、リンクを操作するには、text(必要に応じて role/region を指定)を使用します。SPA の管理画面や、CSS パスが不安定なモーダルで便利です。クリック後の page_state を返します。 |
click_at | ビューポート内の指定座標(x, y)をクリックします。キャンバス、マップ、SVG に使用します。page_state を返します。 |
fill_form | セレクター、name、@eN の参照、または表示されているラベルテキストでフォームフィールドに入力します。ラベルはページ全体から解決されるため、モーダル内のフィールドや、<form> 境界のない div ベースの UI にも対応します。自動送信は任意です。送信によってリダイレクトが発生する場合、page_state を返す前に SPA の準備が整うまで(DOM の準備完了、表示テキスト、ハイドレーションのバッファー)待機します。 |
select_option | 値、ラベル、またはインデックスでドロップダウンの選択肢を選びます。ネイティブの <select> とカスタムの ARIA/ポータル型ドロップダウンに対応します。選択せずに利用可能な選択肢を一覧表示するには、value/label/index を省略します。page_state を返します。 |
hover | 要素にカーソルを合わせて、ツールチップやメニューを表示します。page_state を返します。 |
press_key | キーボードキー(Enter、Escape、Tab など)を押します。必要に応じて対象の要素を指定できます。page_state を返します。 |
set_device | ブラウザーのデバイスエミュレーション(モバイル/デスクトップ)を切り替えます。10 種類のプリセット(iphone_15、pixel_7、ipad_pro、desktop など)またはカスタムのビューポート/UA/タッチパラメーターに対応します。レスポンシブレイアウトの変更を示す差分 page_state を返します。 |
execute_js | ページのコンテキストで任意の JavaScript を実行し、結果を返します。hover_selector を指定すると、評価前に要素(CSS セレクターまたは @eN の参照)にカーソルを合わせ、:hover スタイルを調べられます。任意の settle_ms(最大 5000)を指定すると、結果を取得するまで遅延し、リアクティブフレームワーク(Vue/React)が DOM の変更を反映できるようにします。 |
コンテンツの抽出
| ツール | 説明 |
|---|---|
page_map | ページの YAML アクセシビリティツリー(主要な構造ビュー)を取得します。各ノードの形式:- role "name" [state...] [ref=eN]:。[ref=eN] またはセマンティックトークンで範囲を指定します。depth でツリーの深さを制御します。 |
read_content | 見出し名または CSS セレクターでテキストを抽出します。大きなページでは offset/limit によるページネーションを利用できます。 |
list_resources | 現在のページ上にあるすべてのリンク、画像、フォームを一覧表示します。 |
screenshot | ページ全体のスクリーンショットを取得します(base64 PNG)。 |
save_file | URL から出力ディレクトリにダウンロードします(パストラバーサルを防止)。 |
DevTools と観測
| ツール | 説明 |
|---|---|
list_network_activity | このブラウザーセッション中にバッファーに記録されたネットワークリクエストを一覧表示します。seq ウィンドウによる時間範囲の絞り込み、リクエスト状態によるフィルター、URL の部分文字列による絞り込み、「最も遅い/速い」や「最も新しい/古い」などの形容詞ベースの並べ替えに対応しています。後続の inspect_request による調査に使える、安定した @rN 参照を返します。 |
inspect_request | list_network_activity で一覧表示したネットワークリクエストを、@rN ID で調査します。取得したリクエストのメタデータ、概要レベルのタイミング情報、発生元の種類、および取得できないヘッダー/本文に関する注記を返します。 |
list_page_logs | 現在のページでバッファーに記録されたコンソールログを、任意のレベルフィルターと seq に基づく時間範囲の絞り込み付きで一覧表示します。正確なメッセージテキスト(デフォルト。重複排除され、@logN ID が付与されます)、ソース、またはレベルでグループ化できます。 |
inspect_log | list_page_logs で重複排除されたコンソールロググループを調査し、タイムスタンプ、スタックトレース、ソースの場所を含む具体的なインスタンスを返します。 |
list_websocket_activity | WebSocket 接続とメッセージ数の概要を表示します。@wsN ID 付きの接続を返します。実際のメッセージ内容を確認するには、inspect_websocket を使用します。 |
inspect_websocket | 接続の実際の WebSocket メッセージを調査します。list_websocket_activity の @wsN ID を指定してください。方向フィルター、パターン検索、sort_by(新しい順/古い順)に対応しています。 |
get_page_performance | Navigation Timing API と Resource Timing API を使用して、ページのパフォーマンス指標を取得します。TTFB、DOM のタイミング、転送サイズ上位 20 件のリソースの内訳を返します。ブラウザーと SPA の両方で動作します。 |
inspect_cookies | セキュリティ分析とともに、現在のページの Cookie を調査します。ドメイン、パス、有効期限、secure/httponly フラグ、検出されたセキュリティ上の問題を含むすべての Cookie を返します。サードパーティ Cookie の検出とフィルタリングにも対応しています。 |
inspect_storage | 現在のページのブラウザーストレージ(localStorage と sessionStorage)を調査します。サイズ情報付きのすべてのキーと値のペアを返します。ストレージの種類とキーのパターンによる絞り込みに対応しています。 |
measure_coverage | 現在のページの JavaScript と CSS のコードカバレッジを測定します。ファイルごとのバイト使用量を返し、実際に実行/適用されたコード量と、読み込まれたコードの合計量を示します。未使用のバンドル、肥大化した依存関係、パフォーマンス最適化の機会を特定するのに役立ちます。 |
audit_accessibility | 現在のページで axe-core の WCAG アクセシビリティ監査を実行します。影響度別にグループ化された違反を、セレクターと説明付きで返します。scope を指定すると、特定の DOM サブツリーに範囲を限定できます。 |
intercept_network | ネットワークインターセプトルールを管理します。URL のグロブパターンに一致するリクエストをブロックまたはモックします。ルールは追加方式です。呼び出すたびにルールが追加されます。ルールを追加した後、ルールを有効にしてページ読み込みを再実行するには refresh() を使用します。 |
エージェント制御
| ツール | 説明 |
|---|---|
fork | 独自の目標とステップ予算を持つサブエージェントを、新しいブラウザータブで起動します。 |
wait_for_subagents | 指定したサブエージェント、またはすべてのサブエージェントが完了するまで待機し、結果を収集します。 |
subagent_status | ブロックせずに、1 つまたはすべてのアクティブなサブエージェントの状態と結果を確認します。 |
cancel_subagent | ID を指定して、実行中のサブエージェントをキャンセルします。 |
スクリプト管理
| ツール | 説明 |
|---|---|
run_script | 各ステップで LLM を呼び出すことなく、決定的な複数ステップのスクリプト(ループ、条件分岐、並列分岐)を実行します。非同期追跡用の script_id を返します。 |
save_script | スクリプト定義をディスクに保存し、複数のセッションで再利用できるようにします。 |
list_scripts | これまでに保存されたすべてのスクリプトを、メタデータ付きで一覧表示します。 |
read_script | 保存されたスクリプトの完全な JSON 定義を読み込みます。 |
wait_for_scripts | 1 つ以上の実行中のスクリプトが完了するまで待機し、結果を返します。 |
script_status | ブロックせずに、実行中のスクリプトの実行状態を確認します。 |
cancel_script | 実行中のスクリプトを直ちに中止します。 |
page_state リファレンス
操作ツール(click、click_at、fill_form、hover、press_key、go_back、scroll、switch_tab、select_option、set_device、refresh)はすべて、page_state オブジェクトを返します。次の2種類があります。
完全な page_state:ある URL での最初の操作後、または変更が多すぎて差分を表示できない場合に返されます。
url: https://example.com/page
title: Page Title
page_map: |
- main "" [ref=e1]:
- navigation "Primary" [ref=e2]:
- link "Docs" [ref=e3]:
/url: https://example.com/docs
- heading "Platform" [level=1] [ref=e4]:
- button "Get Started" [ref=e5]:
- iframe "Demo" [ref=e6]:
- button "Play" [ref=e7]:
差分 page_state:同じ URL での後続の操作時に返され、変更された内容のみが表示されます。
url: https://example.com/page
title: Page Title
changed: true
changes: |
+ [ref=e5] added:
- dialog "Confirm" [ref=e5]:
- button "OK" [ref=e6]:
- button "Cancel" [ref=e7]:
- [ref=e3] removed:
- button "Old Button" [ref=e3]:
~ button "Submit" [ref=e2]: [] → [disabled]
変更がない場合は、{ "url": "...", "title": "...", "changed": false } が返されます。ブリッジでエラーが発生した場合は、{ "url": "unknown", "title": "unknown", "page_map": null } が返されます。操作後の page_state は、変更された内容のみを示す YAML のツリー差分を返します。変更が多い場合は、代わりに完全な YAML スナップショットが返されます。
サブエージェントの並列処理
エージェントは子エージェントをフォークして、複数のページを同時に巡回できます。各子エージェントには、独自のブラウザータブ、ステップ予算、独立した状態が割り当てられます。
| 設定 | デフォルト | 説明 |
|---|---|---|
max_concurrent_per_parent | 5 | 親エージェントごとに並行実行できる子エージェントの最大数 |
max_fork_depth | 3 | エージェントがエージェントをフォークできる最大のネスト深度 |
max_total_agents | 10 | すべての親エージェントを通じた全体の上限 |
fork_child_max_steps | 15 | 子エージェントごとのステップ予算 |
fork_wait_timeout_secs | 60 | サブエージェントの待機タイムアウト |
URL の割り当て
子エージェントを起動する前に、その対象範囲が共有の割り当てレジストリに登録されます。これにより、兄弟エージェントが同じ URL を同時に巡回するのを防ぎます。
ルール:
- 先着順:2つ目のエージェントが、すでに兄弟エージェントに割り当てられている URL を割り当てようとすると、所有エージェント名を示す競合メッセージとともにフォークがただちに失敗します。親 LLM はこの競合を確認し、対象範囲を調整できます。
- 3種類の対象範囲:
SinglePage(正確な URL)、UrlList(全件成功か全件失敗となる一括処理)、UrlPattern(正規表現。既存のすべての割り当てとの重複を確認します)。 - RAII ライフタイム:割り当ては子エージェントの存続期間中保持されます。子エージェントの終了時、キャンセル時、または親エージェントによるセットアップの中止時に、自動的に割り当てが解除され、URL が再び利用可能になります。
- 種類をまたいだ照合:正確な URL は、それに一致する既割り当ての正規表現と競合します。また、新しい正規表現は、それに一致する既割り当ての正確な URL と競合します。
- リスト内の重複排除:同じ URL が
UrlListに複数回含まれている場合、通知なしで重複が排除されます(LLM が重複を生成することがあるためです)。
割り当ては自動的に行われ、navigate 内ではなく、子エージェントの起動前に fork 内で実行されます。エージェントが明示的に呼び出す必要はありません。
スマートなフェッチ振り分け
すべての navigate 呼び出しは、2段階のフェッチルーターを経由します。
- まず HTTP — reqwest ベースの高速フェッチ(タイムアウト 30 秒、最大 10 回のリダイレクトを追跡)。
- 自動エスカレーション — 以下のいずれかが検出されると、リクエストはヘッドレスブラウザーで透過的に再実行されます。
- HTTP 403、429、または 503 のレスポンス
- JS フレームワークのマーカー:
__next_data__、__nuxt、__vue、ng-app、_react、data-reactroot - 認証リダイレクト:
/login、/signin、/auth、/oauth、accounts.google.comを含む URL <noscript>タグを含む、レスポンス本文が短い場合(500 文字未満)- 空の SPA シェルの検出(複数のシグナルによるスコアリング):埋め込みデータのないフレームワークのアセットパス(
/_next/static/、/_nuxt/、ng-version=)、空のマウントポイントの div、JavaScript の有効化を促す noscript メッセージ、バンドラーのハッシュパターン、構造的なシグナル(セマンティック要素がなく、表示テキストがまばら)。埋め込みデータブロブ(__NEXT_DATA__、window.__NUXT__、data-reactroot)を含むページは明示的に除外されます。これらのページのコンテンツは、すでにサーバー側でレンダリングされているためです。
--no-headless / --headed が設定されている場合、すべてのフェッチはブラウザー経由で直接実行されます。
25 の LLM プロバイダー
| カテゴリ | プロバイダー | 認証 | 環境変数 |
|---|---|---|---|
| 人気 | Anthropic | API キー | ANTHROPIC_API_KEY |
| OpenAI | API キー | OPENAI_API_KEY | |
| Google Gemini | API キー | GEMINI_API_KEY | |
| DeepSeek | API キー | DEEPSEEK_API_KEY | |
| エンタープライズ | Amazon Bedrock | AWS SigV4 | AWS_ACCESS_KEY_ID |
| Azure OpenAI | Azure API キー | AZURE_OPENAI_API_KEY | |
| Google Vertex AI | GCP サービスアカウント | GOOGLE_APPLICATION_CREDENTIALS | |
| GitHub Copilot | デバイス OAuth | — | |
| SAP AI Core | API キー | SAP_AI_CORE_API_KEY | |
| GitLab Duo | GitLab トークン | GITLAB_TOKEN | |
| OSS ホスティング | Groq | API キー | GROQ_API_KEY |
| Cerebras | API キー | CEREBRAS_API_KEY | |
| DeepInfra | API キー | DEEPINFRA_API_KEY | |
| Together AI | API キー | TOGETHER_API_KEY | |
| Mistral AI | API キー | MISTRAL_API_KEY | |
| 特化型 | Perplexity | API キー | PERPLEXITY_API_KEY |
| xAI (Grok) | API キー | XAI_API_KEY | |
| Cohere | API キー | COHERE_API_KEY | |
| Alibaba (DashScope) | API キー | DASHSCOPE_API_KEY | |
| ゲートウェイ | OpenRouter | API キー | OPENROUTER_API_KEY |
| Vercel AI | API キー | VERCEL_API_KEY | |
| Cloudflare Workers AI | API トークン | CLOUDFLARE_API_TOKEN | |
| Cloudflare AI Gateway | API トークン | CLOUDFLARE_API_TOKEN | |
| その他 | Venice AI | API キー | VENICE_API_KEY |
| カスタム(OpenAI 互換) | API キー(任意) | — |
カスタム/ローカルプロバイダー
OpenAI 互換のエンドポイント(Ollama、LMStudio、vLLM、ローカルプロキシなど)を使用するには:
acrawl auth other
ベース URL と任意の API キーを入力するよう求められます。例:
| 設定 | ベース URL | モデル文字列 |
|---|---|---|
| Ollama(ローカル) | http://localhost:11434/v1 | other/llama3.2 |
| LMStudio | http://localhost:1234/v1 | other/local-model |
| vLLM | http://localhost:8000/v1 | other/meta-llama/Llama-3.1-8B |
| 任意の OpenAI 互換 API | エンドポイント | other/<model-id> |
これにより、auth_method: "api_key" と base_url を含む credentials.json エントリーが作成されます。サーバーで API キーが不要な場合は、空欄のままにしてください。
モデルは provider/model-id 形式を使用します:anthropic/claude-sonnet-4-6、openai/gpt-4o、amazon-bedrock/anthropic.claude-sonnet-4-6-20250514-v1:0 など。
標準以外の認証を使用するプロバイダー
GitHub Copilot、デバイスコードフロー:
acrawl auth copilot
- acrawl は URL(
https://github.com/login/device)と 8 文字のユーザーコードを表示し、ブラウザーを自動的に開こうとします。 - GitHub のページでコードを入力し、アプリを認証します。
- acrawl は認証が完了するまで GitHub にポーリングし、その後 GitHub トークンを有効期間の短い Copilot API トークンと交換して、
credentials.jsonに保存します。
API キーは不要で、すべての手順は対話形式で進みます。認証に成功すると、認証情報は自動的に保存されます。
GitLab Duo、API キー:
acrawl auth gitlab
GitLab Personal Access Token(PAT)の入力を求められます。トークンを貼り付けて Enter キーを押してください。ブラウザーへのリダイレクトは不要です。注:GitLab Duo はツール呼び出しをサポートしていません。
Amazon Bedrock、AWS 認証情報:
acrawl auth amazon-bedrock
AWS Access Key ID、AWS Secret Access Key、リージョン(デフォルト:us-east-1)の入力を求められます。これらは credentials.json に直接保存され、AWS SigV4 によるリクエストの署名に使用されます。
Azure OpenAI:
acrawl auth azure
リソース名(例:myresource)、デプロイ名(例:gpt-4o)、API キーの入力を求められます。
対話型 TUI
デフォルトのインターフェースは、次の機能を備えたフルターミナル UI です。
- Markdown のレンダリング(シンタックスハイライトとストリーミング出力に対応)
- スラッシュコマンドのオーバーレイ —
/を入力すると、Tab 補完付きですべてのコマンドが表示されます - モデル選択 —
/modelを実行すると、プロバイダーのカテゴリ別にまとめられた検索可能なリストが開きます - 認証モーダル —
/authを実行すると、プロバイダーの設定を対話形式で進められます - セッションヘッダー — 現在のモデル、セッション ID、コスト、コンテキスト使用量がリアルタイムで表示されます
- デバッグモード —
/debugを実行すると、トランスクリプト内の生のツール呼び出しの入出力を切り替えられます - 推論の強度 — 推論モデル(o3、o4-mini)で
Ctrl+Tを押すと、高・中・低を切り替えられます
キー操作:
| キー | 操作 |
|---|---|
Enter | プロンプトを送信 |
Shift+Enter / Ctrl+J | 改行を挿入 |
PageUp / PageDown | トランスクリプトをスクロール |
Ctrl+T | 推論の強度を切り替え |
Ctrl+C | タスクを中断(処理中)または終了(アイドル時) |
Esc Esc | タスクを中断(処理中に 2 回押す) |
Tab | スラッシュコマンドを自動補完 |
標準出力が TTY に接続されていない状態(パイプやリダイレクトなど)で acrawl を実行すると、1 回だけ実行する場合は acrawl prompt、セッションを維持する場合は acrawl --resume を案内するエラーが表示され、終了します。
セッション管理
- 自動保存 — 終了時にセッションが自動的に保存されます。
- 再開 —
--resume session.jsonを指定すると、会話を再読み込みします。再開時に使用できるスラッシュコマンド(/status、/compact、/cost、/config、/version、/export、/help、/clear)は、コマンドラインに追加できます。 - エクスポート —
/export [file]を実行すると、人が読みやすい Markdown 形式の会話記録が出力されます。 - 自動圧縮 — 累積入力トークン数がしきい値(デフォルトは 200K)を超えると、acrawl がセッションを圧縮します。
- そのまま保持される内容: 直近約 80K トークン分のメッセージ(最低でも常に 2 件)。ツール呼び出しのペアは一体として保持され、対応する
ToolUseがないToolResultが残ることはありません。 - メタデータとして保持される内容: メッセージ数、重複を除いたツールの一覧、直近 3 件のユーザーリクエスト(各 160 文字)、保留中の作業項目("todo"、"next"、"pending"、"follow up"、"remaining" を含むメッセージから推定)、最大 10 件の主要 URL、および直近の空でないメッセージ(「現在の作業」として扱われます)。
- ツール出力の削減: 内側の 40K トークンウィンドウより古いツール出力は、保持対象のウィンドウを計算する前に 2,000 文字に切り詰められ、
[… output truncated from N chars]マーカーが付加されます。 - 要約の生成: デフォルトではテンプレートベースで生成されます(LLM 呼び出しはありません)。
settings.jsonでcompaction_llm_summarization: trueを設定すると、LLM による要約が有効になります。この場合、削除されたメッセージがモデルに送られ、その出力が要約として使われます。LLM が失敗した場合はテンプレートにフォールバックします。 - 継続用プロンプト: 圧縮後のセッションには、要約を繰り返したり質問したりせず、エージェントがそのまま作業を再開するよう指示するシステムメッセージが先頭に追加されます。
- ブラウザーの状態には影響しません。 圧縮で変更されるのはメッセージ履歴のみです。現在のブラウザータブ、URL、Cookie、ページの状態は変わりません。
- そのまま保持される内容: 直近約 80K トークン分のメッセージ(最低でも常に 2 件)。ツール呼び出しのペアは一体として保持され、対応する
- 複数セッション —
/session listでセッションを一覧表示し、/session switch <id>で切り替えます。
ツールの許可リスト
--allowedTools を使用すると、エージェントが呼び出せるツールを制限できます(カンマ区切りで指定します。このフラグは繰り返し指定できます)。
acrawl prompt "scrape titles" --allowedTools navigate,read_content,screenshot
--allowedTools を省略すると、43 個すべてのツールが許可されます。読み取り専用ツールだけを使ったクロールに制限する場合や、サブエージェントの並列処理が不要な場合に fork/wait_for_subagents を除外する場合に便利です。
MCP による拡張
acrawl は Model Context Protocol サーバーをクライアントとしてサポートしており、カスタムツールを使ってエージェントを拡張できます。MCP ツールは server_name__tool_name という名前空間で管理され、組み込みの 43 個のツールと並んで使用できます。
サポートされるトランスポート:stdio、SSE、HTTP、WebSocket。
MCP サーバー(acrawl をツールとして公開)
acrawl mcp を実行すると、組み込みの MCP サーバーが起動し、acrawl のブラウザー自動化機能が Claude Code、Cursor、VS Code、Zed、JetBrains、TRAE、Gemini CLI などの外部エージェントや、MCP 互換クライアントに公開されます。
サーバーは、3 つのモードで40 個のツールを提供します。
ブラウザー直接操作ツール(32 個) — クライアントが独自に処理を組み立てる場合に使う、きめ細かな操作ツールです:
navigate、click、click_at、fill_form、page_map、read_content、screenshot、go_back、get_page_info、scroll、wait、select_option、execute_js、hover、press_key、switch_tab、list_resources、save_file、set_device、refresh、list_network_activity、inspect_request、list_page_logs、inspect_log、list_websocket_activity、inspect_websocket、get_page_performance、inspect_cookies、inspect_storage、measure_coverage、audit_accessibility、intercept_network
スクリプトツール(7 個) — ステップごとの LLM 呼び出しなしで、複数ステップの自動化を決定論的に実行します:
run_script、save_script、list_scripts、read_script、wait_for_scripts、script_status、cancel_script
自律型エージェント(1 個) — クロールタスク全体を委任します:
run_goal— 高レベルのクロール目標を自律的に実行します。エージェントは独自の LLM ループを使って計画を立て、ページを移動し、データを抽出します。モデルを設定した~/.acrawl/credentials.jsonが必要です。
トランスポート: このリリースでは stdio のみ(SSE/HTTP/WebSocket は利用できません)。
クイックインストール
acrawl mcp install
IDE を自動検出し、設定する IDE を切り替えられる(選択は Space、確定は Enter)対話型インストーラーです。IDE ごとに適切な設定を書き込みます。グローバル(ユーザーレベル)とプロジェクトレベルのスコープに対応しています。
対応クライアント:Claude Code、Claude Desktop、Cursor、Windsurf、VS Code (Copilot)、OpenCode、Zed、TRAE、JetBrains IDEs、Gemini CLI、Qwen Code、Codex CLI、Hermes、OpenClaw、Goose、Crush、Aider。
このインストーラーでは、スキルを読み込むクライアント(Claude Code、Cursor、OpenCode、Codex CLI、Gemini CLI)向けに、同梱の acrawl-mcp エージェントスキルをインストールすることもできます。非対話型の場合は --skill を指定します:acrawl mcp install --client claude-code --skill。acrawl mcp uninstall --client claude-code --skill を実行すると削除できます。
手動設定
手動で設定する場合は、IDE の MCP 設定ファイルに次の内容を追加してください。
| IDE | 設定ファイル | 設定 |
|---|---|---|
| Claude Code | .mcp.json (プロジェクト)~/.claude.json (ユーザー) |
|
| Cursor | .cursor/mcp.json | |
| Windsurf | ~/.codeium/windsurf/mcp_config.json | |
| Claude Desktop | %APPDATA%\Claude\claude_desktop_config.json (Win)~/Library/Application Support/Claude/claude_desktop_config.json (Mac) | |
| TRAE | .trae/mcp.json | |
| Gemini CLI | ~/.gemini/settings.json | |
| Qwen Code | ~/.qwen/settings.json | |
| VS Code (Copilot) | .vscode/mcp.json |
|
| OpenCode | opencode.json |
|
| Zed | ~/.config/zed/settings.json |
|
または、Claude Code CLI から直接設定できます。
claude mcp add acrawl -- acrawl mcp
ブラウザツールは、呼び出し間で永続セッションを共有します。run_goal は独立したエージェントとブラウザを作成します。
要件: 38 個のブラウザツールとスクリプトツールは、設定なしで動作します。run_goal では、内部 LLM 用に ~/.acrawl/credentials.json(acrawl auth で設定)が必要です。
MCP から実際のブラウザを使用する
MCP サーバーは browser_backend を尊重するため、MCP クライアントは同梱のヘッドレスブラウザの代わりに、ログイン済みの独自ブラウザを操作できます。
acrawl config set browser_backend extension # route MCP browser tools through the extension
ブリッジサーバーは最初のブラウザツール呼び出し時に起動し、すでにペアリング済みの拡張機能が接続するまで extension_bridge_connect_timeout_secs(デフォルトは 3)秒間待機します。まだ拡張機能がペアリングされていない場合、呼び出しはペアリングコードをすぐに返します。接続されない場合、ツール呼び出しは CloakBrowser に暗黙にフォールバックするのではなく、対処方法がわかるエラーを返します。拡張機能モードは認証済みセッションを再利用するためのものであり、別のブラウザに切り替えるのは誤解を招くためです。
Chrome 拡張機能が提供できるプロセスは一度に 1 つだけです。acrawl REPL がすでにブリッジを使用している場合、MCP サーバーはポートを奪い合うのではなく、競合している所有者を報告します。CloakBrowser に戻すには acrawl config unset browser_backend を実行してください。
使い方
acrawl [OPTIONS] [COMMAND]
Commands:
prompt <text> Run a single goal non-interactively
mcp Start MCP server (stdio transport)
mcp install Install MCP config into your IDEs interactively
auth [provider] Configure provider credentials
system-prompt Print the system prompt (for debugging)
Options:
--model MODEL Model in provider/id format (e.g. anthropic/claude-sonnet-4-6)
--output-format FORMAT text | json
--resume FILE Resume a saved session (with optional /commands)
--compact Compact history on resume
--headless[=BOOL] Force browser headless on/off
--no-headless, --headed Launch browser in visible mode
--allowedTools TOOLS Restrict available tools (comma-separated, repeatable)
-p TEXT Shorthand for prompt mode
-V, --version Print version
スラッシュコマンド
| コマンド | 説明 | 再開可能 |
|---|---|---|
/help | 利用可能なコマンドを一覧表示します | はい |
/status | セッション情報 — モデル、トークン、コスト | はい |
/model [name] | アクティブなモデルを表示または切り替えます | いいえ |
/compact | 会話履歴を圧縮します | はい |
/clear | 新しいセッションを開始します | はい |
/cost | コストの詳細な内訳を表示します | はい |
/sessions | セッション選択画面(TUI)を開きます | いいえ |
/export [file] | 会話を Markdown にエクスポートします | はい |
/config [model] | acrawl の設定を表示します | はい |
/auth [provider] | 認証情報を設定します | いいえ |
/headed | 表示ありのブラウザーに切り替えます | いいえ |
/headless | ヘッドレスブラウザーに切り替えます | いいえ |
/extension [stop] | 拡張機能ブリッジを起動/表示するか、停止します | いいえ |
/cloakbrowser | CloakBrowser モードに戻します | いいえ |
/debug | 最後に実行したブラウザーツール呼び出しのデバッグ情報を表示します | いいえ |
/version | バージョンとビルド情報を表示します | はい |
/exit | 終了してセッションを保存します | いいえ |
非対話モード/エージェントでの使用
一度だけ設定
acrawl auth anthropic --api-key sk-ant-... acrawl auth openai --api-key sk-... acrawl auth amazon-bedrock --access-key AKIA... --secret-key ... --region us-east-1 acrawl auth other --base-url http://localhost:11434/v1 # Ollama、キー不要 acrawl config set model anthropic/claude-sonnet-4-6
設定を確認
acrawl auth status --check anthropic # 設定済みなら終了コード 0、未設定なら 3 acrawl auth status --json # 認証情報テーブル全体(シークレットはマスクされます)
実行
acrawl prompt "scrape all titles from example.com" --output-format json
設定
acrawl config set headless false acrawl config set optimization.html_diff_mode true acrawl config get model --effective
MCP のインストール
acrawl mcp install --client opencode --scope user acrawl mcp install --all --yes acrawl mcp install --client claude-code --skill # エージェントスキルもインストールします
設定
すべての設定は ~/.acrawl/ に保存されます(ACRAWL_CONFIG_HOME で変更できます)。
credentials.json
acrawl auth で管理します。プロバイダーごとに次の情報を保存します。
| フィールド | 説明 |
|---|---|
active_provider | 現在選択されているプロバイダー |
auth_method | api_key、oauth、または aws_sigv4 |
api_key | プロバイダーの API キー |
oauth | OAuth トークン — アクセス、更新、有効期限、スコープ |
default_model | このプロバイダーのデフォルトモデル |
base_url | カスタム API エンドポイント(例:ローカルの Ollama、Azure リソース) |
Azure ではさらに resource_name と deployment_name が必要です。Bedrock では aws_access_key_id、aws_secret_access_key、region が必要です。Vertex では gcp_project_id と gcp_region が必要です。
settings.json
初回実行時にデフォルト値で作成されます。
| フィールド | デフォルト | 説明 |
|---|---|---|
headless | true | 表示ウィンドウなしでブラウザーを実行します |
max_steps | 50 | 目標ごとのエージェントループの最大反復回数 |
output_dir | "output" | save_file が出力を書き込む場所 |
auto_compact_input_tokens | 200000 | 自動圧縮を行うトークンのしきい値 |
reasoning_effort | "high" | 推論モデル向け:high / medium / low |
max_concurrent_per_parent | 5 | 親エージェントごとのサブエージェントの最大同時実行数 |
max_fork_depth | 3 | フォークされたエージェントの最大ネスト深度 |
max_total_agents | 10 | エージェント総数の全体上限 |
fork_child_max_steps | 15 | 各子エージェントのステップ予算 |
fork_wait_timeout_secs | 60 | wait_for_subagents のタイムアウト |
browser_backend | null | アクティブなブラウザーバックエンド:"extension" または null(CloakBrowser) |
extension_bridge_port | 19876 | Chrome 拡張機能ブリッジの WebSocket サーバー用ポート |
extension_bridge_connect_timeout_secs | 3 | 拡張機能モードでブラウザーツール呼び出しが失敗するまで、拡張機能の接続を待機する時間 |
すべてのフィールドは省略可能です。フィールドを省略するとデフォルト値が使用されます。optimization ブロックには、次のフィールドを含むネストしたオブジェクトを指定できます(すべてのデフォルト値は false/0/null で、ブロック全体を省略しても安全です)。
| フィールド | デフォルト | 説明 |
|---|---|---|
html_diff_mode | false | 同じ URL に再訪問したとき、変更されたコンテンツセクションのみを [unchanged: N sections] マーカーとともに返します。複数ターンのセッションでトークンを 50~70%削減します。初回訪問時の動作は変わりません。 |
content_aware_profiles | false | タスクのキーワードに基づいて、クリーニングプロファイルを自動選択します。抽出タスクには ReadingMode、操作タスクには Minimal、50KB を超えるコンテンツには Aggressive を使用します。 |
semantic_prune | false | navigate で focus(フレーズまたはリスト)を指定できるようにし、関連度モデル(TypeSafe Jev)が 0.35 未満と評価したページブロックを削除して、[N blocks pruned] マーカーを残します。削除された内容は read_content で読み取れます。TypeSafe キーが必要です。ここで semantic_prune_api_key を指定するか、指定しない場合は TYPESAFE_API_KEY 環境変数を使用します。どちらも設定されていない状態で focus を指定して navigate を実行すると、エラーになります。ページのテキストを api.typesafe.ai に送信します。拡張機能モードではスキップされます。 |
semantic_prune_api_key | unset | semantic_prune 用の TypeSafe API キーです。TYPESAFE_API_KEY より優先されます。 |
loop_detection | false | 同一の操作の繰り返しを検出し、段階的に強まる注意喚起(弱・中・強)を挿入します。ページの停滞も検出します。 |
loop_detection_window | 20 | 操作ハッシュの比較に使用するローリングウィンドウのサイズです。 |
loop_nudge_threshold | 5 | 最初の注意喚起が表示されるまでに必要な操作の繰り返し回数です。 |
page_fingerprinting | false | ループ検出と操作キャッシュで使用する軽量なページフィンガープリントを有効にします。 |
failure_classification | false | キーワード照合により、エラーを 16 のカテゴリ(SelectorNotFound、CaptchaDetected、RateLimited など)に分類します。LLM コストはかかりません。 |
self_healing | false | SelectorNotFound/SelectorAmbiguous が発生すると、最新の page_map を取得し、テキストを照合して置換先の要素参照を特定します。[healed: @eOLD -> @eNEW] をログに記録します。LLM の呼び出しはありません。 |
self_healing_max_retries | 2 | アクションの失敗ごとの最大修復試行回数です。 |
action_caching | false | 読み取り専用ツール(page_map、read_content、list_resources、execute_js)の結果を、ツール名、入力、ページフィンガープリントをキーとしてキャッシュします。ページが変更されると、キャッシュは無効になります。 |
action_cache_ttl_secs | 30 | キャッシュエントリの有効期間(秒)です。 |
planning_interval | 0 | N ステップごとに、計画チェックポイントをシステムプロンプトに挿入します。0 = 無効です。 |
confidence_tracking | false | 各アクションの後に、LLM に信頼度の自己申告([confidence: HIGH/MEDIUM/LOW])を求めます。LOW が 2 回連続すると、停滞アラートが発生します。 |
compound_enrichment | false | 複雑なフォームコントロールに enrichment メタデータを追加します。対象は page_map 内の、日付形式のヒント、範囲の最小値/最大値/値、選択肢の一覧(最大 20 件と超過件数)、ファイルの受け入れ形式、textarea の maxlength です。要素ごとに最大 200 バイトです。 |
budget_max_session_cost_usd | null | セッションのコスト上限(USD)です。Null = 上限なしです。 |
budget_enforcement | null | 予算の適用方法です。warn はプロンプトに警告を挿入し、block は上限に達したときにセッションを終了します。 |
budget_warn_threshold_pct | 80 | 警告を開始する予算の割合です。 |
per_agent_cost_tracking | false | ON の場合、/cost に子エージェントごとのコストの内訳が表示されます。 |
環境変数
| 変数 | 説明 |
|---|---|
ACRAWL_CONFIG_HOME | 設定ディレクトリを上書きします(デフォルト:~/.acrawl/) |
プロバイダー固有の環境変数(上記のプロバイダーテーブルを参照)は、credentials.json にエントリがない場合にフォールバックとして読み込まれます。
パフォーマンスの最適化
acrawl には、各種ベンダー由来の最適化機能が 14 種類搭載されています(browser-use、Stagehand、crawl4ai、Skyvern、Spider、nanobrowser、ZeroClaw から提供)。すべてデフォルトでは無効です。settings.json で必要なものだけを有効にしてください。
コストを最適化するプロファイルを設定した settings.json の例:
{
"optimization": {
"html_diff_mode": true,
"action_caching": true,
"page_fingerprinting": true,
"loop_detection": true,
"self_healing": true,
"budget_max_session_cost_usd": 0.50,
"budget_enforcement": "warn"
}
}
| 最適化機能 | フラグ | 効果 |
|---|---|---|
| HTML 差分モード | html_diff_mode | 再訪問時に変更されたコンテンツだけを返すことで、トークンを 50~70%削減します。 |
| コンテンツ対応プロファイル | content_aware_profiles | タスクに応じてクリーニングプロファイル(ReadingMode、Minimal、Aggressive)を自動選択します。 |
| ループ検出 | loop_detection | 繰り返されるアクションを検出して促しを挿入し、無限ループを防ぎます。 |
| ページフィンガープリント | page_fingerprinting | ループ検出とアクションのキャッシュに使う、軽量なページフィンガープリントを生成します。 |
| 失敗の分類 | failure_classification | LLM コストをかけず、キーワード照合によってエラーを 16 種類に分類します。 |
| セルフヒーリング | self_healing | LLM を呼び出さず、テキスト照合によって壊れたセレクターを自動修復します。 |
| アクションのキャッシュ | action_caching | 読み取り専用ツールの結果をキャッシュし、冗長な LLM 呼び出しを避けます。 |
| 計画の間隔 | planning_interval | エージェントの集中を保つため、定期的な計画チェックポイントを挿入します。 |
| 信頼度の追跡 | confidence_tracking | LLM が自己申告した信頼度を追跡し、停滞を警告します。 |
| 複合要素の拡充 | compound_enrichment | ページマップ内の複雑なフォームコントロールにメタデータを追加します。 |
| 予算上限 | budget_max_session_cost_usd | コストの際限ない増加を防ぐため、セッションのコスト上限を米ドルで設定します。 |
| 予算の適用 | budget_enforcement | セッション予算に達した際に警告するか、処理をブロックするかを制御します。 |
| 予算の警告 | budget_warn_threshold_pct | 予算の一定割合が消費されたときに警告を出します。 |
| エージェントごとのコスト追跡 | per_agent_cost_tracking | /cost コマンドで、子エージェントごとのコストを表示します。 |
既知の制限事項
acrawl はほとんどの公開ウェブコンテンツで問題なく動作しますが、エージェントが確実に処理できない状況もあります。
| シナリオ | 動作 |
|---|---|
| CAPTCHA/ボット対策チャレンジ | CloakBrowser はステルス技術を使ってボット検出を回避しますが、解決できない CAPTCHA(画像パズル、プルーフ・オブ・ワークを要求する Cloudflare Turnstile など)は処理を妨げます。ブラウザーに信頼済みセッションがすでにある場合は、実ブラウザー拡張機能(/extension)を使用してください。reCAPTCHA v3 は表示されません(ウィジェットがありません)。v3 が存在する状態でフォームを送信してもページに変化がない場合、acrawl はサイレントな拒否の可能性をヒューリスティックに検出し、誤解を招く成功結果ではなく CaptchaDetected エラーを返します。これは可能な範囲でのヒューリスティックな検出です。acrawl はサーバー側のスコアを読み取ることはできません。エラーメッセージには解決策として、acrawl config set headless false(または --headed)、あるいは /extension が示されます。 |
| SMS/TOTP による 2FA | エージェントは、REPL に貼り付けられた 2FA コードを入力できますが、自分でコードを受信したり生成したりすることはできません。 |
| ログインが必要なコンテンツ | ログインが必要なサイトでは、エージェントが既存の認証済みブラウザーセッションを操作できるよう、拡張機能モードを使用してください。 |
| スクロール時にコンテンツを読み込むシングルページアプリ | エージェントは scroll で遅延読み込みを開始できますが、終了条件のない無限スクロールフィードでは、明示的なステップ上限が必要になる場合があります。 |
| PDF およびバイナリファイルのコンテンツ | save_file は任意の URL をディスクにダウンロードします。エージェントは保存した PDF のテキストコンテンツを読み取ることも、HTML を返す URL に対して navigate を使用することも、ダウンロードしたファイルを外部のテキスト抽出ツールにパイプすることもできません。 |
| WebGL/キャンバスのフィンガープリンティング | 一部のボット対策システムは、WebGL を使って GPU のフィンガープリントを取得します。CloakBrowser は一般的な検査を軽減しますが、ハードウェアレベルのフィンガープリントを偽装することはできません。 |
| 実際のマウス軌跡が必要なサイト | マウスの動きのパターンを分析するボット検出システムは、ヘッドレスブラウザーの操作を検出する場合があります。このようなサイトでは、拡張機能モードに切り替えてください。 |
仕組み
flowchart LR
Goal([Goal\nnatural language]) --> Plan
Plan --> Navigate --> Observe --> Act --> Extract
Extract -->|repeat until done| Plan
Extract --> Output([Output\nJSON / CSV])
- エージェントは目標を受け取り、ID、操作手順、データの完全性、制約、エラーからの回復、完了プロトコル、並列探索の指針を網羅する7 セクションのシステムプロンプトを使って、複数ステップの計画を立てます。
- 各ターンで、ページ上で観察した内容に基づいて 43 個のツールから選択します。
navigateは FetchRouter にリクエストを送り、まず HTTP を試します。JavaScript、認証リダイレクト、またはフレームワークのマーカーが検出されると、ヘッドレス Chromium ブラウザーに自動的に切り替えます。- ブラウザーは、改行区切りの JSON を stdio 経由でやり取りする、埋め込みの Node.js サブプロセス(PlaywrightBridge)によって操作されます。標準の Playwright ではなく、ステルスブラウジングには CloakBrowser を使用します。または、acrawl は
/extensionコマンドを使い、ローカル WebSocket ブリッジ経由の CDP でユーザーの実ブラウザーを操作できます。 - 複数ページにわたるタスクでは、エージェントは子エージェントを個別のブラウザータブに
forkできます。各エージェントは独立した状態とステップ予算を持ちます。wait_for_subagentsは結果を収集し、cancel_subagentは実行中の子エージェントを中止し、subagent_statusは処理をブロックせずに状態を確認します。 - コンテキストが大きくなると、自動圧縮によって古いメッセージが要約され、最近のターン、ツールの使用状況、未完了の作業項目は保持されます。
- 目標が達成され、すべてのサブエージェントが完了したとき、またはステップ上限に達したときに、エージェントは停止します。
アーキテクチャ
crates/
core/ Shared types, traits, error hierarchy (acrawl-core)
api/ 25 provider clients (Anthropic, OpenAI, Gemini, DeepSeek, Bedrock, Azure, ...), SSE streaming
browser/ PlaywrightBridge, ExtensionBridge, FetchRouter, BrowserContext, WsBridgeServer
agent/ 43 tools, agent loop, sub-agent fork/join, CrawlState
runtime/ ConversationRuntime, config, sessions, MCP client stack, OAuth PKCE
render/ Markdown rendering, tool output formatting, OutputSink
mcp-server/ Built-in MCP server (JSON-RPC over stdio), IDE installer
tui/ Ratatui terminal UI (acrawl-tui)
ui/ Shared application layer (LiveCli, session management, tool executor, auth)
cli/ Thin binary entry point (main.rs, self_update.rs, uninstall.rs)
commands/ 17 slash commands with resume-safety annotations
11 個のクレート、約 4 万行の Rust、1,097 件のテスト。
開発
cargo build --release # build
cargo test --workspace # run all tests
cargo clippy --workspace --all-targets -- -D warnings # lint (pedantic)
cargo fmt --check # format check
開発ガイドの全文は CONTRIBUTING.md を参照してください。
変更履歴
CHANGELOG.md を参照してください。
セキュリティ
セキュリティポリシーと脆弱性の報告方法については、SECURITY.md を参照してください。
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。