home / skills / openclaw / skills / searxng-local

This skill lets you search the web via a self-hosted SearXNG instance, delivering privacy-preserving, multi-engine results for quick, secure queries.

npx playbooks add skill openclaw/skills --skill searxng-local

Review the files below or copy the command above to add this skill to your agents.

Files (2)
SKILL.md
3.7 KB
---
name: searxng
description: Search the web using a self-hosted SearXNG instance. Privacy-respecting metasearch that aggregates results from multiple engines.
metadata:
  clawdbot:
    config:
      optionalEnv:
        - SEARXNG_URL
---

# SearXNG Search Skill

Search the web using your self-hosted SearXNG instance. Privacy-respecting metasearch that aggregates results from Google, DuckDuckGo, Brave, Startpage, and 70+ other engines.

## Prerequisites

SearXNG running locally or on a server. Quick Docker setup:

```bash
mkdir -p ~/Projects/searxng/searxng
cd ~/Projects/searxng

# Create docker-compose.yml
cat > docker-compose.yml << 'EOF'
services:
  searxng:
    image: searxng/searxng:latest
    container_name: searxng
    ports:
      - "8080:8080"
    volumes:
      - ./searxng:/etc/searxng:rw
    environment:
      - SEARXNG_BASE_URL=http://localhost:8080/
    restart: unless-stopped
EOF

# Create settings.yml with JSON API enabled
cat > searxng/settings.yml << 'EOF'
use_default_settings: true
server:
  secret_key: "change-me-to-random-string"
  bind_address: "0.0.0.0"
  port: 8080
search:
  safe_search: 0
  autocomplete: "google"
  default_lang: "en"
  formats:
    - html
    - json
EOF

# Start SearXNG
docker compose up -d
```

## Configuration

Set the SearXNG URL (defaults to http://localhost:8080):
```bash
export SEARXNG_URL="http://localhost:8080"
```

## Usage Examples

### Basic Search
```bash
curl "http://localhost:8080/search?q=your+query&format=json" | jq '.results[:5]'
```

### Search with Categories
```bash
# General web search
curl "http://localhost:8080/search?q=query&categories=general&format=json"

# Images
curl "http://localhost:8080/search?q=query&categories=images&format=json"

# News
curl "http://localhost:8080/search?q=query&categories=news&format=json"

# Videos
curl "http://localhost:8080/search?q=query&categories=videos&format=json"

# IT/Tech documentation
curl "http://localhost:8080/search?q=query&categories=it&format=json"

# Science/Academic
curl "http://localhost:8080/search?q=query&categories=science&format=json"
```

### Search with Language/Region
```bash
curl "http://localhost:8080/search?q=query&language=en-US&format=json"
curl "http://localhost:8080/search?q=query&language=de-DE&format=json"
```

### Paginated Results
```bash
# Page 2 (results 11-20)
curl "http://localhost:8080/search?q=query&pageno=2&format=json"
```

## Response Format

Each result includes:
- `title` - Result title
- `url` - Link to the result  
- `content` - Snippet/description
- `engines` - Array of search engines that returned this result
- `score` - Relevance score (higher = better)
- `category` - Result category

## Shell Function

Add to your `.zshrc` or `.bashrc`:

```bash
searxng() {
  local query="$*"
  local url="${SEARXNG_URL:-http://localhost:8080}"
  curl -s "${url}/search?q=$(echo "$query" | sed 's/ /+/g')&format=json" | \
    jq -r '.results[:10][] | "[\(.score | floor)] \(.title)\n    \(.url)\n    \(.content // "No description")\n"'
}
```

Usage: `searxng how to make sourdough bread`

## Docker Management

```bash
# Start
cd ~/Projects/searxng && docker compose up -d

# Stop
docker compose down

# View logs
docker compose logs -f searxng

# Restart
docker compose restart
```

## Troubleshooting

**Container won't start:**
```bash
docker compose logs searxng
```

**JSON format not working:**
Ensure `formats: [html, json]` is in your settings.yml

**No results:**
Some engines may be rate-limited. Check logs for errors.

## Why SearXNG?

- **Privacy**: No tracking, no ads, no data collection
- **Aggregation**: Combines results from 70+ search engines
- **Self-hosted**: Your data stays on your machine
- **API**: JSON output for automation
- **Free**: No API keys or rate limits

Overview

This skill lets you search the web using a self-hosted SearxNG instance. It provides privacy-respecting, aggregated search results in JSON so you can automate queries, filter by category or language, and keep search data on your own infrastructure.

How this skill works

The skill queries your SearxNG server’s /search endpoint and returns JSON-formatted results aggregated from 70+ engines. You can pass parameters for query, categories, language, page number and format; responses include title, url, content snippet, engines, score, and category for each result. It works with a local or remote SearxNG instance, including Docker deployments.

When to use it

  • You need private, self-hosted search without third-party tracking.
  • You want machine-readable search results for automation or pipelines.
  • You need to aggregate results from multiple engines (web, images, news, videos).
  • You want localized searches (language/region) or paginated results.
  • You prefer a lightweight JSON API over commercial search APIs.

Best practices

  • Run SearxNG behind HTTPS and an access control proxy if exposed to the internet.
  • Enable JSON format in settings.yml (formats: [html, json]) for API use.
  • Set SEARXNG_URL environment variable to avoid hardcoding endpoints in scripts.
  • Use categories to narrow searches (general, images, news, it, science, videos).
  • Monitor container logs for engine rate-limiting and rotate or disable noisy engines.

Example use cases

  • Shell integration: add a searxng() function to your shell to run quick JSON searches and pretty-print top results.
  • Automated scraping: feed queries from a job queue and consume SearxNG JSON for downstream processing.
  • Research workflow: query multiple categories and languages to gather diverse sources and snippets.
  • Private search gateway: host SearxNG for a small team to avoid external trackers while keeping familiar search results.
  • Backup/archival tools: periodically archive top results for given queries via the JSON API.

FAQ

What URL does the skill use by default?

It defaults to http://localhost:8080. Set SEARXNG_URL to point to a custom host.

How do I get JSON results?

Ensure settings.yml includes formats: [html, json] and call /search with &format=json in the query string.