---
name: clawarr-suite
description: "Unified deep-integration control for self-hosted media automation stacks. This skill provides comprehensive agent-executable operations across the entire *arr ecosystem with rich analytics, dashboard generation, and advanced library exploration."
license: "MIT"
metadata:
  decimalai-skill-id: "a44aba06-4ad0-4688-84fd-9de78016645a"
  decimalai-version-id: "fc02e724-b248-4c2c-b8dd-ffc0629c7213"
  decimalai-version: "1"
  decimalai-body-sha256: "7e6388f1b25501a81ff72fa657211778c5aa6032f09cab727f2307ef871a043c"
  decimalai-name: "clawarr-suite"
  decimalai-format: "1"
  decimalai-invocation: "model"
  decimalai-category: "devops"
  decimalai-source: "https://app.decimal.ai/s/clawarr-suite@1/SKILL.md"
---
# ClawARR Suite

Unified deep-integration control for self-hosted media automation stacks. This skill provides comprehensive agent-executable operations across the entire *arr ecosystem with rich analytics, dashboard generation, and advanced library exploration.

## Security & Scanner Clarity

- Local-first operations: all API calls target user-provided local hosts (typically LAN/NAS).
- No embedded secrets: API keys/tokens are sourced from environment variables or user-owned config files.
- No telemetry/exfiltration paths: scripts do not transmit credentials or library data to third-party endpoints.
- Destructive behavior is opt-in: delete/remove actions require explicit command invocation by the user/agent.
- Setup logic avoids dynamic `eval` and uses explicit variable mapping for scanner-friendly shell behavior.

## Quick Start

**First time setup (recommended):**
```bash
scripts/setup.sh <host-ip-or-hostname>
```
Discovers services, grabs API keys, verifies connections, and outputs your config.

**Common operations:**
```bash
scripts/status.sh              # Health check all services
scripts/library.sh stats all   # Library statistics
scripts/analytics.sh activity  # Current Plex streams
scripts/dashboard.sh           # Generate HTML dashboard
scripts/manage.sh wanted all   # Show missing content
scripts/requests.sh list       # Overseerr requests
```

## Scripts Overview

### Core Operations
- **`setup.sh`** — Guided setup wizard with auto-discovery
- **`discover.sh`** — Scan host for *arr services
- **`status.sh`** — Health check all configured services
- **`diagnose.sh`** — Automated troubleshooting

### Library Exploration (`library.sh`)
Deep statistics and exploration for Radarr/Sonarr/Lidarr:
```bash
library.sh stats [app]          # Overall library stats
library.sh quality [app]        # Quality profile breakdown
library.sh missing [app]        # Missing/wanted content
library.sh unmonitored [app]    # Unmonitored items
library.sh recent [app] [days]  # Recently added (default: 7)
library.sh genres [app]         # Genre distribution
library.sh years [app]          # Year distribution
library.sh studios [app]        # Studio/network breakdown
library.sh nofiles [app]        # Monitored but no files
library.sh disk [app]           # Disk usage by root folder
```

### Analytics (`analytics.sh`)
Rich viewing analytics from Tautulli/Plex:
```bash
analytics.sh activity                 # Currently watching
analytics.sh history [count]          # Watch history
analytics.sh most-watched [period]    # Most watched (week/month/year)
analytics.sh popular-genres [period]  # Popular genres
analytics.sh peak-hours               # Peak watching hours
analytics.sh user-stats [user]        # User activity
analytics.sh library-stats            # Plex library stats
analytics.sh recent-added [count]     # Recently added to Plex
analytics.sh play-totals              # Total play statistics
```

### Content Management (`manage.sh`)
Add, remove, and manage content:
```bash
manage.sh add-movie "<title>" [quality] [root]
manage.sh add-series "<title>" [quality] [root]
manage.sh remove <app> <id>
manage.sh wanted [app]
manage.sh calendar [app] [days]
manage.sh history [app] [count]
manage.sh rename <app> <id>
manage.sh refresh <app> [id]
```

### Request Management (`requests.sh`)
Overseerr request handling:
```bash
requests.sh list [pending|approved|available|all]
requests.sh approve <id>
requests.sh deny <id> [reason]
requests.sh info <id>
requests.sh stats
```

### Subtitle Management (`subtitles.sh`)
Bazarr operations:
```bash
subtitles.sh wanted
subtitles.sh history [count]
subtitles.sh search <series|movie> <id>
subtitles.sh languages
```

