by a2sys-ai
A web-reading tool for LLM agents that returns the parts of a page relevant to a question, verbatim
# Add to your Claude Code skills
git clone https://github.com/a2sys-ai/jevfetchSee how jevfetch compares with popular alternatives.
jevfetch is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by a2sys-ai. A web-reading tool for LLM agents that returns the parts of a page relevant to a question, verbatim. It has 50 GitHub stars.
jevfetch's catalog security scan is still queued. You can run an instant dependency and prompt-injection check now with the "Scan for vulnerabilities" button above.
Clone the repository with "git clone https://github.com/a2sys-ai/jevfetch" and add it to your Claude Code skills directory (see the Installation section above).
jevfetch is primarily written in Python. It is open-source under a2sys-ai on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh jevfetch against similar tools.
No comments yet. Be the first to share your thoughts!
Available after the catalog security scan passes.
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
The deep catalog scan for this skill is still queued. Run an instant dependency check now instead.
A web-page reader for coding agents such as Claude Code and Codex: it returns the parts of a page relevant to the question, quoted verbatim. In Claude Code, on 30 documentation questions with the page URL given, agent runs took 47% less time than with WebFetch in both Korean and English (2026-10-23).
한국어 | Quick start | Command-line use | Python API | More agent setup
| Approach | What the agent gets | Good for |
|---|---|---|
| Fetch the whole page | The full extracted text | Summaries, translations |
| A small model answers from the page (WebFetch) | A paraphrase, without the source text | Questions that don't need the page's exact wording |
| jevfetch | Passages quoted verbatim, with their heading paths | Looking up a specific fact on a long page |
Passing the whole page eats context and costs more. A paraphrase can't be quoted, and checking it means reading the page again.
jevfetch splits the page into blocks and asks TypeSafe's judgment model Jev whether each block answers the question. It returns the blocks judged to answer it, plus the first block, exactly as they appear on the page.
We compared it with Claude Code's WebFetch on 30 documentation questions, giving the page URL with each question and running every question twice in Korean and twice in English (2026-10-23, jevfetch 488ed63, Claude Code 2.1.309, Sonnet 5.5, WebFetch's reader model Haiku 5.5):
| Question language | Agent time | Cost |
|---|---|---|
| Korean | 47% less | 7% less |
| English | 47% less | 3% less |
The 95% interval of the cost ratio includes no difference in either language. The answers must contain 58 facts, checked in both runs, so 116 checks per language. WebFetch passed all 116 in both languages; jevfetch passed 115 in Korean and 116 in English.
At the tool level, asked for a specific fact, jevfetch returned the reference sentence verbatim in 81 of 81 outputs, against 25 of 81 for a single WebFetch call and 32 of 81 when WebFetch read further windows (27 English questions, three runs each, 2026-10-09, Claude Code 2.1.294). Full conditions and limits are in bench/RESULTS.md.
On Exa's public WebCode Highlights set, 137 of its 250 coding questions (those whose cited answer was on the page as fetched), with the URL given and one run each (Claude Code 2.1.310; WebFetch on 2026-10-25, jevfetch on 2026-10-26), the agent answered all 137 correctly with jevfetch and 132 with WebFetch. Over the same 137 questions (Claude Code 2.1.310; jevfetch on 2026-10-26, WebFetch on 2026-10-25), jevfetch's mean time was 0.69 times WebFetch's and its mean cost 1.20 times (runs a day apart, so the time ratio also carries any change in API latency). WebFetch's five misses of the 137 were four pages that refused WebFetch and one where it got only the site's navigation. These counts are re-graded on whether the answer gives what the question asks; under the stricter original grading of the same 274 runs (Claude Code 2.1.310, 2026-10-25 and 2026-10-26) they are 136 and 126. The seven of the 274 verdicts that the re-grading changed, and the five answers still wrong, were checked by hand.
jevfetch https://docs.python.org/3/library/functools.html "What happens if lru_cache maxsize is None?"
Output (trimmed):
# jevfetch: https://docs.python.org/3/library/functools.html
# status: filtered (blocks are quoted from the page; '##' lines are the page's heading path)
# 8/133 blocks, 461 of 7141 tokens
## functools — Higher-order functions and operations on callable objects
Source code: [Lib/functools.py](https://github.com/python/cpython/tree/3.14/Lib/functools.py)
## functools — Higher-order functions and operations on callable objects > @functools.lru_cache(maxsize=128, typed=False)
Decorator to wrap a function with a memoizing callable that saves up to the maxsize most recent calls. ...
If maxsize is set to None, the LRU feature is disabled and the cache can grow without bound.
...
[!NOTE] The agent gets 461 of the page's 7,141 tokens. This call used 37,327 Jev input tokens (about $0.0015) with an empty cache.
Each ## line is the heading path of the passage below it. Definition-list terms such as function signatures are part of the path, so the agent can tell that the sentence about maxsize=None belongs to lru_cache.
The text is copied from the page. The only changes jevfetch makes are:
[text](url)|10<sup>6</sup> reads 10 6- before list items merged into one block## linesJSON and XML are re-serialized, so whitespace, escapes, and number notation in those blocks can differ from the source. For example, 1.10 prints as 1.1.
The jevfetch skill installs into Claude Code, Codex, and many other coding agents with the skills CLI. These steps are for Claude Code. You need uv, Node.js (for npx), and a TypeSafe API key (see API key).
Install the jevfetch skill in your project. The skill tells Claude Code to read web pages with jevfetch, including pages it found with WebSearch, and what to do with each status. Without it, Claude Code keeps using WebFetch.
npx skills add a2sys-ai/jevfetch --skill jevfetch -a claude-code
Let jevfetch run without a permission prompt. Add this to .claude/settings.json in your project. If the file already exists, just add the entry to permissions.allow.
{
"permissions": {
"allow": ["Bash(jevfetch:*)"]
}
}
Add your API key to your shell profile. The command below is for zsh; for bash, use ~/.bashrc. Then open a new terminal and start Claude Code from it.
echo 'export TYPESAFE_API_KEY=<your key>' >> ~/.zshrc
Now open Claude Code in that project and ask something that needs a look at the docs. If the jevfetch command is missing, Claude Code installs it the first time, and asks before doing so unless your settings already allow it.
To set up other agents, install without Node.js, or turn WebFetch off, see More agent setup.
To install it yourself (Python 3.12 or later):
uv tool install jevfetch
Chrome or Chromium is optional. If present, it's used for pages that load their content with JavaScript.
Run it with a URL and a question, as in the example. The # lines at the top of the output report the status:
| Status | Meaning | Exit code |
|---|---|---|
filtered |
The blocks judged to answer the question, plus the first block. A short result is topped up with the next highest-scoring blocks | 0 |
passthrough |
The page is 2,000 tokens or less, so it is returned whole | 0 |
no_match |
No block passed the threshold, so the highest-scoring blocks are returned. The answer may still be on the page | 0 |
empty |
No text could be extracted | 0 |
fetch_error |
The page could not be fetched, or the URL is a PDF, image, or other binary file. For a binary file, the error shows the content type and a # saved: line gives the path of the downloaded file |
1 |
If a Jev request fails (missing key, no credits), jevfetch exits with code 2.
Options:
--json: print the result as JSON, with token counts and Jev usage--no-render: don't fall back to a headless browser--model: set the Jev model--no-notes: on pages too long to return whole, drop notes instead of judging them, which saves their Jev requests (see How it works)The command takes a URL. For HTML, Markdown, or plain text you already have, use the Python API. jevfetch doesn't pick passages from PDFs and other binary files. Like WebFetch, it saves them and prints the path, so the agent can open them with its file reader.
The skills installer works with Claude Code, Codex, and many other coding agents, and needs Node.js. By default it installs into the current project. Add -g to install it for all your projects, and use -a <agent> to pick the agents.
Download the skill file for Claude Code yourself. To use it in one project only, put it in that project's .claude/skills/ instead of ~/.claude/skills/.
mkdir -p ~/.claude/skills/jevfetch
curl -fsSL https://raw.githubusercontent.com/a2sys-ai/jevfetch/main/skills/jevfetch/SKILL.md -o ~/.claude/skills/jevfetch/SKILL.md
With WebFetch off, Claude Code reads every page with jevfetch. Add a deny rule to .claude/settings.json in the proj