Directory → SKILL
SKILLoptionalHermes Optional Skills

Duckduckgo Search

Free keyless web, news, and image search via ddgs

searchduckduckgoweb-searchfreefallbackOptionalHermes skill
Last registry verification2026-08-18v1.3.0gamedevCloudy
Plain meaning

What does it add to Hermes?

Free keyless web, news, and image search via ddgs

Duckduckgo Search is a skill related to research and sources. It gives the agent a way to find external information and sources instead of relying only on model memory.

This plain-language explanation is based on the publisher description. The original text remains visible for verification.

Use it when

Use it when your goal in research and sources is clear and you can limit it to the data and actions it actually needs.

Skip it when

Do not add it merely to experiment when Hermes already has a simpler path, or when you cannot review its source and permissions.

Who is it for?

Best for users who want a repeatable way of working inside Hermes.

Safe first test

Ask for one recent fact with two sources, then open both links and verify dates and evidence.

Original publisher description

Free keyless web, news, and image search via ddgs

✓
Data source

This entry was indexed from Hermes Optional Skills. Our explanation interprets the type and domain without inventing a capability not present upstream.

!
Security review

The source is official or editorially reviewed, but you still need to review permissions and version compatibility.

Safe setup path

Inspect, install, then test.

  1. 01
    Open the source

    Match the publisher, license, and description to your need. Check the real update history.

  2. 02
    Review permissions and secrets

    Never paste a secret value into this site. Use environment-variable names and grant the smallest scope.

  3. 03
    Copy setup only after review

    The controls below copy text. They do not execute commands on your device.

  4. 04
    Test with a non-sensitive task

    Inspect the visible tools, then exclude write or delete tools you do not need.

Install command

Review the command, then copy it.

hermes skills install duckduckgo-search

Hermes Belarabi does not execute this command. Installation happens on your device and remains subject to Hermes scanning and your review.

The full skill definition

Exactly what Hermes loads when this skill runs.

Reproduced from the official documentation. Read it before enabling the skill: this text becomes the agent's instructions.

Free keyless web, news, and image search via ddgs.

Skill metadata

A lookup table. Do not read it all; find the row that applies to you.

SourceOptional — install with hermes skills install official/research/duckduckgo-search
Pathoptional-skills/research/duckduckgo-search
Version1.3.0
AuthorgamedevCloudy
LicenseMIT
Platformslinux, macos, windows
Tagssearch, duckduckgo, web-search, free, fallback
Related skillsarxiv

Reference: full SKILL.md

Settings you configure once. Change one at a time so you can see what each does. Set FIRECRAWL_API_KEY in your environment, not in the chat.

Free web search using DuckDuckGo. No API key required.

Preferred when web_search is unavailable or unsuitable (for example when FIRECRAWL_API_KEY is not set). Can also be used as a standalone search path when DuckDuckGo results are specifically desired.

Detection Flow

Settings you configure once. Change one at a time so you can see what each does. Set DDGS_CLI in your environment, not in the chat.

Check what is actually available before choosing an approach:

Shell2 lines
# Check CLI availability
command -v ddgs >/dev/null && echo "DDGS_CLI=installed" || echo "DDGS_CLI=missing"

Decision tree:

  1. If ddgs CLI is installed, prefer terminal + ddgs
  2. If ddgs CLI is missing, do not assume execute_code can import ddgs
  3. If the user wants DuckDuckGo specifically, install ddgs first in the relevant environment
  4. Otherwise fall back to built-in web/browser tools

Important runtime note:

  • Terminal and execute_code are separate runtimes
  • A successful shell install does not guarantee execute_code can import ddgs
  • Never assume third-party Python packages are preinstalled inside execute_code

Installation

Ordered, practical steps. Run one and confirm it worked before moving on.

Install ddgs only when DuckDuckGo search is specifically needed and the runtime does not already provide it.

Shell5 lines
# Python package + CLI entrypoint
pip install ddgs

# Verify CLI
ddgs --help

If a workflow depends on Python imports, verify that same runtime can import ddgs before using from ddgs import DDGS.

Method 1: CLI Search (Preferred)

A lookup table. Do not read it all; find the row that applies to you.

Use the ddgs command via terminal when it exists. This is the preferred path because it avoids assuming the execute_code sandbox has the ddgs Python package installed.

Shell20 lines
# Text search
ddgs text -q "python async programming" -m 5

# News search
ddgs news -q "artificial intelligence" -m 5

# Image search
ddgs images -q "landscape photography" -m 10

# Video search
ddgs videos -q "python tutorial" -m 5

# With region filter
ddgs text -q "best restaurants" -m 5 -r us-en

# Recent results only (d=day, w=week, m=month, y=year)
ddgs text -q "latest AI news" -m 5 -t w

# JSON output for parsing
ddgs text -q "fastapi tutorial" -m 5 -o json

CLI Flags

FlagDescriptionExample
-qQuery — required-q "search terms"
-mMax results-m 5
-rRegion-r us-en
-tTime limit-t w (week)
-sSafe search-s off
-oOutput format-o json