### Indexer Management (`indexers.sh`)
Prowlarr operations:
```bash
indexers.sh list
indexers.sh test [id]
indexers.sh stats
```

### Download Client (`downloads.sh`)
SABnzbd operations:
```bash
downloads.sh active
downloads.sh speed
downloads.sh history [count]
downloads.sh pause
downloads.sh resume
downloads.sh queue
```

### Dashboard Generation (`dashboard.sh`)
Generate self-contained HTML dashboard:
```bash
dashboard.sh [output_file]
```
Creates beautiful dark-themed dashboard with:
- System health
- Download activity
- Library statistics
- Recent activity
- Viewing analytics
- Disk usage

Output defaults to `clawarr-dashboard.html` (open in any browser).

### Media Tracker Integration (`trakt.sh`, `trackers.sh`, `letterboxd.sh`, `simkl.sh`)

Track and sync what you watch across services like Trakt.tv, Letterboxd, Simkl, and more.

**Unified Interface (`trackers.sh`):**
```bash
trackers.sh setup              # Interactive setup wizard
trackers.sh status             # Show configured trackers
trackers.sh sync plex trakt    # Sync Plex → Trakt
trackers.sh export trakt json  # Export watch history
trackers.sh import letterboxd file.csv
trackers.sh compare trakt simkl
```

**Trakt.tv Integration (`trakt.sh`):**

*Authentication:*
```bash
trakt.sh auth                  # Device code OAuth flow
trakt.sh auth-status           # Check authentication
```

*Profile & Stats:*
```bash
trakt.sh profile [username]    # Show profile
trakt.sh stats [username]      # Detailed statistics
```

*Watching & History:*
```bash
trakt.sh watching              # Currently watching
trakt.sh history [movies|shows|episodes] [limit]
trakt.sh sync-history export file.json
trakt.sh sync-history import file.json
```

*Scrobbling:*
```bash
trakt.sh scrobble start movie 12345
trakt.sh scrobble stop movie 12345 100
trakt.sh checkin movie "Inception"
```

*Lists & Collections:*
```bash
trakt.sh watchlist [movies|shows]
trakt.sh watchlist-add movie "Dune Part Two"
trakt.sh collection movies
trakt.sh collection-add movie 12345
trakt.sh lists                 # Custom lists
trakt.sh list-items my-favorites
```

*Ratings:*
```bash
trakt.sh ratings movies 8      # Movies rated 8+
trakt.sh rate movie "Inception" 10
```

*Discovery:*
```bash
trakt.sh recommendations movies
trakt.sh trending shows
trakt.sh popular movies
trakt.sh calendar all 7        # Next 7 days
```

*Search:*
```bash
trakt.sh search "Breaking Bad" show
```

*Sync:*
```bash
trakt.sh sync-plex             # Sync Plex watch history to Trakt
```

**Letterboxd Integration (`letterboxd.sh`):**
```bash
letterboxd.sh export           # Export from Plex as Letterboxd CSV
letterboxd.sh import diary.csv # Import Letterboxd diary
letterboxd.sh profile username # View public profile
letterboxd.sh diary username 2024
```

**Simkl Integration (`simkl.sh`):**
```bash
simkl.sh auth                  # OAuth authentication
simkl.sh profile               # Show profile
simkl.sh stats                 # Viewing statistics
simkl.sh history movies        # Watch history
simkl.sh watchlist all         # View watchlist
simkl.sh sync                  # Sync with Plex
```

### Traktarr & Retraktarr Integration

Automate content discovery and library syncing with Trakt lists.

**Traktarr (Trakt → Radarr/Sonarr):**
```bash
# Status and configuration
trakt.sh traktarr-status       # Check if installed
trakt.sh traktarr-config       # Configure Traktarr

# Add content from Trakt lists
trakt.sh traktarr-add movies trending 10
trakt.sh traktarr-add movies anticipated 15
trakt.sh traktarr-add movies popular 5
trakt.sh traktarr-add shows trending 5
trakt.sh traktarr-add movies watchlist 50
```

**Retraktarr (Radarr/Sonarr → Trakt):**
```bash
# Status and configuration
trakt.sh retraktarr-status     # Check if installed
trakt.sh retraktarr-config     # Configure Retraktarr

# Sync library to Trakt lists
trakt.sh retraktarr-sync all   # Sync movies and shows
trakt.sh retraktarr-sync movies
trakt.sh retraktarr-sync shows
```

