📈 GH Trending Explorer 🎲 Surprise me

← all repos

aarondfrancis / fleet

git clone https://github.com/aarondfrancis/fleet.git

macOS app for a fleet of GitHub Actions self-hosted runner machines on a tailnet

+0
stars, 24h · #40,242
+~0
stars, 7 days · #45,137
+144
stars, 30 days · #5,200
144
★ total
16
forks · 1 open issues

Star history (as recorded here)

2026-10-20 · 144 ★ 2026-10-23 · 144 ★
LanguageRust
License—
Created2026-10-09 (13d ago)
Last push4d ago
Watchers0
OwnerUser

Links

README excerpt
# Runner Dashboard
A macOS app for watching GitHub Actions self-hosted runners across the machines on your
Tailscale tailnet. It answers three questions per runner: is it installed, is it connected to
GitHub, and is it doing work right now?
**Personal project:** This is completely vibe coded for my own personal use case. I won't be
accepting feature requests, but you're welcome to fork it and make it your own.
- **Mac app** (Tauri 2 + React). Machines come from your tailnet. The sidebar lists each runner
 machine with its runners nested under it, below a fleet overview. A machine's pane shows its
 status, SSH health, diagnostics, inventory configuration, runner checks and pending changes.
 A runner's pane shows its GitHub and service state, its jobs, and how it compares with the
 inventory.
- **SSH monitoring** reads CPU, load, memory, free disk, uptime and runner configuration from
 the machines. Nothing is installed on the machines.
- **Event history and alerts** keep observed connections, reboots and runner service changes
 on this Mac, with offline and low-disk alerts and optional desktop notifications.
Monitoring is read-only. Changes go through Runner Fleet's desired-state rules, ported to Rust:
the app installs, reconciles, retires, decommissions or restarts runners only through reviewed
plans against your inventory, `inventory/fleet.toml`.
## Requirements
- macOS, with its built-in OpenSSH.
- Tailscale, signed in to your tailnet. The app reads machines through the Tailscale CLI.
- The GitHub CLI (`gh`), logged in as an organization owner. Monitoring can use a pasted token
 instead; changes always use the `gh` login.
- Rust 1.93+, Node 22 and pnpm, to build.
- python3, only for `scripts/fleet-parity.sh`.
## Quick start
 [code] 
Tests, lints, generated bindings and fixtures: see AGENTS.md.
## Demo data
**View ▸ Toggle Demo Data** (⇧⌘D), or the button on the empty state, swaps in a fictional
fleet (`acme-demo`, `*.demo.ts.net`) that runs through the same derivation as live data. A
**DEMO DATA** banner shows while it's on, and live polling pauses. The browser-only preview
always uses demo data.
## First live setup
1. Create your inventory: see Setup in the operating guide. The browser
 preview and tests work without one.
2. **Settings (⌘,) ▸ GitHub ▸ Add organization…**. By default it uses your GitHub CLI login:
 the app asks `gh` for its token when it needs one and keeps it in memory only. Listing an
 organization's runners needs an organization owner and the `admin:org` scope. If your login
 lacks the scope, Settings shows the fix:
 `gh auth refresh --hostname github.com --scopes admin:org`. For monitoring, you can paste a
 fine-grained token instead (organization permission **Self-hosted runners: Read**,
 repository permission **Actions: Read**), which is stored in your Keychain. Access is checked
 before anything is saved.
3. Machines come from your tailnet; there's no Add step. Machines in the inventory or with
 runners on GitHub are lis