One howl becomes a pack.
Add a machine and it simply starts howling too. No wolf talks to another wolf - every howl goes to the same moon. That is the whole topology.
The moon is the server.
Howl is a tiny log-shipping fleet. Every machine runs a small agent that reads its own log files and pushes them out. Nothing ever connects to a machine - no open ports, no VPN, works from any network.
A ~56 MB process tailing log files with byte-exact checkpoints. Measured at 0.2% of one core.
Batches ship within about a second. If the moon is unreachable, the log file itself is the buffer.
A Cloudflare Worker + D1 + R2. It lives outside your house on purpose - the monitor never shares fate with the monitored.
Wolves never talk to each other. Adding a machine is registering a token and letting it howl.
How the data flows.
Data pushes out; code pulls in. Agents checkpoint after every acknowledged batch, so crashes and restarts re-send instead of losing. The receiver classifies, stores hot, rolls cold, and watches for silence.
Small agent, serious guarantees.
Never loses a line
Checkpoints advance only after the server acknowledges. Rotation, deletion, truncation, even in-place rewrites - drained and fingerprinted, proven by a zero-loss test harness.
Alerts that respect you
One push per incident, not five hundred. Errors buzz in seconds; a machine going quiet buzzes once; a source that stops shipping while its machine looks healthy gets caught too.
Updates itself
Push to main and every wolf is running it within fifteen minutes. Failed builds keep the old agent alive. Restarts are lossless by construction.
of one CPU core, measured on a live machine. 56 MB of memory. Under 2 MB of network a day when idle.
from a line hitting a log file to it being queryable at the receiver, classified and stored.
of always-on servers. The receiver is a Cloudflare Worker; a home fleet fits comfortably in free tiers.
A new wolf in four lines.
# on the new machine git clone git@github.com:you/howl.git ~/howl cd ~/howl/agent && npm ci && npm run build node dist/agent.js init --endpoint https://your-moon.example --token howl_... # install the service units - and it howls forever