Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/deepbluedynamics/grubcrawler
OSINT (オープンソースインテリジェンス)偵察動的分析 (サンドボックス)ウェブプロキシと傍受情報収集ウェブセキュリティペネトレーションテストユーティリティとフレームワーク機械学習レッドチーミングクローラーアンチボット
34720日前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
GitHubdeepbluedynamics/grubcrawler

grubcrawler

世界最速のエージェンティッククローラー。再生された。再発明された。戦闘準備完了。

リポジトリを見るウェブサイト
Grub Crawler

License Python FastAPI Playwright MCP Ghost Protocol Live Stream Camoufox Proxy


エージェント型ウェブクローラー - アンチディテクション、ビジョンフォールバック、P2Pメッシュ搭載


エンドポイント · メッシュ · アンチディテクション · ゴーストプロトコル · ライブストリーム · MCPツール · クイックスタート · ベンチマーク · アーキテクチャ


JavaScriptレンダリング、Camoufoxアンチディテクトブラウザ、リクエストごとのプロキシルーティング、自律エージェントループを備えたフルスタックウェブクローリングエンジン。ネイティブRust抽出エンジンでページをクリーンなMarkdownに変換。標準クローリングがCloudflare、CAPTCHA、JavaScriptウォールでブロックされた場合、Ghost Protocolがスクリーンショットを撮影し、ビジョンAI(Claude、GPT-4o、Ollama)を介してコンテンツを抽出します。単一セッションでOpenAI、Anthropic、OllamaにわたるマルチプロバイダLLMオーケストレーションをサポート。ノードはゴシップベースのP2Pメッシュで連携し、分散クローリングを行います。


Grubの特長

主要クローラーの機能を統合し、さらに他にはない機能を追加しました。

セルフホスト型クローラー

クラウド/マネージドクローラー

Ghost Protocolを持つのはGrubだけ – 標準クローリングが失敗した場合に、ブロックされたページのスクリーンショットを撮影し、LLMを介してコンテンツを抽出する自動ビジョンベースのフォールバックです。予防(Camoufox + プロキシ + ステルス)で95%のブロックを処理し、残りをGhost Protocolが処理します。

APIエンドポイント

コアクローリング

エージェント(モードB)

ジョブ管理

リモートキャッシュ

セッション管理

ライブストリーム

メッシュ

システム

MCPツール(grub-crawl.py)

MCPブリッジは、すべての機能を任意のMCP互換ホストに公開します:

内部モジュール

エージェントコア(app/agent/)

プロバイダアダプター(app/agent/providers/)

ポリシーゲート(app/policy/)

ファイル目的

可観測性(app/observability/)

APIレイヤー

アンチディテクション(app/)

ファイル目的状態
stealth.pyplaywright-stealthパッチ、トラッカードメインブロッキング完了
proxy.py環境変数フォールバック付きリクエストごとのプロキシ解決完了

メッシュ(app/mesh/)

インフラストラクチャ

エージェントステートマシン```

INIT -> PLAN -> EXECUTE_TOOL -> OBSERVE -> PLAN -> ... -> RESPOND -> STOP | | +-- policy_denied ---------------------->+ +-- max_steps / max_wall_time / max_failures -> STOP +-- no_op_loop (3x empty) ------------> STOP +-- blocked (ghost trigger) -----------> GHOST -> OBSERVE

root@kitploit:~
Stop conditions enforced every iteration:
- `max_steps`(デフォルト: 12)
- `max_wall_time`(デフォルト: 90秒)
- `max_failures`(デフォルト: 3)
- `no_op_loop`(3回連続の空の応答)
- `policy_denied`(ブロックされたツール/ドメイン)
- `completed`(エージェントがテキストで応答)

## 検出回避

積み重なる3層の検出回避。防止策はブロックが発生する前に阻止します。ゴーストプロトコルはその後に処理します。

### Camoufoxエンジン

プラグイン可能な検出回避ブラウザで、C++レベルのフィンガープリント偽装を備えています。手動のユーザーエージェントトリックは不要 — Camoufoxはブラウザレベルでコンテキストごとにリアルなフィンガープリントを生成し、キャンバス、WebGL、フォント、ナビゲータプロパティなどを含みます。```bash
# Switch engine (default: chromium)
BROWSER_ENGINE=camoufox

