skills/research/duckduckgo-search/SKILL.md
Free web search via DuckDuckGo — text, news, images, videos. No API key needed. Use the Python DDGS library or CLI to search, then web_extract for full content.
npx skillsauth add helix4u/hermes-agent duckduckgo-searchInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Free web search using DuckDuckGo. No API key required.
Preferred when web_search tool is unavailable or unsuitable (no FIRECRAWL_API_KEY set). Can also be used as a standalone search tool.
# Install the ddgs package (one-time)
pip install ddgs
Use the DDGS class in execute_code for structured results with typed fields.
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.
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.
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.
from ddgs import DDGS
with DDGS() as ddgs:
for r in ddgs.images("semiconductor chip", max_results=5):
print(r["title"])
print(r["image"]) # direct image URL
print(r.get("thumbnail", ""))
print(r.get("source", ""))
print()
Returns: title, image, thumbnail, url, height, width, source
Best for: tutorials, demos, explainers.
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", "")) # video URL
print(r.get("duration", "")) # e.g. "26:03"
print(r.get("provider", "")) # YouTube, etc.
print(r.get("published", ""))
print()
Returns: title, content, description, duration, provider, published, statistics, uploader
| Method | Use When | Key Fields |
|--------|----------|------------|
| text() | General research, companies | title, href, body |
| news() | Current events, updates | date, title, source, body, url |
| images() | Visuals, diagrams | title, image, thumbnail, url |
| videos() | Tutorials, demos | title, content, duration, provider |
Use the ddgs command via terminal when you don't need structured field access.
# Text search
ddgs text -k "python async programming" -m 5
# News search
ddgs news -k "artificial intelligence" -m 5
# Image search
ddgs images -k "landscape photography" -m 10
# Video search
ddgs videos -k "python tutorial" -m 5
# With region filter
ddgs text -k "best restaurants" -m 5 -r us-en
# Recent results only (d=day, w=week, m=month, y=year)
ddgs text -k "latest AI news" -m 5 -t w
# JSON output for parsing
ddgs text -k "fastapi tutorial" -m 5 -o json
| Flag | Description | Example |
|------|-------------|---------|
| -k | Keywords (query) — required | -k "search terms" |
| -m | Max results | -m 5 |
| -r | Region | -r us-en |
| -t | Time limit | -t w (week) |
| -s | Safe search | -s off |
| -o | Output format | -o json |
DuckDuckGo returns titles, URLs, and snippets — not full page content. To get full content, follow up with web_extract:
web_extract tool (if available) or curlfrom 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 use web_extract tool on the best URL
web_extract or curl for that..get() for optional fields to avoid KeyError.max_results is keyword-only: ddgs.text("query", 5) raises an error. Use ddgs.text("query", max_results=5).-k and -m (CLI): -k is for keywords, -m is for max results count.ddgs (was previously duckduckgo-search). Install with pip install ddgs.Smoke-tested with ddgs==9.11.2 on Python 3.13. All four methods (text, news, images, videos) confirmed working with keyword max_results.
development
Use when you have a spec or requirements for a multi-step task. Creates comprehensive implementation plans with bite-sized tasks, exact file paths, and complete code examples.
development
Use when implementing any feature or bugfix, before writing implementation code. Enforces RED-GREEN-REFACTOR cycle with test-first approach.
development
Use when encountering any bug, test failure, or unexpected behavior. 4-phase root cause investigation — NO fixes without understanding the problem first.
development
Use when executing implementation plans with independent tasks. Dispatches fresh delegate_task per task with two-stage review (spec compliance then code quality).