Commandarr is an AI agent that talks to your entire Plex/Jellyfin/Emby + *arr ecosystem.
Ask it questions in plain English. It figures out which services to query, takes action, and reports back.
Describe any dashboard widget and it builds it instantly. Need an integration that doesn't exist? It writes one for you.
From your couch, your phone, or a Telegram message.
One-Command Install • What Can It Do? • 37+ Integrations • Screenshots • Docs
You're running Plex, Sonarr, Radarr, Prowlarr, qBittorrent, Bazarr, Overseerr, and Tautulli. Maybe Lidarr too. Every one of them has its own web UI. Checking what's downloading means opening one tab. Seeing who's streaming means another. Approving a request? Another. Figuring out why something stalled? Good luck — that's three tabs and some detective work.
Commandarr sits on top of all of it. You talk to it like a person:
"What's currently playing on Plex?"
"Add The Bear to Sonarr in 1080p"
"Why is my download queue stuck?"
"Approve all pending requests in Overseerr"
"Every morning at 9am, check if anything finished downloading overnight and send me a Telegram summary"
It calls the right APIs, cross-references across services, and gives you the answer. No tab-switching. No memorizing which app does what.
- Dynamic UI generation — Describe any dashboard widget and the AI builds it instantly. No templates, no presets. Every dashboard is unique to you.
- Self-extending — Need an integration that doesn't exist? Tell the agent to build one. It writes the full integration from scratch — manifest, API client, tools — and it's live immediately.
- Cross-service reasoning — The agent connects dots across your entire stack. It doesn't just query one API — it correlates data from Plex, Sonarr, qBittorrent, Prowlarr, and whatever else you're running to actually answer your question.
- Natural language automations — No cron syntax. Just say "every morning at 9am, send me a download summary on Telegram" and it's done.
One command. Handles install, config, and updates. Your data persists across updates automatically.
Linux / macOS:
curl -fsSL https://raw.githubusercontent.com/braedonsaunders/commandarr/main/install.sh | bashWindows (PowerShell as Admin):
iwr https://raw.githubusercontent.com/braedonsaunders/commandarr/main/install.ps1 -OutFile install.ps1; powershell -ExecutionPolicy Bypass -File install.ps1The installer checks Docker, asks a few questions (port, auth, Telegram token, Plex setup), generates your docker-compose.yml, pulls the image, and starts it. Run the same command again to update.
Or use Docker Compose directly
services:
commandarr:
image: ghcr.io/braedonsaunders/commandarr:latest
container_name: commandarr
ports:
- 8484:8484
volumes:
- ./data:/app/data
- ./integrations:/app/custom-integrations
environment:
- PORT=8484
# - AUTH_USERNAME=admin
# - AUTH_PASSWORD=changeme
# - TELEGRAM_BOT_TOKEN=your-token
restart: unless-stopped- Docker
- An LLM API key — OpenRouter (recommended), OpenAI, Anthropic, Google Gemini, or run fully local with Ollama / LM Studio
No data leaves your network unless you choose a cloud LLM provider. Pair with Ollama for a completely self-contained setup — no API keys, no cloud calls, no telemetry. Ever.
Chat from the web dashboard, Telegram, or Discord. The agent has access to 100+ tools across all your services and figures out which ones to use.
You: "Something's downloading slowly, figure out why"
Commandarr: Checking download clients... qBittorrent shows 2 active torrents at
0.3 MB/s (normally 12+ MB/s). Checking Prowlarr... your IPTorrents indexer is
returning errors. Looks like the tracker is down. Your other torrents via
1337x are downloading normally. I'd wait it out — the tracker usually
comes back within a few hours.
The agent reasons across services. It doesn't just query one API — it connects the dots.
No cron expressions. Just say what you want:
- "Every morning at 9am, send me a download summary on Telegram"
- "Every 5 minutes, check if Plex is up. If it's down, restart it and notify me"
- "Every Friday, check for missing episodes of my monitored shows"
Automations run on schedule, execute the same agent logic, and optionally notify you via Telegram or Discord.
This is the killer feature. Describe any widget in plain English and the agent builds it on the spot — fully functional HTML/CSS/JS with live data from your integrations. There are no templates. There are no limits. If you can describe it, Commandarr creates it.
- "Build me a widget showing who's watching Plex right now with poster art"
- "Show my Radarr + Sonarr download queue as a combined list with progress bars"
- "Make a calendar widget with upcoming releases this week"
- "Create a server health dashboard with CPU, RAM, and disk usage across all my services"
- "Build a widget that shows my most-watched genres this month as a pie chart"
The agent writes the widget code, wires up the API calls, and drops it onto your dashboard. Widgets auto-refresh on a configurable interval, support drag-and-drop positioning, and pull data directly from any connected service. Don't like the layout? Just tell it to change it. Want to combine data from 5 different services into one view? Done.
Every user's dashboard is unique — because you design it by describing what you want.
Use any LLM provider. Set a priority order — if your primary goes down, Commandarr falls back automatically:
| Provider | Notes |
|---|---|
| OpenRouter | Recommended — access to 100+ models, one API key |
| Ollama | Fully local, no API key needed, no data leaves your box |
| LM Studio | Local with a nice UI |
| OpenAI | GPT-4o, GPT-4 |
| Anthropic | Claude |
| Google Gemini | Gemini Pro |
| Custom endpoint | Any OpenAI-compatible API |
Drag-and-drop to set fallback order in the web UI.
Install Commandarr on your phone's homescreen. Quick-action buttons for the stuff you do most — pause downloads, restart Plex, approve requests — without opening any other app.

