New to Claude Skills? Learn how to install them →

nousresearch on GitHub

SearXNG Search

Free

Meta-search across 70+ engines without an API key.

Get this skill

Free · Opens the source repo

What SearXNG Search does

SearXNG Search is a versatile tool that allows users to perform meta-search queries across more than 70 search engines simultaneously. This skill leverages the SearXNG platform, which is designed to respect user privacy by not requiring an API key for public instances. Users can easily configure the skill by setting the SEARXNG_URL environment variable to point to either a public or self-hosted instance of SearXNG. This flexibility ensures that users can enjoy the benefits of a comprehensive search experience while maintaining control over their data.

The skill automatically activates as a fallback option when the primary web search toolset is not configured. This means that developers and designers can rely on SearXNG Search to provide search capabilities even in scenarios where other search tools are unavailable. The detection flow built into the skill checks the availability of the SearXNG instance before executing searches, ensuring that users receive accurate results without unnecessary delays.

For those interested in using the SearXNG Search skill, it supports two primary methods for querying: a command-line interface (CLI) using curl and a Python API via the requests library. Both methods allow for customizable search parameters, including the ability to specify search engines, result limits, and categories. Additionally, the skill provides examples for parsing JSON results, making it easier for users to extract relevant information from search queries.

Whether you are a developer looking to integrate search functionality into your applications or a designer seeking a powerful search tool, SearXNG Search offers a robust solution that prioritizes privacy and flexibility. Its straightforward setup and extensive capabilities make it a valuable addition to any toolkit.

When to use it

Use this skill when you need to perform comprehensive searches across multiple engines without the hassle of API key management.

When not to use it

This skill may not be suitable if you require full page content extraction, as it only returns snippets and URLs.

What you can build with it

Quick Privacy-Focused Searches

Perform searches across multiple engines without worrying about API keys, ensuring privacy.

Self-Hosted Search Solutions

Set up your own SearXNG instance for complete control over search results and data.

Fallback Search Capability

Automatically use SearXNG when primary search tools are unavailable, ensuring continuous access to search.

How to install SearXNG Search

View source

1. Install with the skills CLI

npx skills add nousresearch/hermes-agent/searxng-search --agent claude-code

2. Or install it manually

Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.

Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs

Inside SKILL.md

Written by nousresearch

SearXNG Search

Free meta-search using SearXNG — a privacy-respecting, self-hosted search aggregator that queries 70+ search engines simultaneously.

No API key required when using a public instance. Can also be self-hosted for full control. Automatically appears as a fallback when the main web search toolset (FIRECRAWL_API_KEY) is not configured.

Configuration

SearXNG requires a SEARXNG_URL environment variable pointing to your SearXNG instance:

# Public instances (no setup required)
SEARXNG_URL=https://searxng.example.com

# Self-hosted SearXNG
SEARXNG_URL=http://localhost:8888

If no instance is configured, this skill is unavailable and the agent falls back to other search options.

Detection Flow

Check what is actually available before choosing an approach:

# Check if SEARXNG_URL is set and the instance is reachable
curl -s --max-time 5 "${SEARXNG_URL}/search?q=test&format=json" | head -c 200

Decision tree:

  1. If SEARXNG_URL is set and the instance responds, use SearXNG
  2. If SEARXNG_URL is unset or unreachable, fall back to other available search tools
  3. If the user wants SearXNG specifically, help them set up an instance or find a public one

Method 1: CLI via curl (Preferred)

Use curl via terminal to call the SearXNG JSON API. This avoids assuming any particular Python package is installed.

# Text search (JSON output)
curl -s --max-time 10 \
  "${SEARXNG_URL}/search?q=python+async+programming&format=json&engines=google,bing&limit=10"

# With Safesearch off
curl -s --max-time 10 \
  "${SEARXNG_URL}/search?q=example&format=json&safesearch=0"

# Specific categories (general, news, science, etc.)
curl -s --max-time 10 \
  "${SEARXNG_URL}/search?q=AI+news&format=json&categories=news"

Common CLI Flags

