Help us improve
Share bugs, ideas, or general feedback.
From homelab-core
Manages qBittorrent torrents via WebUI API: list/filter by status/category, add by magnet/URL/file, pause/resume/delete/recheck, set categories/tags/speed limits, view stats/files/trackers.
npx claudepluginhub jmagar/claude-homelab --plugin tautulliHow this skill is triggered — by the user, by Claude, or both
Slash command
/homelab-core:qbittorrentThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
**⚠️ MANDATORY SKILL INVOCATION ⚠️**
Manages SABnzbd Usenet downloads via REST API: monitor queue/history, add NZBs by URL/file, pause/resume/delete jobs, set speed limits, retry failures. For SABnzbd status, NZB queue, Usenet queries.
Searches Pirate Bay torrents via apibay.org API, extracts magnet links using CLI (season, smart, grab) or direct calls. For torrent searches, seeders, top lists.
Downloads videos from YouTube and other platforms for offline viewing, with quality selection, format options, batch and playlist support.
Share bugs, ideas, or general feedback.
⚠️ MANDATORY SKILL INVOCATION ⚠️
YOU MUST invoke this skill (NOT optional) when the user mentions ANY of these triggers:
Failure to invoke this skill when triggers occur violates your operational requirements.
Manage torrents via qBittorrent's WebUI API (v4.1+).
This skill provides read and write access to your qBittorrent torrent client:
Operations include both read and write actions. Always confirm before deleting torrents with file deletion.
Add credentials to ~/.claude-homelab/.env:
QBITTORRENT_URL="http://localhost:8080"
QBITTORRENT_USERNAME="admin"
QBITTORRENT_PASSWORD="adminadmin"
Set file permissions:
chmod 600 ~/.claude-homelab/.env
# All torrents
./scripts/qbit-api.sh list
# Filter by status
./scripts/qbit-api.sh list --filter downloading
./scripts/qbit-api.sh list --filter seeding
./scripts/qbit-api.sh list --filter paused
# Filter by category
./scripts/qbit-api.sh list --category movies
Filters: all, downloading, seeding, completed, paused, active, inactive, stalled, errored
./scripts/qbit-api.sh info <hash>
./scripts/qbit-api.sh files <hash>
./scripts/qbit-api.sh trackers <hash>
# By magnet or URL
./scripts/qbit-api.sh add "magnet:?xt=..." --category movies
# By file
./scripts/qbit-api.sh add-file /path/to/file.torrent --paused
./scripts/qbit-api.sh pause <hash> # or "all"
./scripts/qbit-api.sh resume <hash> # or "all"
./scripts/qbit-api.sh delete <hash> # keep files
./scripts/qbit-api.sh delete <hash> --files # delete files too
./scripts/qbit-api.sh recheck <hash>
./scripts/qbit-api.sh categories
./scripts/qbit-api.sh tags
./scripts/qbit-api.sh set-category <hash> movies
./scripts/qbit-api.sh add-tags <hash> "important,archive"
./scripts/qbit-api.sh transfer # global speed/stats
./scripts/qbit-api.sh speedlimit # current limits
./scripts/qbit-api.sh set-speedlimit --down 5M --up 1M
./scripts/qbit-api.sh version
./scripts/qbit-api.sh preferences
Torrent object includes:
hash, name, state, progressdlspeed, upspeed, etasize, downloaded, uploadedcategory, tags, save_pathStates: downloading, stalledDL, uploading, stalledUP, pausedDL, pausedUP, queuedDL, queuedUP, checkingDL, checkingUP, error, missingFiles
When the user asks about torrents:
list --filter downloadingadd "<magnet>" with appropriate categorypause allresume all or filter by hashinfo <hash> and files <hash>list --category moviesset-speedlimit --down 5M --up 1MCRITICAL: When invoking scripts from this skill via the zsh-tool, ALWAYS use pty: true.
Without PTY mode, command output will not be visible even though commands execute successfully.
Correct invocation pattern:
<invoke name="mcp__plugin_zsh-tool_zsh-tool__zsh">
<parameter name="command">./skills/SKILL_NAME/scripts/SCRIPT.sh [args]</parameter>
<parameter name="pty">true</parameter>
</invoke>
| Script | Purpose |
|---|---|
qbit-api.sh | Main API wrapper — all torrent operations |
qbit-api-wrapper.sh | Thin PTY shim — captures and re-prints qbit-api.sh output via printf to ensure visibility in environments where stdout buffering may suppress output |