WebSearch-Openclaw
/install searxng-websearch
SearXNG Web Search Skill
A skill for searching the web and fetching pages via a self-hosted SearXNG instance. Three entry-point scripts cover the main use cases:
| Script | Purpose |
|---|---|
websearch.py |
Single query, structured results |
fetch_page.py |
Fetch and extract text from one URL |
deep_research.py |
Multi-query research with page fetching and ranking |
Environment Setup
All scripts read configuration from a .env file (or real environment variables).
Copy _env → .env and fill in your values:
cp _env .env
.env reference
| Variable | Default | Description |
|---|---|---|
SEARXNG_URL |
http://localhost:8080 |
Base URL of your SearXNG instance |
SEARXNG_LANGUAGE |
en |
Default search language |
SEARXNG_SAFE_SEARCH |
0 |
0 = off, 1 = moderate, 2 = strict |
SEARXNG_TIMEOUT |
20 |
HTTP timeout in seconds |
CLI override — every script now also accepts
--searxng-urlto override the env value for one-off runs without editing.env.
Quick Start
Install dependencies
pip install requests beautifulsoup4 lxml python-dotenv
Install PATH shims (recommended — fixes CWD issues in OS)
bash ~/.openclaude/skills/searxng-websearch/install.sh
# reload shell, then:
wsearch "Claude Sonnet 4 release notes" --format agent
wfetch https://example.com --max-chars 3000
wresearch "transformer attention mechanisms" --fetch-top-pages 3
Or call directly with full path (no install needed)
SKILL=~/.openclaude/skills/searxng-websearch
python3 "$SKILL/websearch.py" "Claude Sonnet 4 release notes" --format agent
python3 "$SKILL/fetch_page.py" https://example.com --max-chars 3000
python3 "$SKILL/deep_research.py" "transformer attention mechanisms" --fetch-top-pages 3
Script Reference
websearch.py
python websearch.py \x3Cquery> [options]
Options:
--searxng-url URL SearXNG base URL (overrides SEARXNG_URL env var)
--category CATEGORY general | images | news | science | files |
social_media | map | music | videos | it
(default: general)
--max-results N Number of results to return (default: 5)
--language LANG Language code, e.g. en, de, fr
--safe-search 0|1|2 Safe-search level
--page N Result page number (default: 1)
--time-range RANGE day | week | month | year
--format FORMAT markdown | text | json | agent (default: markdown)
fetch_page.py
python fetch_page.py \x3Curl> [options]
Options:
--searxng-url URL Unused here but accepted for consistency
--max-chars N Max characters to print (default: 5000)
deep_research.py
python deep_research.py \x3Ctopic> [options]
Options:
--searxng-url URL SearXNG base URL (overrides SEARXNG_URL env var)
--max-results N Results per sub-query (default: 4)
--fetch-top-pages N Number of top pages to fetch (default: 3)
--max-chars N Max chars per fetched page (default: 2500)
--output FORMAT markdown | text (default: markdown)
Source Ranking (deep_research.py)
Pages are scored before fetching so the most authoritative content is prioritised:
| Domain signal | Points |
|---|---|
github.com / gitlab.com |
+5 |
arxiv.org / openreview.net |
+5 |
docs.* / readthedocs.* |
+4 |
research / paper in domain |
+3 |
| Has a publication date | +1 |
| Has a snippet | +1 |
⚠️ Critical: How to Invoke These Scripts (OpenClaude / Claude Code)
NEVER use cd before calling a script. Each Bash() call spawns a fresh shell;
cd skill-dir && python3 script.py silently resets the CWD and the script never runs.
Always call scripts by their full absolute path in a single command:
# ✅ CORRECT — full path, no cd
python3 ~/.openclaude/skills/searxng-websearch/websearch.py "my query" --format agent
# ✅ CORRECT — SKILL_DIR variable makes it readable
SKILL_DIR=~/.openclaude/skills/searxng-websearch
python3 "$SKILL_DIR/websearch.py" "my query" --format agent
# ❌ WRONG — cd resets on the next Bash() call
cd ~/.openclaude/skills/searxng-websearch && python3 websearch.py "my query"
If the skill path is unknown, resolve it first:
SKILL_DIR=$(find ~/.openclaude/skills -name "websearch.py" -printf '%h' -quit 2>/dev/null \
|| find ~/skills -name "websearch.py" -printf '%h' -quit 2>/dev/null)
python3 "$SKILL_DIR/websearch.py" "my query" --format agent
Tips for Claude
- Run
websearch.pywith--format agentwhen you need compact, token-efficient context to pass back to the model. - For broad topics, prefer
deep_research.py— it fans out into sub-queries automatically. - If SearXNG is unreachable,
deep_research.pyexits with a clear error message; check thatSEARXNG_URLis correct and the instance is running. - Pipe markdown output into a file for later use:
python3 ~/.openclaude/skills/searxng-websearch/deep_research.py "RAG retrieval strategies" > research.md
- Make sure OpenClaw is installed (local or Docker)
- Run the install command in chat:
/install searxng-websearch - After installation, invoke the skill by name or use
/searxng-websearch - Provide required inputs per the skill's parameter spec and get structured output
What is WebSearch-Openclaw?
Use this skill whenever the user wants to search the web, do research on a topic, fetch a webpage, or gather information from online sources using a self-hos... It is an AI Agent Skill for Claude Code / OpenClaw, with 80 downloads so far.
How do I install WebSearch-Openclaw?
Run "/install searxng-websearch" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.
Is WebSearch-Openclaw free?
Yes, WebSearch-Openclaw is completely free, licensed under MIT-0. You can download, install and use it at no cost.
Which platforms does WebSearch-Openclaw support?
WebSearch-Openclaw is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).
Who created WebSearch-Openclaw?
It is built and maintained by Mr.ML Learner (@mr-ds-ml-85); the current version is v1.0.0.