multi-search-engine
GitHub统一CLI并行查询Brave、Bing、DuckDuckGo等8大搜索引擎,聚合结果并标准化为JSON。适用于多引擎对比、事实核查及中英文检索,支持API密钥自动降级与错误记录,主要供下游深度研究技能使用。
Trigger Scenarios
Install
npx skills add opensquilla/opensquilla --skill multi-search-engine -g -y
SKILL.md
Frontmatter
{
"name": "multi-search-engine",
"homepage": "",
"metadata": {
"platform": {
"emoji": "🔍",
"requires": {
"anyBins": [
"python",
"python3"
]
}
}
},
"entrypoint": {
"args": [
"--query",
"{{ with.query | default(inputs.user_message) }}",
"--engines",
"{{ with.engines | default(['brave', 'duckduckgo']) | join(',') }}",
"--limit",
"{{ with.max_results | default(25) }}",
"--json"
],
"parse": "json",
"command": "python {baseDir}\/scripts\/search.py",
"timeout": 60
},
"provenance": {
"origin": "clawhub-mit0",
"license": "MIT-0",
"upstream_url": "https:\/\/clawhub.ai\/multi-search-engine",
"maintained_by": "OpenSquilla"
},
"description": "Query the web through multiple search engines (Brave, Tavily, SerpAPI, DuckDuckGo, Bing, Baidu, Sogou, 360) with a single CLI surface. Trigger when the user asks for a research search, fact lookup, source discovery, or wants to compare engines for coverage. The skill aggregates per-engine result lists and normalizes them into a uniform JSON shape for downstream skills (deep-research is the primary consumer). API-key engines gate themselves on the relevant environment variable; engines requiring no key always run."
}
multi-search-engine
A unified CLI for querying several web search engines in parallel and
returning a normalized result list. Built on httpx and beautifulsoup4
(both already in OpenSquilla default dependencies, so no extra install
beyond pip install opensquilla).
Use cases
- Building a
deep-researchround with diverse engine coverage - Fact-check a claim against >1 engine
- Compare what Bing returns vs DuckDuckGo for the same query
- Search Chinese-language sources via Baidu/Sogou/360 alongside global engines
Limitations
- A single engine sufficient → call its API directly instead
- Need headless-browser DOM rendering → this skill is HTTP-only
Quick start
python {baseDir}/scripts/search.py \
--query "openclaw skill registry" \
--engines duckduckgo,brave \
--limit 10 \
--json
Output:
{
"query": "...",
"results": [
{
"engine": "duckduckgo",
"title": "...",
"url": "https://...",
"snippet": "...",
"rank": 1
}
],
"errors": [
{"engine": "brave", "reason": "BRAVE_SEARCH_API_KEY/BRAVE_API_KEY not set; skipping"}
]
}
Engines
| Engine | Needs key | Key env var | Strength |
|---|---|---|---|
duckduckgo |
no | — | Privacy-friendly, no rate limit by default |
bing |
no | — | HTML scrape; respect rate limits |
baidu |
no | — | Chinese-language web |
sogou |
no | — | Chinese-language web |
360 |
no | — | Chinese-language web |
brave |
yes | BRAVE_SEARCH_API_KEY or legacy BRAVE_API_KEY |
High-quality results, generous free tier |
tavily |
yes | TAVILY_API_KEY |
Designed for AI agents, returns clean JSON |
serpapi |
yes | SERPAPI_API_KEY |
Aggregator across many engines |
The script never errors out when an API-key engine's key is missing — it
records a per-engine errors entry and continues with the rest. Pass
--strict to fail fast when any requested engine is unavailable.
Routing tips
The host should pick engines by language and availability:
- English queries →
duckduckgo,brave,bing(one or two for triangulation) - Chinese queries →
baiduplus optionallysogoufor cross-check - Time-sensitive (last 24h) →
brave(recency filter) ortavily - Long-tail academic → fall back to direct arXiv / Google Scholar; this skill targets general web search
engines.md has the full per-engine guidance.
Boundaries
- HTTP-only. JS-rendered pages will not be readable; use a headless-browser skill if needed.
- Scraping engines (DuckDuckGo, Bing, Baidu, Sogou, 360) are best-effort — HTML structure changes break them. The script logs parse failures individually and keeps the run going.
- Rate limiting is not handled inside the script. Calling the same engine 10x/sec from a loop will get blocked. Add jitter and back-off in the caller.
- Captcha-protected results are not bypassed. If an engine returns a challenge page, the parser will return zero results for that engine and log a warning.
Version History
- 7f72a32 Current 2026-07-05 18:38


