Searxng Web Search
Scanned@noblepayne
npx machina-cli add skill @noblepayne/searxng-local-search --openclawSearXNG Web Search
Search the web using a self-hosted SearXNG instance. This skill provides access to web search results through the SearXNG JSON API, with built-in rate limiting, error handling, and result formatting.
When to Use
Use this skill when you need to:
- Find current information or recent news
- Research topics beyond your knowledge cutoff
- Look up documentation or technical references
- Verify facts or check current status
- Find URLs or resources on specific topics
- Search for code examples or solutions
Configuration
Set the SEARXNG_URL environment variable to your SearXNG instance:
export SEARXNG_URL="http://localhost:8888"
Or use the default (http://localhost:8888) if not set.
Usage
Execute the search script with your query:
bb scripts/search.clj "your search query"
Advanced Options
Pass additional parameters as JSON:
bb scripts/search.clj "your query" '{"category": "news", "time_range": "day", "num_results": 10}'
Available options:
category- Filter by category: general, news, images, videos, it, sciencetime_range- Time filter: day, week, month, yearlanguage- Language code (default: en)num_results- Number of results to return (default: 5)
Output Format
The script returns formatted search results as text:
Search Results for "your query"
Found 42 total results
1. Result Title [Score: 1.85]
URL: https://example.com/page
Description snippet from the page...
Engines: google, bing
2. Another Result [Score: 1.62]
...
Error Handling
The script handles common errors gracefully:
- Network timeouts (30s timeout)
- SearXNG unavailable (clear error message)
- Invalid queries (error details)
- Rate limiting (429 responses)
- Empty results (informative message)
Rate Limiting
The script implements basic rate limiting:
- Minimum 1 second between requests
- Uses filesystem-based state (
.searxng-last-request) - Prevents accidental spam
Examples
Basic Search
bb scripts/search.clj "NixOS configuration"
News Search
bb scripts/search.clj "AI developments" '{"category": "news", "time_range": "week"}'
Technical Search
bb scripts/search.clj "babashka http client" '{"category": "it", "num_results": 3}'
Recent Results Only
bb scripts/search.clj "product launch" '{"time_range": "day"}'
Troubleshooting
"SEARXNG_URL not set"
- Set the environment variable:
export SEARXNG_URL="http://localhost:8888"
Connection timeout
- Check that SearXNG is running:
curl $SEARXNG_URL/search?q=test&format=json - Verify firewall settings
- Check service status:
systemctl status searx
Empty results
- Try a broader query
- Remove filters and try again
- Check SearXNG logs:
journalctl -u searx -n 50
Rate limit errors
- Wait a few seconds between searches
- The script enforces minimum 1s delay automatically
Implementation Notes
The search script (scripts/search.clj) uses:
babashka.http-clientfor HTTP requests- Clojure's
cheshire.corefor JSON parsing - Filesystem-based rate limiting
- 30-second timeout with proper error messages
- Result scoring and sorting for best results first
For detailed API documentation, see references/api-guide.md.
Overview
SearXNG Web Search queries a self-hosted SearXNG API to return ranked results with titles, URLs, and content snippets. It’s ideal for current information, research topics, documentation lookup, and fact-checking beyond your knowledge cutoff.
How This Skill Works
The skill sends your query to SEARXNG_URL via the JSON API, then handles HTTP requests with babashka.http-client, applies built-in rate limiting, and formats the results with scores, titles, URLs, and snippets for easy scanning.
When to Use It
- Find current information or recent news
- Research topics beyond your knowledge cutoff
- Look up documentation or technical references
- Verify facts or check current status
- Find URLs or resources on specific topics
Quick Start
- Step 1: Set the SearXNG URL: export SEARXNG_URL="http://localhost:8888"
- Step 2: Run a query: bb scripts/search.clj "your search query"
- Step 3: Optional: pass filters as JSON like: bb scripts/search.clj "your query" '{"category": "news", "time_range": "week"}'
Best Practices
- Set SEARXNG_URL correctly in your environment
- Use category, time_range, and language filters to narrow results
- Tune num_results to balance breadth and speed
- Rely on the description snippets to judge relevance
- Respect rate limits (minimum 1s between requests, tracked by a local state file)
Example Use Cases
- NixOS configuration search (basic)
- AI developments — news search with category: news and time_range: week
- babashka http client — IT category, num_results: 3
- product launch — time_range: day
- Look up library documentation (general documentation search)