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.
npx skills add mydisha/keirouter --skill keirouter-web-fetchgit clone --depth 1 https://github.com/mydisha/keirouterWrote 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.
[](https://agentmods.dev/skills/mydisha/keirouter/keirouter-web-fetch)<a href="https://agentmods.dev/skills/mydisha/keirouter/keirouter-web-fetch"><img src="https://agentmods.dev/badge/skills/mydisha/keirouter/keirouter-web-fetch/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/mydisha/keirouter/keirouter-web-fetch"><img src="https://agentmods.dev/badge/skills/mydisha/keirouter/keirouter-web-fetch.svg" alt="Reviewed on agentmods" width="80" height="20"></a>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.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00059 | $0.00717 |
| Opus 5.5 | $0.00024 | $0.00287 |
| Sonnet 5.5 | $0.00012 | $0.00143 |
| Haiku 4.5 | $0.00006 | $0.00072 |
Grade A, and why
keirouter-web-fetch scanned grade A with 1 finding 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 13d 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.
Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
curl $KEIROUTER_URL/v1/models/fetch | jq '.data[].id' This is a copy
86% identical to 9router-web-fetch — 95 lines differ, which has more behind it and is treated as the original. This page carries a canonical link to it rather than competing with it.
How it starts
The opening of the file, as written. The whole thing — 80 lines — stays where its author put it; the contents beside it link to each section on GitHub.
KeiRouter — Web Fetch
Requires KEIROUTER_URL (and KEIROUTER_KEY if auth enabled). See https://raw.githubusercontent.com/mydisha/keirouter/main/skills/keirouter/SKILL.md for setup.
Discover
curl $KEIROUTER_URL/v1/models/fetch | jq '.data[].id'
curl "$KEIROUTER_URL/v1/models/info?id=firecrawl/firecrawl-scrape"
model is provider/model (e.g. firecrawl/firecrawl-scrape), a chain name that lists several fetch providers for automatic fallback, or an alias.
Endpoint
POST $KEIROUTER_URL/v1/web/fetch
| Field | Required | Notes |
|---|---|---|
model |
yes | from /v1/models/fetch |
url |
yes | URL to extract |
format |
no | markdown (default) / text / html |
max_characters |
no | truncate output |
Examples
Firecrawl
curl -X POST $KEIROUTER_URL/v1/web/fetch \
-H "Authorization: Bearer $KEIROUTER_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"firecrawl/firecrawl-scrape","url":"https://example.com","format":"markdown"}'
Tavily
curl -X POST $KEIROUTER_URL/v1/web/fetch \
-H "Authorization: Bearer $KEIROUTER_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"tavily/tavily-extract","url":"https://example.com","format":"markdown"}'
JS:
const r = await fetch(`${process.env.KEIROUTER_URL}/v1/web/fetch`, {
method: "POST",
headers: { "Authorization": `Bearer ${process.env.KEIROUTER_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({ model: "exa/exa-contents", url: "https://example.com", max_characters: 5000 }),
});
const page = await r.json();
console.log(page.title, page.content.length);
Response shape
{
"url": "https://example.com",
"title": "Example Domain",
"content": "# Example Domain\n...",
"format": "markdown"
}
The X-KeiRouter-Provider header names the provider that answered.
Provider quick reference
| Provider | model |
Best for |
|---|---|---|
| Firecrawl | firecrawl/firecrawl-scrape |
JS-rendered pages, format=markdown/html |
| Tavily | tavily/tavily-extract |
Bulk extract |
| Exa | exa/exa-contents |
Pre-indexed pages; fast text extraction |
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.
- 13d ago Changed · -11 lines · -4 tokens per session 2f24cc6c22b8
- 1mo ago First seen · 91 lines · 63 tokens per session scan A a2004f669c02
keirouter-web-fetch is a skill published in the GitHub repository mydisha/keirouter (154 stars, last pushed 7d ago), licensed MIT. It adds 59 tokens to every session and 717 once invoked, about $0.0002 per session on Opus 5.5. A static security scan graded it A with 1 finding (makes network calls). It is 86% identical to 9router-web-fetch, differing in 95 lines, and is treated as a copy.
Other skills, from other repositories
10router-web-fetch
Fetch URL → markdown / text / HTML via 10Router /v1/web/fetch using Firecrawl / Jina Reader / Tavily Extract / Exa Contents. Use when the user wants to scrape a webpage, extract URL content, read article, or convert a URL to markdown.
caveman-discover
Find and label every LLM workflow in the repository so Caveman Cloud groups spend by workflow instead of one bucket. Use for "discover workflows" or breaking LLM spend down by workflow.
caveman-optimize
Turn a Caveman optimization observation into an operator-chosen candidate with a paired baseline evaluation. Use when asked to inspect or evaluate a Caveman optimization report. Needs explicit approval.
blocked-page-recovery
Use when a fetch fails: 403/429, paywall, WAF, bot wall.
cavecrew
When to delegate to cavecrew-investigator (locate code), cavecrew-builder (1-2 file edit) or cavecrew-reviewer (diff review) instead of working inline or using Explore. Their output is compressed, so main context lasts longer.
caveman-evidence-review
Read-only review of Caveman Cloud evidence: cost, Cave Score, workflows, traces, latency, errors, routing, savings. Use when asked what Caveman found or where LLM spend goes.