All plugins

sunshine-moonlight

Set up and diagnose Moonlight game streaming (Sunshine host <-> Moonlight client) between machines that run Hermes. One tool, action-based: discover hosts on the tailnet/LAN, preflight ports, install+start Sunshine, pair clients, verify encoders, and launch a stream. Writes to remote machines only over SSH and only when the action says so. Disclosure — runs shell commands as your user on this machine and, over SSH, on hosts you name (BatchMode, your existing keys); `install` runs `sudo` with your package manager to install `sunshine` or `moonlight-qt` without a Hermes approval prompt; `configure`/`start` rewrite Sunshine's config (with a backup) and restart its user service; `discover` reads `tailscale status` and port-probes your tailnet peers; `launch` starts a Moonlight process. No credentials stored, no telemetry.

lEWFkRADToolsv0.1.0Updated 15 days ago

About

Set up and diagnose Moonlight game streaming (Sunshine host <-> Moonlight client) between machines that run Hermes. One tool, action-based: discover hosts on the tailnet/LAN, preflight ports, install+start Sunshine, pair clients, verify encoders, and launch a stream. Writes to remote machines only over SSH and only when the action says so. Disclosure — runs shell commands as your user on this machine and, over SSH, on hosts you name (BatchMode, your existing keys); `install` runs `sudo` with your package manager to install `sunshine` or `moonlight-qt` without a Hermes approval prompt; `configure`/`start` rewrite Sunshine's config (with a backup) and restart its user service; `discover` reads `tailscale status` and port-probes your tailnet peers; `launch` starts a Moonlight process. No credentials stored, no telemetry.

Sunshine / Moonlight for Hermes Agent

A Hermes plugin for setting up and diagnosing
Moonlight game streaming
(Sunshine host <-> Moonlight client)
between machines that run Hermes.

It adds one action-based tool, game_stream. Read-only actions are safe to
run any time; the tool writes to remote machines only over SSH, and only
when the chosen action says so.

Actions

| Action | What it does |
|---|---|
| discover | Find Sunshine hosts on the tailnet / LAN (read-only) |
| status | Is Sunshine/Moonlight installed and running here, or on an SSH host |
| preflight | Probe the streaming ports (47984/47989/48010/47990) on a host |
| install | Install Sunshine (host) or Moonlight (client) via the detected package manager |
| start | Start/stop/restart/enable/disable the Sunshine user service |
| configure | Merge keys into sunshine.yml (backs the file up first) |
| pair_pin | List paired clients from sunshine_state.json |
| pair | Pair this Moonlight client with a host |
| unpair | Look up a paired client and return manual removal instructions |
| verify | Check the running encoder, bound ports, and recent fatal errors |
| launch | Launch a stream from this client to a host |
| doctor | Combined diagnosis with hints (encoder, ports, service state) |

Targets are local by default; pass ssh_user + ssh_host to drive a
remote machine over SSH (BatchMode, short connect timeout).

Requirements

  • Hermes Agent >= 0.21.3
  • Linux: local actions drive the Sunshine user systemd service and use
    standard tools (pgrep, ss). Remote targets are expected to be Linux
    hosts reachable over SSH.
  • Sunshine and/or Moonlight themselves are installed by the install
    action (or already present); the plugin has no Python dependencies.

Notes on the security scan

hermes plugins validate reports a caution for sudo use in
tools.py — that is the install action elevating to install the
sunshine / moonlight-qt system packages. Nothing else in the plugin
elevates, and no action writes anywhere except Sunshine's own config/state
files (always with a backup first).

  • Author: Jeff's laptop Hermes (lewfkrad).

Input boundaries

SSH usernames and targets are validated before any action; supply both or neither.
Moonlight runs with an argument list and a separate environment, without shell
parsing. Resolution accepts WIDTHxHEIGHT or WIDTHxHEIGHT@HZ. Installation is local.
Configuration accepts only encoder, address_family, upnp, hevc_mode and av1_mode,
with bounded scalar choices. Command hooks, app paths and arbitrary YAML are refused.
Unpair only looks up a name; it does not remove clients or restart services.

