web-research — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited web-research (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
| Tool | When to use |
|---|---|
execute_code (Python) + DuckDuckGo lite | FIRST - fastest, no auth needed. Use for initial search queries to find relevant URLs. |
browser_navigate | After getting URLs from search. Navigate directly to known-good pages. |
browser_console + document.body.innerText | When browser_snapshot truncates (large pages). Extract full text via JS evaluation. |
delegate_task | For multi-source parallel research. Split 3-5 sources across subagents, each extracts one page. |
| Curl + jq | For APIs that return JSON (GitHub, HN, Reddit). No auth needed for public endpoints. |
DuckDuckGo's HTML endpoint works without any API key or login and returns structured results. Two variants:
html.duckduckgo.com/html/ (GET - preferred)Use curl with a real browser User-Agent (the HTML endpoint is more resilient than lite):
curl -sL "https://html.duckduckgo.com/html/?q=<query>" -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"Parse results with Python re.findall(r'uddg=(https?[^&]+)', html) for URLs, and extract titles from class="result__title" elements.
lite.duckduckgo.com/lite/ (POST - fallback)Use Python's urllib when you need programmatic access:
import urllib.request, urllib.parse, re
def search_ddg(query):
url = "https://lite.duckduckgo.com/lite/"
data = urllib.parse.urlencode({"q": query}).encode()
req = urllib.request.Request(url, data=data)
req.add_header("User-Agent", "Mozilla/5.0")
resp = urllib.request.urlopen(req, timeout=10)
html = resp.read().decode()
results = re.findall(r'<a[^>]*href="(https?://[^"]*)"[^>]*>([^<]*)</a>', html)
return [(title.strip(), href) for title, href in results if title.strip() and len(title.strip()) > 10]After getting URLs, visit the top 3-5 results via browser_navigate for details.
Browser snapshots truncate. Use browser_console with JS:
document.body.innerTextUse substring(0, 8000) to get a controllable chunk when the full text is too large:
document.body.innerText.substring(0, 8000)For topics that need synthesis across multiple sources:
delegate_task with explicit extraction instructions/en/travel/bangkok/koh-samui) to skip homepage search forms. Cross-reference listing prices with the schedule table - booking platforms often show markup prices in the main view vs operator-direct prices in the bottom schedule table. Google Flights is a reliable fallback when airline sites block - just note prices default to round-trip.references/cybersecurity-skills-tools-2025.md - condensed research findings from a session on top cybersecurity skills and pentesting tools for 2025-2026.references/agentic-ai-landscape-2025.md - agentic AI frameworks, protocols, tools, security, and learning resources. Covers LangChain, CrewAI, AutoGen, MCP, A2A, ACP, vector DBs, observability.references/travel-booking-extraction.md - extracting schedules, prices, and routes from booking/travel sites (12Go.asia) via browser tools. Covers route-specific URLs, console-based full-schedule extraction, date button selection, and the 12Go listing-vs-schedule price markup pattern.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.