FlagDescriptionExample
qQuery string (URL-encoded)q=python+async
formatOutput format: json, csv, rssformat=json
enginesComma-separated engine namesengines=google,bing,ddg
limitMax results per engine (default 10)limit=5
categoriesFilter by categorycategories=news,science
safesearch0=none, 1=moderate, 2=strictsafesearch=0
time_rangeFilter: day, week, month, yeartime_range=week

Parsing JSON Results

# Extract titles and URLs from JSON
curl -s --max-time 10 "${SEARXNG_URL}/search?q=fastapi&format=json&limit=5" \
  | python3 -c "
import json, sys
data = json.load(sys.stdin)
for r in data.get('results', []):
    print(r.get('title',''))
    print(r.get('url',''))
    print(r.get('content','')[:200])
    print()
"

Returns per result: title, url, content (snippet), engine, parsed_url, img_src, thumbnail, author, published_date

Method 2: Python API via requests

Use the SearXNG REST API directly from Python with the requests library:

import os, requests, urllib.parse

base_url = os.environ.get("SEARXNG_URL", "")
if not base_url:
    raise RuntimeError("SEARXNG_URL is not set")

query = "fastapi deployment guide"
params = {
    "q": query,
    "format": "json",
    "limit": 5,
    "engines": "google,bing",
}

resp = requests.get(f"{base_url}/search", params=params, timeout=10)
resp.raise_for_status()
data = resp.json()

for r in data.get("results", []):
    print(r["title"])
    print(r["url"])
    print(r.get("content", "")[:200])
    print()

Self-Hosting SearXNG

To run your own SearXNG instance:

# Using Docker
docker run -d -p 8888:8080 \
  -v $(pwd)/searxng:/etc/searxng \
  searxng/searxng:latest

# Then set
SEARXNG_URL=http://localhost:8888

Or install via pip:

pip install searxng
# Edit /etc/searxng/settings.yml
searxng-run

Public SearXNG instances are available at:

  • https://searxng.example.com (replace with any public instance)

Workflow: Search then Extract

SearXNG returns titles, URLs, and snippets — not full page content. To get full page content, search first and then extract the most relevant URL with web_extract, browser tools, or curl.

# Search for relevant pages
curl -s "${SEARXNG_URL}/search?q=fastapi+deployment&format=json&limit=3"
# Output: list of results with titles and URLs

# Then extract the best URL with web_extract

Limitations

  • Instance availability: If the SearXNG instance is down or unreachable, search fails. Always check SEARXNG_URL is set and the instance is reachable.
  • No content extraction: SearXNG returns snippets, not full page content. Use web_extract, browser tools, or curl for full articles.
  • Rate limiting: Some public instances limit requests. Self-hosting avoids this.
  • Engine coverage: Available engines depend on the SearXNG instance configuration. Some engines may be disabled.
  • Results freshness: Meta-search aggregates external engines — result freshness depends on those engines.

Troubleshooting

ProblemLikely CauseWhat To Do
SEARXNG_URL not setNo instance configuredUse a public SearXNG instance or set up your own
Connection refusedInstance not running or wrong URLCheck the URL is correct and the instance is running
Empty resultsInstance blocks the queryTry a different instance or self-host
Slow responsesPublic instance under loadSelf-host or use a less-loaded public instance
json format not supportedOld SearXNG versionTry format=rss or upgrade SearXNG

Pitfalls

  • Always set SEARXNG_URL: Without it, the skill cannot function.
  • URL-encode queries: Spaces and special characters must be URL-encoded in curl, or use urllib.parse.quote() in Python.
  • Use format=json: The default format may not be machine-readable. Always request JSON explicitly.
  • Set a timeout: Always use --max-time or timeout= to avoid hanging on unreachable instances.
  • Self-hosting is best: Public instances may go down, rate-limit, or block. A self-hosted instance is reliable.

Instance Discovery

If SEARXNG_URL is not set and the user asks about SearXNG, help them either:

  1. Find a public SearXNG instance (search for "public searxng instance")
  2. Set up their own with Docker or pip

Public instances are listed at: https://searxng.org/

Frequently asked questions about SearXNG Search

Similar skills