5 min read

A tap wizard that never pings a model

Neurowire 0.8.0 builds CSS-selector taps by ranking candidates straight off page structure and running every one past eight hard checks. No model, no API key, no eddies burned on inference, choom.

A tap is a set of CSS selectors that flips a site publishing no feed into a real feed. Two things kept the idea small-time for a long while, choom. Somebody had to hand-cut the selectors, and when the site got a redesign, the tap flatlined silently, which is worse than flatlining loud. A merc bleeding out in an alley at least makes noise. An empty feed just looks like a quiet week.

Neurowire 0.8.0 ships @neurowire/tap-wizard to close both holes. It cuts the selectors for you, and it flat refuses to write a tap that does not clear the ICE. The preem part is what is not in the rig: no model, no API key, no traffic on the net past the one fetch of the page you are tapping. Zero eddies to any AI shop.

Why this is not an AI problem

Finding the repeating block that holds the articles sounds like a job you hire a language model for. It is not. It is a structural question the DOM already answers, plain as neon on a Watson storefront.

The candidate is an element that repeats somewhere between 3 and 300 times, carries a link, and shares a common ancestor with its siblings. That is a query, not a hunch. suggestCandidates runs it over the fetched page and ranks what crawls out. previewTemplate shows you exactly what a given pick drags up. createTapSession holds the one fetched page in memory, so picking the title selector, then the link selector, then the date selector never refetches the site. One knock on the door, not four. Cheap on eddies, easy on the host, no netrunner leaving boot prints all over somebody’s server logs.

What makes this rig run is not intelligence, choom. It is iteration with feedback. You see the extraction after every choice, so a gonk pick lights up in a second instead of in a week.

The gate is the actual chrome

The suggestion engine is the convenient half. The half that matters is verifyTemplate: eight hard checks with no opinions in them, cold as a ripperdoc’s table. items, titles, links, link-host, unique-links, dates, extract, and ancestor.

Nothing writes a tap without clearing them. Not the wizard, not --yes, not the healer. There is no back alley through the package that dumps an unverified tap on disk, and that is the only way ICE like this stays worth the chrome it is cut from. A gate with a way around it is decoration.

Three of the checks earn their slot on their own:

  • unique-links catches the classic flatline where a selector grabs one shared anchor per item, so ten entries all point at the same URL. Feed looks stacked, worth exactly zero eddies.
  • ancestor throws out selectors that scoop up nav and footer alongside the real items. Those repeat too, and they repeat convincingly, like a scavenger in a nice coat.
  • extract runs the real ingest engine, not some simplified preview path. A preview can never lie to you about a real fetch, because it is the same fetch.
The tap wizard pipeline and its verification gate A fetched page feeds candidate suggestion, then preview, then an eight-check verification gate. Passing writes the tap; failing returns to the candidate list. No tap is written without passing the gate. One fetch held in session Candidates ranked, previewed Verification gate 8 checks Tap written only on pass fail: back to the candidate list, nothing written
The gate sits between every path and the file on disk, --yes and the healer included. No side door, choom.

Rot is a build failure now

The other half of the problem was the silence. A tap that quit working used to get spotted by some poor choom noticing an empty feed, usually weeks after the body went cold.

tap check runs that same eight-check gate against the live site and exits 1 when it fails. That one exit code is the whole play: rot turns into a red build instead of an absence nobody clocks. tap heal then re-runs suggestion against the redesigned page and offers you a patch, and that patch still has to clear the gate before anything lands on disk. The healer gets no special pass. Nobody does.

Three commands, all documented: tap wizard, tap check, and tap heal.

Where to jack in

The concept page, Taps, is the full story, and the verification gate section walks all eight checks one at a time. API surface sits at /reference/tap-wizard.

If you would rather lift something that already runs, the recipe author a tap and keep it working ships a GitHub Actions workflow that fires tap check on a timer. A site redesign reaches you as a failed job instead of a dead feed and a bad morning.

Neurowire is open source on GitHub, and there is a hosted reader at neurowire.app, nova and fast. More open-source work sits under projects.

Let's link up, choom.

Always down to trade notes, talk shop, or just ping. The net is the fastest way to reach me.

Ping me