efficient-web-research — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited efficient-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.
A protocol for accessing web content in the most token-efficient, accurate, and structured way — using the right tool at the right depth, and stopping as soon as the question is answerable.
Fetch the minimum needed to answer. Skim before you dive. Stop when you can answer.
Every unnecessary fetch wastes tokens and adds noise. This skill enforces a layered approach where you escalate fetch depth only when shallower layers fail.
Before fetching anything, identify what kind of input you received:
| Input Type | Example | Go To |
|---|---|---|
| GitHub repo URL | github.com/user/repo | GitHub Protocol |
| Specific page URL | docs.python.org/3/library/os | URL Protocol |
| Topic / query (no URL) | "how does RAFT consensus work" | Search Protocol |
| Multiple URLs | List of links | Multi-URL Protocol |
| PDF / file link | .pdf, .txt, .md URL | File Protocol |
Use when input is a GitHub URL (repo, file, PR, issue, etc.)
github.com/{owner}/{repo} → Repo root
github.com/{owner}/{repo}/tree/{branch} → Directory
github.com/{owner}/{repo}/blob/{branch}/{path} → Single file
github.com/{owner}/{repo}/issues/{n} → Issue
github.com/{owner}/{repo}/pull/{n} → Pull requestAlways prefer the GitHub API. It returns clean JSON — no HTML parsing needed.
# Repo metadata (name, description, language, stars, topics)
GET https://api.github.com/repos/{owner}/{repo}
# File tree (see what files exist — very cheap)
GET https://api.github.com/repos/{owner}/{repo}/git/trees/{ref}?recursive=1
# Single file content (base64 encoded)
GET https://api.github.com/repos/{owner}/{repo}/contents/{path}?ref={ref}
# README only (usually enough to understand the repo)
GET https://api.github.com/repos/{owner}/{repo}/readmeLayer 1 (always do first):
→ Fetch repo metadata + README only
→ Can you answer the user's question now? YES → STOP. NO → continue.
Layer 2 (only if needed):
→ Fetch file tree to understand structure
→ Identify the 1-3 most relevant files based on the question
→ Can you answer now? YES → STOP. NO → continue.
Layer 3 (last resort):
→ Fetch specific relevant files only (never fetch all files)
→ Prioritize: main entry point, config files, key modulesUse when the user gives a specific non-GitHub URL (docs, articles, blogs, etc.)
| Site type | Likely works with | Notes |
|---|---|---|
| Static docs / MDN / ReadTheDocs | read_url_content | Fast, clean, cheap |
| News articles / blogs | read_url_content | Usually fine |
| SPAs / React/Next.js apps | browser_subagent | JS-rendered |
| Auth-gated pages | browser_subagent | Needs login |
| Raw GitHub files (raw.githubusercontent) | read_url_content | Direct text |
Layer 1 — Skim
→ Fetch the URL with read_url_content
→ Read only headings (H1, H2, H3) and first paragraph
→ Does this page contain what the user needs? NO → try a different URL or search. YES → continue.
Layer 2 — Targeted Extract
→ If the page has anchor links (e.g. /docs/page#section), fetch with the anchor
→ Extract only the relevant section (200–500 tokens max)
→ Can you answer? YES → STOP.
Layer 3 — Full Fetch
→ Fetch full page, strip boilerplate (nav, footer, ads, cookie banners, sidebars)
→ Cap at 2000 tokens. Summarize before passing to answer.
Layer 4 — Browser Subagent (last resort only)
→ Use ONLY if read_url_content returns empty, garbled, or JS-placeholder content
→ Instruct subagent: "Navigate to [URL], wait for content to load, extract [specific section]"
→ Do NOT use browser_subagent for static pages — it's expensiveAlways remove before using fetched content:
Extract and keep:
Use when the user gives a topic, question, or query — not a specific URL.
Do NOT search the raw user query. Transform it first:
Raw: "how to deploy fastap~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.