CtrlK
BlogDocsLog inGet started
Tessl Logo

duckduckgo-search

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

54

Quality

63%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Low

Low-risk findings worth noting

Fix and improve this skill with Tessl

tessl review fix ./optional-skills/research/duckduckgo-search/SKILL.md
SKILL.md
Quality
Evals
Security

Quality

Content

71%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

The body is a strongly actionable, executable reference with a clear detection-first workflow and thorough troubleshooting, held back by heavy repetition of the runtime-separation warning and an unreferenced helper script. Moving the per-method field detail to a reference file and citing the script would materially improve both conciseness and navigation.

Suggestions

State the terminal-vs-execute_code separation once (e.g. in a short 'Runtimes' note) and remove the five other repetitions across Detection Flow, Installation, Method 2, Limitations, Troubleshooting, and Pitfalls (conciseness currently 3).

Reference `scripts/duckduckgo.sh` in the CLI section (e.g. "or run `scripts/duckduckgo.sh <query> [max]` for a wrapped default") so the existing bundle file is discoverable, or remove it if unused (progressive_disclosure currently 3).

Move the four per-method return-field lists and Quick Reference table into a `references/api.md` and keep only one CLI and one Python example inline, tightening the main body (progressive_disclosure and conciseness).

DimensionReasoningScore

Conciseness

The body is mostly lean — commands, code, and tables with little concept explanation — but the terminal-vs-execute_code runtime separation warning is repeated at least six times ("Terminal and `execute_code` are separate runtimes" appears in Detection Flow, Installation, Method 2's intro, Limitations, Troubleshooting, and Pitfalls), which is unnecessary padding. This matches 'Mostly efficient but includes some unnecessary explanation or could be tightened' rather than 4, where over-explanation would be only a minor instance rather than a recurring theme.

3 / 5

Actionability

Every section provides copy-paste-ready material: concrete `ddgs` CLI invocations with flags (`ddgs text -q "..." -m 5 -r us-en -t w -o json`), a flag table, complete executable Python snippets using `with DDGS()`, and a troubleshooting table mapping problems to causes and fixes. Fully executable and covering the common cases (text, news, images, videos, region/time filtering, JSON output) — a clear match for the top anchor.

5 / 5

Workflow Clarity

The Detection Flow sequences the decision explicitly (check `command -v ddgs` → prefer CLI → verify runtime before Python use), installation includes a verification step (`ddgs --help`), the Search-then-Extract workflow is ordered, and the Troubleshooting/Pitfalls sections provide error-recovery feedback (empty results → wait and retry). This matches 'Clear sequence with most checkpoints present; minor validation gaps' — it falls short of 5 because there is no explicit retry/validate loop around the install-then-import path (e.g. verify `from ddgs import DDGS` succeeds before proceeding), only the cautionary prose.

4 / 5

Progressive Disclosure

Sections are well-organized with headers and tables, but the body inlines the full API surface for four search types (~225 lines including per-method field lists and a Quick Reference table) that would fit a separate reference file, and the one bundle file that does exist — `scripts/duckduckgo.sh` — is never referenced anywhere in the body, leaving it undiscoverable. Per the guideline to score against the actual bundle structure, this matches 'Some structure but could be better organized; references present but not clearly signaled' rather than 4, where references would be mostly clearly signaled.

3 / 5

Total

15

/

20

Passed

Description

55%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

The description is concise and names three concrete search capabilities with a genuine differentiator (free, keyless), but it omits any explicit "Use when..." trigger guidance and never mentions DuckDuckGo by name — the phrase a user would most naturally say. It is a serviceable but incomplete description whose trigger surface relies on generic web-search terms.

Suggestions

Add an explicit trigger clause, e.g. "Use when web_search is unavailable, no API key is configured, or the user asks for DuckDuckGo specifically" — this would lift completeness from 3 and sharpen when-not-to-use boundaries.

Include the natural brand terms "DuckDuckGo" and "search engine" in the description so users who say those words trigger this skill (trigger_term_quality currently 3).

Consider naming the remaining capability (video search) or the search-then-extract pattern to close the coverage gap between description and body (specificity currently 4).

DimensionReasoningScore

Specificity

The description enumerates several concrete capabilities — "web, news, and image search" — plus the differentiating attributes "Free keyless" and "via ddgs", matching the anchor 'Lists several specific actions; minor gaps in coverage'. It falls short of 5 because coverage is incomplete relative to the skill's actual scope: video search and the search-then-extract workflow are documented in the body but absent from the description.

4 / 5

Completeness

The "what" is clear and concrete (free, keyless web/news/image search via ddgs), but there is no "Use when..." clause or equivalent explicit trigger guidance anywhere in the description — the preferred-conditions guidance (fallback when web_search is unavailable) lives only in the body. Per the judging guidelines, a missing 'Use when' clause caps completeness at 3, which is exactly the anchor 'Has a clear what but when is missing or only weakly implied'.

3 / 5

Trigger Term Quality

It includes relevant keywords ("web", "news", "image search", "free", "keyless", "ddgs") but misses the natural phrase users would most commonly say: "DuckDuckGo" appears nowhere in the description, nor do synonyms like "search engine". This matches the anchor 'Some relevant keywords but missing common variations or synonyms' rather than 4, where only a few natural terms would be missing — here the skill's own brand name is the missing term.

3 / 5

Distinctiveness Conflict Risk

"Free keyless web, news, and image search via ddgs" is somewhat specific — the tool name and "keyless" attribute narrow it — but generic "web search" phrasing creates overlap risk with any other web-search skill or built-in tool, since few users would naturally say "ddgs". This matches the anchor 'Somewhat specific but could still overlap with similar skills' better than 4, which requires only minor overlap with closely related skills; the contested web-search trigger space is broader than that.

3 / 5

Total

13

/

20

Passed

Validation

81%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 13 / 16 Passed

Validation for skill structure

CriteriaDescriptionResult

metadata_version

'metadata.version' is missing

Warning

metadata_field

'metadata' should map string keys to string values

Warning

frontmatter_unknown_keys

Unknown frontmatter key(s) found; consider removing or moving to metadata

Warning

Total

13

/

16

Passed

Repository
NousResearch/hermes-agent
Reviewed

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.