Airsc is free for everyone. If it helps you, support it with $2–$20.

Support
PluginCautionIntegrations & automationSome setup

claude-homelab

jmagar · jmagar/claude-homelab

A comprehensive plugin and collection of agents, commands, and skills for Claude Code to manage homelab services like media automation and infrastructure monitoring.

Comprehensive Agents, Commands, Hooks, and Skills for homelab service management - media automation, infrastructure monitoring, document management, and more

81 stars10License: MITUpdated 18 days ago0 opens

Preview

▍

What you can do with it

  • Automate media management tasks within your homelab using Claude Code.
  • Monitor homelab infrastructure and receive alerts directly via Claude Code agents.
  • Integrate various homelab services using pre-built skills and commands in Claude Code.

Safety check

Caution

Usable, but read the notes first.

  • ●Installer downloads a remote script and pipes it to the shell.scripts/install.sh

Automated scan of the repo files. Always review code you run.

From the README

Claude Homelab

Current release: 1.4.0.

Homelab plugin hub for Claude Code, Codex, and Gemini. This repository is the source of truth for the homelab-core plugin, bundled skill-only integrations, agents, commands, and shared credential bootstrapping.

Overview

claude-homelab serves three roles at once:

  • The homelab-core plugin published through the Claude marketplace
  • The canonical mono-repo for 16 bundled skill-only service integrations
  • The source for Codex and Gemini extension manifests that mirror the same workflow surface

The repo root is the plugin root. Do not edit generated copies in ~/.claude/ or ~/.claude/plugins/cache/ directly.

Installation

Claude marketplace

/plugin marketplace add jmagar/claude-homelab
/plugin install homelab-core @jmagar-claude-homelab

After install, Claude Code downloads the plugin into ~/.claude/plugins/cache/. No symlinks are created on this path.

Bash / symlink install

curl -sSL https://raw.githubusercontent.com/jmagar/claude-homelab/main/scripts/install.sh | bash

Or, if you already have the repo cloned:

./scripts/install.sh

The installer:

  1. Checks prerequisites (git, jq, curl)
  2. Clones the repo to ~/claude-homelab (or pulls if it exists)
  3. Runs setup-creds.sh — creates ~/.claude-homelab/.env from .env.example with chmod 600
  4. Runs setup-symlinks.sh — symlinks skills, agents, and commands into ~/.claude/
  5. Runs verify.sh — confirms every symlink and required file is in place
  6. Prints next steps

Credential Model

All credentials for every service live in a single file:

~/.claude-homelab/.env

This file is created from .env.example at install time and is never committed. Set it up interactively after install:

# Interactive wizard (preferred)
# Open Claude Code and run:
/homelab-core:setup

# Or configure manually
$EDITOR ~/.claude-homelab/.env

Security requirements:

  • ~/.claude-homelab/.env must have chmod 600 (owner read/write only)
  • Never commit .env — it is gitignored
  • Never log credentials, even in debug mode
  • Use .env.example as the template (tracked in git, placeholder values only)

All service scripts load credentials via scripts/load-env.sh:

source "${CLAUDE_PLUGIN_ROOT:-$HOME/claude-homelab}/scripts/load-env.sh"
load_env_file || exit 1
validate_env_vars "SERVICE_URL" "SERVICE_API_KEY"

Environment Variable Reference

Variables are grouped by service. Copy .env.example to ~/.claude-homelab/.env and replace placeholder values.

Media

VariableRequiredDescription
PLEX_URLyesPlex server base URL
PLEX_TOKENyesPlex authentication token
OVERSEERR_URLyesOverseerr base URL (skill)
OVERSEERR_API_KEYyesOverseerr API key (skill)
RADARR_URLyesRadarr base URL
RADARR_API_KEYyesRadarr API key
RADARR_DEFAULT_QUALITY_PROFILEnoDefault quality profile ID (default: 1)
SONARR_URLyesSonarr base URL
SONARR_API_KEYyesSonarr API key
SONARR_DEFAULT_QUALITY_PROFILEnoDefault quality profile ID (default: 1)
PROWLARR_URLyesProwlarr base URL
PROWLARR_API_KEYyesProwlarr API key
TAUTULLI_URLyesTautulli base URL
TAUTULLI_API_KEYyesTautulli API key

Downloads

VariableRequiredDescription
SABNZBD_URLyesSABnzbd base URL
SABNZBD_API_KEYyesSABnzbd API key
QBITTORRENT_URLyesqBittorrent WebUI URL
QBITTORRENT_USERNAMEyesqBittorrent username
QBITTORRENT_PASSWORDyesqBittorrent password

Infrastructure

VariableRequiredDescription
UNRAID_SERVER1_NAMEyesDisplay name for first Unraid server
UNRAID_SERVER1_URLyesUnraid GraphQL endpoint (skill)
UNRAID_SERVER1_API_KEYyesUnraid API key (skill)
UNRAID_SERVER2_NAMEnoDisplay name for second Unraid server
UNRAID_SERVER2_URLnoSecond Unraid GraphQL endpoint
UNRAID_SERVER2_API_KEYnoSecond Unraid API key
UNIFI_URLyesUniFi controller URL (skill)
UNIFI_USERNAMEyesUniFi username
UNIFI_PASSWORDyesUniFi password
UNIFI_SITEnoUniFi site name (default: default)
TAILSCALE_API_KEYyesTailscale API key
TAILSCALE_TAILNETyesTailscale tailnet name or -
ZFS_HOSTyesHost where ZFS commands run
SWAG_HOSTyesSWAG reverse proxy host
SWAG_CONTAINER_NAMEnoSWAG container name (default: swag)
SWAG_APPDATA_PATHnoSWAG appdata path
SWAG_COMPOSE_PATHnoSWAG compose file path

Utilities and Document Management

VariableRequiredDescription
LINKDING_URLyesLinkding bookmark manager URL
LINKDING_API_KEYyesLinkding API token
MEMOS_URLyesMemos server URL
MEMOS_API_TOKENyesMemos API token
BYTESTASH_URLyesByteStash snippet manager URL
BYTESTASH_API_KEYyesByteStash API key
PAPERLESS_URLyesPaperless-ngx base URL
PAPERLESS_API_TOKENyesPaperless-ngx API token
RADICALE_URLyesRadicale CalDAV/CardDAV URL
RADICALE_USERNAMEyesRadicale username
RADICALE_PASSWORDyesRadicale password
GOTIFY_URLyesGotify push notification URL (skill)
GOTIFY_TOKENyesGotify app token (skill)

Research and Dev Tools

VariableRequiredDescription
NOTEBOOKLM_COOKIEyesNotebookLM session cookie
NOTEBOOKLM_AUTH_JSONnoFull auth JSON blob (alternative to cookie)
NOTEBOOKLM_LOG_LEVELnoLog verbosity (default: INFO)
GITHUB_TOKENyesGitHub personal access token (gh-address-comments)
GLANCES_URLnoGlances web interface URL
GLANCES_USERNAMEnoGlances username (if auth enabl
View source on GitHub