Per-Request Proxy

クロールトラフィックを住宅用、データセンター用、またはカスタムプロキシプール経由でルーティングします。環境変数ベースのデフォルト設定をリクエストごとに上書き可能。Playwrightと完全互換のプロキシ設定。```bash

Env-based default

PROXY_SERVER=http://proxy.example.com:10001 PROXY_USERNAME=your_username PROXY_PASSWORD=your_password

Or per-request

curl -X POST http://localhost:6792/api/crawl
-H "Content-Type: application/json"
-d '{ "url": "https://example.com", "options": { "proxy": { "server": "http://proxy.example.com:10001", "username": "your_username", "password": "your_password" } } }'

root@kitploit:~
### ステルスモード

オプトイン `playwright-stealth` パッチ (Chromium用、Camoufoxでは組み込みのためスキップ)。20以上のトラッキング/分析ドメイン (Google Analytics、DataDome、PerimeterXなど) をブロックし、指紋情報の表面を減らします。```bash
STEALTH_ENABLED=true
BLOCK_TRACKING_DOMAINS=true

ゴーストプロトコル

クロール結果がアンチボットブロック(Cloudflareチャレンジ、CAPTCHA、空のSPAシェル)を示した場合、エージェントはクロークモードに切り替えることができます:

  1. Playwrightを使用して全ページスクリーンショットを撮る
  2. 画像を視覚対応LLM(Claude SonnetまたはGPT-4o)に送信する
  3. レンダリングされたピクセルからコンテンツを抽出する
  4. トレースにrender_mode: "ghost"を含めて抽出されたテキストを返す

これにより、DOMベースのアンチボット検出を完全に回避します。

AGENT_GHOST_ENABLED=trueが必要です。AGENT_GHOST_AUTO_TRIGGER=trueの場合、検出されたブロックで自動トリガーされます。

メッシュ

エージェント同士の会話。各Grubインスタンスはワーカーでありコーディネーターでもあります。ローカルノードはクラウドにオフロードし、クラウドはローカルに委任します。ツールコールは透過的にワイヤを越えます。``` Node A (local) Node B (cloud) ┌─────────────┐ ┌─────────────┐ │ AgentEngine │ │ AgentEngine │ │ ↓ │ │ ↓ │ │ MeshDispatcher ──── HTTP ────→ MeshDispatcher │ │ ↓ │ │ ↓ │ │ Dispatcher │ │ Dispatcher │ │ ↓ │ │ ↓ │ │ ToolRegistry │ │ ToolRegistry │ └─────────────┘ └─────────────┘ ↕ heartbeat (15s) ↕ └────────────────────────────────┘

root@kitploit:~
**動作原理:**
- **発見** — ノードはシードピアリストを介して参加し、その後ゴシップ(1ホップ)で他のノードを学習します
- **ハートビート** — 15秒ごとにノードが負荷メトリクスを交換します。3回見逃すと異常と判断。2分で削除されます
- **ルーティング** — MeshDispatcherは負荷、ローカリティ、アフィニティに基づいて全ノードをスコアリングし、ツール呼び出しを最適なノードにルーティングします
- **最大1ホップ** — ノードA→Bのみ、A→B→Cは不可。ルーティングループを防止します
- **ローカルフォールバック** — リモート実行が失敗した場合、ローカルのDispatcherにフォールバックします
- **HMAC認証** — すべてのメッシュトラフィックは共有シークレットで署名されます(SHA-256、TTL60秒)

### ローカルで2ノードメッシュを実行する```bash
# Docker Compose (recommended)
./deploy.sh mesh           # Linux/Mac
./deploy.ps1 -Target mesh  # Windows

# Verify
curl http://localhost:6792/mesh/peers  # Node A sees Node B
curl http://localhost:6793/mesh/peers  # Node B sees Node A

ローカルをCloud Runに接続する```bash

Deploy to Cloud Run with mesh

./deploy.sh cloudrun latest --mesh-peer http://your-local-ip:6792 --mesh-secret mysecret

Start local node

MESH_ENABLED=true MESH_SECRET=mysecret MESH_PEERS=https://your-cloud-run-url
MESH_ADVERTISE_URL=http://your-local-ip:6792
uvicorn app.main:app --port 6792

root@kitploit:~
### 手動設定```bash
# Node A
MESH_ENABLED=true MESH_NODE_NAME=local MESH_SECRET=test123 \
  MESH_ADVERTISE_URL=http://localhost:6792 \
  uvicorn app.main:app --port 6792

