Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
grubcrawler — 世界上最快的自主爬虫。重塑。再造。备战。 | Kitploit
工具/GitHubGitHub/deepbluedynamics/grubcrawler
OSINT (开源情报)侦察动态分析 (沙盒)Web代理与拦截信息收集Web安全渗透测试实用工具与框架机器学习红队网络爬虫反机器人
34761个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
GitHub
deepbluedynamics/grubcrawler

grubcrawler

世界上最快的自主爬虫。重塑。再造。备战。

查看仓库网站
Grub Crawler

License Python FastAPI Playwright MCP Ghost Protocol Live Stream Camoufox Proxy


具备反检测、视觉回退和点对点网格的智能网络爬虫。


端点 · 网格 · 反检测 · Ghost Protocol · 实时流 · MCP 工具 · 快速开始 · 基准测试 · 架构


全栈网络爬虫引擎,支持 JavaScript 渲染、Camoufox 反检测浏览器、每请求代理路由和自主代理循环。通过原生 Rust 提取引擎将页面转换为干净的 Markdown。当常规爬虫被 Cloudflare、验证码或 JavaScript 墙阻挡时,Ghost Protocol 会截取屏幕截图并通过视觉 AI(Claude、GPT-4o 或 Ollama)提取内容。支持单个会话中跨 OpenAI、Anthropic 和 Ollama 的多提供商 LLM 编排。节点通过基于 gossip 的点对点网格进行协调,实现分布式爬取。


为什么选择 Grub

我们整合了每个主要爬虫的功能——并添加了它们都不具备的功能。

自托管爬虫

云/托管爬虫

只有 Grub 具备 Ghost Protocol——当标准爬取失败时,自动进行基于视觉的回退:截取被阻挡页面的截图并通过 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:~
每次迭代强制执行的停止条件:
- `max_steps` (default: 12)
- `max_wall_time` (default: 90s)
- `max_failures` (default: 3)
- `no_op_loop` (3 consecutive empty responses)
- `policy_denied` (blocked tool/domain)
- `completed` (agent responds with text)

## 反检测

三层反检测机制叠加在一起。预防在阻止发生前就将其拦截。幽灵协议则处理之后的后续。

### Camoufox Engine

可插拔的反检测浏览器,具有C++级别的指纹欺骗。无需手动调整User-Agent —— Camoufox在浏览器级别为每个上下文生成真实的指纹,包括canvas、WebGL、字体和navigator属性。```bash
# Switch engine (default: chromium)
BROWSER_ENGINE=camoufox

每请求代理

将爬虫流量路由通过住宅、数据中心或自定义代理池。支持基于环境变量的默认值进行每请求覆盖。完全兼容 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

Ghost Protocol

当爬取结果触发反爬虫拦截(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 时,检测到拦截后自动触发。

Mesh

代理之间的对话。每个 Grub 实例既是工人也是协调者。本地节点将任务卸载到云端,云端将任务委托给本地。工具调用透明地跨线传输。``` Node A (local) Node B (cloud) ┌─────────────┐ ┌─────────────┐ │ AgentEngine │ │ AgentEngine │ │ ↓ │ │ ↓ │ │ MeshDispatcher ──── HTTP ────→ MeshDispatcher │ │ ↓ │ │ ↓ │ │ Dispatcher │ │ Dispatcher │ │ ↓ │ │ ↓ │ │ ToolRegistry │ │ ToolRegistry │ └─────────────┘ └─────────────┘ ↕ heartbeat (15s) ↕ └────────────────────────────────┘

root@kitploit:~
**工作原理:**
- **发现(Discovery)** — 节点通过种子节点列表加入,然后通过gossip(1跳)了解其他节点
- **心跳(Heartbeat)** — 每15秒,节点交换负载指标。3次未响应视为不健康。2分钟未响应则移除
- **路由(Routing)** — MeshDispatcher根据负载、地域亲和性对所有节点进行评分,然后将工具调用路由到最佳节点
- **最大1跳** — 仅节点A→B,不允许A→B→C。防止路由环路
- **本地回退** — 若远程执行失败,则回退到本地Dispatcher
- **HMAC认证** — 所有网格流量均使用共享密钥签名(SHA-256, 60s TTL)

### 在本地运行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 内存。

快速开始

