{
  "schemaVersion": "1.0",
  "item": {
    "slug": "searxng-search-skill",
    "name": "Advanced Searxng Search Skill",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/elmaslouhymouaad/searxng-search-skill",
    "canonicalUrl": "https://clawhub.ai/elmaslouhymouaad/searxng-search-skill",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/searxng-search-skill",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=searxng-search-skill",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "pyproject.toml",
      "requirements.txt",
      "searxng_skill/__init__.py",
      "searxng_skill/config.py"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/searxng-search-skill"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/searxng-search-skill",
    "agentPageUrl": "https://openagent3.xyz/skills/searxng-search-skill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/searxng-search-skill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/searxng-search-skill/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "SearXNG Advanced Search Skill",
        "body": "---\nname: searxng-skill\ndescription: Advanced Python library for SearXNG metasearch with retry logic, timeout handling, and comprehensive search patterns.\nhomepage: https://github.com/yourusername/searxng-skill\nmetadata: {\"clawdbot\":{\"emoji\":\"🔍\",\"requires\":{\"python\":\">=3.8\",\"packages\":[\"requests\",\"urllib3\",\"python-dotenv\"]},\"install\":[{\"id\":\"pip\",\"kind\":\"pip\",\"package\":\"searxng-skill\",\"label\":\"Install searxng-skill (pip)\"},{\"id\":\"local\",\"kind\":\"local\",\"command\":\"pip install -e .\",\"label\":\"Install from source\"}]}}\n---\n\n# searxng-skill\n\nUse `searxng-skill` for privacy-focused metasearch with local/remote SearXNG instances. Supports retry logic, timeout handling, and advanced search patterns.\n\n## Setup (once)\n\n**Environment variables (recommended)**\n```bash\n# Create .env file\ncat > .env << EOF\nSEARXNG_URL=http://localhost:8080\nSEARXNG_TIMEOUT=10\nSEARXNG_MAX_RETRIES=3\nSEARXNG_RETRY_DELAY=1.0\nSEARXNG_BACKOFF_FACTOR=2.0\nSEARXNG_VERIFY_SSL=true\nSEARXNG_LANGUAGE=en\nEOF\n\nOr configuration file\n\n# Create config.json\ncat > config.json << EOF\n{\n  \"instance_url\": \"http://localhost:8080\",\n  \"default_timeout\": 10,\n  \"max_retries\": 3,\n  \"retry_delay\": 1.0,\n  \"backoff_factor\": 2.0,\n  \"verify_ssl\": true,\n  \"default_language\": \"en\"\n}\nEOF\n\nInitialize in code\n\nfrom searxng_skill import SearXNGSkill, SearXNGConfig\n\n# From environment\nconfig = SearXNGConfig.from_env()\nskill = SearXNGSkill(config=config)\n\n# From file\nconfig = SearXNGConfig.from_file(\"config.json\")\nskill = SearXNGSkill(config=config)\n\n# Direct\nskill = SearXNGSkill(instance_url=\"http://localhost:8080\")"
      },
      {
        "title": "Common Commands",
        "body": "Basic search\n\nfrom searxng_skill import SearXNGSkill\n\nskill = SearXNGSkill(instance_url=\"http://localhost:8080\")\nresults = skill.search(\"Python programming\")\n\n# Access results\nfor result in results[\"results\"][:10]:\n    print(f\"{result['title']} - {result['url']}\")\n\nCategory search\n\nfrom searxng_skill import SearchCategory\n\n# Single category\nresults = skill.search(\"AI\", categories=[SearchCategory.NEWS])\n\n# Multiple categories\nresults = skill.search(\n    \"climate change\",\n    categories=[SearchCategory.NEWS, SearchCategory.SCIENCE]\n)\n\nTime-filtered search\n\nfrom searxng_skill import TimeRange\n\n# Recent news (last 24 hours)\nnews = skill.news_search(\"AI breakthrough\", time_range=TimeRange.DAY)\n\n# Last week\nresults = skill.search(\"Python\", time_range=TimeRange.WEEK)\n\nImage search\n\nfrom searxng_skill import SafeSearch\n\nimages = skill.image_search(\n    \"nature photography\",\n    safesearch=SafeSearch.STRICT\n)\n\nfor img in images[:10]:\n    print(f\"{img['title']}: {img.get('img_src', 'N/A')}\")\n\nVideo search\n\nvideos = skill.video_search(\"Python tutorial\")\n\nfor video in videos[:5]:\n    print(f\"{video['title']} ({video.get('duration', 'N/A')})\")\n\nAdvanced search with operators\n\nresults = skill.advanced_search(\n    query=\"machine learning\",\n    exact_phrase=\"deep learning\",\n    exclude_words=[\"tutorial\", \"beginner\"],\n    site=\"github.com\",\n    filetype=\"pdf\"\n)\n\nEngine-specific search\n\nresults = skill.search(\n    \"quantum computing\",\n    engines=[\"google\", \"duckduckgo\", \"wikipedia\"]\n)\n\nStructured search\n\nresponse = skill.search_structured(\"artificial intelligence\")\n\nprint(f\"Query: {response.query}\")\nprint(f\"Total: {response.number_of_results}\")\n\nfor result in response.results[:5]:\n    print(f\"{result.title} [{result.engine}]\")\n    print(f\"  {result.url}\")\n    print(f\"  Score: {result.score}\\n\")\n\nAutocomplete\n\nsuggestions = skill.autocomplete(\"artificial int\")\n# ['artificial intelligence', 'artificial intelligence news', ...]\n\nMulti-category search\n\ncategorized = skill.multi_category_search(\n    \"climate change\",\n    categories=[\n        SearchCategory.GENERAL,\n        SearchCategory.NEWS,\n        SearchCategory.SCIENCE\n    ]\n)\n\nfor category, results in categorized.items():\n    print(f\"{category}: {len(results)} results\")\n\nParallel searches\n\nqueries = [\"Python\", \"JavaScript\", \"Go\", \"Rust\"]\nresults = skill.parallel_search(queries, categories=[SearchCategory.IT])\n\nfor query, result_data in results.items():\n    print(f\"{query}: {len(result_data.get('results', []))} results\")\n\nPaginated search\n\n# Get multiple pages\nall_results = []\nfor page in range(1, 4):\n    results = skill.search(\"AI\", page=page)\n    all_results.extend(results[\"results\"])\n\nprint(f\"Total results: {len(all_results)}\")\n\nHealth check\n\nif skill.health_check():\n    print(\"✓ SearXNG instance is healthy\")\nelse:\n    print(\"✗ Instance unavailable\")\n\nGet engine info\n\nengines = skill.get_engines_info()\n\nfor engine in engines[:10]:\n    print(f\"{engine.name} - {', '.join(engine.categories)}\")\n    print(f\"  Enabled: {engine.enabled}\")\n\nExport results\n\nfrom searxng_skill.utils import export_results_json, export_results_csv\n\nresults = skill.search(\"machine learning\")\n\n# Export to JSON\nexport_results_json(results, \"results.json\")\n\n# Export to CSV\nexport_results_csv(results[\"results\"], \"results.csv\")"
      },
      {
        "title": "Quick Reference",
        "body": "Search Categories\n\nSearchCategory.GENERAL      # General web search\nSearchCategory.IMAGES       # Image search\nSearchCategory.VIDEOS       # Video search\nSearchCategory.NEWS         # News articles\nSearchCategory.MAP          # Maps\nSearchCategory.MUSIC        # Music\nSearchCategory.IT           # IT/Tech\nSearchCategory.SCIENCE      # Scientific papers\nSearchCategory.FILES        # File search\nSearchCategory.SOCIAL_MEDIA # Social media\n\nTime Ranges\n\nTimeRange.DAY    # Last 24 hours\nTimeRange.WEEK   # Last 7 days\nTimeRange.MONTH  # Last 30 days\nTimeRange.YEAR   # Last year\nTimeRange.ALL    # All time\n\nSafe Search Levels\n\nSafeSearch.NONE     # No filtering (0)\nSafeSearch.MODERATE # Moderate filtering (1)\nSafeSearch.STRICT   # Strict filtering (2)"
      },
      {
        "title": "Notes",
        "body": "Environment variable shortcuts\n\nSet SEARXNG_URL=http://localhost:8080 to avoid repeating instance URL\nSet SEARXNG_LANGUAGE=en for default language\nSet SEARXNG_MAX_RETRIES=5 for custom retry behavior\n\nFor scripting\n\nUse format=OutputFormat.JSON for structured output (default)\nSet verify_ssl=False for local development only\nImplement rate limiting with time.sleep() between requests\nUse health_check() before batch operations\n\nPerformance tips\n\nReuse SearXNGSkill instance for multiple searches\nUse parallel_search() for independent queries\nCache results with functools.lru_cache for repeated queries\nSet appropriate timeouts: fast queries (5s), complex queries (30s)\n\nRetry behavior\n\nAutomatic retry with exponential backoff on timeout/connection errors\nDefault: 3 retries, 1s initial delay, 2x backoff factor\nCustomize: max_retries, retry_delay, backoff_factor\nNo retry on HTTP 4xx/5xx errors\n\nError handling\n\nfrom searxng_skill.exceptions import TimeoutException, ConnectionException\n\ntry:\n    results = skill.search(\"query\", timeout=5)\nexcept TimeoutException:\n    print(\"Request timed out - try increasing timeout\")\nexcept ConnectionException:\n    print(\"Cannot connect to instance - check URL and network\")\n\nFallback instance\n\ntry:\n    skill = SearXNGSkill(instance_url=\"http://localhost:8080\")\n    results = skill.search(\"query\")\nexcept ConnectionException:\n    # Fallback to public instance\n    skill = SearXNGSkill(instance_url=\"https://searx.be\")\n    results = skill.search(\"query\")\n\nLocal instance setup\n\n# Docker\ndocker run -d -p 8080:8080 searxng/searxng\n\n# Verify\ncurl http://localhost:8080/healthz\n\nConfirm before operations\n\nAlways validate query is not empty: if query.strip(): ...\nCheck results exist: if \"results\" in results: ...\nValidate URLs before requests: validate_url(url)"
      },
      {
        "title": "Advanced Usage",
        "body": "Custom retry strategy\n\nfrom searxng_skill.retry import RetryStrategy\n\nstrategy = RetryStrategy(\n    max_retries=5,\n    initial_delay=2.0,\n    backoff_factor=1.5,\n    max_delay=60.0,\n    jitter=True\n)\n\nskill = SearXNGSkill(\n    instance_url=\"http://localhost:8080\",\n    max_retries=5,\n    retry_delay=2.0,\n    backoff_factor=1.5\n)\n\nBatch processing\n\nimport time\n\nqueries = [\"Python\", \"Java\", \"Go\", \"Rust\"]\n\nfor query in queries:\n    results = skill.search(query)\n    print(f\"{query}: {len(results['results'])} results\")\n    time.sleep(1)  # Rate limiting\n\nResult deduplication\n\nfrom searxng_skill.utils import deduplicate_results\n\nresults = skill.search(\"AI\")\nunique = deduplicate_results(results[\"results\"], key=\"url\")\n\nMerge multiple searches\n\nfrom searxng_skill.utils import merge_search_results\n\nr1 = skill.search(\"Python\", engines=[\"google\"])\nr2 = skill.search(\"Python\", engines=[\"duckduckgo\"])\n\nmerged = merge_search_results([r1, r2])\n\nLogging\n\nimport logging\n\nlogging.basicConfig(level=logging.INFO)\nlogger = logging.getLogger(__name__)\n\nlogger.info(\"Searching for: Python\")\nresults = skill.search(\"Python\")\nlogger.info(f\"Found {len(results['results'])} results\")"
      },
      {
        "title": "API Methods",
        "body": "MethodPurposeReturnssearch()Basic searchDict[str, Any]search_structured()Structured searchSearchResponseautocomplete()Get suggestionsList[str]image_search()Image-specificList[Dict]news_search()News-specificList[Dict]video_search()Video-specificList[Dict]advanced_search()With operatorsDict[str, Any]multi_category_search()Multiple categoriesDict[str, List]parallel_search()Multiple queriesDict[str, Dict]health_check()Instance statusboolget_engines_info()Engine detailsList[EngineInfo]"
      },
      {
        "title": "Troubleshooting",
        "body": "Connection refused\n\n# Check instance is running\ncurl http://localhost:8080/healthz\n\n# Or in Python\nif not skill.health_check():\n    print(\"Instance is down\")\n\nSSL errors (local development)\n\nskill = SearXNGSkill(\n    instance_url=\"http://localhost:8080\",\n    verify_ssl=False  # Only for local dev!\n)\n\nTimeout issues\n\n# Increase timeout\nskill = SearXNGSkill(\n    instance_url=\"http://localhost:8080\",\n    default_timeout=30\n)\n\n# Or per-request\nresults = skill.search(\"query\", timeout=30)\n\nNo results\n\n# Check enabled engines\nengines = skill.get_engines_info()\nenabled = [e for e in engines if e.enabled]\nprint(f\"Enabled: {len(enabled)} engines\")\n\n# Try specific engines\nresults = skill.search(\"query\", engines=[\"duckduckgo\"])"
      }
    ],
    "body": "SearXNG Advanced Search Skill\n---\nname: searxng-skill\ndescription: Advanced Python library for SearXNG metasearch with retry logic, timeout handling, and comprehensive search patterns.\nhomepage: https://github.com/yourusername/searxng-skill\nmetadata: {\"clawdbot\":{\"emoji\":\"🔍\",\"requires\":{\"python\":\">=3.8\",\"packages\":[\"requests\",\"urllib3\",\"python-dotenv\"]},\"install\":[{\"id\":\"pip\",\"kind\":\"pip\",\"package\":\"searxng-skill\",\"label\":\"Install searxng-skill (pip)\"},{\"id\":\"local\",\"kind\":\"local\",\"command\":\"pip install -e .\",\"label\":\"Install from source\"}]}}\n---\n\n# searxng-skill\n\nUse `searxng-skill` for privacy-focused metasearch with local/remote SearXNG instances. Supports retry logic, timeout handling, and advanced search patterns.\n\n## Setup (once)\n\n**Environment variables (recommended)**\n```bash\n# Create .env file\ncat > .env << EOF\nSEARXNG_URL=http://localhost:8080\nSEARXNG_TIMEOUT=10\nSEARXNG_MAX_RETRIES=3\nSEARXNG_RETRY_DELAY=1.0\nSEARXNG_BACKOFF_FACTOR=2.0\nSEARXNG_VERIFY_SSL=true\nSEARXNG_LANGUAGE=en\nEOF\n\n\nOr configuration file\n\n# Create config.json\ncat > config.json << EOF\n{\n  \"instance_url\": \"http://localhost:8080\",\n  \"default_timeout\": 10,\n  \"max_retries\": 3,\n  \"retry_delay\": 1.0,\n  \"backoff_factor\": 2.0,\n  \"verify_ssl\": true,\n  \"default_language\": \"en\"\n}\nEOF\n\n\nInitialize in code\n\nfrom searxng_skill import SearXNGSkill, SearXNGConfig\n\n# From environment\nconfig = SearXNGConfig.from_env()\nskill = SearXNGSkill(config=config)\n\n# From file\nconfig = SearXNGConfig.from_file(\"config.json\")\nskill = SearXNGSkill(config=config)\n\n# Direct\nskill = SearXNGSkill(instance_url=\"http://localhost:8080\")\n\nCommon Commands\n\nBasic search\n\nfrom searxng_skill import SearXNGSkill\n\nskill = SearXNGSkill(instance_url=\"http://localhost:8080\")\nresults = skill.search(\"Python programming\")\n\n# Access results\nfor result in results[\"results\"][:10]:\n    print(f\"{result['title']} - {result['url']}\")\n\n\nCategory search\n\nfrom searxng_skill import SearchCategory\n\n# Single category\nresults = skill.search(\"AI\", categories=[SearchCategory.NEWS])\n\n# Multiple categories\nresults = skill.search(\n    \"climate change\",\n    categories=[SearchCategory.NEWS, SearchCategory.SCIENCE]\n)\n\n\nTime-filtered search\n\nfrom searxng_skill import TimeRange\n\n# Recent news (last 24 hours)\nnews = skill.news_search(\"AI breakthrough\", time_range=TimeRange.DAY)\n\n# Last week\nresults = skill.search(\"Python\", time_range=TimeRange.WEEK)\n\n\nImage search\n\nfrom searxng_skill import SafeSearch\n\nimages = skill.image_search(\n    \"nature photography\",\n    safesearch=SafeSearch.STRICT\n)\n\nfor img in images[:10]:\n    print(f\"{img['title']}: {img.get('img_src', 'N/A')}\")\n\n\nVideo search\n\nvideos = skill.video_search(\"Python tutorial\")\n\nfor video in videos[:5]:\n    print(f\"{video['title']} ({video.get('duration', 'N/A')})\")\n\n\nAdvanced search with operators\n\nresults = skill.advanced_search(\n    query=\"machine learning\",\n    exact_phrase=\"deep learning\",\n    exclude_words=[\"tutorial\", \"beginner\"],\n    site=\"github.com\",\n    filetype=\"pdf\"\n)\n\n\nEngine-specific search\n\nresults = skill.search(\n    \"quantum computing\",\n    engines=[\"google\", \"duckduckgo\", \"wikipedia\"]\n)\n\n\nStructured search\n\nresponse = skill.search_structured(\"artificial intelligence\")\n\nprint(f\"Query: {response.query}\")\nprint(f\"Total: {response.number_of_results}\")\n\nfor result in response.results[:5]:\n    print(f\"{result.title} [{result.engine}]\")\n    print(f\"  {result.url}\")\n    print(f\"  Score: {result.score}\\n\")\n\n\nAutocomplete\n\nsuggestions = skill.autocomplete(\"artificial int\")\n# ['artificial intelligence', 'artificial intelligence news', ...]\n\n\nMulti-category search\n\ncategorized = skill.multi_category_search(\n    \"climate change\",\n    categories=[\n        SearchCategory.GENERAL,\n        SearchCategory.NEWS,\n        SearchCategory.SCIENCE\n    ]\n)\n\nfor category, results in categorized.items():\n    print(f\"{category}: {len(results)} results\")\n\n\nParallel searches\n\nqueries = [\"Python\", \"JavaScript\", \"Go\", \"Rust\"]\nresults = skill.parallel_search(queries, categories=[SearchCategory.IT])\n\nfor query, result_data in results.items():\n    print(f\"{query}: {len(result_data.get('results', []))} results\")\n\n\nPaginated search\n\n# Get multiple pages\nall_results = []\nfor page in range(1, 4):\n    results = skill.search(\"AI\", page=page)\n    all_results.extend(results[\"results\"])\n\nprint(f\"Total results: {len(all_results)}\")\n\n\nHealth check\n\nif skill.health_check():\n    print(\"✓ SearXNG instance is healthy\")\nelse:\n    print(\"✗ Instance unavailable\")\n\n\nGet engine info\n\nengines = skill.get_engines_info()\n\nfor engine in engines[:10]:\n    print(f\"{engine.name} - {', '.join(engine.categories)}\")\n    print(f\"  Enabled: {engine.enabled}\")\n\n\nExport results\n\nfrom searxng_skill.utils import export_results_json, export_results_csv\n\nresults = skill.search(\"machine learning\")\n\n# Export to JSON\nexport_results_json(results, \"results.json\")\n\n# Export to CSV\nexport_results_csv(results[\"results\"], \"results.csv\")\n\nQuick Reference\n\nSearch Categories\n\nSearchCategory.GENERAL      # General web search\nSearchCategory.IMAGES       # Image search\nSearchCategory.VIDEOS       # Video search\nSearchCategory.NEWS         # News articles\nSearchCategory.MAP          # Maps\nSearchCategory.MUSIC        # Music\nSearchCategory.IT           # IT/Tech\nSearchCategory.SCIENCE      # Scientific papers\nSearchCategory.FILES        # File search\nSearchCategory.SOCIAL_MEDIA # Social media\n\n\nTime Ranges\n\nTimeRange.DAY    # Last 24 hours\nTimeRange.WEEK   # Last 7 days\nTimeRange.MONTH  # Last 30 days\nTimeRange.YEAR   # Last year\nTimeRange.ALL    # All time\n\n\nSafe Search Levels\n\nSafeSearch.NONE     # No filtering (0)\nSafeSearch.MODERATE # Moderate filtering (1)\nSafeSearch.STRICT   # Strict filtering (2)\n\nNotes\n\nEnvironment variable shortcuts\n\nSet SEARXNG_URL=http://localhost:8080 to avoid repeating instance URL\nSet SEARXNG_LANGUAGE=en for default language\nSet SEARXNG_MAX_RETRIES=5 for custom retry behavior\n\nFor scripting\n\nUse format=OutputFormat.JSON for structured output (default)\nSet verify_ssl=False for local development only\nImplement rate limiting with time.sleep() between requests\nUse health_check() before batch operations\n\nPerformance tips\n\nReuse SearXNGSkill instance for multiple searches\nUse parallel_search() for independent queries\nCache results with functools.lru_cache for repeated queries\nSet appropriate timeouts: fast queries (5s), complex queries (30s)\n\nRetry behavior\n\nAutomatic retry with exponential backoff on timeout/connection errors\nDefault: 3 retries, 1s initial delay, 2x backoff factor\nCustomize: max_retries, retry_delay, backoff_factor\nNo retry on HTTP 4xx/5xx errors\n\nError handling\n\nfrom searxng_skill.exceptions import TimeoutException, ConnectionException\n\ntry:\n    results = skill.search(\"query\", timeout=5)\nexcept TimeoutException:\n    print(\"Request timed out - try increasing timeout\")\nexcept ConnectionException:\n    print(\"Cannot connect to instance - check URL and network\")\n\n\nFallback instance\n\ntry:\n    skill = SearXNGSkill(instance_url=\"http://localhost:8080\")\n    results = skill.search(\"query\")\nexcept ConnectionException:\n    # Fallback to public instance\n    skill = SearXNGSkill(instance_url=\"https://searx.be\")\n    results = skill.search(\"query\")\n\n\nLocal instance setup\n\n# Docker\ndocker run -d -p 8080:8080 searxng/searxng\n\n# Verify\ncurl http://localhost:8080/healthz\n\n\nConfirm before operations\n\nAlways validate query is not empty: if query.strip(): ...\nCheck results exist: if \"results\" in results: ...\nValidate URLs before requests: validate_url(url)\nAdvanced Usage\n\nCustom retry strategy\n\nfrom searxng_skill.retry import RetryStrategy\n\nstrategy = RetryStrategy(\n    max_retries=5,\n    initial_delay=2.0,\n    backoff_factor=1.5,\n    max_delay=60.0,\n    jitter=True\n)\n\nskill = SearXNGSkill(\n    instance_url=\"http://localhost:8080\",\n    max_retries=5,\n    retry_delay=2.0,\n    backoff_factor=1.5\n)\n\n\nBatch processing\n\nimport time\n\nqueries = [\"Python\", \"Java\", \"Go\", \"Rust\"]\n\nfor query in queries:\n    results = skill.search(query)\n    print(f\"{query}: {len(results['results'])} results\")\n    time.sleep(1)  # Rate limiting\n\n\nResult deduplication\n\nfrom searxng_skill.utils import deduplicate_results\n\nresults = skill.search(\"AI\")\nunique = deduplicate_results(results[\"results\"], key=\"url\")\n\n\nMerge multiple searches\n\nfrom searxng_skill.utils import merge_search_results\n\nr1 = skill.search(\"Python\", engines=[\"google\"])\nr2 = skill.search(\"Python\", engines=[\"duckduckgo\"])\n\nmerged = merge_search_results([r1, r2])\n\n\nLogging\n\nimport logging\n\nlogging.basicConfig(level=logging.INFO)\nlogger = logging.getLogger(__name__)\n\nlogger.info(\"Searching for: Python\")\nresults = skill.search(\"Python\")\nlogger.info(f\"Found {len(results['results'])} results\")\n\nAPI Methods\nMethod\tPurpose\tReturns\nsearch()\tBasic search\tDict[str, Any]\nsearch_structured()\tStructured search\tSearchResponse\nautocomplete()\tGet suggestions\tList[str]\nimage_search()\tImage-specific\tList[Dict]\nnews_search()\tNews-specific\tList[Dict]\nvideo_search()\tVideo-specific\tList[Dict]\nadvanced_search()\tWith operators\tDict[str, Any]\nmulti_category_search()\tMultiple categories\tDict[str, List]\nparallel_search()\tMultiple queries\tDict[str, Dict]\nhealth_check()\tInstance status\tbool\nget_engines_info()\tEngine details\tList[EngineInfo]\nTroubleshooting\n\nConnection refused\n\n# Check instance is running\ncurl http://localhost:8080/healthz\n\n# Or in Python\nif not skill.health_check():\n    print(\"Instance is down\")\n\n\nSSL errors (local development)\n\nskill = SearXNGSkill(\n    instance_url=\"http://localhost:8080\",\n    verify_ssl=False  # Only for local dev!\n)\n\n\nTimeout issues\n\n# Increase timeout\nskill = SearXNGSkill(\n    instance_url=\"http://localhost:8080\",\n    default_timeout=30\n)\n\n# Or per-request\nresults = skill.search(\"query\", timeout=30)\n\n\nNo results\n\n# Check enabled engines\nengines = skill.get_engines_info()\nenabled = [e for e in engines if e.enabled]\nprint(f\"Enabled: {len(enabled)} engines\")\n\n# Try specific engines\nresults = skill.search(\"query\", engines=[\"duckduckgo\"])"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/elmaslouhymouaad/searxng-search-skill",
    "publisherUrl": "https://clawhub.ai/elmaslouhymouaad/searxng-search-skill",
    "owner": "elmaslouhymouaad",
    "version": "0.1.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/searxng-search-skill",
    "downloadUrl": "https://openagent3.xyz/downloads/searxng-search-skill",
    "agentUrl": "https://openagent3.xyz/skills/searxng-search-skill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/searxng-search-skill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/searxng-search-skill/agent.md"
  }
}