fetch

fetch is a skill for Claude Code, Codex from shidoyu/scout. It costs 54 tokens per session (2,216 once invoked), scanned A, original, MIT.

A tool that retrieves the contents of web pages from URLs as readable text or Markdown. It chooses how to fetch a page based on whether the page is public, confidential, or behind an authenticated session.

In plain words
What is it for?
Use it to fetch public pages, local or internal pages, and web content that requires privacy-aware handling.
Why use it?
It lets an agent read articles, documentation, and other pages while considering whether sending the page to an external service could expose private information.

Skill for Claude CodeCodex

Installs and runs on its own, but its text points at files inside its plugin — anything it tells you to read at a ${CLAUDE_PLUGIN_ROOT} path is only there once the plugin is installed. Installing the plugin gets both.

Part of the scout plugin — 3 skills, 1 MCP server shipped together

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add skills/shidoyu/scout/fetch
Any agent
npx skills add shidoyu/scout --skill fetch
Clone the repo
git clone --depth 1 https://github.com/shidoyu/scout

Made for: Claude Code, Codex.

Or install scout, the plugin that ships this one along with the rest of its 3 skills, 1 MCP server.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for fetch

README.md
[![agentmods](https://agentmods.dev/badge/skills/shidoyu/scout/fetch.svg)](https://agentmods.dev/skills/shidoyu/scout/fetch)
Your own site
<a href="https://agentmods.dev/skills/shidoyu/scout/fetch"><img src="https://agentmods.dev/badge/skills/shidoyu/scout/fetch.svg" alt="Measured on agentmods" height="20"></a>
Per session 54 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 2,216 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.00054 $0.02216
Opus 5 $0.00027 $0.01108
Sonnet 5 $0.00011 $0.00443
Haiku 4.5 $0.00005 $0.00222

Measured 5d ago against content hash 88d6006b013e, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

fetch scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 5d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

skills/fetch/SKILL.md · 161 lines

How it starts

The opening of the file, as written. The whole thing — 161 lines — stays where its author put it; the contents beside it link to each section on GitHub.

scout:fetch v1.0 — URL Content Retrieval

Purpose

Retrieve content from a URL and return it in an LLM-friendly format (Markdown / text). Automatically select the appropriate tool based on privacy sensitivity, protecting pages that should not be sent to external services.

Usage

Explicit invocation:

/scout:fetch URL

Delegation from scout:search: When the Execute/Assess steps need to deep-dive into URL content, follow this skill's workflow.

Privacy Classification

Before fetching, classify the URL's privacy level based on domain and context.

Level Definition Examples
Public Pages accessible to anyone Blogs, news sites, official docs, GitHub public repos
Confidential Non-public pages fetchable via fetch-page.py (local Playwright) Internal wikis, admin panels, dashboards, BASIC auth sites
Authenticated Pages accessible only via browser sessions (cookies). fetch-page.py cannot reach them Post-OAuth pages (Google, Notion, Slack, etc.), SaaS settings

Classification hints:

  • localhost, *.internal, *.local, corporate domains → Confidential
  • console.*, admin.*, dashboard.*, paths containing /settings, /admin → Confidential
  • Paths containing /api/ → Confidential (except public API docs on docs.* or developer.* subdomains)
  • *.notion.so, *.slack.com, *.figma.com, *.atlassian.net, mail.google.com → Authenticated
  • Known login wall → Try Confidential (fetch-page.py) first; reclassify as Authenticated on failure
  • Unknown domain → Confidential (err on the safe side; classify as Public only when certain)

Retrieval Flow

Receive URL
  ↓
Classify privacy level
  ↓
Public (Jina MCP available = API key configured)
  ↓
Jina MCP (500 RPM)
  ├─ [402] → r.jina.ai (keyless) + notice 「⚠ Jina token limit reached — falling back to free tier (20/min). Top up: https://jina.ai/」
  ├─ [401] → r.jina.ai (keyless) + notice 「⚠ Jina API key rejected — falling back to free tier. Re-run setup: bash tools/setup.sh」
  ├─ [429/5xx/403/408/connection failure] → r.jina.ai (keyless) silently
  └─ [OK] → done
  ※ If 402/401 already occurred in this session, skip MCP and omit notice
  ※ All r.jina.ai fallbacks share the same failure chain:
       r.jina.ai fails → fetch-page.py (if installed) → WebFetch (direct) → report failure

Public (no Jina MCP = no API key)
  ↓
WebFetch via r.jina.ai (keyless, 20 RPM)
  ├─ [429] → fetch-page.py + notice
  │          「⚠ Jina rate limit hit (20/min). Free API key unlocks 500/min: https://jina.ai/?newKey」
  ├─ [other errors] → fetch-page.py silently
  └─ [OK] → done
       └─ [fetch-page.py fails or unavailable] → WebFetch (direct)
            └─ [fails] → report failure

Confidential → fetch-page.py only → report failure (external APIs prohibited)
Authenticated → browser-control.py only → report failure

Read the full file on GitHub · 161 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 5d ago First seen · 161 lines · 54 tokens per session scan A 88d6006b013e

Subscribe to this mod's changes

fetch is a skill published in the GitHub repository shidoyu/scout (3 stars, last pushed 2mo ago), licensed MIT. It adds 54 tokens to every session and 2,216 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.

Related

Other skills, from other repositories

reddit

Fetch a Reddit post URL via old.reddit.com HTML scraping — the .json API is blocked for unauthenticated requests since May 2026. Returns structured data: post metadata + nested comments (with depth) + unique external links categorized (github/reddit/external). Persists into capstore tables (reddit.posts, .comments…

carsteneu/yesmem · 135 tokens

review-pr-ultra

Heavyweight multi-agent adversarial PR review. Spawns 5 parallel specialist agents (correctness, security, performance, maintainability, completeness) then a verifier agent that challenges every finding. Only verified issues survive. Use for high-risk changes, security-sensitive areas, large diffs, or when the user…

isair/jarvis · 92 tokens

review-pr

Single-pass PR review for code quality, maintainability and simplicity, potential issues, CI failures, test coverage, and adherence to project standards. Lighter than /review-pr-ultra. Use for routine reviews; use /review-pr-ultra for high-risk, security-sensitive, or large changes where deeper multi-agent analysis is…

isair/jarvis · 70 tokens

web-access

Use this skill whenever the user needs to access information from the internet — searching for current information, fetching public web pages, browsing login-gated sites (微博/小红书/B站/飞书/Twitter), comparing products, researching topics, gathering documentation, or summarizing news. This skill orchestrates four…

desirecore/market · 255 tokens

keenable-web-search

Web search and research skill. Search the web for current, citable information — news, research papers, documentation, company and market research, fact-checking, and any page beyond the model's training data. Runs a bundled Python script (stdlib only, no API key, no install). NOT for local file operations or non-web…

keenableai/keenable-mcp · 73 tokens

searxng-web-search

Privacy-respecting web metasearch via the searxng-mcp MCP server. Use when the agent needs current, open-web results for a query and must NOT leak the query to a single tracking engine — SearXNG aggregates many engines (Google, Bing, DuckDuckGo, Wikipedia, …) behind one JSON tool. Use for general lookups…

Knuckles-Team/searxng-mcp · 138 tokens