Suite / BitAgent
BitAgent
A self-hosted BitTorrent DHT crawler and indexer built for the *arr stack.
Evidence-driven classification, curation and opt-in LLM stages, with the operator console and public library in the same image. Descended from bitmagnet.
BitAgent crawls the DHT into a Postgres corpus, classifies every torrent it finds, and serves the result to Sonarr, Radarr, Lidarr, Readarr and Prowlarr over Torznab. What makes it different is the loop: it watches what your *arrs actually grab and keep, and feeds that back into what it indexes. It started in April 2026 as a fork of bitmagnet; the DHT crawler, metainfo fetcher, CEL classifier and the Postgres/GraphQL foundation are upstream's work and are credited as such.
What BitAgent adds
Ground truth from your *arr stack
Sonarr, Radarr, Lidarr and Readarr webhooks, a history poller and a qBittorrent poller land every signal in an append-only evidence table that resolves, by explicit precedence, into one canonical label per torrent.
Curation, not just collection
A deterministic content filter — language, lossy-audio-only music, NSFW, blocked extensions and content types, foreign audio — runs in pure Go with no network or database call per decision, and is anime-aware so watchable anime is never dropped on a script heuristic.
Titles that actually match
An LLM-free anime backbone recognises fansub brackets, absolute episode numbers and romaji season markers, backed by an alias table built from AniDB titles joined to TMDB mappings, so every romaji, kanji, English and fan alias resolves to one id.
Accurate swarm numbers
A BEP-15 UDP scrape worker refreshes seeders and leechers from public trackers at about seventy infohashes per datagram, replacing the crawler's one-node, never-refreshed estimate.
Observability that answers questions
A bitagent_* metric family for every subsystem — crawler, classifier, evidence, content filter, liveness, retention, each LLM stage — and counterfactual would_* metrics so you read the numbers before you flip a switch.
LLM stages, off by default
Four points in the pipeline can ask a model over any OpenAI-compatible endpoint, hosted or on your own LAN. Every stage runs in shadow mode first, daily and monthly budgets persist in Postgres, zero means stop, and anything from a private tracker never leaves the house.
The dashboard
Operator console
Indexer win rate, match rate, grab liveness, evidence per source, a quarantine you can spot-check, one scorecard per LLM stage with spend against budget, a read-only view of the running configuration, a search tester and a GraphQL explorer.
Public library
The same small FastAPI app, started and supervised by the Go core, serves a second hostname for browsing what the index holds. It reads the core over GraphQL and Prometheus on localhost and never writes.
Install
Docker Compose
Two containers, no accounts, no API keys: copy the example env, set one Postgres password, docker compose up -d --build. Metrics climb within a minute and the console is on port 8080. The exact commands are in the README.
Then wire the *arrs
Add the Torznab endpoint as an indexer in Prowlarr or each *arr, and point each *arr's webhook at BitAgent so the evidence loop closes. Per-app guides cover the clicks.
Documentation
- Concepts: Architecture · DHT crawler · Classification
- Reference: Torznab API · GraphQL API · Dashboard guide · Metrics
- Operations: Security · Monitoring · Private tracker mode
- BitAgent and bitmagnet — what the fork adds, what is still upstream's work, and reasons to stay where you are
- Improvements over upstream · Legal disclaimer
- Issues · Discussions · Report a vulnerability
Deployment and operations
Install, configure and verify BitAgent; plan authentication, backups, upgrades and recovery.