# The Wikipedia game, on any site

When the answer isn't on the page you gave it, jurl --follow looks for it on the same site, one link at a time, the way people play the Wikipedia game.

2026-10-14 · https://jurl.dev/blog/the-wikipedia-game-on-any-site/

The Wikipedia game: start on one article, say Tennis, and reach a fact far away, say the boiling point of mercury, only by clicking links. Good players ask of every link whether it gets them closer, and go back when a trail goes nowhere.

`jurl --follow` does the same on any site. Give it a question and a page that doesn't answer it, and it finds the page that does:

```
$ jurl -t --precise --follow -q "What is the monthly price of the cheapest paid plan?" linear.app
   warmth 0.02 · answer 0.00 · https://linear.app/
   warmth 0.96 · answer 0.97 · https://linear.app/pricing
   warmth 0.11 · answer 0.14 · https://linear.app/docs/billing-and-plans.md
   3 pages · 66541 tokens
jurl: found after reading 3 pages: linear.app/ → linear.app/pricing
$10 per user/month
```

That took 2.5 seconds.

While the home page loaded, jurl fetched `llms.txt` and `sitemap.xml`, and took the first 300 pages of Linear's as candidates, on top of the home page's own links.

Every link got one question: does following it lead to the answer? Up to 250 links per page are scored in one request, and the best two are opened next. Each page is asked two things at once: is the answer here, and which of its links lead on.

Then hot and cold. A link counts for as much as the page it sits on is close to the question. Linear's home page was cold (0.02) and `/pricing` was hot (0.96). When a trail goes cold, its links sink and the search goes back to the last page that was getting warmer.

`/pricing` answered at 0.97 and no link left could beat it, so jurl stopped after 3 of the 5 pages it was allowed.

It stays on the same site, subdomains included, and skips whatever `robots.txt` disallows.

## Long games

From a domain to its pricing page is one or two clicks. Tennis to mercury is three to five, and at the start every link looks equally useless: on the Tennis page, all of them score between 0.02 and 0.08 for a question about mercury. Picking the best of those is picking at random. Our first version opened Berdych, Deutsche Bank, Kiev and then Freddie Mercury.

Two changes fixed most of it. A page now counts as warmer when its best link looks better than the link that led to it, so "cold everywhere" stops meaning "go back to the start". And on long searches each link is also asked whether it's in the same field as the answer: from Tennis, polyester and vulcanized rubber score 0.9, because they're chemistry, and chemistry leads to the elements.

```
jurl: found after reading 13 pages: en.wikipedia.org/wiki/Tennis → en.wikipedia.org/wiki/Nylon → en.wikipedia.org/wiki/Melting_point → en.wikipedia.org/wiki/Mercury_(element)
629.88 K ​(356.73 °C, ​674.11 °F)
```

13 pages, 4.7 seconds, about $0.04.

## When the site doesn't say

jurl says so and exits 1:

```
$ jurl --precise --follow 8 -q "What is the name of the CEO's dog?" linear.app
jurl: read 8 pages of linear.app and none answers that
```

On the [benchmark](https://github.com/rayoplateado/jurl/tree/main/bench#follow-finding-the-page-on-a-site), 28 searches run 3 times each, it found 24 of 24 prices from the bare domain (about 3 pages, 2.5 s and $0.003 each) and left all 9 questions the site doesn't answer empty.

It still misses some. From the Kubernetes docs, "What is the default restart policy of a Pod?" often lands on the Pod API reference instead of the lifecycle page, and picks a real value from the wrong field. Bicycle to the year the Titanic sank works in 0 to 2 runs out of 3, because "what year" pulls toward calendar pages.