**Installation via Setup Wizard:**
```bash
trackers.sh setup
# Choose option 5 for Traktarr
# Choose option 6 for Retraktarr
# Offers to install via pip if not found
```

**What They Do:**
- **Traktarr:** Automatically adds content from Trakt lists (trending, anticipated, watchlist, custom) to Radarr/Sonarr for download
- **Retraktarr:** Syncs your Radarr/Sonarr library back to Trakt as public/private lists

See `references/traktarr-retraktarr.md` for complete setup, cron scheduling, and usage patterns.

### Prowlarr Indexer Management (`prowlarr.sh`)
Centralized indexer management across all *arr apps:
```bash
prowlarr.sh indexers              # List all indexers
prowlarr.sh test [id]             # Test indexer(s)
prowlarr.sh stats                 # Indexer & app sync statistics
prowlarr.sh search <query> [type] # Search across all indexers (type: movie|tv|audio|book)
prowlarr.sh apps                  # List sync targets (Sonarr/Radarr/etc)
prowlarr.sh add-app <type> <url> <key>  # Add app sync target
prowlarr.sh sync                  # Trigger sync to all apps
prowlarr.sh status                # Health check
prowlarr.sh logs [count]          # Recent logs
```

### Recyclarr Quality Profiles (`recyclarr.sh`)
Sync TRaSH Guides quality profiles to Sonarr/Radarr:
```bash
recyclarr.sh status               # Check status & config
recyclarr.sh sync [instance]      # Sync profiles (all or specific)
recyclarr.sh diff [instance]      # Preview changes without applying
recyclarr.sh profiles             # List available TRaSH profiles
recyclarr.sh qualities [app]      # List quality definitions
recyclarr.sh config               # Show current config
recyclarr.sh create-config        # Generate config template
recyclarr.sh logs [count]         # View recent logs
```

### Maintainerr Library Cleanup (`maintainerr.sh`)
Automated library cleanup based on rules:
```bash
maintainerr.sh status             # Check status
maintainerr.sh rules              # List cleanup rules
maintainerr.sh collections        # List managed collections
maintainerr.sh run [rule_id]      # Trigger rules (all or specific)
maintainerr.sh media <rule_id>    # Show media matched by a rule
maintainerr.sh exclude <media_id> <rule_id>  # Exclude media from rule
maintainerr.sh logs               # View activity log
```

### Notifiarr Notifications (`notifiarr.sh`)
Unified notification management across *arr services:
```bash
notifiarr.sh status               # Check status & integrations
notifiarr.sh triggers             # List notification triggers
notifiarr.sh services             # Show connected services
notifiarr.sh test [channel]       # Send test notification
notifiarr.sh config               # Configuration summary
notifiarr.sh logs                 # Recent notification log
```

### Kometa Collection Manager (`kometa.sh`)
Plex collection, overlay, and metadata automation:
```bash
kometa.sh status                  # Check container status
kometa.sh run [library]           # Run Kometa (all or specific library)
kometa.sh collections             # Show Plex collections
kometa.sh overlays                # Check overlay config
kometa.sh config                  # Show Kometa config
kometa.sh templates               # List available default collections/overlays
kometa.sh logs [count]            # View recent logs
```

### Unpackerr Archive Extraction (`unpackerr.sh`)
Automatic archive extraction for download clients:
```bash
unpackerr.sh status               # Check status & config
unpackerr.sh activity             # Recent extraction activity
unpackerr.sh errors               # Recent errors/warnings
unpackerr.sh config               # Show configuration
unpackerr.sh logs [count]         # View recent logs
unpackerr.sh restart              # Restart container
```

### Legacy Scripts
- **`queue.sh`** — View download queues (use `manage.sh wanted` or `downloads.sh active` for more detail)
- **`search.sh`** — Search content (use `manage.sh add-*` for full workflow)

## Configuration

### Environment Variables

**Core Services:**
```bash
export CLAWARR_HOST=192.168.1.100
export SONARR_KEY=abc123...
export RADARR_KEY=def456...
export LIDARR_KEY=ghi789...
export READARR_KEY=jkl012...
export PROWLARR_KEY=mno345...
export BAZARR_KEY=pqr678...
export OVERSEERR_KEY=stu901...
export PLEX_TOKEN=vwx234...
export TAUTULLI_KEY=yz567...
export SABNZBD_KEY=abc890...
export NOTIFIARR_KEY=xyz123...

# Companion services (auto-detected, keys optional)
export PROWLARR_KEY=abc123...   # Required for prowlarr.sh

# Docker-based services (SSH access for remote management)
export RECYCLARR_SSH=mynas       # SSH host for recyclarr container
export KOMETA_SSH=mynas          # SSH host for kometa container
export UNPACKERR_SSH=mynas       # SSH host for unpackerr container
export DOCKER_CONFIG_BASE=/opt/docker  # Docker config root (default: /volume1/docker for Synology)
```

