Carve-out for the autobrr/qui plugin (publisher-daemon shape, not Netdata-fed). Manifold v1.2 shipped 2026-05-18 with the parameterized- leaf capability that has no real consumers yet; this product validates the abstraction against a real, dynamic backend (Karl's 4-qBit fleet behind Qui). Planning artifacts: - PROJECT.md: scope + 5 locked architectural decisions from 2026-05-17 /gsd-explore (read-only, both transports, publisher-daemon, both leaf shapes, parameterized templates) - REQUIREMENTS.md: 20 v1.0 requirements (PUB-*, CAT-*, REC-*, BEHAVE-*, OPS-*, VALID-*); 9 backlog items; out-of-scope explicit - ROADMAP.md: 4 phases (publisher+catalog → recipes → docs → validation); Phase 4 gated on manifold v1.2 LXC 111 deploy - STATE.md: fresh; Phase 1 as next action - config.json: copied from manifold/ (interactive, parallelization on, security_enforcement on) - notes/qui-plugin-architecture-exploration.md: substrate for everything, migrated from manifold/.planning/notes/ in prior commit on that side License: MIT. Run /gsd:discuss-phase 1 to start building. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .planning | ||
| .gitignore | ||
| LICENSE | ||
| README.md | ||
qui-monitor
A Manifold plugin + publisher daemon that surfaces Qui — a multi-instance qBittorrent aggregator — as live dashboard cards. First real-world consumer of Manifold v1.2's parameterized-leaf capability.
Status: project opened 2026-05-18 (Phase 1 not yet started). Architectural decisions are locked; planning artifacts are in .planning/. Run /gsd:discuss-phase 1 to start building.
What it does
- A
manifold-qui.servicedaemon on a server scrapes Qui's Prometheus endpoint (scalars + time-series) and polls Qui's JSON API (instance list, per-torrent detail). - The daemon republishes everything to MQTT under
metrics/qui/{aggregate,instance,instances,health}/*. - The plugin's
catalog.template.jsondeclares both aggregate leaves (fleet dl-speed, total torrents, etc.) and parameterized per-instance leaves (qui.instance.{instance}.dl_speed, ...) — the latter populated at runtime from the live instance list. - The dashboard wizard renders a picker beside parameterized leaves so a user can pick an instance from the live list. Cards persist the resolved internal ID; renaming or removing the instance in Qui is handled gracefully by Manifold v1.2's label rehydration + missing-instance degrade tile.
What it doesn't do
No action endpoints (pause / resume / delete) on the dashboard — read-surface only. Project-wide "no shell from browser" rule. Use Qui's own UI for actions.
Prerequisites
- Qui installed upstream and configured with your qBit instance(s)
- Manifold v1.2 deployed (parameterized-leaf capability is required)
- mosquitto broker reachable from wherever this daemon runs (Karl's homelab: LXC 109)
Quick start
(Will land in Phase 3. Until then, hand-deploy from plugins/qui/ once Phase 1 ships the publisher.)
Layout
qui-monitor/
├── .planning/ # GSD planning artifacts (scope, decisions, roadmap)
├── plugins/qui/ # Manifold plugin (manifest + catalog + publisher daemon)
├── consolidator/ # reserved for Netdata bridge (empty in v1.0)
├── catalog/leaves.json # frozen reference copy of the plugin's catalog
├── cards/ # bundled card recipes (fleet glance, per-instance row, drill-down)
├── templates/ # wizard preset templates (if/when those exist)
├── docs/ # architecture, secrets, gotchas, runbooks
└── README.md # this file
Cross-references
- Manifold v1.2 milestone (the capability this product consumes):
../manifold/.planning/milestones/v1.2-ROADMAP.md - Plugin author guide §Parameterized leaves:
../manifold/docs/PLUGIN-AUTHOR-GUIDE.md - The exploration that locked the architecture:
.planning/notes/qui-plugin-architecture-exploration.md - Carve-out conventions across the homelab:
../CARVE-OUT-NOTES.md
License
MIT — see LICENSE. (Upstream Qui is GPL-3.0; this product consumes Qui at runtime via its public APIs but doesn't link against its code, so MIT is fine.)