It picks.
It doesn't write.
jurl doesn't use a chatbot. It uses decision models: Jev reads the text and Clef looks at the images. Neither writes a word. They only say how likely each paragraph, link or image is to be what you want, and jurl prints the winners exactly as they appear on the page. No summary that drifts, no URL that doesn't exist.
It's fast.
Most pages take under a second, end to end.
It's cheap.
About a thousand pages per dollar of API usage.
Same command. Six things to ask for.
Pages built by JavaScript just work. jurl spots the empty app shell and renders it in Lightpanda, a fast headless browser it fetches the first time one shows up.
- You want
- the point of a long blog post
- The page
- Cloudflare's “Introducing Markdown for Agents”, with its navigation, author bios and related posts
- jurl gives
- the title, what kind of page it is, and the blocks that carry it · 0.6 s
jurl -n 3 blog.cloudflare.com/markdown-for-agents/ # Introducing Markdown for Agents <https://blog.cloudflare.com/markdown-for-agents/> · article (1.00) The way content and businesses are discovered online is changing rapidly. In the past, traffic originated from traditional search engines, and SEO determined who got found first. … ## Convert HTML to markdown, automatically Cloudflare's network now supports real-time content conversion at the source, … Here’s how it works. To fetch the markdown version of any page from a zone with Markdown for Agents enabled, the client needs to add the …
- You want
- how to read a file line by line in Python
- The page
- the whole tutorial chapter on input and output
- jurl gives
- that paragraph and that loop · 0.6 s
jurl -q "how do I read a file line by line?" -n 2 docs.python.org/3/tutorial/inputoutput.html # 7. Input and Output <https://docs.python.org/3/tutorial/inputoutput.html> · docs (1.00) ### 7.2.1. Methods of File Objects¶ For reading lines from a file, you can loop over the file object. This is memory efficient, fast, and leads to simple code: >>> for line in f: ... print(line, end='') ... This is the first line of the file. Second line of the file
- You want
- to install uv
- The page
- uv's whole README on GitHub
- jurl gives
- the install commands · 0.9 s
jurl --code -q "install" -n 2 github.com/astral-sh/uv # GitHub - astral-sh/uv: An extremely fast Python package and project manager, written in Rust. <https://github.com/astral-sh/uv> · repo (0.56) ## Installation # On macOS and Linux. curl -LsSf https://astral.sh/uv/install.sh | sh # With pip. pip install uv
- You want
- Paul Graham's essays about startups
- The page
- the list of all his essays
- jurl gives
- the ones about startups · 0.8 s
jurl --links -q "essays about startups" -n 4 paulgraham.com/articles.html
https://paulgraham.com/start.html
https://paulgraham.com/startupmistakes.html
https://paulgraham.com/startupideas.html
https://paulgraham.com/13sentences.html- You want
- the photos in an article
- The page
- Wikipedia's Golden Gate Bridge article, with its logos and icons
- jurl gives
- the photos of the bridge · 0.6 s
jurl --image -n 3 en.wikipedia.org/wiki/Golden_Gate_Bridge https://thumb.wikimedia.org/wikipedia/commons/thumb/5/57/Golden_gate_circa_1891.png/500px-Golden_gate_circa_1891.png?… https://thumb.wikimedia.org/wikipedia/commons/thumb/d/d0/Golden_Gate_bridge_pillar.jpg/500px-Golden_Gate_bridge_pillar.jpg?… https://thumb.wikimedia.org/wikipedia/commons/thumb/6/6d/Golden_Gate_Bridge_Dec_15_2015_by_Don_Ramey_Logan.jpg/3840px-Golden_Gate_Bridge_Dec_15_2015_by_Don_Ramey_Logan.jpg?…
Judged by file name, alt text and caption, so it costs almost nothing. Add --vision and Clef looks at the pixels too.
- You want
- a photo of the cathedral
- The page
- Wikipedia's Cologne article, 73 images
- jurl gives
- the three that show it, one with no caption at all · 2.3 s
jurl --find "a cathedral" -n 3 en.wikipedia.org/wiki/Cologne
| Image | Why it matched | p | |
|---|---|---|---|
| 1 | Kdom.jpg | Cologne Cathedral | 0.96 |
| 2 | Köln_um_1890.jpg | The 1890 skyline, the cathedral towering over it | 0.95 |
| 3 | Kranhäuser_Cologne_April_2018.jpg | The Rhine at dusk, the lit cathedral on the right. No alt text, no caption. | 0.95 |
jurl --find "a carnival parade" en.wikipedia.org/wiki/Cologne
jurl: no image in https://en.wikipedia.org/wiki/Cologne looks like "a carnival parade" (closest: …, p=0.02)
When nothing matches, jurl says so instead of handing you the least-bad photo.
Plain text out. Pipes in.
Everything prints plain text or plain URLs, so jurl fits in a pipe — or in an agent's toolbox.
Read the top 3 Hacker News stories, one key paragraph each
jurl -l -n 3 news.ycombinator.com | xargs -n1 jurl -n 1Download the photo that matches
jurl -f "a bridge over a river" en.wikipedia.org/wiki/Cologne | xargs curl -sOEvery chart in a post
jurl -f "a chart or graph" -n 10 blog.cloudflare.com/markdown-for-agents/ | xargs -n1 curl -sOOnly the confident answers, for scripts
jurl --json -q "installation" github.com/BurntSushi/ripgrep | jq -r '.blocks[] | select(.p > 0.8) | .text'Under a second. A fraction of a cent.
| Command | Typical time | Typical cost |
|---|---|---|
| jurl <url> | 0.6–1 s | $0.0004–0.0013 |
| jurl -i <url> | 0.5–0.7 s | $0.00004 |
| jurl --vision <url> | 1.3–1.9 s | $0.0002 |
| jurl --find "…" <url> (73 images) | 2.2–2.9 s | $0.002 |
| JavaScript apps | +3–6 s | same |
Measured on 2026-10-04. Run any command with -t to see your own numbers.
Two lines. That's the whole setup.
Windows · powershell -ExecutionPolicy Bypass -c "irm https://github.com/rayoplateado/jurl/releases/latest/download/jurl-installer.ps1 | iex"
From source · cargo install --git https://github.com/rayoplateado/jurl
The first run asks for a TypeSafe API key, checks it and saves it. For --vision and --find, run jurl init and add a Cloudflare Workers AI token.
No server. No account.
jurl talks to the model APIs directly, with your keys.
Who you pay
TypeSafe for Jev ($0.042 per million input tokens) and Cloudflare for Clef-flash ($0.09 per million). Output is free on both.
What leaves your machine
The text of the page goes to TypeSafe. With --vision or --find, the images go to Cloudflare too. Keep that in mind for internal pages.
What jurl can't read
It sends no cookies, so pages behind a login are out of reach.
One yes-or-no question per candidate.
01 · FETCHSplit the page
jurl asks for markdown first. Otherwise its own extractor drops navigation, footers and scripts, and splits the rest into blocks, links and images. Empty JavaScript app? It renders it in Lightpanda.
02 · ASKTwo judges, at once
Every question goes to Jev in a single request, so asking 100 takes about as long as asking one. Clef looks at the pixels while Jev reads, not after.
03 · PRINTKeep the winners
What clears the threshold, in page order. A heading comes back only when something in its section does. Verbatim, always.
Models choose, they don't write. That's why the output is safe to pipe into xargs curl.