Lightweight multi-engine aggregated web search. No Docker, no server, no SearXNG instance required — just a single Python script that queries search engines directly.
26 engines across 9 categories, concurrent execution, JSON + compact text output.
Unlike other SearXNG skills that need a running SearXNG server, this skill:
config.yml to toggle categories, changes apply instantlyhttpx — HTTP client ( pip3 install httpx)lxml — HTML parser ( pip3 install lxml, pre-installed on macOS)socksio — for SOCKS proxy support ( pip3 install socksio)pyyaml — for config parsing ( pip3 install pyyaml; falls back to built-in parser)bash
# Install dependencies
pip3 install httpx lxml
# Search
python3 scripts/search.py "your query"
# List all engines
python3 scripts/search.py --list
bash
python3 scripts/search.py "query" # default (general + knowledge engines)
python3 scripts/search.py "query" -c dev # by category
python3 scripts/search.py "query" -c dev,academic # multiple categories
python3 scripts/search.py "query" -e github,arxiv # specific engines
python3 scripts/search.py "query" --all # all enabled engines
python3 scripts/search.py "query" -l zh-CN # Chinese results
python3 scripts/search.py "query" -n 5 # limit results
python3 scripts/search.py "query" --compact # title + url + snippet text output
python3 scripts/search.py --list # show all engines & categories
All paths are relative to this skill's directory.
ArgShortDefaultDescriptionqueryrequiredSearch query--engines``-eComma-separated engine names--categories``-cComma-separated categories--max-results``-n10Max results--lang``-lenLanguage code (e.g. en, zh-CN, de)--page``-p1Page number--proxyfrom configProxy URL (overrides config/env)--timeout12Timeout in seconds--allUse all enabled engines--compactHuman-readable text output--listList engines and exit--debugEnable debug logging
Without -e or -c, searches general + knowledge categories.
Edit config.yml in the skill directory to customize behavior:
yaml
# Proxy for engines that need it (Google, YouTube, Reddit, etc.)
# Supports: http, https, socks5, socks5h
# Leave empty to disable — proxy-required engines will fail silently.
proxy: "socks5h://127.0.0.1:1080"
# Category toggles
categories:
general: true # bing, brave, duckduckgo, google🌐, startpage, yahoo
knowledge: true # wikipedia, wikidata, wolframalpha🌐
dev: true # github, gitlab, stackoverflow, hackernews, reddit🌐, huggingface🌐, mdn
academic: true # arxiv, semantic_scholar, google_scholar🌐, crossref
news: false # bing_news, reuters
video: false # youtube🌐
images: false # unsplash
social: false # lemmy🌐
translate: false # lingva🌐
Some engines (marked with 🌐) require a proxy to access. Three ways to configure:
proxy: "your-proxy-url"HTTPS_PROXY=your-proxy-url--proxy your-proxy-url per searchPriority: CLI flag > config.yml > environment variable.
If no proxy is configured, 🌐-marked engines will fail silently and results from other engines are still returned.
The config file is read on every search call. No restart needed — just edit and save.
If config.yml is missing, the script falls back to a default set of engines: bing, brave, duckduckgo, wikipedia.
CategoryEnginesUse forgeneralbing, brave, duckduckgo, google🌐, startpage, yahooGeneral web searchknowledgewikipedia, wikidata, wolframalpha🌐Facts, definitions, calculationsdevgithub, gitlab, stackoverflow, hackernews, reddit🌐, huggingface🌐, mdnCode, repos, dev Q&A, AI modelsacademicarxiv, semantic_scholar, google_scholar🌐, crossrefPapers, citationsnewsbing_news, reutersCurrent eventsvideoyoutube🌐Video searchimagesunsplashFree stock photossociallemmy🌐Community discussionstranslatelingva🌐Translation
🌐 = requires proxy. Without proxy, these engines are skipped.
Default JSON:
json
{
"query": "search term",
"results": [
{"title": "...", "url": "...", "content": "...", "engines": ["bing","brave"], "score": 2}
],
"result_count": 15,
"elapsed": 2.1,
"engines_used": ["bing", "brave", "wikipedia"],
"errors": []
}
--compact outputs human-readable text: numbered title, URL, snippet, engine tags.
score = number of engines that returned this result. Higher = more relevant.
python3 scripts/search.py "topic" -n 5python3 scripts/search.py "image processing python" -e githubpython3 scripts/search.py "attention mechanism" -c academic -n 5python3 scripts/search.py "topic" -e hackernews,redditpython3 scripts/search.py "text-to-speech" -e huggingfacepython3 scripts/search.py "fetch API" -e mdn,stackoverflowpython3 scripts/search.py "大语言模型" -l zh-CN -n 5python3 scripts/search.py "AI regulation" -c news