# Node B
MESH_ENABLED=true MESH_NODE_NAME=cloud MESH_SECRET=test123 \
  MESH_PEERS=http://localhost:6792 \
  MESH_ADVERTISE_URL=http://localhost:8081 \
  uvicorn app.main:app --port 8081

メッシュが無効の場合(MESH_ENABLED=false、デフォルト)、Grubはメッシュのオーバーヘッドがゼロの通常のシングルノードクローラとして動作します。

ライブストリーム

クローラの動作をリアルタイムで監視します。持続的なウォームChromiumインスタンスのプールが、WebSocketまたはMJPEGを介してビューポートフレームをストリーミングします。

WebSocket — 接続して対話型コマンドを送信:```javascript const ws = new WebSocket("ws://localhost:6792/stream/my-session?url=https://example.com"); ws.onmessage = (e) => { const msg = JSON.parse(e.data); if (msg.type === "frame") document.getElementById("viewport").src = "data:image/jpeg;base64," + msg.data; }; // Navigate, click, scroll, type — all over the same socket ws.send(JSON.stringify({ action: "navigate", url: "https://example.com/pricing" })); ws.send(JSON.stringify({ action: "click", selector: "#signup-btn" })); ws.send(JSON.stringify({ action: "scroll", direction: "down" }));

root@kitploit:~
**MJPEG** — ``タグに入れるだけで、即座にビデオが表示されます:```html
<img src="http://localhost:6792/stream/my-session/mjpeg?url=https://example.com" />

BROWSER_STREAM_ENABLED=true が必要です。各Chromiumインスタンスは約150~300MBのRAMを使用します。

クイックスタート

ローカル開発```bash

git clone cd grub-crawl cp .env.example .env pip install -r requirements.txt uvicorn app.main:app --reload --host 0.0.0.0 --port 6792

root@kitploit:~
### Agent Mode B を有効にする```bash
# Add to .env
AGENT_ENABLED=true
OPENAI_API_KEY=sk-...
# or
ANTHROPIC_API_KEY=sk-ant-...
AGENT_PROVIDER=anthropic

エージェントタスクの送信```bash

curl -X POST http://localhost:6792/api/agent/run
-H "Content-Type: application/json"
-d '{ "task": "Find the pricing page on example.com and extract plan details", "max_steps": 10, "allowed_domains": ["example.com"] }'

root@kitploit:~
### Docker```bash
# Single node
./deploy.sh local            # or ./deploy.ps1 -Target local

# 2-node mesh
./deploy.sh mesh             # or ./deploy.ps1 -Target mesh

# Cloud Run
./deploy.sh cloudrun v1.0.0  # or ./deploy.ps1 -Target cloudrun -Tag v1.0.0

# Cloud Run + mesh (connect to local node)
./deploy.sh cloudrun v1.0.0 --mesh-peer http://your-ip:6792 --mesh-secret mykey

アンチ検出 (Camoufox + Proxy)```bash

Add to .env

BROWSER_ENGINE=camoufox STEALTH_ENABLED=true BLOCK_TRACKING_DOMAINS=true

Optional: proxy

PROXY_SERVER=http://proxy.example.com:10001 PROXY_USERNAME=your_username PROXY_PASSWORD=your_password

root@kitploit:~
### Ghost Protocol (ボット対策回避)```bash
# Add to .env
AGENT_GHOST_ENABLED=true

curl -X POST http://localhost:6792/api/agent/ghost \
  -H "Content-Type: application/json" \
  -d '{"url": "https://blocked-site.com"}'