Dashboard — system status, download queue, now playing, and upcoming releases at a glance

Integrations — connect your services, see health status, test connections
37+ integrations with 140+ tools. If it has an API, Commandarr probably talks to it — or it can build the integration for you.
| Integration | What It Can Do |
|---|---|
| Plex | Now playing, restart, library scan, search, media info, play control, scheduled tasks, activity log, devices, users, watchlist gaps — 15 tools |
| Jellyfin | Now playing, restart, library scan, search, media info, play control, scheduled tasks, activity log, session messaging, devices, users — 14 tools |
| Emby | Now playing, restart, library scan, search, media info, play control, scheduled tasks, activity log, session messaging, devices, users — 14 tools |
| Integration | What It Can Do |
|---|---|
| Radarr | Search, add, queue, calendar, profiles, releases, custom formats, history, missing movies, rename — 23 tools |
| Sonarr | Search, add, queue, calendar, profiles, releases, episode search, missing episodes, series completeness — 23 tools |
| Lidarr | Search artists, add, queue, calendar, quality profiles |
| Readarr | Search authors, add, queue, calendar, quality profiles |
| Whisparr | Search, add, queue, calendar, quality profiles |
| Bazarr | Wanted subs, subtitle history, manual search, providers, system status |
| Integration | What It Can Do |
|---|---|
| qBittorrent | Torrents, status, pause/resume, add, speed limits |
| SABnzbd | Queue, history, status, pause/resume, add NZB, speed limits |
| NZBGet | Queue, history, status, pause/resume, add NZB, speed limits |
| Transmission | Torrents, status, pause/resume, add, speed limits |
| Deluge | Torrents, status, pause/resume, add, speed limits |
| Unpackerr | Extraction status, history, active queue |
| Integration | What It Can Do |
|---|---|
| Prowlarr | Indexer list, stats, cross-indexer search, test, health warnings |
| Overseerr / Jellyseerr | List/approve/decline requests, search, trending, users |
| Integration | What It Can Do |
|---|---|
| Tautulli | Activity, watch history, recently added, most watched, users, server info |
| Integration | What It Can Do |
|---|---|
| Docker | Container management and rollback |
| Tailscale | Network, devices, routes, DNS |
| Traefik / Caddy | Reverse proxy management |
| GlueTUN | VPN container management |
| Uptime Kuma | Service monitoring |
| Integration | What It Can Do |
|---|---|
| Kometa (Plex Meta Manager) | Collections, overlays, playlists, YAML config management |
| Maintainerr | Plex library maintenance |
| Recyclarr | Quality profile sync |
| Tdarr | Video transcoding management |
| Autobrr | Torrent automation |
| Cross-seed | Seed optimization |
| Integration | What It Can Do |
|---|---|
| Notifiarr | Notification aggregation |
| Gotify / ntfy | Self-hosted push notifications |
| Integration | What It Can Do |
|---|---|
| Home Assistant | Entity states, services, scenes, automations, history — "dim the lights for movie night" |
| Tool | What It Does |
|---|---|
commandarr_diagnose |
Health check all integrations in one shot |
commandarr_stack_summary |
Streams + downloads + requests — your whole stack at a glance |
commandarr_create_automation |
Create automations with natural language |
commandarr_create_widget |
Generate dashboard widgets from a description |
Commandarr can automatically restart Plex when it goes down, regardless of how Plex is installed:
| Setup | Method | Configuration |
|---|---|---|
| Any | Plex API restart | Automatic — always tried first |
| Bare metal | Commandarr Helper service | Installer sets it up |
| Docker | docker restart |
Mount Docker socket + set PLEX_RESTART_COMMAND |
The installer handles this automatically based on your answers.
Don't see a service you need? Tell Commandarr to build the integration for you. The agent can write a complete integration — manifest, API client, and tools — from a description or API docs:
"Add an integration for my Unraid server"
"Build a Portainer integration that can list and restart containers"
"I use Audiobookshelf — make an integration that shows my listening progress and library stats"
The agent generates the integration files, registers them, and they're immediately available as tools and widget data sources. No coding required. No PRs to wait on. Your custom integrations persist across updates in the custom-integrations volume.
You can also build integrations by hand — copy the template directory, define a manifest and tools:
src/integrations/_template/
├── manifest.ts # name, description, credential fields
├── client.ts # API client
├── tools/ # one file per tool
└── widgets/ # prebuilt widgets (optional)
If a service has an API, Commandarr can talk to it — whether the agent writes the integration or you do.
All configuration happens through the web UI after install. For Docker environment variables:
| Variable | Description | Default |
|---|---|---|
PORT |
Web UI port | 8484 |
AUTH_USERNAME |
Basic auth username | — |
AUTH_PASSWORD |
Basic auth password | — |
TELEGRAM_BOT_TOKEN |
Telegram bot token from @BotFather | — |
PLEX_RESTART_COMMAND |
Custom Plex restart command (Docker setups) | — |
LLM provider, integration credentials, automations, widgets, and everything else is configured in the UI.
git clone https://github.com/braedonsaunders/commandarr.git
cd commandarr
bun install && cd web && bun install && cd ..
bun run dev # backend on :8484
cd web && bun run dev # frontend on :5173Built with Bun, Hono, React, shadcn/ui, SQLite (Drizzle ORM), and Tailwind. No external database needed.
MIT
Built for the homelab community. No telemetry. No cloud dependency. Your stack, your rules.