**Media Trackers (optional):**
```bash
# Trakt.tv (register app at https://trakt.tv/oauth/applications/new)
export TRAKT_CLIENT_ID=your_client_id
export TRAKT_CLIENT_SECRET=your_client_secret

# Simkl (register at https://simkl.com/settings/developer)
export SIMKL_CLIENT_ID=your_client_id
export SIMKL_CLIENT_SECRET=your_client_secret

# Letterboxd (requires API approval)
export LETTERBOXD_API_KEY=your_api_key  # Optional, uses CSV export if not set
```

**Token Storage:**
- Tokens are automatically saved to `~/.config/clawarr/`
- Files: `trakt_tokens.json`, `simkl_tokens.json`
- Permissions: 600 (user read/write only)

Store in `.env` file and source before running scripts.

### Standard Ports
- Sonarr: 8989
- Radarr: 7878
- Lidarr: 8686
- Readarr: 8787
- Prowlarr: 9696
- Bazarr: 6767
- Overseerr: 5055
- Plex: 32400
- Tautulli: 8181
- SABnzbd: 38080
- Notifiarr: 5454
- Maintainerr: 6246
- FlareSolverr: 8191
- Homarr: 7575

## API Key Discovery

### Method 1: /initialize.json (Easiest)
Most *arr apps expose API key at public endpoint:
```bash
curl -s http://HOST:7878/initialize.json | jq -r '.apiKey'
```

For older versions (v3):
```bash
curl -s http://HOST:7878/initialize.js | grep -o "apiKey: '[^']*'" | cut -d"'" -f2
```

### Method 2: Config Files
**Docker/Unraid/Synology:** `/config/config.xml` (inside container)
```bash
grep '<ApiKey>' /path/to/config.xml | sed 's/.*<ApiKey>\(.*\)<\/ApiKey>.*/\1/'
```

### Method 3: Web UI
Settings → General → Security → API Key

### Plex Token
From Plex Web UI:
1. Open any media item
2. "Get Info" → "View XML"
3. URL contains `X-Plex-Token=...`

Or use:
```bash
curl -u "username:password" -X POST \
  'https://plex.tv/users/sign_in.json' \
  -H "X-Plex-Client-Identifier: <unique-id>"
```

### Tautulli API Key
Settings → Web Interface → API → API Key

### SABnzbd API Key
Config → General → Security → API Key

## Common Workflows

### Library Analysis
```bash
# Get complete library overview
scripts/library.sh stats all

# Find quality upgrade candidates
scripts/library.sh quality radarr

# Show missing content
scripts/library.sh missing all

# Check disk usage
scripts/library.sh disk all
```

### Viewing Analytics
```bash
# Current activity
scripts/analytics.sh activity

# Most watched this month
scripts/analytics.sh most-watched month

# User statistics
scripts/analytics.sh user-stats

# Peak hours
scripts/analytics.sh peak-hours
```

### Request Management
```bash
# Show pending requests
scripts/requests.sh list pending

# Approve request
scripts/requests.sh approve 123

# Request statistics
scripts/requests.sh stats
```

### Content Management
```bash
# Add movie
scripts/manage.sh add-movie "Dune Part Two"

# Show calendar
scripts/manage.sh calendar all 7

# View history
scripts/manage.sh history radarr 30

# Show wanted/missing
scripts/manage.sh wanted all
```

### Indexer Management (Prowlarr)
```bash
# List and test all indexers
scripts/prowlarr.sh indexers
scripts/prowlarr.sh test

# Search across all indexers
scripts/prowlarr.sh search "Dune" movie

# Add Sonarr/Radarr as sync targets
scripts/prowlarr.sh add-app sonarr http://host:8989 <sonarr_key>
scripts/prowlarr.sh add-app radarr http://host:7878 <radarr_key>

# Trigger indexer sync to all apps
scripts/prowlarr.sh sync
```

### Quality Profiles (Recyclarr)
```bash
# Preview changes
scripts/recyclarr.sh diff

# Sync TRaSH Guides profiles
scripts/recyclarr.sh sync

# Check status
scripts/recyclarr.sh status
```