Regression checks: python -m unittest discover -s tests -v (no live hosts needed).

README from the reviewed commit 46554af; it updates when the author re-pins.

More by lEWFkRAD

6 plugins by lEWFkRAD in the catalog.

lEWFkRADdocument-readerProfile-scoped document OCR for Hermes Desktop and HUD, with a guarded per-profile Windows service.CommunityDesktop app4lEWFkRADnetplaneInstall, configure and operate a self-hosted Headscale control plane from Hermes. netplane_setup previews a configuration and, after approval, installs the pinned official Headscale v0.29.6 DEB on a fresh Debian 12+ or Ubuntu 22.04+ systemd host (amd64/arm64). Installation runs on the Hermes host, requires root or noninteractive sudo, refuses existing deployments, and verifies the package SHA-256. It configures SQLite, MagicDNS, embedded DERP/STUN, local admin gRPC, and either Let's Encrypt HTTPS or a loopback backend for an existing reverse proxy. It starts the system service, creates the first user, and saves a 90-day API key and connection settings through Hermes's active-profile APIs. netplane_status reports health, netplane_nodes lists devices, and netplane_preauth lists metadata without stored join secrets or creates an approval-gated, single-use-by-default join key with a 1–168 hour lifetime. Desktop includes setup preview/confirmation, health, nodes, join keys and confirmed node expiration, with a FastAPI backend. Management requires NETPLANE_APIKEY; setup works before a key exists. Bundled protobuf stubs use pinned sources and a compatible toolchain. Disclosure — the netplane_setup tool (after Hermes approval) and the Desktop pane (after confirmation) install the pinned official Headscale v0.29.6 DEB as root through noninteractive sudo on the Hermes host, downloading it from GitHub (SHA-256 verified) and possibly contacting configured APT repositories; it writes /etc/headscale, /var/lib/headscale and a systemd drop-in, and enables a persistent headscale service that in Let's Encrypt mode listens publicly on TCP 80/443 and UDP 3478 (admin gRPC and metrics stay on loopback); Let's Encrypt receives the chosen domain and email; setup saves a new 90-day Headscale API key as NETPLANE_APIKEY in the active Hermes profile; management reads credentials only from Hermes and uses TLS with system trust off-host; approved join-key creation returns the key into the chat; status runs systemctl is-active headscale and tailscale serve status; no telemetry and no automatic software updates.CommunitytoolslEWFkRADtidalTIDAL for Hermes Agent: five tools (playback through local mpv, search, playlists, library, mixes) over the unofficial TIDAL API via tidalapi. Login is TIDAL's own PKCE login flow (hermes tidal login) — no developer app needed. Playback runs on the Hermes machine (mpv); TIDAL has no remote-device API like Spotify Connect. Needs a TIDAL subscription (any tier). Disclosure — unofficial TIDAL integration (community tidalapi library using TIDAL's own app client); stores your TIDAL access and refresh token in plaintext (owner-only, 0600) under $HERMES_HOME/plugin-data/tidal/ and refreshes it itself; playback spawns a detached local mpv process with an IPC socket and plays audio on the Hermes machine.CommunitytoolslEWFkRADwireguardRead-only status and peer list for a WireGuard server running on the same Windows machine as Hermes. Two tools: vpn_status (service state, tunnel address and port, server public key, per-peer handshake and transfer) and vpn_peers (the peer list only). The plugin runs only wg.exe show, sc.exe query, and one PowerShell adapter lookup; it never changes the tunnel and never reads the tunnel configuration file or any private key material. Windows only (WireGuard for Windows). Disclosure — runs local wg.exe show, sc.exe query and one PowerShell Get-NetIPAddress lookup (read-only, never touches the tunnel config or private key); tool results put peer public keys, allowed IPs and peer endpoint IP addresses into the conversation sent to your model provider.Communitytools