ライブブラウザストリーム```bash

Add to .env

BROWSER_STREAM_ENABLED=true BROWSER_POOL_SIZE=2

MJPEG (open in browser)

open "http://localhost:6792/stream/demo/mjpeg?url=https://example.com"

root@kitploit:~
## 設定

### サーバー
- `HOST` (default: 0.0.0.0)
- `PORT` (default: 6792)
- `DEBUG` (default: false)

### ストレージ
- `STORAGE_PATH` (default: ./storage)
- `RUNNING_IN_CLOUD` (default: false)
- `GCS_BUCKET_NAME`
- `GOOGLE_CLOUD_PROJECT`

### 認証
- `DISABLE_AUTH` (default: false)
- `GNOSIS_AUTH_URL` (default: http://gnosis-auth:5000)

### ブラウザエンジン
- `BROWSER_ENGINE` — chromium | camoufox (default: chromium)

### クローリング
- `MAX_CONCURRENT_CRAWLS` (default: 5)
- `CRAWL_TIMEOUT` (default: 30)
- `ENABLE_JAVASCRIPT` (default: true)
- `ENABLE_SCREENSHOTS` (default: false)

### プロキシ
- `PROXY_SERVER` — proxy URL (例: http://proxy:10001)
- `PROXY_USERNAME`
- `PROXY_PASSWORD`
- `PROXY_BYPASS` — カンマ区切りのバイパスリスト

### ステルス
- `STEALTH_ENABLED` (default: false) — playwright-stealth パッチ
- `BLOCK_TRACKING_DOMAINS` (default: false) — アナリティクス/トラッキングリクエストをブロック

### エージェント(モードB)
- `AGENT_ENABLED` (default: false)
- `AGENT_MAX_STEPS` (default: 12)
- `AGENT_MAX_WALL_TIME_MS` (default: 90000)
- `AGENT_MAX_FAILURES` (default: 3)
- `AGENT_ALLOWED_TOOLS` — カンマ区切りの許可リスト
- `AGENT_ALLOWED_DOMAINS` — カンマ区切りの許可リスト
- `AGENT_BLOCK_PRIVATE_RANGES` (default: true)
- `AGENT_REDACT_SECRETS` (default: true)

### LLMプロバイダー
- `AGENT_PROVIDER` — openai | anthropic | ollama (default: openai)
- `OPENAI_API_KEY`
- `OPENAI_MODEL` (default: gpt-4.1-mini)
- `ANTHROPIC_API_KEY`
- `ANTHROPIC_MODEL` (default: claude-3-5-sonnet-latest)
- `OLLAMA_BASE_URL` (default: http://localhost:11434)
- `OLLAMA_MODEL` (default: llama3.1:8b-instruct)

### ゴーストプロトコル
- `AGENT_GHOST_ENABLED` (default: false)
- `AGENT_GHOST_AUTO_TRIGGER` (default: true)
- `AGENT_GHOST_VISION_PROVIDER` — AGENT_PROVIDER から継承
- `AGENT_GHOST_MAX_IMAGE_WIDTH` (default: 1280)

### メッシュ
- `MESH_ENABLED` (default: false) — マスタースイッチ
- `MESH_PEERS` — カンマ区切りのシードピアURL
- `MESH_NODE_NAME` — 人間が読める名前 (default: hostname)
- `MESH_SECRET` — ノード間認証用の共有HMACシークレット
- `MESH_ADVERTISE_URL` — 他のピアがこのノードに到達するためのURL
- `MESH_PREFER_LOCAL` (default: true) — ローカル実行を優先
- `MESH_HEARTBEAT_INTERVAL_S` (default: 15)
- `MESH_PEER_TIMEOUT_S` (default: 45) — これを過ぎると異常とマーク
- `MESH_PEER_REMOVE_S` (default: 120) — これを過ぎるとピアテーブルから削除
- `MESH_REMOTE_TIMEOUT_MS` (default: 35000) — リモートツール呼び出しのタイムアウト

### ライブストリーム
- `BROWSER_POOL_SIZE` (default: 1)
- `BROWSER_STREAM_ENABLED` (default: false)
- `BROWSER_STREAM_QUALITY` (default: 25) — JPEG品質 1-100
- `BROWSER_STREAM_MAX_WIDTH` (default: 854)
- `BROWSER_STREAM_MAX_LEASE_SECONDS` (default: 300)

## レスポンス契約

`POST /api/markdown` returns:

`success`, `url`, `final_url`, `status_code`, `markdown`, `markdown_plain`, `content`, `render_mode`, `wait_strategy`, `timings_ms`, `blocked`, `block_reason`, `captcha_detected`, `http_error_family`, `body_char_count`, `body_word_count`, `visible_char_count`, `visible_word_count`, `visible_similarity`, `quarantined`, `quarantine_reason`, `policy_flags`, `content_quality`, `extractor_version`, `normalized_url`, `content_hash`

### コンテンツ品質

- `blocked` — アンチボット/キャプチャ/チャレンジ
- `empty` — 非常に低いシグナル
- `minimal` — 薄い/エラーページ
- `sufficient` — 要約に使用可能

`content_quality == "sufficient"` でない限り要約しないでください。

### プロンプトインジェクション防御

- `quarantined=true` は、抽出されたコンテンツに、ページの可視レンダリングテキストには存在しない指示のようなテキストが検出されたことを意味します(`.sr-only` / 視覚的に隠された悪用によく見られます)。
- 隔離された場合、`content_quality` は `minimal` にダウングレードされ、`policy_flags` には `hidden_text_suspected` と `quarantined` が含まれ、`content`/`markdown` の出力は空になります(フェイルクローズド)。

### エラーフォーマット```json
{"error": "http_error|validation_error|internal_error", "status": 400, "details": {}}