### Library Cleanup (Maintainerr)
```bash
# View rules and matched media
scripts/maintainerr.sh rules
scripts/maintainerr.sh media 1

# Run cleanup
scripts/maintainerr.sh run

# Exclude something from cleanup
scripts/maintainerr.sh exclude 12345 1
```

### Collections & Overlays (Kometa)
```bash
# Run collection/overlay generation
scripts/kometa.sh run

# View existing collections
scripts/kometa.sh collections

# See available templates
scripts/kometa.sh templates
```

### Dashboard
```bash
# Generate dashboard
scripts/dashboard.sh my-dashboard.html

# Open in browser
open my-dashboard.html
```

### Media Tracking Workflows

**Initial Setup:**
```bash
# Set up Trakt.tv
scripts/trackers.sh setup
# Select option 1 (Trakt.tv)
# Follow device auth flow

# Check status
scripts/trackers.sh status
```

**Sync Plex to Trakt:**
```bash
# One-time sync of watch history
scripts/trakt.sh sync-plex

# Or use unified interface
scripts/trackers.sh sync plex trakt
```

**Export for Letterboxd:**
```bash
# Generate Letterboxd-compatible CSV
scripts/letterboxd.sh export

# Upload at letterboxd.com/import/
```

**Cross-Tracker Sync:**
```bash
# Export from Trakt, convert for Letterboxd
scripts/trackers.sh sync trakt letterboxd

# Compare two services
scripts/trackers.sh compare trakt simkl
```

**Discovery & Recommendations:**
```bash
# Get personalized recommendations
scripts/trakt.sh recommendations movies

# See what's trending
scripts/trakt.sh trending shows

# Check upcoming releases
scripts/trakt.sh calendar all 7
```

**Track Viewing:**
```bash
# See what you're currently watching
scripts/trakt.sh watching

# View watch history
scripts/trakt.sh history movies 50

# Rate something you watched
scripts/trakt.sh rate movie "Inception" 10
```

**Automation with Traktarr/Retraktarr:**
```bash
# Set up Traktarr (Trakt → Arr)
scripts/trackers.sh setup  # Option 5

# Add trending movies to Radarr
scripts/trakt.sh traktarr-add movies trending 10

# Add anticipated shows to Sonarr
scripts/trakt.sh traktarr-add shows anticipated 5

# Set up Retraktarr (Arr → Trakt)
scripts/trackers.sh setup  # Option 6

# Sync library to Trakt lists
scripts/trakt.sh retraktarr-sync all

# Schedule automation (cron):
# Traktarr every 6 hours: 0 */6 * * * traktarr run
# Retraktarr daily at 3am: 0 3 * * * retraktarr sync
```

## Troubleshooting

### No Files Eligible for Import

**Diagnosis:**
```bash
scripts/diagnose.sh
```

Common causes:
1. **Stale Docker mounts** — Container restarted but host didn't
2. **Path mapping** — Download client and *arr app see different paths
3. **Permissions** — *arr app can't read download directory
4. **Category mismatch** — Download in wrong category

**Solutions:**
```bash
# Restart containers (fixes stale mounts)
docker restart radarr sonarr

# Check path mappings
# Settings → Download Clients → Remote Path Mappings
```

### Queue Stuck

**Check download client:**
```bash
scripts/downloads.sh active
scripts/downloads.sh speed
```

**Check *arr queues:**
```bash
scripts/manage.sh wanted all
```

**Check indexers:**
```bash
scripts/indexers.sh test
scripts/indexers.sh stats
```

### Missing Subtitles

```bash
scripts/subtitles.sh wanted
scripts/subtitles.sh search series <id>
```

## Reference Documentation

- **`references/api-endpoints.md`** — Complete API reference for all services
- **`references/tracker-apis.md`** — Media tracker API documentation (Trakt, Simkl, Letterboxd)
- **`references/traktarr-retraktarr.md`** — Complete guide to Traktarr & Retraktarr automation
- **`references/companion-services.md`** — Prowlarr, Recyclarr, FlareSolverr, Unpackerr, Notifiarr, Maintainerr, Kometa reference
- **`references/common-issues.md`** — Troubleshooting guide with solutions
- **`references/setup-guide.md`** — Platform-specific installation
- **`references/prompts.md`** — Suggested natural-language prompts for agents
- **`references/dashboard-templates.md`** — HTML/CSS templates for dashboards

## Example Agent Prompts

See `references/prompts.md` for complete list. Examples:

**Library & Downloads:**
- "Show me what's downloading right now"
- "What movies were added this week?"
- "Generate a dashboard of my media library"
- "What are the most watched shows this month?"
- "Find all 720p movies that could be upgraded to 4K"
- "Show missing episodes for all monitored shows"
- "What's coming out this week?"
- "Approve all pending Overseerr requests"
- "How much disk space am I using per library?"
- "Show my Plex viewing stats for the last 30 days"
- "What subtitles are missing?"
- "Test all my indexers"

**Media Tracking:**
- "Set up Trakt tracking for my Plex library"
- "Sync my Plex watch history to Trakt"
- "What am I currently watching on Trakt?"
- "Show my Trakt watch history from this month"
- "Get movie recommendations based on my Trakt ratings"
- "What's trending on Trakt right now?"
- "Export my library for Letterboxd"
- "Compare my Trakt and Simkl watch histories"
- "Show me upcoming movie releases I'm tracking"
- "Rate Inception 10/10 on Trakt"
- "Add Dune Part Two to my Trakt watchlist"
- "Show my Letterboxd profile stats"
- "What are my top-rated movies on Trakt?"

**Prowlarr & Indexers:**
- "Show all my indexers and test them"
- "Search across all indexers for Breaking Bad"
- "Sync Prowlarr indexers to Sonarr and Radarr"
- "Add Sonarr as a sync target in Prowlarr"

**Quality Profiles (Recyclarr):**
- "Sync TRaSH Guides quality profiles"
- "Preview what Recyclarr would change"
- "Show available quality profiles for Radarr"
- "What quality definitions does Sonarr have?"

**Library Cleanup (Maintainerr):**
- "Show my library cleanup rules"
- "What movies are flagged for deletion?"
- "Run all cleanup rules now"
- "Exclude this movie from the cleanup rule"

**Collections & Overlays (Kometa):**
- "Run Kometa to update collections"
- "Show all my Plex collections"
- "What overlay templates are available?"
- "Add IMDb Top 250 collection to my movie library"

**Notifications (Notifiarr):**
- "Check Notifiarr status and integrations"
- "Send a test notification"
- "Show recent notifications"

**Archive Extraction (Unpackerr):**
- "Check Unpackerr status"
- "Show recent extraction activity"
- "Any extraction errors?"

**Traktarr/Retraktarr Automation:**
- "Set up Traktarr to auto-add trending movies"
- "Add the top 10 anticipated movies from Trakt to Radarr"
- "Configure Traktarr to monitor my Trakt watchlist"
- "Sync my Radarr library to a public Trakt list"
- "Show Traktarr status and configuration"
- "Add trending shows to Sonarr via Traktarr"
- "Set up automatic syncing between Trakt and my *arr apps"
- "What's Retraktarr doing? Is it synced?"

## Technical Notes

### Bash 3.2 Compatibility
All scripts are compatible with macOS bash 3.2:
- No associative arrays (`declare -A`)
- No uppercase parameter expansion (`${var^^}`)
- Use `$(echo "$var" | tr '[:lower:]' '[:upper:]')` for case conversion
- No `|&` (pipe stderr), use `2>&1` instead

### Dependencies
- **curl** — HTTP requests
- **jq** — JSON parsing
- **bc** — Math calculations (for percentages, GB conversions)
- **sed** — Text processing

All standard on macOS/Linux.

### Security
- Never log API keys
- Confirm destructive actions (delete, remove)
- Rate limiting for bulk operations
- Use HTTPS for remote access

### Performance
- Scripts cache API responses where possible
- Dashboard generation pulls data once per run
- Bulk operations use batch APIs when available

## Version Compatibility

Tested with:
- Sonarr v4.x (API v3)
- Radarr v5.x (API v3)
- Lidarr v2.x (API v1)
- Readarr v0.3.x (API v1)
- Prowlarr v1.x (API v1)
- Bazarr v1.4.x
- Overseerr v1.33.x (API v1)
- Plex Media Server (all recent versions)
- Tautulli v2.x (API v2)
- SABnzbd v4.x
- Recyclarr v7.x
- Unpackerr v0.14.x
- Notifiarr v0.8.x
- Maintainerr v2.x
- Kometa v2.x (Plex Meta Manager successor)
- FlareSolverr v3.x

## Contributing

Report issues or suggest features via GitHub. Include:
- Script name and command run
- Error output (sanitize API keys!)
- Service versions
- Platform (Docker/Unraid/Synology/etc)

## License

MIT License - See repository for details.