Method 2: Python API (Only After Verification)

A lookup table. Do not read it all; find the row that applies to you.

Use the DDGS class in execute_code or another Python runtime only after verifying that ddgs is installed there. Do not assume execute_code includes third-party packages by default.

Safe wording:

  • "Use execute_code with ddgs after installing or verifying the package if needed"

Avoid saying:

  • "execute_code includes ddgs"
  • "DuckDuckGo search works by default in execute_code"

Important: max_results must always be passed as a keyword argument — positional usage raises an error on all methods.

Best for: general research, companies, documentation.

Python8 lines
from ddgs import DDGS

with DDGS() as ddgs:
    for r in ddgs.text("python async programming", max_results=5):
        print(r["title"])
        print(r["href"])
        print(r.get("body", "")[:200])
        print()

Returns: title, href, body

Best for: current events, breaking news, latest updates.

Python8 lines
from ddgs import DDGS

with DDGS() as ddgs:
    for r in ddgs.news("AI regulation 2026", max_results=5):
        print(r["date"], "-", r["title"])
        print(r.get("source", ""), "|", r["url"])
        print(r.get("body", "")[:200])
        print()

Returns: date, title, body, url, image, source

Best for: visual references, product images, diagrams.

Python9 lines
from ddgs import DDGS

with DDGS() as ddgs:
    for r in ddgs.images("semiconductor chip", max_results=5):
        print(r["title"])
        print(r["image"])
        print(r.get("thumbnail", ""))
        print(r.get("source", ""))
        print()

Returns: title, image, thumbnail, url, height, width, source

Best for: tutorials, demos, explainers.

Python10 lines
from ddgs import DDGS

with DDGS() as ddgs:
    for r in ddgs.videos("FastAPI tutorial", max_results=5):
        print(r["title"])
        print(r.get("content", ""))
        print(r.get("duration", ""))
        print(r.get("provider", ""))
        print(r.get("published", ""))
        print()

Returns: title, content, description, duration, provider, published, statistics, uploader

Quick Reference

MethodUse WhenKey Fields
text()General research, companiestitle, href, body
news()Current events, updatesdate, title, source, body, url
images()Visuals, diagramstitle, image, thumbnail, url
videos()Tutorials, demostitle, content, duration, provider

Workflow: Search then Extract

Explains the idea itself. Read it slowly; the later sections build on it.

DuckDuckGo 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.

CLI example:

Shell1 line
ddgs text -q "fastapi deployment guide" -m 3 -o json

Python example, only after verifying ddgs is installed in that runtime:

Python6 lines
from ddgs import DDGS

with DDGS() as ddgs:
    results = list(ddgs.text("fastapi deployment guide", max_results=3))
    for r in results:
        print(r["title"], "->", r["href"])

Then extract the best URL with web_extract or another content-retrieval tool.

Limitations

Explains the idea itself. Read it slowly; the later sections build on it.

  • Rate limiting: DuckDuckGo may throttle after many rapid requests. Add a short delay between searches if needed.
  • No content extraction: ddgs returns snippets, not full page content. Use web_extract, browser tools, or curl for the full article/page.
  • Results quality: Generally good but less configurable than Firecrawl's search.
  • Availability: DuckDuckGo may block requests from some cloud IPs. If searches return empty, try different keywords or wait a few seconds.
  • Field variability: Return fields may vary between results or ddgs versions. Use .get() for optional fields to avoid KeyError.
  • Separate runtimes: A successful ddgs install in terminal does not automatically mean execute_code can import it.

Troubleshooting

A troubleshooting section. Find the symptom that matches yours rather than reading it end to end.

ProblemLikely CauseWhat To Do
ddgs: command not foundCLI not installed in the shell environmentInstall ddgs, or use built-in web/browser tools instead
ModuleNotFoundError: No module named 'ddgs'Python runtime does not have the package installedDo not use Python DDGS there until that runtime is prepared
Search returns nothingTemporary rate limiting or poor queryWait a few seconds, retry, or adjust the query
CLI works but execute_code import failsTerminal and execute_code are different runtimesKeep using CLI, or separately prepare the Python runtime

Pitfalls

Explains the idea itself. Read it slowly; the later sections build on it.

  • max_results is keyword-only: ddgs.text("query", 5) raises an error. Use ddgs.text("query", max_results=5).
  • Do not assume the CLI exists: Check command -v ddgs before using it.
  • Do not assume execute_code can import ddgs: from ddgs import DDGS may fail with ModuleNotFoundError unless that runtime was prepared separately.
  • Package name: The package is ddgs (previously duckduckgo-search). Install with pip install ddgs.
  • Don't confuse -q and -m (CLI): -q is for the query, -m is for max results count.
  • Empty results: If ddgs returns nothing, it may be rate-limited. Wait a few seconds and retry.

Validated With

Explains the idea itself. Read it slowly; the later sections build on it.

Validated examples against ddgs==9.11.2 semantics. Skill guidance now treats CLI availability and Python import availability as separate concerns so the documented workflow matches actual runtime behavior.