Skip to content

Recipes

Practical end-to-end workflows. Each one is a short sequence of commands you can copy. They assume the neurowire CLI (and, where noted, neurowire-web) are installed. See Installation.

Watch a site and push new posts to Slack

Long-poll a mesh and deliver only the entries you have not seen yet to a Slack incoming webhook. The --state file makes restarts skip already-reported items.

bash
neurowire --mesh ai-news.json \
  --watch --interval 15m \
  --state ~/.neurowire-seen.json \
  --sink https://hooks.slack.com/services/T000/B000/XXXX

Swap the sink URL for a Discord webhook (https://discord.com/api/webhooks/...) or any generic endpoint (which receives the JSON Feed as application/feed+json). The sink kind is auto-detected from the URL. See CLI sinks.

Build a daily HTML news page from a construct

A construct bundles several meshes. Render it to a self-contained page (all CSS inline, no external requests).

Single combined page (every entry tagged by its mesh):

bash
neurowire-web --construct daily.json --combined --out public/index.html

Multi-page "repo of feeds" (an overview plus one page per mesh) into a directory:

bash
neurowire-web --construct daily.json --out public/

Limit to recent items with --since or --today:

bash
neurowire-web --construct daily.json --combined --since 24h --out public/index.html

Migrate subscriptions via OPML

Import an OPML export from another reader into a Neurowire mesh, then export it back out if you need to.

Import (the mesh name comes from --name, else the OPML title):

bash
neurowire opml import subscriptions.opml -o my-reader.json --name "My Reader"

Use the resulting mesh like any other:

bash
neurowire --mesh my-reader.json --format json --limit 20

Export a mesh (or construct) back to OPML 2.0:

bash
neurowire opml export --mesh my-reader.json > my-reader.opml

See opml subcommands.

Add a tap for a feed-less site

A tap teaches Neurowire to read a site with no RSS/Atom feed. Let tap doctor propose one, save it, then use it.

bash
# propose a template and save it where Neurowire looks for taps
neurowire tap doctor https://example.com/blog \
  > ~/.config/neurowire/taps/example.com.json

# now the site resolves like any feed
neurowire https://example.com/blog --format atom

You can also load a tap ad hoc with --taps <path> or via the NEUROWIRE_TAPS env var. See tap doctor.

Convert any feed to RSS 2.0

Normalize any source (RSS, Atom, JSON Feed, or an HTML page) and re-emit it as RSS 2.0.

bash
neurowire https://simonwillison.net/atom/everything/ --format rss > willison.rss

The same --format rss works on a mesh or a (flattened) construct:

bash
neurowire --mesh ai-news.json --format rss --limit 25 > ai-news.rss

See RSS format.