Benchmarks

戦闘アリーナ — Crawl4AI、Firecrawl(セルフホスト)、Scrapyとの直接対決ベンチマーク。すべてのテストは同じマシン、同じURL、同じ条件で実行。Grubはベースラインとして最初に実行され、残りのアダプターはレート制限バイアスを防ぐためにランダム順序で、各間に10秒の遅延を入れて実行されます。

単一URL速度(ms、低いほど良い)

Grubは単一URL速度レースで4/5勝利。Markdown変換はネイティブRustエンジン(grub_md)により0~21msで実行。

Grubフェーズ内訳(サーバーサイドms)

ナビゲーションが支配的。Rustエンジンのおかげで、ほとんどのページでMarkdown変換は1ミリ秒未満。

バッチスループット(ms、低いほど良い)

Grubは2/3のバッチサイズで勝利。URLあたりコスト:163-312ms(Grub)対255-477ms(その他)。

実行方法```bash

Start Grub

docker compose up -d

Start Firecrawl (optional)

docker compose -f combat/firecrawl-compose.yaml up -d

Install combat deps

pip install crawl4ai scrapy markdownify tabulate

Run the arena

pytest combat/ -m combat -v

Generate report

python -m combat.report

root@kitploit:~
## 開発状況

### フェーズ1: コアインフラストラクチャ ✅
### フェーズ2: クローリング ✅
### フェーズ3: エージェントモジュール ✅
- [x] エージェントコア — ステートマシン、型、エラー (W1)
- [x] 統合ツールコントラクト — タイムアウト/リトライ付きディスパッチャ (W2)
- [x] ポリシーゲート — ドメイン許可リスト、プライベートレンジ拒否、編集 (W3)
- [x] 可観測性 — EventBus、TraceCollector、RunSummaryの永続化 (W4)
- [x] API配線 — `/api/agent/run`、`/api/agent/status`、JobType.AGENT_RUN (W5)
- [x] プロバイダアダプタ — OpenAI、Anthropic、Ollama(フォールバック付き) (W6)
- [x] 設定フラグ — agent、provider、ghost、stream設定 (W7)

### フェーズ4: ゴーストプロトコル ✅
- [x] クロークモードトリガー検出 (W8)
- [x] スクリーンショットキャプチャパイプライン (W8)
- [x] Claude/GPT-4oによるビジョン抽出 (W8)
- [x] エンジン内のフォールバックチェーン (W8)
- [x] 外部呼び出し元向けゴーストツール (W8)
- [x] Ghost MCPツール + RESTエンドポイント (W8)

### フェーズ5: ライブブラウザストリーム ✅
- [x] リース/返却機能付き永続ブラウザプール (W9)
- [x] CDPスクリーンキャストリレー (W9)
- [x] インタラクティブコマンド対応WebSocketエンドポイント (W9)
- [x] MJPEGフォールバックストリーム (W9)
- [x] ストリームステータス + プールステータスエンドポイント (W9)

### フェーズ5.5: 検出回避 ✅
- [x] Camoufox検出回避ブラウザエンジン (W10)
- [x] リクエストごとのプロキシ(envフォールバック付き) (W10)
- [x] Chromium向けステルスパッチ (W10)
- [x] トラッカー/アナリティクスドメインブロッキング (W10)
- [x] Anthropicビジョン形式検出の修正 (W10)

### フェーズ6: メッシュコーディネータ ✅
- [x] ゴシッププロトコルによるピア発見(1ホップ) (W11)
- [x] HMAC-SHA256によるノード間認証 (W11)
- [x] 負荷メトリクス+シードリトライ付きハートビートループ (W11)
- [x] MeshDispatcher — 透過的なノード間ツールルーティング (W12)
- [x] ロケール/アフィニティボーナス付き負荷ベーススコアリング (W12)
- [x] デプロイスクリプト — ローカル、メッシュ、Cloud Run (W12)
- [x] Docker Compose 2ノードメッシュトポロジ (W12)
- [x] 組み込みランディングページ(grub-site) (W12)

### フェーズ7: パフォーマンス+堅牢化
- [x] Rustマークダウンエンジン(`grub_md`) — PyO3ネイティブ拡張、サブミリ秒変換
- [x] コンバットアリーナ — Crawl4AI、Firecrawl、Scrapyに対する自動ベンチマーク
- [x] ユニットテストスイート — 全モジュールにわたる176テスト
- [ ] エラーハンドリングの改善
- [ ] 監視とアラート

完全なアーキテクチャ計画については[MASTER_PLAN.md](https://github.com/deepbluedynamics/grubcrawler/blob/HEAD/MASTER_PLAN.md)を参照してください。

## ライセンス

Grub Crawler Project ライセンス
ツールをダウンロード
機能Crawl4AIFirecrawlScrapyGrub
JSレンダリング✅ Playwright✅ Playwright❌ HTTPのみ✅ Playwright
アンチディテクトブラウザstealthプラグイン❌❌✅ Camoufox
ゴーストプロトコル❌❌❌✅ 自動フォールバック
リクエストごとのプロキシ✅ エスカレーション❌ミドルウェア✅ リクエスト単位
ステルスパッチ✅❌❌✅ オプトイン
エージェントループ✅ agentic✅ /agent❌ スパイダー✅ 有限状態機械
ライブブラウザストリーム✅ WebSocket✅ Live View❌✅ WS + MJPEG
Markdown出力✅ Fit Markdown✅ コア❌✅ Rustエンジン
MCPツール✅ コミュニティ✅ 公式⚠️ コミュニティ✅ 15ツール
マルチプロバイダLLM✅ 全LLM⚠️ Gemini❌✅ OpenAI/Anthropic/Ollama
メッシュP2P❌❌❌✅ ゴシッププロトコル
ポリシー実施❌❌❌✅ ドメインゲート + 編集
プロンプトインジェクション防御❌❌❌✅ 隔離 + 可視テキスト差分
ライセンスApache 2.0AGPL-3.0BSDプロプライエタリ
価格無料無料–$333/月無料セルフホスト
機能BrowserbaseScrapflyFirecrawl CloudGrub
JSレンダリング✅ カスタムChromium✅ プロプライエタリ✅ Playwright✅ Playwright
アンチディテクトブラウザ✅ カスタムChromium✅ プロプライエタリ✅ クラウドステルス✅ Camoufox
ゴーストプロトコル❌❌❌✅ 自動フォールバック
リクエストごとのプロキシ✅ マネージド✅ 130M+ IP✅ クラウドマネージド✅ リクエスト単位
ステルスパッチ✅ 組み込み✅ 組み込み✅ 組み込み✅ オプトイン
エージェントループ✅ Stagehand⚠️ 統合経由✅ /agent✅ 有限状態機械
ライブブラウザストリーム✅ iFrame + CDP✅ CDP✅ Live View✅ WS + MJPEG
Markdown出力✅ MCP経由✅ 組み込み✅ コア✅ Rustエンジン
MCPツール✅ 公式✅ 公式✅ 公式✅ 15ツール
メッシュP2P❌❌❌✅ ゴシッププロトコル
ポリシー実施❌❌❌✅ ドメインゲート + 編集
プロンプトインジェクション防御❌❌❌✅ 隔離 + 可視テキスト差分
セルフホスト可能❌ クラウドのみ❌ クラウドのみ⚠️ 限定的OSS✅ フル + Cloud Run
価格無料–$99/月従量課金無料–$333/月セルフホスト
メソッドパス説明状態
POST/api/crawl単一URLクロール(HTML + Markdown)実装済み
POST/api/markdown単一または複数URLのMarkdown抽出実装済み
POST/api/batchジョブ追跡付きバッチクロール実装済み
POST/api/raw生HTML抽出(Markdown変換なし)実装済み
GET/viewブラウザレンダリングHTMLビューア実装済み
GET/downloadクローラー経由のファイルダウンロード(PDF等)実装済み
メソッドパス説明状態
POST/api/agent/run自律エージェントループにタスクを送信実装済み
GET/api/agent/status/{run_id}エージェント実行状況/トレースを確認実装済み
POST/api/agent/ghostゴーストプロトコル: スクリーンショット + ビジョン抽出実装済み
メソッドパス説明状態
POST/api/jobs/create汎用ジョブ送信実装済み
POST/api/jobs/crawl単一URLクロールジョブを送信実装済み
POST/api/jobs/batch-crawlバッチクロールジョブを送信実装済み
POST/api/jobs/markdownMarkdownのみのジョブを送信実装済み
POST/api/jobs/process-jobCloud Tasksワーカーエンドポイント実装済み
POST/api/wraithAI駆動クロールワークフロープレースホルダー
メソッドパス説明状態
POST/api/cache/searchキャッシュコンテンツのあいまい検索実装済み
GET/api/cache/listキャッシュされたドキュメントメタデータの一覧実装済み
GET/api/cache/doc/{doc_id}キャッシュされたドキュメントを1件取得実装済み
POST/api/cache/upsertキャッシュエントリのアップサート実装済み
POST/api/cache/pruneTTL/ドメインによるキャッシュエントリの削除実装済み
メソッドパス説明状態
GET/api/sessions/{session_id}/filesセッションファイルの一覧実装済み
GET/api/sessions/{session_id}/file特定のファイルを取得実装済み
GET/api/sessions/{session_id}/statusセッション進捗状況実装済み
GET/api/sessions/{session_id}/results全クロール結果実装済み
GET/api/sessions/{session_id}/screenshotsスクリーンショット一覧実装済み
メソッドパス説明状態
WS/stream/{session_id}WebSocketビューポートストリーム実装済み
GET/stream/{session_id}/mjpegMJPEGフォールバックストリーム実装済み
GET/stream/{session_id}/statusストリームセッションの状態実装済み
GET/stream/pool/statusブラウザプールの状態実装済み
メソッドパス説明状態
POST/mesh/joinピア参加 + ゴシップ発見実装済み
POST/mesh/heartbeat負荷メトリクス付きピアハートビート実装済み
POST/mesh/executeクロスノードツール実行(最大1ホップ)実装済み
POST/mesh/leaveピア離脱通知実装済み
GET/mesh/peers既知のピア + 健全性状態の一覧実装済み
GET/mesh/statusこのノードのメッシュ状態 + 負荷実装済み
メソッドパス説明状態
GET/healthヘルスチェック + ツール数 + メッシュ情報実装済み
GET/tools登録済みAHPツールの一覧実装済み
GET/site埋め込みランディングページ実装済み
GET/{tool_name}AHPツール実行(キャッチオール)実装済み
ツール説明状態
crawl_urlJavaScript注入による単一URLのMarkdown抽出実装済み
crawl_batch最大50URLのバッチ処理(統合あり)実装済み
raw_html変換なしで生HTMLを取得実装済み
download_fileクローラー経由でファイル(PDF等)をダウンロード実装済み
crawl_validateコンテンツ品質評価実装済み
crawl_searchローカルクロールキャッシュのあいまい検索実装済み
crawl_cache_listローカルキャッシュファイルの一覧実装済み
crawl_remote_searchリモートクローラーキャッシュを検索実装済み
crawl_remote_cache_listリモートキャッシュエントリの一覧実装済み
crawl_remote_cache_docリモートキャッシュドキュメントを取得実装済み
agent_run自律エージェントにタスクを送信(モードB)実装済み
agent_statusエージェント実行状況を確認実装済み
ghost_extractゴーストプロトコル: スクリーンショット + ビジョンAI抽出実装済み
mesh_peersメッシュピアとその健全性/負荷状態を一覧表示実装済み
mesh_statusこのノードのメッシュ状態と負荷メトリクスを取得実装済み
set_auth_token認証トークンを.wraithenvに保存実装済み
crawl_status設定と接続を報告実装済み
ファイル目的状態
types.pyRunState列挙型、StopReason、ToolCall、ToolResult、AssistantAction、RunConfig、RunContext、StepTrace、RunResult完了
errors.py型付きエラー: validation_error、policy_denied、tool_timeout、tool_unavailable、execution_error、provider_error、stop_condition完了
dispatcher.pyツール検証、タイムアウト適用(30秒)、リトライ(1回)、型付きエラー正規化完了
engine.py有界ループ: 計画→実行→観察→停止。EventBus統合。(RunResult, RunSummary)を返却完了
ghost.pyゴーストプロトコル: ブロック検出、スクリーンショット撮影、ビジョン抽出、自動トリガー完了
ファイル目的状態
base.pyLLMAdapter ABC、FallbackAdapter(障害時にローテーション)、ファクトリ関数完了
openai_adapter.pyOpenAI tool_callsマッピング、GPT-4oビジョン完了
anthropic_adapter.pyAnthropic tool_use/tool_resultブロック、Claude Sonnetビジョン完了
ollama_adapter.pyOllama HTTP /api/chat、llavaビジョン完了
状態
domain.pyドメイン許可リスト、RFC-1918/ループバック/リンクローカル拒否完了
gate.pyツール前・フェッチ前ポリシーチェック(PolicyVerdictを使用)完了
redaction.pyシークレットパターンの編集(APIキー、JWT、秘密鍵)完了
ファイル目的状態
events.pyEventBus + 7種類の型付きイベント: run_start、step_start、tool_dispatch、tool_result、policy_denied、step_end、run_end完了
trace.pyTraceCollector、RunSummaryのJSONシリアライズ、ストレージ経由のpersist_trace()/load_trace()完了
ファイル目的状態
agent_routes.pyPOST /api/agent/run、GET /api/agent/status/{run_id}。無効時は503を返却完了
routes.pyコアのcrawl/markdown/batch/cache RESTエンドポイント完了
job_routes.pyジョブCRUD、セッション状態、Cloud Tasksワーカー完了
jobs.pyJobType列挙型(AGENT_RUNを含む)、JobManager、JobProcessor完了
models.py全Pydanticモデル(AgentRunRequest/Responseを含む)完了
ファイル目的状態
models.pyワイヤープロトコルモデル: NodeInfo、NodeLoad、MeshToolRequest/Response、PeerState完了
auth.pyHMAC-SHA256トークン署名/検証(TTL 60秒)完了
client.py参加、ハートビート、離脱、execute_tool用httpx非同期クライアント完了
coordinator.pyライフサイクル、ピアテーブル、シードリトライ付きハートビートループ完了
routes.py/mesh/*エンドポイント – join、heartbeat、execute、leave、peers、status完了
router.py負荷スコアリング + ターゲット選択(純粋なロジック、I/Oなし)完了
dispatcher.py透過的ルーティングのためにローカルDispatcherをラップするMeshDispatcher完了
ファイル目的状態
config.py全環境変数(エージェント、プロバイダ、ゴースト、プロキシ、ステルス設定を含む)完了
storage.pyユーザー分割ストレージ(ローカルファイルシステム / GCS)完了
crawler.pyプロキシサポート付きPlaywrightクローリングエンジン完了
markdown.pyHTMLからMarkdownへの変換完了
browser.pyブラウザ自動化 – Chromium + Camoufoxエンジン完了
browser_pool.pyリース/返却パターンによる永続ブラウザプール完了
stream.pyCDPスクリーンキャスト → WebSocket/MJPEGリレー + インタラクティブコマンド完了
URLGrubCrawl4AIFirecrawlScrapyWinner
example.com39112831513831Grub
news.ycombinator.com423220414012038Grub
en.wikipedia.org507486626372368Grub
httpbin.org2831170176769Firecrawl
quotes.toscrape.com27512446471145Grub
URLnavcontentvisible_textmarkdowntotal
example.com35811140391
news.ycombinator.com38419132423
en.wikipedia.org369483821507
httpbin.org22927160283
quotes.toscrape.com23010271275
BatchGrubCrawl4AIFirecrawlScrapyWinner
10 URLs1940467032168680Grub
25 URLs408510479669225303Grub
50 URLs15604238701272936232Firecrawl