sign in →

pipeline / brief → discover → crawl → assess → steady

How it works

Agents do the judgement — what a domain is, where its sources are, what on a page matters. Code does everything that can be checked: validation, deduplication, change detection, caps. The result is a graph that builds itself from one sentence and stays current for the price of what actually changed.

The autopilot loop

01 / 05brief

BRIEF

One sentence becomes a structured brief: the domain's name, language and region; what a person, object, location and event mean here; inclusion and exclusion rules; real-world examples a complete graph must contain; seed search queries per kind; and URL patterns to avoid. Code turns the brief into the domain's published gate.

02 / 05discover

DISCOVER

Seed queries run against web search in the domain's language. Every candidate source is validated in code — crawlable URL, allowed host, robots.txt, reachable HTML, a per-host quota — before it becomes a source.

03 / 05crawl

CRAWL

The pipeline fetches pages politely, converts each to markdown, and extracts POLE entities, facets, relationships and the next links worth following. The agent, not a link-follower, decides where to go next.

04 / 05assess

ASSESS

Deterministic hygiene removes junk names and merges duplicates. A precision sweep checks every entity against the brief. Locations are geocoded. A judge scores coverage and precision and proposes deletes, merges, gate refinements and gap searches — which code validates and applies, capped so one bad verdict cannot wipe a graph.

05 / 05steady

STEADY

After a few cycles the domain settles: scheduled re-scrapes, a weekly frontier plan, daily sweeps of newly arrived entities, periodic re-assessment. A watchdog resumes any stage that stalls.

doc.01 pipeline detailupdated 2026-09-24

The gate: your relevance rules#

Every domain has a published gate: plain-language inclusion and exclusion rules plus URL patterns. The extraction agent applies it page by page — “include firms whose main business is IT consulting with an office in Linköping or Norrköping; exclude recruitment ads” — and an entity the exclusion rules cover is not extracted even when the page is relevant. Gates are versioned; the judge's refinements become new versions, and a widened gate gives previously rejected pages a second look.

Extraction#

No HTML ever reaches a model. Each page is converted to markdown with navigation, footers and scripts removed and links kept inline. The extraction model returns a structured verdict: is the page relevant, how confident is it, is it a catalog, an article or an entity's own page — and the entities, facets, relationships and up to ten links worth following. A shaky verdict, especially a shaky rejection, is re-read by a stronger model.

Every entity and relationship is stored with the page and a verbatim snippet it came from. Relationships are normalized to 15 canonical predicates, and names are deduplicated against the graph — including by canonical URL, so two names for the same official site become one entity with an alias.

Change detection: pay only for what changed#

Re-scraping is where knowledge graphs usually get expensive. Nolvin re-reads every page in tiers and stops at the first one that answers:

  1. Hash — the normalized markdown has not changed: done, no model call.
  2. Catalog — a changed calendar or directory: links that were not in the stored snapshot are new items and are queued directly.
  3. Diff — the page was read before: it is diffed against its snapshot. Removals are reconciled in code (entities that vanished lose the page's support); small additions go to the model as just the added lines with their context, and its output is grounded in that text.
  4. Full read — most of the page changed, or its last full read is more than 30 days old.

In production, diff reads cost about a third of a full read, and unchanged pages cost nothing — keeping all of Nolvin's live graphs current runs well under a dollar a day.

Assessment and self-correction#

Graphs built from the web drift toward noise: navigation labels, near-duplicates, adjacent topics. Each autopilot cycle cleans before it grows:

  • Hygiene — deterministic rules drop junk names and merge exact and fuzzy duplicates (never across differing digits: “Festival 2025” and “Festival 2026” stay apart).
  • Precision sweep — every entity is checked against the brief in batches; events and locations tied to in-scope actors are protected.
  • Scorecard — a deterministic score from coverage of expected examples, precision, connectivity, corroboration across sources, facet completeness and source diversity.
  • Judge — proposes deletes, merges, gate tightening and gap searches; code re-validates every id and caps deletes.

Steady state#

Once built, a domain maintains itself. The scheduler requeues due pages every six hours, a frontier planner ranks unexplored links weekly and runs gap searches, new entities are swept daily, and entities that lose all support expire after 21 days. Webhooks and a server-sent event stream report what changed.

Guardrails#

Spend
Every model call is metered per domain; a monthly spend cap pauses the domain when reached.
Scope
Crawls stay on registered source hosts (and sanctioned official sites of entities already in the graph), within a depth and page budget.
Etiquette
robots.txt, Crawl-delay and per-host spacing across all workers. About NolvinBot.
Failures
Failed extractions retry three times, then land in a dead-letter queue you can inspect and requeue through the API.

Questions#

Which language models does Nolvin use?

Page extraction runs on Claude Haiku 4.5, a fast and inexpensive model; pages where it is unsure are re-read by Claude Opus. Judgement-heavy steps — the domain brief, source discovery, the frontier planner and the graph judge — run on Claude Opus. Every model call is metered per domain.

Does Nolvin respect robots.txt?

Yes. NolvinBot reads robots.txt before crawling a host (cached for 24 hours), honors Allow, Disallow and Crawl-delay, and spaces requests to the same host — at least 1.5 seconds apart by default, longer if the site asks. See NolvinBot.

How fresh is the graph?

A scheduler runs every six hours. Catalog pages (calendars, directories, member lists) are re-checked daily; other pages back off to at most weekly while they keep yielding nothing new. You can force a re-scrape of a whole domain through the API at any time.

What does it cost to keep a graph up to date?

Most of the time, very little: an unchanged page is detected by its hash and costs no model call at all, and a changed page is usually read as a diff of the added lines. A domain can carry a monthly spend cap: when it is reached the domain's crawling pauses and a budget.hit event is sent.

Can I bring my own sources instead of using autopilot?

Yes. Create a domain, publish a gate (your relevance rules), register source URLs and start a crawl. Autopilot is the same pipeline with the brief, discovery and assessment steps done for you.

Start with the quickstart