本地开发```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

提交 Agent 任务```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`(默认值:0.0.0.0)
- `PORT`(默认值:6792)
- `DEBUG`(默认值:false)

### 存储
- `STORAGE_PATH`(默认值:./storage)
- `RUNNING_IN_CLOUD`(默认值:false)
- `GCS_BUCKET_NAME`
- `GOOGLE_CLOUD_PROJECT`

### 认证
- `DISABLE_AUTH`(默认值:false)
- `GNOSIS_AUTH_URL`(默认值:http://gnosis-auth:5000)

### 浏览器引擎
- `BROWSER_ENGINE` — chromium | camoufox(默认值:chromium)

### 爬取
- `MAX_CONCURRENT_CRAWLS`(默认值:5)
- `CRAWL_TIMEOUT`(默认值:30)
- `ENABLE_JAVASCRIPT`(默认值:true)
- `ENABLE_SCREENSHOTS`(默认值:false)

### 代理
- `PROXY_SERVER` — 代理 URL(例如 http://proxy:10001)
- `PROXY_USERNAME`
- `PROXY_PASSWORD`
- `PROXY_BYPASS` — 逗号分隔的绕过列表

### 隐身
- `STEALTH_ENABLED`(默认值:false)— playwright-stealth 补丁
- `BLOCK_TRACKING_DOMAINS`(默认值:false)— 阻止分析/跟踪请求

### 代理(模式 B)
- `AGENT_ENABLED`(默认值:false)
- `AGENT_MAX_STEPS`(默认值:12)
- `AGENT_MAX_WALL_TIME_MS`(默认值:90000)
- `AGENT_MAX_FAILURES`(默认值:3)
- `AGENT_ALLOWED_TOOLS` — 逗号分隔的白名单
- `AGENT_ALLOWED_DOMAINS` — 逗号分隔的白名单
- `AGENT_BLOCK_PRIVATE_RANGES`(默认值:true)
- `AGENT_REDACT_SECRETS`(默认值:true)

### LLM 提供商
- `AGENT_PROVIDER` — openai | anthropic | ollama(默认值:openai)
- `OPENAI_API_KEY`
- `OPENAI_MODEL`(默认值:gpt-4.1-mini)
- `ANTHROPIC_API_KEY`
- `ANTHROPIC_MODEL`(默认值:claude-3-5-sonnet-latest)
- `OLLAMA_BASE_URL`(默认值:http://localhost:11434)
- `OLLAMA_MODEL`(默认值:llama3.1:8b-instruct)

### 幽灵协议
- `AGENT_GHOST_ENABLED`(默认值:false)
- `AGENT_GHOST_AUTO_TRIGGER`(默认值:true)
- `AGENT_GHOST_VISION_PROVIDER` — 继承自 AGENT_PROVIDER
- `AGENT_GHOST_MAX_IMAGE_WIDTH`(默认值:1280)

### 网格
- `MESH_ENABLED`(默认值:false)— 主开关
- `MESH_PEERS` — 逗号分隔的种子对等节点 URL
- `MESH_NODE_NAME` — 人类可读的名称(默认值:主机名)
- `MESH_SECRET` — 用于节点间认证的共享 HMAC 密钥
- `MESH_ADVERTISE_URL` — 其他对等节点访问本节点的 URL
- `MESH_PREFER_LOCAL`(默认值:true)— 偏向本地执行
- `MESH_HEARTBEAT_INTERVAL_S`(默认值:15)
- `MESH_PEER_TIMEOUT_S`(默认值:45)— 超过此时间标记为不健康
- `MESH_PEER_REMOVE_S`(默认值:120)— 超过此时间从对等节点表中移除
- `MESH_REMOTE_TIMEOUT_MS`(默认值:35000)— 远程工具调用超时

### 直播流
- `BROWSER_POOL_SIZE`(默认值:1)
- `BROWSER_STREAM_ENABLED`(默认值:false)
- `BROWSER_STREAM_QUALITY`(默认值:25)— JPEG 质量 1-100
- `BROWSER_STREAM_MAX_WIDTH`(默认值:854)
- `BROWSER_STREAM_MAX_LEASE_SECONDS`(默认值:300)

## 响应契约

`POST /api/markdown` 返回:

`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` — 反机器人/CAPTCHA/挑战
- `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 速度(毫秒,越低越好)

Grub 在 5 场单 URL 速度赛中赢得 4 场。Markdown 转换通过原生 Rust 引擎(grub_md)在 0-21 毫秒内完成。

Grub 阶段分解(服务器端毫秒)

导航占主导地位;得益于 Rust 引擎,大多数页面上的 Markdown 转换时间低于 1 毫秒。

批量吞吐量(毫秒,越低越好)

Grub 在 3 个批次大小中赢得 2 个。每个 URL 成本:Grub 为 163-312 毫秒,其他为 255-477 毫秒。

如何运行```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:~
## Development Status

### Phase 1: Core Infrastructure ✅
### Phase 2: Crawling ✅
### Phase 3: Agent Module ✅
- [x] Agent core — state machine, types, errors (W1)
- [x] Unified tool contract — dispatcher with timeout/retry (W2)
- [x] Policy gates — domain allowlist, private-range deny, redaction (W3)
- [x] Observability — EventBus, TraceCollector, RunSummary persistence (W4)
- [x] API wiring — `/api/agent/run`, `/api/agent/status`, JobType.AGENT_RUN (W5)
- [x] Provider adapters — OpenAI, Anthropic, Ollama with fallback (W6)
- [x] Config flags — agent, provider, ghost, stream settings (W7)

### Phase 4: Ghost Protocol ✅
- [x] Cloak-mode trigger detection (W8)
- [x] Screenshot capture pipeline (W8)
- [x] Vision extraction via Claude/GPT-4o (W8)
- [x] Fallback chain in engine (W8)
- [x] Ghost tool for external callers (W8)
- [x] Ghost MCP tool + REST endpoint (W8)

### Phase 5: Live Browser Stream ✅
- [x] Persistent browser pool with lease/return (W9)
- [x] CDP screencast relay (W9)
- [x] WebSocket endpoint with interactive commands (W9)
- [x] MJPEG fallback stream (W9)
- [x] Stream status + pool status endpoints (W9)

### Phase 5.5: Anti-Detection ✅
- [x] Camoufox anti-detect browser engine (W10)
- [x] Per-request proxy with env fallback (W10)
- [x] Stealth patches for Chromium (W10)
- [x] Tracker/analytics domain blocking (W10)
- [x] Anthropic vision format detection fix (W10)

### Phase 6: Mesh Coordinator ✅
- [x] Peer discovery with gossip (1-hop) (W11)
- [x] HMAC-SHA256 inter-node auth (W11)
- [x] Heartbeat loop with load metrics + seed retry (W11)
- [x] MeshDispatcher — transparent cross-node tool routing (W12)
- [x] Load-based scoring with locality/affinity bonus (W12)
- [x] Deploy scripts — local, mesh, Cloud Run (W12)
- [x] Docker Compose 2-node mesh topology (W12)
- [x] Embedded landing page (grub-site) (W12)

### Phase 7: Performance + Hardening
- [x] Rust markdown engine (`grub_md`) — PyO3 native extension, sub-ms conversion
- [x] Combat arena — automated benchmarks vs Crawl4AI, Firecrawl, Scrapy
- [x] Unit test suite — 176 tests across all modules
- [ ] Error handling improvements
- [ ] Monitoring and alerting

See [MASTER_PLAN.md](https://github.com/deepbluedynamics/grubcrawler/blob/main/MASTER_PLAN.md) for the full architecture plan.

## License

Grub Crawler Project License
下载工具
特性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❌❌❌✅ gossip 协议
策略执行❌❌❌✅ 域名门控 + 脱敏
提示注入防御❌❌❌✅ 隔离 + 可视文本差异
许可证Apache 2.0AGPL-3.0BSD专有
定价免费免费–$333/月免费自托管
特性BrowserbaseScrapflyFirecrawl 云Grub
JS 渲染✅ 定制 Chromium✅ 专有✅ Playwright✅ Playwright
反检测浏览器✅ 定制 Chromium✅ 专有✅ 云隐身✅ Camoufox
幽灵协议❌❌❌✅ 自动回退
每请求代理✅ 托管✅ 1.3亿+ IP✅ 云管理✅ 每请求
隐身补丁✅ 内建✅ 内建✅ 内建✅ 可选
代理循环✅ Stagehand⚠️ 通过集成✅ /agent✅ 有界状态机
实时浏览器流✅ iFrame + CDP✅ CDP✅ Live View✅ WS + MJPEG
Markdown 输出✅ 通过 MCP✅ 内建✅ 核心✅ Rust 引擎
MCP 工具✅ 官方✅ 官方✅ 官方✅ 15 个工具
网格 P2P❌❌❌✅ gossip 协议
策略执行❌❌❌✅ 域名门控 + 脱敏
提示注入防御❌❌❌✅ 隔离 + 可视文本差异
可自托管❌ 仅云❌ 仅云⚠️ 有限 OSS✅ 完整 + Cloud Run
定价免费–$99/月按使用量免费–$333/月自托管
方法路径描述状态
POST/api/crawl单 URL 爬取(HTML + Markdown)Live
POST/api/markdown单/多 URL Markdown 提取Live
POST/api/batch批量爬取(带作业跟踪)Live
POST/api/raw原始 HTML 提取(无 Markdown)Live
GET/view浏览器渲染的 HTML 查看器Live
GET/download通过爬虫下载文件(PDF 等)Live
方法路径描述状态
POST/api/agent/run向自主代理循环提交任务Live
GET/api/agent/status/{run_id}检查代理运行状态 / 加载跟踪Live
POST/api/agent/ghostGhost Protocol:截图 + 视觉提取Live
方法路径描述状态
POST/api/jobs/create通用作业提交Live
POST/api/jobs/crawl提交单 URL 爬取作业Live
POST/api/jobs/batch-crawl提交批量爬取作业Live
POST/api/jobs/markdown提交纯 Markdown 作业Live
POST/api/jobs/process-jobCloud Tasks 工作节点端点Live
POST/api/wraithAI 驱动的爬取工作流占位
方法路径描述状态
POST/api/cache/search模糊搜索缓存内容Live
GET/api/cache/list列出缓存文档元数据Live
GET/api/cache/doc/{doc_id}获取一个缓存文档Live
POST/api/cache/upsert更新/插入缓存条目Live
POST/api/cache/prune按 TTL/域名清理缓存条目Live
方法路径描述状态
GET/api/sessions/{session_id}/files列出会话文件Live
GET/api/sessions/{session_id}/file获取特定文件Live
GET/api/sessions/{session_id}/status会话进度状态Live
GET/api/sessions/{session_id}/results所有爬取结果Live
GET/api/sessions/{session_id}/screenshots列出截图Live
方法路径描述状态
WS/stream/{session_id}WebSocket 视口流Live
GET/stream/{session_id}/mjpegMJPEG 回退流Live
GET/stream/{session_id}/status流会话状态Live
GET/stream/pool/status浏览器池状态Live
方法路径描述状态
POST/mesh/join节点加入 + gossip 发现Live
POST/mesh/heartbeat节点心跳(含负载指标)Live
POST/mesh/execute跨节点工具执行(最多1跳)Live
POST/mesh/leave节点离开通知Live
GET/mesh/peers列出已知节点 + 健康状态Live
GET/mesh/status本节点网格状态 + 负载Live
方法路径描述状态
GET/health健康检查 + 工具数量 + 网格信息Live
GET/tools列出已注册的 AHP 工具Live
GET/site内嵌着陆页Live
GET/{tool_name}执行 AHP 工具(通配)Live
工具描述状态
crawl_url单 URL Markdown 提取,支持 JS 注入Live
crawl_batch批量处理最多 50 个 URL,附带汇总Live
raw_html原始 HTML 获取,不转换Live
download_file通过爬虫下载文件(PDF 等)Live
crawl_validate内容质量评估Live
crawl_search模糊搜索本地爬取缓存Live
crawl_cache_list列出本地缓存文件Live
crawl_remote_search搜索远程爬虫缓存Live
crawl_remote_cache_list列出远程缓存条目Live
crawl_remote_cache_doc获取远程缓存文档Live
agent_run向自主代理提交任务(模式 B)Live
agent_status检查代理运行状态Live
ghost_extractGhost Protocol:截图 + 视觉 AI 提取Live
mesh_peers列出网格节点及其健康/负载状态Live
mesh_status获取本节点网格状态和负载指标Live
set_auth_token保存认证令牌到 .wraithenvLive
crawl_status报告配置和连接Live
文件用途状态
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有界循环:plan -> execute -> observe -> stop。集成 EventBus。返回 (RunResult, RunSummary)完成
ghost.pyGhost Protocol:阻挡检测、截图捕获、视觉提取、自动触发完成
文件用途状态
base.pyLLMAdapter 抽象基类、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核心爬取/Markdown/批量/缓存 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 令牌签名/验证,60 秒 TTL完成
client.pyhttpx 异步客户端,用于加入、心跳、离开、execute_tool完成
coordinator.py生命周期、节点表、带种子重试的心跳循环完成
routes.py/mesh/* 端点——加入、心跳、执行、离开、节点、状态完成
router.py负载评分 + 目标选择(纯逻辑,无 I/O)完成
dispatcher.pyMeshDispatcher 包装本地 Dispatcher,实现透明路由完成
文件用途状态
config.py所有环境变量,包括代理 + 提供商 + ghost + 代理 + 隐身配置完成
storage.py用户分区存储(本地文件系统 / GCS)完成
crawler.pyPlaywright 爬取引擎,支持代理完成
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