User Manual
FrontierStack
Desktop Edition
Install, run and monitor Apache, databases, mail, security and 1,000+ services on your Mac and across your fleet — with an AI administrator at the helm.
Table of Contents
- 8Connecting Servers: Locations & the Fleet
- 9Networking & the Perimeter
- 10Security & Hardening
- 11Monitoring & Alerts
- 12Scripts, Cron & Automation
- 13The AI Administrator
- 14MCP & Driving FrontierStack from Your Own AI
- 15The AI Stack
Part I
Getting Started
What FrontierStack is, how it thinks, and how to get it running on your Mac.
Chapter 1
Introduction
The server control panel Apple took away — rebuilt for one Mac or a whole fleet, and driven by an AI that can actually see and fix your servers.
When Apple discontinued macOS Server.app, Mac users lost the simple, point-and-click way to run websites and services. FrontierStack brings that back and goes much further: it installs, controls, secures and monitors Apache, PHP, MySQL, PostgreSQL, Nginx and more than a thousand other services — on the Mac in front of you and on every server you link to it — and it puts a tool-using AI administrator at the helm.
This manual is the complete reference for the desktop app. A companion Mobile Manual covers the iPhone and iPad app. Read this first chapter end to end; after that, dip into whichever part you need.
1.1What FrontierStack is
FrontierStack is a native macOS application — not a web panel, not a container you have to babysit. It manages real services on real machines using the tools they already ship with: Homebrew formulae, launchd and systemd units, Apache and Nginx config, certificates, firewalls and SSH. It is three things at once:
- A control panel. Install, start, stop and configure services with validation, live status and one-click fixes — the macOS Server replacement, modernised.
- A monitoring and alerting system. A continuous health sweep watches services, sites, certificates, disks and your whole fleet, and turns the first sign of trouble into a message on the channels you choose.
- An AI administrator. A guard-railed, tool-using assistant with a live, accurate picture of your setup. It can diagnose what is broken, propose a fix you approve, run it locally or across your fleet, and reshape the app to exactly what you run.
1.2An AI-first design
Most apps bolt a chat box onto the side. FrontierStack is built the other way around: the AI is a first-class operator of the same controls you use. Because it acts only through a fixed set of audited tools — read a log, run a diagnostic, restart a service, issue a certificate, write a file — everything it does is something you could do by hand, and everything that changes the system is shown to you for approval first.
Three principles make this safe enough to trust with production servers:
- Read-only by default. Out of the box the assistant can look but not touch. Changes and scripts are unlocked by explicit toggles, and every mutating action shows an approval card before it runs.
- Your secrets never reach the model. Passwords and API tokens live in a local
.envvault. Scripts reference them by name; the app injects the real value at run time, locally or over SSH. The cloud model sees the name, never the value. Logs and files are secret-redacted before they are sent. - You bring your own AI. Point it at a cloud model or a local one (Ollama, LM Studio). If you drive it from your own subscription tool over MCP — Claude Code, Cursor — there is no metered per-token bill at all.
1.3Who it is for
FrontierStack suits anyone running — or wanting to run — servers on a Mac:
- Developers who want a clean local stack instead of MAMP or XAMPP.
- Small businesses self-hosting POS, CRM, e-commerce, mail and helpdesk on a Mac mini.
- Admins keeping a vintage Xserve or Mac mini on macOS Server useful by managing it remotely.
- Anyone moving from metered SaaS to self-hosted, or running a fleet of Macs, Linux boxes, BSD servers and Raspberry Pis from one window.
1.4Key concepts and vocabulary
A handful of terms recur throughout this manual. Meet them once here.
| Term | What it means |
|---|---|
| Service | Anything FrontierStack can install, run and monitor — Apache, a database, a mail server, a container, a router integration. The full list is the catalog (Chapter 6). |
| Pane | A screen in the app for one service or tool, opened from the sidebar. |
| The helper | A small privileged tool (an SMAppService daemon) that performs admin actions without a password prompt each time. Optional; you install it on first run. |
| Location | Where the Mac is on the network right now (home, office, away). Locations make alerts and reachability network-aware (Chapter 8). |
| Linked server | Another machine you have connected over SSH so FrontierStack can run diagnostics and scripts on it. Your fleet is all of them together. |
| The AI Administrator | The built-in tool-using assistant. Also called the AI Harness. Covered in depth in Chapter 13. |
| MCP | Model Context Protocol — the open interface that lets an outside AI tool (Claude Code, Cursor) drive FrontierStack through the same guarded tools (Chapter 14). |
| Secret / the vault | A named credential in the local .env store. Scripts reference $NAME; values stay on your Mac. |
1.5How this manual is organised
The manual follows the shape of the work:
- Part I — Getting Started: install, first run, and a tour of the interface.
- Part II — Running Services: the web stack, databases, the full catalog, and sites & domains.
- Part III — Fleet, Network & Security: linking servers, networking and the perimeter, hardening, and monitoring & alerts.
- Part IV — Automation & AI: scripts and schedules, the AI Administrator in full, MCP, and the AI stack.
- Part V — Business & Reference: vertical solutions, settings, shortcuts, licensing and troubleshooting.
If you are brand new, continue to Chapter 2, Installation & First Run. If you just want to understand the AI, jump ahead to Chapter 13 — but the safety model there assumes the concepts above.
Chapter 2
Installation & First Run
From a fresh download to a working stack: what macOS asks for, the optional helper that makes admin painless, and how to bring an existing MAMP, XAMPP or Server.app setup across.
FrontierStack installs like any other Mac app — drag it to /Applications and open it. What happens next is up to you: it can run entirely with the per-action password prompts macOS already gives you, or you can grant it a small set of permissions once and never be asked again. This chapter walks the whole first run, then shows how to migrate an existing local stack so you keep your sites and databases.
2.1System requirements
FrontierStack is a native, signed macOS application. You need:
| Requirement | Detail |
|---|---|
| macOS | macOS 13 (Ventura) or later. The optional helper uses SMAppService, which is a macOS 13+ API. |
| Architecture | Apple silicon or Intel. The app manages the Homebrew stack at /opt/homebrew on Apple silicon (or /usr/local on Intel). |
| Homebrew | Recommended but not required to launch. Most services are installed as Homebrew formulae; FrontierStack can install Homebrew for you (see below). |
| Admin account | An administrator account on the Mac. Installing services and editing system config needs admin rights — either through the optional helper, or via the password prompt macOS shows per action. |
Nothing in this list is unusual; if your Mac is recent enough to run a current macOS, it can run FrontierStack.
2.2Downloading and first launch
Download the app, move FrontierStack.app into your /Applications folder, and double-click it. Because the app is signed by Enfour, Inc. (Apple Developer team 6Y87KNMALP) and notarised, macOS opens it without the unidentified-developer warning.
- Open FrontierStack. The main window appears with the service sidebar on the left and a health overview in the centre — the layout you met in Chapter 1.
- If Homebrew isn't present yet, panes that need it will say so and offer to install it. You can do that now or later.
- FrontierStack enforces a single running instance. If a copy is already open and you launch it again, the existing window is simply brought to the front rather than a second copy starting. This keeps two windows from fighting over the same services and config files.
The first launch makes no changes to your system. The app reads what is installed and shows you the state of things; nothing is started, stopped or reconfigured until you ask.
2.3The privileged helper — and the permissions macOS asks for
Starting and stopping services and editing system configuration (Apache, Nginx, MySQL, DNS, the firewall) are privileged operations. Out of the box, FrontierStack performs each one through the standard macOS authorisation prompt: you type your password every time. That is safe but quickly becomes tedious.
The optional helper removes that friction. It is a small privileged tool — an SMAppService daemon — that the app registers with macOS so it can carry out admin actions without re-entering your password each time. You install it deliberately: use the Install affordance at the foot of the sidebar, or accept the prompt when an action first needs it.
- Click Install on the helper row at the bottom of the sidebar.
- macOS shows its Login Items & Extensions approval (or asks you to enable the background item in System Settings ▸ General ▸ Login Items). Approve it — this is macOS asking whether to let the daemon run, not the app overriding anything.
- The sidebar row flips to show the helper registered and running. From now on, service start/stop and config edits proceed without the per-action password prompt.
You can remove the helper at any time; FrontierStack then falls back to per-action admin prompts. Both modes work — the helper is purely a convenience.
6Y87KNMALP) as the app, which is what lets it register as an SMAppService daemon at all. It runs only the privileged operations the app drives; it is optional, you install it deliberately, and you can remove it. Like the AI Administrator and every remote action, it is off until you turn it on. For the full trust model see Chapter 10.2.4Installing Homebrew
Most of the catalog — web servers, databases, caches, mail, dozens of CLI tools — is installed as Homebrew formulae. Homebrew is the package manager FrontierStack uses to fetch and update those services, so if it isn't already on your Mac you'll want it early.
Open the Homebrew pane from the sidebar. If Homebrew is missing, the pane says "Homebrew isn't installed. It's the package manager this app uses to install services," with a Get Homebrew… button. Installation runs in the app's in-app console: it executes the official Homebrew installer and, at the point the installer needs administrator rights, you type your own password into the console. FrontierStack never captures or stores it — the prompt is Homebrew's own.
Once Homebrew is present, the pane becomes a full package manager: a searchable table of installed formulae and casks with their versions, an Install formula or cask field, an Update All button that shows the outstanding count, and per-row Update / Uninstall actions. The AI Administrator can drive the same flow with its install_homebrew and install_package tools, again through the in-app console where you enter your password.
2.5The Command-Line PATH pane
FrontierStack detects installed tools by resolving them the way your shell does. Occasionally a tool you've installed (via pip, pipx, a virtualenv, or a non-standard prefix) isn't on the PATH the app sees, so it reports the tool as missing. The Command-Line PATH pane fixes that.
- Pick your shell profile (for example
~/.zprofile). Directories you add are written to a clearly marked managed block in that file and prepended to your PATH — open a new terminal to pick up the change. - Directories to add lets you add a path by typing it or with Choose…; the top entry is searched first. Current PATH (effective) shows your login shell's PATH, tagging entries the app manages.
- PATH Doctor diagnoses why a tool isn't detected: enter a command (e.g.
mlx_lm.server,gcloud) and it reports whether the app finds it, whether only your shell finds it, or whether it isn't installed at all — with a one-click Add to managed PATH for any directory the app is missing.
2.6The Install Wizard
If you're starting from scratch, the Install Wizard (in the sidebar) is the fastest way to a working stack. Pick a target use-case — WordPress/PHP, Full-Stack JS, Python/Django, Rails, static site, database, or reverse proxy — and the wizard pre-selects the recommended components (web server, database, cache) for that goal. Adjust the selection to taste, then it installs everything through Homebrew.
The same pane shows the status of the native Apache + MySQL + PHP stack at a glance, and detects all-in-one bundles already on your Mac — XAMPP, MAMP, AMPPS, Local. If it finds one, it routes you to Migrate Setups rather than installing a parallel stack, so you don't end up running two of everything.
2.7Migrating an existing stack
If you already run sites locally under MAMP, XAMPP or Apple's Server.app, you don't have to rebuild them. The Migrate Setups pane detects those stacks and brings their pieces into FrontierStack's native Homebrew stack: web files, MySQL databases, PHP settings, and the Apache vhosts that define each site.
- Open Migrate Setups. It scans for installed sources — MAMP / MAMP Pro, XAMPP and Apple Server — and reports what it found: the sites, the database, and whether PHP was detected. (The AI Administrator's
detect_migration_sourcestool runs the same read-only scan.) - Review the Sites to import list. Each candidate shows its server name and listening port; anything that can't be brought across cleanly appears under Skipped with the reason.
- For settings, the Import All Settings action copies the source's
php.ini,my.cnfandnginx.confover the matching Homebrew config. A.pre-mamp.bakbackup of each file is kept so you can compare or revert. - Choose Import Selected to run the migration. Live progress is shown in the pane as it installs the needed Homebrew services, copies web files, migrates the MySQL databases and imports the vhosts.
- Review afterwards. Source configs often reference the old tool's paths and ports (for example MAMP's
extension_dir,datadir,socket, or port8889), so check the imported settings before relying on them.
The AI Administrator can drive this end-to-end with run_migration, but only after detecting sources and confirming with you — and only with changes enabled.
.pre-mamp.bak backups cover config files, not your databases.2.8Where your data lives
FrontierStack keeps its own state in predictable, standard places, so you always know what it touches and can back it up:
| What | Where |
|---|---|
| App settings & data | ~/Library/Application Support/FrontierStack/ |
| Secrets & tokens | The macOS Keychain, under service jp.co.enfour.frontierstack |
| App-managed Apache config | /opt/homebrew/etc/httpd/frontierstack/ — a dedicated directory the app owns, kept separate from any hand-edited Apache config |
| App logs | ~/Library/Logs/FrontierStack/ |
Keeping the app's Apache config in its own frontierstack/ directory means FrontierStack can manage vhosts safely without clobbering configuration you maintain by hand. The bundle identifier is jp.co.enfour.frontierstack (the helper and DDNS components use the .helper and .ddns suffixes).
With the app installed, the helper decided, Homebrew in place and any old stack migrated, you're ready to actually use it. Chapter 3, The Interface tours the window in detail: the sidebar, panes, search, the menu bar, and the controls you'll reach for every day.
Chapter 3
The Interface
One window, a thousand services. This chapter is the guided tour: the sidebar, the panes, the floating palettes, Search, Help and the small touches that keep the app out of your way.
FrontierStack manages an enormous range of services, yet it presents them through a single, familiar macOS window: a sidebar of things on the left, the screen for the selected thing in the centre, and a row of always-available tools in the toolbar. Learn this layout once and every pane in the book — from Apache to a Cloudflare zone — sits exactly where you expect it. This chapter walks the interface end to end so the rest of the manual can simply say "open the Sites pane" and trust that you know how.
3.1The main window
The window is a standard macOS NavigationSplitView with three regions. On the left is the service sidebar: a scrollable, collapsible list of every service and tool you have chosen to see, grouped into categories. In the centre is the active pane — the screen for whatever you selected in the sidebar, with its own header, tabs and controls. Running across the top is the toolbar, whose buttons are available no matter which pane you are in.
From right to left, the toolbar holds: Search (the magnifying glass, also ⌘F); the AI assistant (the wand, which opens the floating command palette); a Shell button that drops a terminal into the current working directory; a Dark mode toggle that forces dark even when macOS is in light; and, when the selected pane can be floated, a break-off button to pop it out as a palette. If you have unsaved changes to a Setup, an orange Unsaved menu appears here too.
The sidebar's width is yours to set — drag the divider and FrontierStack remembers it across launches. Your last-selected pane is restored when you reopen the app, so you return to where you left off.
3.2The service sidebar
The sidebar is organised into two tiers. At the top sits Overview — the app's own built-in tools: Local Health, Status Page, Alerts, Domains, Logs, Certificates, Notes, Scripts, Setups, Settings and more. Below it, one section per service category — Web Servers, Databases, Caching, Mail, Networking, Security Tools, Containers, AI and dozens more — each listing the services you have chosen to show from the catalog (Chapter 6). Every section header is a chevron you can click to collapse, and the app remembers which groups you leave folded.
Each service row shows a status dot when it is running. Right-click a service for two quick actions: Pin to Top of Section keeps a service you touch often at the top of its category, and Hide removes it from the sidebar. Hiding never uninstalls anything — the service keeps running and stays reachable from Search; it just stops cluttering the list.
Below the categories, the sidebar grows extra sections for the things you pin elsewhere in the app: linked servers (each with little category icons showing which services it runs), monitored Wi-Fi networks, Cloudflare zones and Kubernetes clusters. Type in the filter field at the top of the sidebar to narrow every section at once.
3.3Presets and Setups
Two features shape what the sidebar shows. The Presets menu (in the menu bar) is the fast way to load a whole use-case at once. Its Base — show services for… section swaps the sidebar to a curated set for a scenario (a web stack, a mail server, a shop), while Add to current view… layers an extra group onto what you already have. Show All reveals everything; it is the escape hatch when you cannot find something.
Setups go further: a Setup is a named snapshot of your whole working view — which services are hidden, which are pinned, and the floating palettes you have open and where they sit. Save one from Presets ▸ Save Current as Setup… (or from the Setups pane), then flip between Setups from the top of the Presets menu; the active one carries a check mark. The palette layout auto-saves into the active Setup as you move windows around, so a Setup always reflects how you really work. Change which services are shown and the Setup goes dirty; the toolbar shows an orange Unsaved badge with Update, Save as New and Revert.
A Setup can also be bound to a Location (Chapter 8). Bind your "Office" Setup to your office network and FrontierStack switches to it automatically when you arrive — the right services, the right palettes, for where you are.
3.4Floating palettes and mini-palettes
Sometimes you want to keep one screen visible while you work elsewhere. Any monitor-style pane can be broken off into a floating palette: a small, always-on-top utility window built on macOS NSPanel, so it stays above the main window and other apps. Use the break-off button in the toolbar (or ⌘⌥⇧W to close the front palette). Local Health, Containers, Cloud Servers, the Wi-Fi Analyzer and others all float.
For an even lighter footprint there are mini-palettes — compact, glanceable summaries rather than the full pane. Minis exist for Local Health, Cloudflare Zones, Wi-Fi, Printers, Router & Network, Containers, Scripts, Message Delivery and AWS. Each mini row has a button to open the matching pane in the main window when you need the detail. Open palettes are part of a Setup, so a saved view restores your floating windows exactly as you arranged them.
3.5The command and AI palette
The wand button in the toolbar opens the AI assistant palette — a draggable, always-on-top NSPanel with a single ask-anything field ("why is my site down?", "tune MySQL", "show only what I use"). It is the same AI Administrator covered in Chapter 13, surfaced as a floating window you can keep beside whatever you are doing. Like every floating palette it stays above the main window; unlike the others it talks back, proposes fixes and — with your approval — acts. It carries its own conversation history and an approval card for any mutating action, so nothing runs until you say so.
3.6The menu-bar item
FrontierStack can place a small item in the macOS menu bar (toggle Show in Menu Bar). It is the quickest way to act without bringing the whole window forward. From it you can Start or Stop your startup group, Restart any of the core servers (Apache, Nginx, PHP-FPM, MySQL, Postgres) or everything running at once, open localhost in your browser, refresh status, set Launch at Login, and open or quit the app.
3.7In-app Search
Search (the magnifying glass, ⌘F) is the fastest way to reach anything. Start typing "search services, tools & actions…" and the palette matches panes, tools, services and actions as you go — including services you have hidden from the sidebar. Pick a result and the app navigates straight to it. A Semantic mode lets you search by meaning ("block an IP", "free up disk") rather than exact names, so you can find a capability without knowing what FrontierStack calls it.
3.8The Help window
Open Help with ⌘? for a dedicated FrontierStack Help window. It is a real book of in-app documentation, organised to mirror the app. Help is more than reading: its pages carry Open in app links. Click one and FrontierStack jumps the main window to that exact pane or service — the Help window stays open beside it, so you can read a procedure and follow along step by step. Many panes have a small help button in their header that opens Help at the matching topic.
3.9The Notes pane
Notes is your private place for credentials, runbooks and per-service instructions. Each note has a title, a service tag and a body, and the whole thing is encrypted in the macOS Keychain — not stored in plain files. The defining feature is the per-note lock: every note carries a Share with AI Administrator toggle that is off by default. While a note is locked, the AI literally cannot read it. Unlock a note only when you want the assistant to use those credentials or steps; it then appears in the AI's list_notes and can be read on demand.
3.10The Status Page
The Status Page pane publishes a static index.html built from the same up/down data as Local Health, so customers or colleagues can see what is running without access to the app. Choose a destination — a folder inside one of your Apache sites' DocumentRoots, so it is served at a path like /status/ — set a page title, and decide whether to Include item details (leave detail lines off for a public page, since they can reveal internal hosts and ports). The page regenerates on an interval you set, or on demand with Generate Now. It is plain static HTML; there is nothing extra to run.
3.11Local Health and Locations at a glance
Two Overview panes anchor everyday use, and each has a full chapter of its own. Local Health is the board that answers "is everything OK?": every monitored service, device and subsystem with an UP or DOWN state and a one-line summary. You mark items as critical from their own panes to add them to the board, and it doubles as a floating palette and a mini. Its full treatment — the health sweep, thresholds and how it drives alerts — is Chapter 11.
Locations teach the app where your Mac is on the network right now — Home, Office, On VPN — matched from the Wi-Fi network or subnet. Locations make monitoring network-aware: while you are somewhere unrecognised the app treats you as Away and pauses location-scoped checks, so a café or hotel network never sets off false alarms. They also bind Setups, as we saw above. The complete model — defining locations, scoping alerts and reachability, the fleet — is Chapter 8.
With the layout learned, you are ready to put it to work. The next part of the manual opens the panes themselves, starting with Chapter 4, The Web Stack.
Part II
Running Services
Running the web stack, databases, the service catalog and your sites on the Mac in front of you.
Chapter 4
The Web Stack
Apache or Nginx, the PHP version each site needs, virtual hosts, trusted local HTTPS and DNS — the whole web stack, controlled from one window with no hand-edited config.
A web server is the heart of most self-hosted setups, so FrontierStack treats it as a first-class citizen. The Apache pane installs, starts, validates and configures a Homebrew Apache; the PHP, Localhost, Certificates and DNS panes round out a complete development and hosting stack — and every change goes through validation so a typo never takes a site down silently.
This chapter covers the panes that make and run web sites on the Mac in front of you. Connecting that stack to a real domain and the public internet is Chapter 7; tightening it for production is Chapter 10.
4.1The Apache pane
Open the Apache pane from the sidebar to see your web server’s state at a glance: version, whether it is running, and the ports it listens on. The buttons across the top are the controls you reach for daily — Start, Stop, Restart and Validate Config. Validation runs apachectl -t (a real syntax check) and shows the result in Last Result, so you can confirm a change is sound before you reload.
FrontierStack recommends a Homebrew Apache rather than the macOS system copy. The Homebrew server lives under /opt/homebrew (or /usr/local on Intel Macs), runs as you through brew services without a root prompt for every action, and is not locked down by System Integrity Protection — so a current mod_php loads cleanly and the whole stack stays on one toolchain. The system Apache under /etc/apache2 is wiped by OS updates and ties you to Apple’s bundled libphp. If Homebrew Apache is not installed, the pane offers Install Homebrew Apache… in one click.
If you keep several Apache builds — the Homebrew one, a legacy local build, or a remote server’s — the binary picker (see Add Homebrew Apache / Add Local Build…) lets you register and switch between them, each with its own version and ports shown.
/opt/homebrew/etc/httpd/frontierstack/, pulled in by an IncludeOptional from httpd.conf. Keeping the app’s vhosts, MIME types and managed includes there means your hand-written httpd.conf stays clean and you can always tell what FrontierStack added.4.2Modules, ports and the managed config
Lower in the Apache pane are the parts of the config you most often edit, each surfaced as a control rather than a file:
| Section | What it does |
|---|---|
| Ports | Set the HTTP and SSL listen ports (default 80 and 443). Move Apache off 80/443 if Nginx is using them. Apply rewrites the Listen directives and reloads. |
| Apache Modules (Modules…) | List loaded modules and enable or disable them. Disabling an unused module is the simplest hardening step you can take. |
| PHP Module | Choose which version’s mod_php (libphp.so) Apache loads for websites — see the next section. |
| WebDAV | Enable mod_dav for a shared folder, with optional Basic-auth user, written into a managed include. |
| Edit MIME Types… | Add or remove AddType mappings in a FrontierStack-managed MIME file, never touching the distro’s mime.types. |
For anything not exposed as a control, the config rows give you Edit Managed Config… (the FrontierStack include) and Edit httpd.conf… (the main file) directly. Every save validates with apachectl -t, reloads gracefully, and rolls back if the new config does not parse — so a bad edit is caught before it can break the running server.
httpd.conf by hand is powerful and unguarded. The app validates and rolls back on a syntax error, but a config that parses yet points a document root at the wrong place can still expose files. Prefer the managed include for FrontierStack’s own additions, and keep a copy of any large change.Toggling a module rewrites its LoadModule line and revalidates. If a change leaves httpd -t failing — the classic case is enabling proxy_fcgi without proxy, which the app now auto-enables for you — the Modules window shows the error and won’t close silently: you either correct it or choose Save anyway. When Apache is wedged and won’t start (the classic Homebrew Bootstrap failed: 5: Input/output error, from a service that was already loaded, or from sudo brew services leaving some httpd paths owned by root), the pane’s Recovery & reset section offers three escalating fixes: Restart cleanly (stops httpd in both the user and system launchd domains, then starts it once), Reset config to default (backs up your httpd.conf and restores Homebrew’s), and Remove & Reinstall (clears the root-owned paths and reinstalls the formula). All run in the in-app console so you see the sudo prompt and output. If Service Watchdog keep-alive is also on for Apache, it may restart httpd on its own — expected, but pause it if it fights a manual recovery.
4.3Choosing the PHP version
Open the PHP pane to manage the PHP runtimes installed on the Mac. Homebrew lets several major versions live side by side (for example [email protected] through the current release), and FrontierStack treats them as a set you switch between rather than a single global install.
There are two distinct choices:
- The Apache module. In the Apache pane’s PHP Module section, the Load for websites picker chooses which version’s
libphp.soApache loads. Changing it rewrites the managed config and reloads Apache. - Per-site PHP. A local dev server (the Localhost pane, below) has its own PHP Version and PHP Binary fields, so one project can run on an older PHP while another runs on the latest — without changing what the rest of the machine uses. This is the usual way to keep a legacy app and a new one happy at the same time.
The Runtime Health pane gives the wider picture — PHP alongside Python, Node.js, Java, Go, Rust, Ruby, Perl and .NET — with a self-check that flags a missing or end-of-life runtime before it bites you.
The Runtimes section also carries a React pane for front-end work. It scaffolds a new app (Vite, TanStack Start or Next.js), points at any React project, and offers a curated companion-library list filed by the job each does — state management (Zustand, Jotai, Redux Toolkit), data fetching and server state (TanStack Query — the library formerly called React Query — and SWR), full-stack frameworks (TanStack Start, Next.js), routing, validation (ArkType, Zod), forms, and authentication (Clerk). Each row shows its docs, whether the selected project already uses it, and a one-click npm install into that project.
4.4Sites and virtual hosts
The Websites list in the Apache pane is where you manage virtual hosts. Each row shows the site’s name, the bind address and the port (for example :8080), and a Running toggle for its live status. The buttons let you Add Site…, edit, duplicate, disable, Push to Server… (copy a vhost to a linked server), and open the site in a browser. Import Sites… and Copy from… pull existing vhosts in from MAMP, XAMPP, Apple’s Server.app or another Apache, bound to localhost by default.
Adding or editing a site, you set the essentials a vhost needs: its ServerName (the domain), the document root (Choose… a folder), and the bind address and port. Enable the site and it appears in the list with a live status dot; FrontierStack writes the vhost into a .conf file under the managed tree, validates, and reloads. To create the vhost, certificate and a Cloudflare DNS record together, use New Site + DNS… — the one-flow wizard described in Chapter 7.
127.0.0.1 while you develop and it is reachable only from your Mac — the safest default for work in progress. Move the bind address to 0.0.0.0 or a LAN IP only when you genuinely want other machines to reach it.4.5TLS certificates for sites
The Certificates pane issues and manages the certificates that put the padlock on your sites. It offers three paths, suited to different needs:
| Method | Use it for |
|---|---|
| mkcert (Get Certificate (mkcert)) | Trusted local HTTPS. mkcert installs a local certificate authority your Mac trusts, so https://myapp.test works with no browser warning — ideal for development. Install mkcert sets it up first. |
| Let’s Encrypt (ACME) | Public, browser-trusted certificates for real domains, via acme.sh or certbot. Issue by webroot (the domain already serves HTTP) or by DNS-01 via Cloudflare (no inbound HTTP needed). Renew All Now and a renew cron keep them current. |
| Create Self-Signed Certificate | A quick certificate for internal or testing use where a browser warning is acceptable. |
Once issued, Deploy to Apache wires the certificate into the site’s vhost. The Expiry Monitoring section watches your certificates (and any domain you add with Watch) and alerts you well before they lapse — the deeper hardening story, including HSTS and modern cipher policy, is in Chapter 10.
CF_TOKEN vault secret and injected at run time; it is never sent to a cloud AI.4.6The .htaccess editor
Per-directory Apache rules — rewrites, redirects, access control — live in .htaccess files, and FrontierStack gives them a dedicated editor with line numbers and a syntax sanity check. Open a site’s document-root .htaccess with Use Site Root, or point it at a custom path. Insert Recipe drops in common, correct snippets (a front-controller rewrite, a force-HTTPS block) so you start from working rules rather than memory, and the editor flags obvious problems before you save. Export PHP Router… turns .htaccess rewrite rules into a router file for a built-in PHP dev server — useful when you move a site to the Localhost pane.
4.7Nginx and reverse proxies
FrontierStack manages Nginx as an alternative web server or a reverse proxy in front of an app. When both are installed, the Domains view groups your sites by server — Apache virtual hosts and Nginx server blocks side by side — reading each Nginx server block’s listen port, root and TLS state. A reverse proxy is the standard pattern for fronting an application that speaks HTTP on a high port (a Node, .NET or Python service): Nginx terminates TLS on 443 and forwards to the app. Because Apache and Nginx both want 80/443 by default, use the Apache pane’s Ports section to move one off those ports if you run them together.
4.8Localhost, DNS and dev stacks
Three more panes complete the local picture:
- Localhost — a manager for ad-hoc local dev servers. Add a New Local Server, pick a Runtime (PHP, Python/Django, Node/Vite…) and folder, set a port and an optional
ServerName, and Start it — with per-server Environment Globals and a .test resolver somyapp.testresolves locally. A Free Port helper and a stop whatever is holding localhost action clear the usual conflicts. - DNS — local name resolution and authoritative hosting. Run
dnsmasq,unboundornsd; import and export zone files; and flush the resolver when records change so the Mac stops serving a stale answer. - LAMP / DevStacks — one-click stacks. The LAMP pane offers presets (Choose a Setup) that install and start a matched set of components together (Install & Start, Start All, Stop All); DevStacks detects the framework of a project folder and shows the right commands and npm scripts to run it.
An Localhost overview shows every local server you have running, side by side, so you can run many sites at once without a wall of Terminal windows to babysit.
vhost_create makes a virtual host, reload_webserver tests and gracefully reloads Apache or Nginx, and issue_certificate obtains a Let’s Encrypt certificate. They are mutating tools, so each shows an approval card and requires changes to be enabled — the AI does exactly what you would do in these panes, and nothing it has not been allowed to.Chapter 5
Databases & Data
Run MySQL, PostgreSQL, Redis and the rest from one window; let the AI inspect and fix a site's database; and keep every byte backed up, verified and restorable.
A web stack is only as good as the data underneath it. FrontierStack treats databases as first-class services: it installs and runs them, browses what is inside, lets the AI Administrator inspect and repair a site's database in plain language, and — the part most setups forget — backs everything up on a verified schedule that you can actually restore from. This chapter covers the relational engines, the in-memory caches, the newer vector and analytics stores, and the backup machinery that protects them all.
5.1The MySQL / MariaDB pane
Open MySQL from the Databases section of the sidebar. The pane installs the server through Homebrew if it isn't present, then gives you the controls Server.app used to: Start, Stop and a live status light, the listening port (default 3306), and a list of the databases on the server. MariaDB — the drop-in MySQL-compatible fork — is managed the same way; the pane recognises whichever is installed.
Local development follows one deliberate convention: the local root account has no password. This is the MAMP/XAMPP norm and it is what makes one-click setup and the AI's SQL tools work without a credential prompt. It is safe precisely because MySQL on your Mac listens only on 127.0.0.1 and is reachable only from the machine itself. The moment a database needs to be reached from elsewhere — a passworded account, or a database on a linked server — you switch to the secret vault, described below.
root applies only to MySQL bound to localhost on the Mac in front of you. It is a development convenience, not a recommendation for any server that accepts connections from the network. Production databases get a real password and live in the vault.5.2Database Ops and running SQL
The Database Ops pane is where databases stop being a black box. Its Replication section detects whether a configured server is a MySQL replica or a PostgreSQL standby and shows the lag: MySQL reads SHOW REPLICA STATUS (IO and SQL threads, Seconds_Behind_Source); PostgreSQL uses pg_is_in_recovery() and the replay timestamp. Stopped replication, or lag past your threshold, raises an alert on your channels — the basis of the Database Slave monitoring preset.
For inspecting or fixing data, the AI Administrator carries a run_sql tool. Ask it in plain language — "why are these orders showing the wrong total?", "delete the duplicate users older than the originals" — and it runs SQL against the local server and shows you the result as a table, much like MAMP's Claude integration. Because statements can modify data, run_sql requires changes enabled; read-only queries work the moment the assistant is on. It defaults to local root with no password and is local-only by design.
5.3Passworded and remote databases
The local-root shortcut stops exactly where the network begins. For a database that needs a password, or one on a remote or linked server, you never paste the password into a prompt or a tool. Instead you add it once to the AI Administrator's Script secrets (.env) bar as a named secret — DB_PASSWORD or MYSQL_PWD — and the assistant runs the mysql client through run_script, referencing the value as $DB_PASSWORD and running it over SSH against the named server. The real value stays on your Mac and is injected at run time; the cloud model sees the name, never the secret.
.env vault and reference it as $NAME. The value is injected locally or over SSH at run time and is never sent to the AI. This is the same vault model used throughout FrontierStack — see Chapter 13.5.4PostgreSQL
Open Postgres for projects that want advanced SQL, rich JSON, full-text search or GIS. The pane installs and runs PostgreSQL (default port 5432) and sits alongside MySQL with the same start/stop/status controls. Choose PostgreSQL when your application or framework expects it; otherwise MySQL/MariaDB remains the easy default. Both engines are first-class targets for the backup jobs and AI tools described later, and PostgreSQL is the foundation for several of the specialised stores below — pgvector for embeddings, TimescaleDB for time-series, and PostgREST for an instant REST API over a Postgres database.
5.5Redis and other caches
Sessions, queues, rate limits and hot-path caching usually want an in-memory store rather than a relational table. FrontierStack runs the two standards from the Caching catalog: Redis (port 6379), the in-memory key-value store that also backs Redis Streams, and Memcached (port 11211) for a simple distributed cache. Install, start and monitor them like any other service. Most CMS and framework deployments pair Redis with MySQL or PostgreSQL; the Service Catalog (Chapter 6) lists every option.
5.6Vector and analytics databases
Two newer families of store get their own catalog categories. Vector databases hold embeddings for retrieval-augmented generation (RAG) and semantic search; they are how the AI stack (Chapter 15) gives a model access to your own documents. Analytics databases are columnar or time-series engines built for fast aggregation over large datasets rather than transactional reads and writes.
| Engine | Kind | Port |
|---|---|---|
| MySQL / MariaDB | Relational | 3306 |
| PostgreSQL | Relational | 5432 |
| Redis | In-memory cache / streams | 6379 |
| Memcached | In-memory cache | 11211 |
| Qdrant | Vector (RAG / embeddings) | 6333 |
| Chroma | Vector (embeddings) | 8000 |
| Weaviate | Vector (hybrid search) | 8080 |
| Milvus | Vector (distributed) | 19530 |
| pgvector | Vector (Postgres extension) | 5432 |
| ClickHouse | Columnar OLAP analytics | 8123 |
| InfluxDB | Time-series | 8086 |
| TimescaleDB | Time-series (Postgres ext.) | 5432 |
| Apache Druid | Real-time OLAP | 8888 |
For purely in-process vector search there is also FAISS (a library, no port). Pick the engine your framework expects; the panes install and run each one through the same catalog machinery.
pgvector keeps that inside an existing PostgreSQL; Qdrant, Chroma, Weaviate and Milvus are dedicated stores for larger collections.5.7Data pipelines & ETL
Moving and reshaping data between these stores is its own discipline. The Data Pipelines & ETL catalog category covers it at the overview level: Airbyte and Meltano for extract-load with hundreds of connectors, dbt for SQL-based transformation and modelling, and orchestrators such as Dagster, Prefect and Kestra for scheduling the work. These are full platforms; FrontierStack installs and runs them and surfaces their web UIs, but the pipeline logic lives in each tool. For programmatic data-pipeline DAGs there is also Apache Airflow in the Workflow Orchestration category.
5.8Backups: dumps, the overview pane, and CCC
A database with no tested backup is a future outage. FrontierStack approaches this from two directions. In Database Ops you define a verified dump schedule per server: name, engine (MySQL or PostgreSQL), host, port, user, database (blank = all) and a backup directory. Due jobs run automatically while the app is open, and Run Now triggers one immediately. Each run does more than dump — mysqldump runs with --single-transaction for a consistent InnoDB snapshot, then Verify checks gzip integrity and that the dump ends with its completion marker (catching truncated or half-written files), writes an .md5 sidecar, rotates to your keep count, and rsyncs the result offsite over key-based SSH.
The AI Administrator exposes the same operations as tools: db_dump dumps a database to a .sql file on the target (using mysqldump or pg_dump), and backup_now makes a timestamped tar.gz of configs, a site or a data folder. Both are mutating, so they require approval and changes enabled; for the DB password they reference a $NAME vault secret, never a pasted value.
The Backups overview pane rolls up every mechanism so staleness is obvious at a glance: Time Machine status, Carbon Copy Cloner tasks, app-managed Apache config snapshots, config version history in Git, and scheduled auto-exports. The Carbon Copy Cloner pane reads CCC's tasks and history through its ccc command-line tool and lets you Run a task on demand. Both Time Machine and CCC feed the Alerts engine — a backup that hasn't run within its threshold, or a failed CCC task, raises an alert on your channels (Chapter 11).
5.9Restore — and restore safety
Backups exist to be restored, and restore is the dangerous half. The AI's restore tool extracts a .tar.gz archive or imports a .sql dump into a database. Because importing a dump overwrites the live database and extracting an archive overwrites files in place, restore is mutating and potentially destructive: it always requires explicit approval with changes enabled, and SQL imports reference the DB password as a $NAME vault secret.
.sql dump replaces the current contents of the target database, and there is no automatic undo. Before any restore, take a fresh dump of the current state (db_dump or Run Now) so you can roll back, and confirm you are pointed at the right database and the right server — not production by mistake.5.10Recovering a broken database
Sometimes a database is worse than down — it won't start, or a table is corrupt. FrontierStack gives the AI Administrator (Chapter 13) the same tools you would reach for by hand, behind the usual approval card. mysql_check_tables and pg_check_tables run mysqlcheck / pg_amcheck to find corrupt or crashed tables; with repair on they take a mysqldump/pg_dump backup first, then repair (--auto-repair / REINDEX), so a fix is reversible. mysql_service_control and pg_service_control start, stop, restart or check the server across systemd, launchd, Homebrew or service(8), local or over SSH.
For the hard cases there are guided skills — “Recover Broken MySQL” and “Recover Broken PostgreSQL” — that walk the whole runbook: read the error log, diagnose the fault, dump everything readable, rebuild into a fresh data directory, repair or recreate the damaged tables, and restart — always renaming the old data directory aside as a cold backup, never deleting it, and confirming before every destructive step. On a remote host, the fastest way in is the red Emergency button on the database's row in the server pane: it opens the assistant pre-loaded with the right recovery skill for that host.
5.11ORMs and app-native tooling: Drizzle and Convex
Finally, two tools meet your application where it defines its schema. The Drizzle ORM pane detects a Drizzle project (its tables, migrations and backend dialect) and runs drizzle-kit tasks for you — Generate SQL from your schema, Migrate, Push the schema directly, Pull (introspect) an existing database, and open Drizzle Studio to browse data. The Convex pane manages Convex, a reactive backend with a built-in database: run npx convex dev to watch and push functions, or stand up a self-hosted backend in Docker. Both need Node.js, which the panes will install via Homebrew if it is missing. These cover the application's own data layer; the dumps and backups above still protect whatever they write underneath.
Chapter 6
The Service Catalog
Every service FrontierStack can install, run and monitor — by category.
FrontierStack ships a catalog of 1545+ services across 112 categories. Every entry can be discovered, installed, started, configured and monitored from the app — and the AI Administrator can act on any of them. This chapter is the field guide: each category, what lives in it, and a one-line description of every service. Service descriptions are kept in English so they match the labels in the app.
Each service also has its own page on the website at frontierstack.app/services/ with ports, default web UI and the Homebrew formula.
6.1Overview
Local Health
built-in tool
Status Page
built-in tool
Alerts
built-in tool
Sites
built-in tool
Logs
built-in tool
Certificates
built-in tool
Tools
built-in tool
Scripts & Cron
built-in tool
Startup Items
built-in tool
Homebrew
built-in tool
Messaging Gateways
built-in tool
Notifications
built-in tool
Apple Services
built-in tool
Terminal Style
built-in tool
Setups
built-in tool
Paired Devices
built-in tool
Licences
built-in tool
Settings
built-in tool
6.2Setup & Migration
Migrate Setups
built-in tool
Apple Server Migration
built-in tool
Site Transfer
built-in tool
Install Wizard
built-in tool
6.3Locations & Places
Locations
built-in tool
Places
built-in tool
Device Discovery
built-in tool
Data Map
built-in tool
6.4Fleet & Remote
Remote Tools
built-in tool
Fleet Run
built-in tool
Remote KVM
built-in tool
GL.iNet KVM
built-in tool
Git Server
built-in tool
Remote Control & Lock
built-in tool
Server Clone
built-in tool
Headless Setup
built-in tool
Print Production
built-in tool
Screens
Polished VNC client for Mac & iOS (Edovia)
Cockpit
Browser console for Linux servers and Raspberry Pi (port 9090, web UI)
Windows Admin Center
Browser-based management for Windows Server fleets (port 443, web UI)
PiKVM
Open-source KVM-over-IP (Raspberry Pi) (port 443, web UI)
JetKVM
Compact, low-cost KVM-over-IP device (port 80, web UI)
TinyPilot
KVM-over-IP appliance (web UI) (port 443, web UI)
NanoKVM
Sipeed open KVM-over-IP (RISC-V) (port 80, web UI)
GL.iNet Comet (GL-RM1)
Compact KVM-over-IP with a browser console (port 80, web UI)
GL.iNet Comet Pro (GL-RM10)
KVM-over-IP with a built-in smart power plug (port 80, web UI)
Raritan Dominion KX
Enterprise KVM-over-IP switch (web UI) (port 443, web UI)
ATEN KVM over IP
KVM-over-IP switches & dongles (web UI) (port 443, web UI)
Jump Desktop
Fast, secure remote desktop (RDP/VNC/Fluid)
RustDesk
Open-source remote desktop with optional self-host relay (port 21115, web UI)
MeshCentral
Self-hosted web RMM and remote control (port 443, web UI)
Apache Guacamole
Clientless RDP, VNC and SSH gateway (port 8080, web UI)
Windows Remote Desktop
RDP access to Windows machines (port 3389)
WinRM / PowerShell Remoting
Remote command channel for Windows servers (port 5986)
Tactical RMM
Open-source RMM for Windows-focused fleets (port 443, web UI)
AnyDesk
Cross-platform remote desktop
6.5Networking
Traffic
built-in tool
Router & Network
built-in tool
Power over Ethernet
built-in tool
UniFi
built-in tool
SFTP
built-in tool
WebDAV
built-in tool
Time Capsule
built-in tool
Internet Health
built-in tool
Service Scan
built-in tool
Wi-Fi Analyser
built-in tool
BIND 9 (named)
Authoritative/recursive DNS server (port 53)
netboot.xyz
Network-boot OS installers via PXE/iPXE (port 3000, web UI)
Zeroconf / Bonjour
Zero-configuration service discovery (mDNS/DNS-SD) (port 5353)
6.6VPN
VPN
built-in tool
ZeroTier Controller
built-in tool
Tailnet
built-in tool
ZeroTier
Zero Trust SD-WAN / virtual networks — agent + API
ZeroTier Controller (self-hosted)
Run your own ZeroTier network controller (no Central) (port 9993)
NetBird
Open-source Zero Trust networking (self-hostable)
Twingate
Zero Trust remote access (VPN replacement)
CloudConnexa
OpenVPN's cloud-delivered VPN / ZTNA (formerly OpenVPN Cloud) (web UI)
Netmaker
Fast WireGuard mesh networks (self-hosted)
WireGuard
Modern, fast VPN — host your own, or the mesh base layer (port 51820)
OpenVPN
The classic open-source SSL/TLS VPN (port 1194)
Proton VPN
Privacy VPN (WireGuard/OpenVPN, Secure Core, kill switch)
Headscale
Self-hosted Tailscale control server (open-source) (port 8080, brew: headscale)
Nebula
Lightweight overlay mesh (Slack/Defined Networking)
OpenZiti
Zero-trust overlay fabric with SDKs (self-hosted)
Firezone
WireGuard-based zero-trust access gateway
tinc
Classic self-routing mesh VPN (open-source)
n2n
Peer-to-peer layer-2 VPN over a supernode (ntop)
innernet
WireGuard mesh with CIDR-based access (tonari)
strongSwan
IKEv2/IPsec VPN server (port 500)
wg-easy
WireGuard VPN with a simple web UI (port 51821, web UI)
TP-Link LightLink VPN
TP-Link remote-access VPN — managed via the Navi Desktop app
Tailscale
WireGuard mesh VPN (brew: tailscale)
Tunnelblick
Free OpenVPN client for macOS
6.7Routers & Firewalls
macOS Firewall
built-in tool
OPNsense
Open-source firewall/router OS (REST API) (port 443, web UI)
pfSense
FreeBSD firewall/router OS (REST via package) (port 443, web UI)
PoE Switch (RFC 3621)
Managed PoE switch — port power, budget & cycling over SNMP (port 161, web UI)
MikroTik (RouterOS)
RouterOS devices — REST API (v7+) (port 443, web UI)
UniFi
Ubiquiti Cloud Gateway / Dream Machine + Network controller (port 443, web UI)
UniFi OS Server
Self-hosted UniFi OS — run the full stack on your own Mac or Linux box (port 11443, web UI)
Peplink
SD-WAN routers with multi-WAN failover/bonding (port 443, web UI)
Cradlepoint
Cellular/5G edge routers (NCOS + NetCloud) (port 443, web UI)
OpenWrt
Open-source router firmware (LuCI / ubus) (port 80, web UI)
Firewalla
Home/SMB security router (cloud MSP API)
IPFire
Hardened open-source Linux firewall (web UI) (port 444, web UI)
VyOS
Linux network OS — unified CLI + HTTPS API (port 443, web UI)
Untangle / Arista NG Firewall
Debian network gateway — web admin (commercial) (port 443, web UI)
Sophos Firewall
Next-gen firewall appliance — web UI + API (commercial) (port 4444, web UI)
FortiGate
Fortinet next-gen firewall — REST API (commercial) (port 443, web UI)
Palo Alto Networks
PAN-OS next-gen firewall — XML/REST API (commercial) (port 443, web UI)
Cisco Secure Firewall
Cisco NGFW (Firepower/ASA) — FMC/FDM API (commercial) (port 443, web UI)
WatchGuard Firebox
Fireware firewall appliance — web UI + Cloud API (commercial) (port 8080, web UI)
UFW (Uncomplicated Firewall)
Easy iptables/nftables host firewall for Linux servers (manage over SSH)
6.8Web Servers
Apache
built-in tool
Nginx
built-in tool
Vercel
built-in tool
Railway
built-in tool
Vite
built-in tool
Localhost
built-in tool
Caddy
Automatic-HTTPS web server / reverse proxy (port 80, brew: caddy)
Laravel Herd
One-click PHP dev environment (Mac app) (port 80)
Apache Tomcat
Java servlet/JSP application server (port 8080, web UI, brew: tomcat)
Microsoft IIS
Windows web server and application platform (port 80, web UI)
OpenLiteSpeed
High-performance web server with web admin UI (port 7080, web UI)
Angular CLI
Scaffold, serve & build Angular apps (port 4200, web UI)
6.9DNS
Dynamic DNS
built-in tool
DNS
built-in tool
Domain Registrars
built-in tool
AdGuard Home
Network-wide ad/tracker-blocking DNS (self-hosted) (port 3000, web UI)
Pi-hole
Network-wide ad/tracker-blocking DNS sinkhole (port 80, web UI)
Nebula Sync
Sync configuration across Pi-hole instances
Kea DHCP
ISC's modern DHCPv4/DHCPv6 server (REST + DB back-ends) (port 8000)
ISC DHCP
Classic ISC dhcpd (EOL — migrate to Kea)
Dnsmasq
Lightweight DNS forwarder + DHCP + TFTP (port 53, brew: dnsmasq)
udhcpd (BusyBox)
Tiny DHCP server (BusyBox / embedded)
DNSimple
Managed DNS + domain registrar — live zone/record management (web UI)
Infoblox NIOS (DDI)
Enterprise DNS / DHCP / IPAM appliance (DDI) (port 443, web UI)
Windows Server DHCP
DHCP Server role on Windows Server
6.10Runtimes
Runtime Health
built-in tool
PHP
built-in tool
Python
built-in tool
Node.js
built-in tool
Java
built-in tool
Go
built-in tool
Rust
built-in tool
Ruby
built-in tool
Perl
built-in tool
.NET
built-in tool
Supabase Edge Functions
Deno serverless functions on the edge (port 54321)
code-server
VS Code in the browser (self-hosted) (port 8080, web UI, brew: code-server)
Next.js
React framework served by a Node process (SSR/SSG) (port 3000)
SvelteKit (Svelte)
Svelte app framework served by a Node process (SSR/SSG) (port 3000)
Nuxt (Vue)
Vue framework served by a Node process (SSR/SSG) (port 3000)
Astro
Content-first framework — zero JS by default; popular headless-WordPress front end (port 4321)
Tailwind CSS
Utility-first CSS — standalone build CLI (no Node)
.NET (ASP.NET Core)
Run ASP.NET Core & Blazor apps (Kestrel) (port 5000)
Wasmtime
Bytecode Alliance WebAssembly runtime (WASI)
Wasmer
WebAssembly runtime with a package registry
WasmEdge
Lightweight WASM runtime for cloud/edge & AI (CNCF)
wasmCloud
Distributed WebAssembly platform (CNCF) (port 4222, web UI)
Fermyon Spin
Serverless WebAssembly apps & HTTP microservices (port 3000)
6.11Databases
Database Health
built-in tool
MySQL
built-in tool
MySQL Clusters
built-in tool
Postgres
built-in tool
Database Ops
built-in tool
Cloud SQL
built-in tool
Drizzle ORM
built-in tool
Prisma
built-in tool
Airtable
built-in tool
Supabase
built-in tool
MongoDB
Document (NoSQL) database (port 27017, brew: mongodb-community)
Microsoft SQL Server
Microsoft relational database for Windows and Linux (port 1433)
Oracle Database
Enterprise relational database (port 1521, web UI)
CockroachDB
Distributed SQL database (port 26257, web UI)
Apache Cassandra
Distributed wide-column database (port 9042, brew: cassandra)
ScyllaDB
High-performance Cassandra-compatible database (port 9042)
Neo4j
Graph database with Cypher query language (port 7474, web UI, brew: neo4j)
Apache CouchDB
Document database with HTTP API and sync (port 5984, web UI, brew: couchdb)
Couchbase Server
Distributed document, key-value and search database (port 8091, web UI)
PlanetScale
Hosted MySQL with database branching (cloud API) (port 3306)
Neon
Serverless Postgres — autoscaling & branching (cloud API) (port 5432)
Turso
Distributed SQLite (libSQL) at the edge (cloud API) (port 8080)
PostgREST
Instant REST API over a PostgreSQL database (port 3000)
PocketBase
Open-source backend in one file (SQLite + auth + realtime) (port 8090, web UI)
Firebase
Google's backend-as-a-service — Firestore, Auth, Storage, Functions (cloud) (port 4000, web UI)
Patroni
HA PostgreSQL — automatic failover (port 8008, web UI)
6.12Vector Databases
Qdrant
Fast vector DB for embeddings & RAG (self-hosted) (port 6333, web UI)
Chroma
Developer-friendly embedding database (self-hosted) (port 8000)
Weaviate
Vector DB with built-in vectorizers & hybrid search (self-hosted) (port 8080)
Milvus
Scalable, distributed vector database (self-hosted) (port 19530)
pgvector
Vector search inside PostgreSQL (extension) (port 5432)
FAISS
Fast in-process vector similarity search (library)
6.13Analytics Databases
InfluxDB
Time-series database for metrics and IoT (port 8086, web UI, brew: influxdb)
DuckDB
In-process OLAP database — the SQLite of analytics
ClickHouse
Columnar OLAP database for fast analytics (port 8123)
Apache Druid
Real-time analytics database (OLAP) (port 8888, web UI)
TimescaleDB
Time-series database (PostgreSQL extension) (port 5432)
6.14Data Pipelines & ETL
Airbyte
Open-source ELT with 300+ connectors (self-hosted / cloud) (port 8000, web UI)
Meltano
Open-source ELT built on Singer taps & targets (CLI) (port 5000, web UI)
dbt
SQL-based data transformation & modeling (self-hosted / cloud) (port 8080, web UI)
Dagster
Asset-oriented data orchestrator (self-hosted / cloud) (port 3000, web UI)
Prefect
Modern Python workflow orchestration (self-hosted / cloud) (port 4200, web UI)
Kestra
Event-driven orchestration & scheduling, YAML flows (self-hosted) (port 8080, web UI)
Redpanda Connect (Benthos)
Declarative stream-processing & connectors (self-hosted CLI) (port 4195)
NATS JetStream Pipelines
Persistent streams & consumers for event pipelines (self-hosted) (port 8222, brew: nats-server)
6.15Caching
Redis
In-memory key-value store (port 6379, brew: redis)
Memcached
Distributed memory cache (port 11211, brew: memcached)
6.16Search
Elasticsearch
Search & analytics engine (Elastic) (port 9200, web UI, brew: elasticsearch-full)
Meilisearch
Fast, typo-tolerant search engine (port 7700, web UI, brew: meilisearch)
OpenSearch
Search & analytics engine (port 9200, web UI, brew: opensearch)
Photon
Self-hosted OpenStreetMap geocoder (search-as-you-type) (port 2322)
6.17Backup
Backups
built-in tool
Time Machine
built-in tool
Carbon Copy Cloner
built-in tool
Synology Active Backup for Business
Centralized backup for PCs, servers, VMs & SaaS (Synology) (port 5001, web UI)
Databasus
Self-hosted database backup & point-in-time recovery (web UI)
Restic
Fast, encrypted, deduplicated backups
rclone
Sync & mount 70+ cloud storages
Dropbox (Backup Target)
Use Dropbox as an encrypted off-site backup destination (restic / rclone)
Veeam Backup & Replication
Enterprise VM, server and cloud backup (port 9392, web UI)
BorgBackup
Deduplicating encrypted backups over SSH
Kopia
Encrypted snapshots to cloud or local storage (port 51515, web UI)
Duplicati
Web UI backups to cloud storage (port 8200, web UI)
6.18Storage & NAS
iCloud+
built-in tool
Xsan
built-in tool
Supabase Storage
S3-compatible object storage from Supabase (port 54321, web UI)
Nextcloud
Files, sync, office & app platform (port 80, web UI)
Syncthing
Peer-to-peer continuous file sync (port 8384, web UI, brew: syncthing)
TrueNAS
ZFS NAS OS — pools, snapshots, replication (self-hosted) (port 443, web UI)
ZimaOS / CasaOS
Personal-cloud NAS OS for ZimaCube / ZimaBoard (self-hosted) (port 80, web UI)
Synology DSM
Synology NAS appliance (DSM) (port 5001, web UI)
QNAP QTS
QNAP NAS appliance (QTS/QuTS hero) (port 8080, web UI)
Ceph
Distributed object/block/file storage cluster (self-hosted) (port 8443, web UI)
GlusterFS
Scale-out network filesystem (self-hosted)
iSCSI (SAN)
Block storage over TCP/IP — initiator & target (port 3260) (port 3260)
NVMe / NVMe-oF
NVMe SSDs & NVMe-over-Fabrics targets (TCP/RDMA/FC) (port 4420)
Fibre Channel (SAN)
FC SAN fabric — HBA ports, WWNs, multipath
RDMA / RoCE / iWARP
Remote Direct Memory Access fabrics — RoCE & iWARP
InfiniBand Fabric
InfiniBand HCA/fabric — ports, SM, port-error counters
NVIDIA NVLink
GPU-to-GPU interconnect — per-link state & bandwidth
NVIDIA NVSwitch
NVLink switch fabric — Fabric Manager service
Liqid (Composable)
Composable PCIe/CXL fabric — pool & attach GPUs/NVMe (web UI)
GigaIO FabreX
PCIe/CXL memory fabric — composable GPU pooling (web UI)
WEKA
Parallel filesystem for AI/HPC (GPUDirect) (port 14000, web UI)
ownCloud
Self-hosted file sync & share (port 80, web UI)
Seafile
File sync & share with client-side encryption (self-hosted) (port 8000, web UI)
Resilio Sync
P2P file sync (BitTorrent-based) (port 8888, web UI)
Dropbox
Cloud file sync & share (app + API) (web UI)
Samba
SMB file sharing (+ Time Machine) (port 445, brew: samba)
Netatalk
AFP file sharing for legacy Macs and Xserve estates (port 548)
File Browser
Web file manager for a directory (port 8080, web UI)
Filestash
Web file manager for S3/SFTP/FTP/WebDAV/… (port 8334, web UI)
Unraid
NAS/server OS — storage array, VMs & Docker (port 80, web UI)
6.19Object Storage & S3-Compatible
MinIO
S3-compatible object storage (port 9000, web UI, brew: minio)
SeaweedFS
Fast distributed object/file store (self-hosted) (port 8888, web UI)
Garage
Lightweight self-hosted S3 object store (Deuxfleurs) (port 3900)
Ceph RGW (RADOS Gateway)
S3/Swift object gateway on a Ceph cluster (self-hosted) (port 7480)
OpenStack Swift
Highly-available object store (OpenStack, self-hosted) (port 8080)
Cloudflare R2
S3-compatible object storage with zero egress fees (cloud) (web UI)
Backblaze B2
Low-cost cloud object storage, S3-compatible (cloud) (web UI)
Wasabi
Hot cloud object storage, S3-compatible, no egress fees (cloud) (web UI)
RustFS
High-performance S3-compatible object storage (Rust) (port 9000, web UI)
6.20Mail
Mail Server
built-in tool
Message Delivery
built-in tool
Proton
Encrypted mail, VPN, drive & passwords (cloud) (port 1025, web UI)
HEY
37signals hosted email & calendar (Imbox, Screener, Paper Trail) (web UI)
Rspamd
Fast spam-filtering system (self-hosted) (port 11334, web UI)
Apache SpamAssassin
Rule-based spam classifier (self-hosted) (port 783)
MailScanner
Email security framework / gateway (self-hosted)
Proxmox Mail Gateway
Anti-spam/AV email gateway appliance (self-hosted) (port 8006, web UI)
mailcow
Dockerized full mail-server suite (self-hosted) (port 443, web UI)
Modoboa
Mail hosting & management platform (self-hosted) (port 443, web UI)
OpenDKIM
DKIM signing & verification milter (self-hosted) (port 8891)
OpenDMARC
DMARC policy filter & reporting (self-hosted) (port 8893)
Postfix
SMTP mail transfer agent (port 25)
Dovecot
IMAP/POP3 mail delivery server (port 143)
Stalwart Mail Server
All-in-one secure mail server (SMTP/IMAP/JMAP) (port 8080, web UI)
Maddy Mail Server
Composable single-binary mail server (SMTP/IMAP)
6.21Mailing Lists
Mailing Lists
built-in tool
Mailchimp
Hosted email marketing & audiences (cloud) (web UI)
Brevo
Email/SMS marketing + transactional (cloud) (web UI)
MailerLite
Simple newsletter & subscriber lists (cloud) (web UI)
Klaviyo
E-commerce email/SMS & segmentation (cloud) (web UI)
Campaign Monitor
Designer-friendly email campaigns (cloud) (web UI)
Mailgun
Developer transactional email + lists (cloud) (web UI)
SendGrid
Twilio's email API & marketing lists (cloud) (web UI)
Amazon SES
AWS low-cost bulk/transactional email (cloud) (web UI)
Postmark
Fast, reliable transactional email (cloud) (web UI)
Resend
Developer-first transactional email API (cloud) (web UI)
MailPace
Fast, privacy-friendly transactional email (cloud) (web UI)
Nylas
Email/calendar/contacts API platform (cloud) (web UI)
Listmonk
Self-hosted high-performance newsletter manager (port 9000, web UI)
Mautic
Self-hosted marketing automation (port 80, web UI)
Mailtrain
Self-hosted Node.js newsletter app (port 3000, web UI)
Postal
Self-hosted full mail/delivery platform (port 5000, web UI)
6.22Email Deliverability & Reputation
Email Delivery
built-in tool
DMARC Aggregate Reporting
Collect & parse DMARC RUA reports (self-hosted: parsedmarc)
BIMI
Brand logo in the inbox via DNS + VMC (standard)
MTA-STS & TLS-RPT
Enforce SMTP TLS and get TLS failure reports (standard)
GlockApps
Inbox-placement & spam-filter testing (cloud) (web UI)
MXToolbox
DNS, blacklist & email health lookups (cloud) (web UI)
Google Postmaster Tools
Gmail sender reputation & spam-rate data (cloud) (web UI)
Mailhardener
All-in-one email-security monitoring & reporting (cloud) (web UI)
EasyDMARC
DMARC management & deliverability platform (cloud) (web UI)
dmarcian
DMARC reporting & deployment platform (cloud) (web UI)
6.23Message Queues & Streaming
Supabase Realtime
Postgres change streams over WebSockets (port 54321, web UI)
NATS
High-performance messaging + JetStream (self-hosted) (port 4222, brew: nats-server)
Apache Kafka
Distributed event streaming (self-hosted) (port 9092, brew: kafka)
Redpanda
Kafka-compatible streaming, no JVM/ZooKeeper (port 9092)
RabbitMQ
AMQP broker with optional MQTT and a separate management API (port 5672, web UI on 15672, brew: rabbitmq)
Apache Pulsar
Distributed pub-sub & queuing with tiered storage (port 6650, web admin on 8080)
Apache RocketMQ
Low-latency distributed messaging (ordered, transactional) (broker port 10911; NameServer 9876)
Redis Streams
Lightweight log/stream with consumer groups (Redis) (port 6379, brew: redis)
Celery
Distributed task queue for Python (workers + broker)
6.24Push Services
APNs
built-in tool
ntfy
Self-hostable pub-sub push (HTTP) (port 80, web UI, brew: ntfy)
Gotify
Self-hosted push server + Android app (port 80, web UI)
OneSignal
Hosted multi-channel push (cloud) (web UI)
Firebase (FCM)
Google's cross-platform push (cloud) (web UI)
Airship
Enterprise customer-engagement push (cloud) (web UI)
Matrix Notifications
Push via the Matrix chat protocol (web UI)
Synapse
Self-hosted Matrix homeserver (port 8008, brew: matrix-synapse)
Element
Flagship Matrix chat client
UnifiedPush
Open push standard (Google-free) (web UI)
PushDeer
Open-source, no-app-fuss push (web UI)
Pushover
Simple paid push to iOS/Android/desktop (web UI)
Apprise
One CLI/library → 80+ push services
6.25Chat & Collaboration
Discord
Community chat & voice (cloud) (web UI)
Slack
Team chat & workflows (cloud) (web UI)
Buzz
Group chat for humans + AI agents (Block; cloud or self-hosted) (web UI)
Matrix (Synapse + Element)
Open, federated chat — self-hosted (Docker) (port 8008, web UI)
Mattermost
Open-source Slack alternative (self-hosted) (port 8065, web UI)
Rocket.Chat
Open-source team chat platform (self-hosted) (port 3000, web UI)
Zulip
Threaded team chat (self-hosted or cloud) (port 80, web UI)
Ergo (IRCd)
Modern single-binary IRC server (IRCv3, built-in services) (port 6667)
InspIRCd
Modular C++ IRC server (self-hosted) (port 6667)
UnrealIRCd
Popular full-featured IRC server (self-hosted) (port 6667)
Solanum (IRCd)
The IRCd that runs Libera.Chat (charybdis fork) (port 6667)
ZNC (IRC bouncer)
IRC bouncer — stay connected, replay history (port 6697, web UI)
The Lounge
Self-hosted web IRC client (always-on) (port 9000, web UI)
KiwiIRC
Web IRC client + gateway (self-hosted) (port 7778, web UI)
Atheme (IRC services)
NickServ/ChanServ services for TS6 IRCds
Anope (IRC services)
IRC services (NickServ/ChanServ) for many IRCds
Libera.Chat
Public IRC network (FOSS communities) — connect, not self-host (port 6697)
Open OSCAR Server
Self-hostable AIM/ICQ (OSCAR) server — run your own AIM (port 5190)
AIM OSCAR Server
Alternative OSCAR server — make your own AIM chat network (port 5190)
Telegram
Cloud messaging with a powerful Bot API (cloud) (web UI)
TeamSpeak
Low-latency voice server (self-hosted) (port 9987)
Mumble
Open-source low-latency voice (self-hosted) (port 64738)
Jitsi Meet
Open-source video conferencing (self-hosted) (port 8443, web UI)
SimpleX Chat
Private messenger with no user IDs (self-hostable relays)
Session
Onion-routed private messenger (no phone number)
Prosody
Lightweight XMPP (Messages) server (port 5222, brew: prosody)
6.26SMS & iMessage Gateways
Gammu (gammu-smsd)
Send/receive SMS via a GSM modem (self-hosted)
Kannel
Open-source SMS/WAP gateway (self-hosted) (port 13013)
ModemManager
Linux modem daemon — SMS via mmcli (self-hosted)
SMS Gateway for Android
Turn an Android phone into an SMS HTTP API (self-hosted) (web UI)
SMSSync
Android SMS↔webhook relay (self-hosted)
Android + Tasker
DIY SMS gateway via Tasker automation (self-hosted)
Home Assistant SMS
SMS notify/receive in Home Assistant (Gammu)
AirMessage
Self-hosted iMessage bridge — server on this Mac (port 1359)
BlueBubbles
Self-hosted iMessage bridge — server on this Mac (web UI)
6.27Business Messaging
KakaoTalk AlimTalk
Kakao business notification templates — Korea (cloud) (web UI)
LINE Official Account
Customer messaging & loyalty on LINE (web UI)
WhatsApp Business Platform
WhatsApp business messaging — templates, catalogues (live) (web UI)
WeChat Official Account
WeChat business account — China (broadcasts, menus, mini-programs) (web UI)
Zalo Official Account
Zalo business account — Vietnam (broadcasts & chat) (web UI)
KakaoTalk Channel
Kakao business channel — Korea (friend broadcasts & chat) (web UI)
Viber Business Messages
Branded business messages on Viber (web UI)
Facebook Messenger
Messenger business messaging (Meta) (web UI)
Instagram Messaging
Instagram DM API for business (Meta) (web UI)
Apple Messages for Business
Store↔customer chat inside iMessage (web UI)
RCS Business Messaging
Branded rich business messaging (SMS successor) (web UI)
Attentive
SMS & email marketing for retail/DTC (web UI)
Postscript
SMS marketing for Shopify stores (web UI)
Omnisend
Email & SMS marketing automation (e-commerce) (web UI)
SimpleTexting
Business SMS/MMS marketing & two-way texting (web UI)
ManyChat
Chat marketing bots — Instagram/Messenger/WhatsApp (live) (web UI)
Respond.io
Omnichannel customer-conversation inbox (web UI)
Gupshup
Conversational messaging API (WhatsApp & more) (web UI)
WATI
WhatsApp Business team inbox & broadcasts (web UI)
Charles
Conversational commerce on WhatsApp (web UI)
Trengo
Multichannel team inbox for customer chat (web UI)
Intercom
Customer messaging & proactive marketing (live) (web UI)
Gorgias
E-commerce helpdesk with chat & proactive messages (web UI)
6.28Calendars
Calendar Discovery
built-in tool
Calendar Health
built-in tool
Event Server Monitoring
built-in tool
ICS Feeds
built-in tool
Radicale
Lightweight CalDAV/CardDAV server (port 5232, web UI)
Baïkal
PHP CalDAV/CardDAV server (SabreDAV) (port 80, web UI)
Nextcloud Calendar
Calendar app on a Nextcloud server (web UI)
DAViCal
PHP/PostgreSQL CalDAV server (port 80, web UI)
SOGo
Groupware (CalDAV/CardDAV/ActiveSync) (port 20000, web UI)
Apple Calendar Server
Migrate the old macOS Server CalDAV (port 8443)
Google Calendar
Hosted calendar (CalDAV / API) (web UI)
Outlook Calendar
Microsoft 365 calendar (Graph API) (web UI)
Calendly
Hosted scheduling / booking links (web UI)
Cal.com
Open-source scheduling (self-hostable) (web UI)
6.29Identity & Accounts
Accounts
built-in tool
Open Directory
Apple's built-in LDAP / Kerberos directory (port 389)
Dropbox Business
Team management & audit-log APIs for Dropbox Business (cloud) (web UI)
Keycloak
Open-source identity & access management (SSO) (port 8080, web UI)
FreeIPA
Open-source identity management (LDAP/Kerberos, self-hosted) (port 443, web UI)
Authentik
Self-hosted identity provider (Docker) (port 9000, web UI)
Okta
Workforce identity & SSO — live API health (web UI)
Microsoft Entra ID
Azure AD — cloud identity & SSO (Graph health) (web UI)
Google Workspace
Google's identity & productivity suite (Admin SDK) (web UI)
AD FS
Active Directory Federation Services (on-prem SSO)
Authenticate.com
Identity verification & KYC API (cloud) (web UI)
6.30Customer Identity
WorkOS
B2B auth — SSO, Directory Sync, AuthKit (live) (web UI)
Auth0
Hosted authentication platform (Okta) (web UI)
Clerk
Hosted auth & user management for web apps (cloud) (web UI)
Supabase Auth
Auth from the Supabase stack (cloud or local) (port 54321, web UI)
Better Auth
Framework-agnostic auth library for TypeScript apps
FusionAuth
Self-hostable CIAM / auth server (OAuth2/OIDC/SAML) (port 9011, web UI)
Ory Kratos
Headless identity & user management (self-hosted) (port 4433)
Ory Hydra
OAuth2 & OpenID Connect provider (self-hosted) (port 4444)
Zitadel
Self-hostable identity platform (OIDC/SAML, multi-tenant) (port 8080, web UI)
Authelia
SSO + 2FA auth gateway for your services (port 9091, web UI)
6.31Decentralized Identity
Hyperledger Aries (ACA-Py)
Issue/verify Verifiable Credentials over DIDComm (self-hosted)
walt.id
Open-source SSI stack — issuer, verifier & identity wallet (web UI)
Veramo
JS/TS framework for DIDs & Verifiable Credentials
6.32Version Control
Git
built-in tool
Gitea
Lightweight self-hosted Git service (port 3000, web UI, brew: gitea)
Forgejo
Community fork of Gitea (Codeberg) (port 3000, web UI, brew: forgejo)
GitHub
The Git host — live account dashboard (cloud) (web UI)
GitLab
Full DevOps platform — repos, MRs, registry (cloud or self-hosted) (port 443, web UI)
GitHub Enterprise
Self-hosted / managed GitHub for organizations (port 443, web UI)
Bitbucket
Atlassian Git hosting — Cloud or self-hosted (Data Center) (port 443, web UI)
Codeberg
Free community Git hosting (Forgejo, nonprofit) (port 443, web UI)
SourceHut
Lightweight, email-driven Git suite (cloud or self-hosted) (port 443, web UI)
AWS CodeCommit
Managed private Git repositories on AWS (API) (port 443, web UI)
Pierre
Fast code review & collaboration on Git (cloud) (web UI)
Graphite
Stacked-PR code review on top of GitHub (cloud + CLI) (web UI)
Phabricator / Phorge
Self-hosted code review & repos (now maintained as Phorge) (port 443, web UI)
SourceForge
Open-source project hosting & downloads (cloud) (port 443, web UI)
Google Code (archive)
Defunct — read-only archive for migrating old projects (web UI)
Subversion (SVN)
Apache Subversion — centralized version control (self-hosted) (port 3690)
Jujutsu (jj)
Git-compatible VCS with a simpler, more powerful model
gh-dash
Terminal dashboard for GitHub PRs & issues (gh extension)
code.storage
Code hosting / storage platform (cloud) — see code.storage (web UI)
Entire
Code collaboration platform (cloud) — see entire.io (web UI)
Gitea Actions Runner
CI runner for Gitea/Forgejo Actions
Webhook (git-deploy)
Push-to-deploy via webhooks (port 9000, brew: webhook)
6.33CI/CD
Woodpecker CI
Lightweight container-native CI (port 8000, web UI)
GitHub Actions
CI/CD in GitHub — live build & deploy monitor (cloud) (web UI)
CodeRabbit
AI code reviewer for pull requests (cloud + CLI/IDE) (web UI)
GitLab CI/CD
Pipelines built into GitLab (cloud or self-hosted) (web UI)
CircleCI
Cloud CI/CD with fast parallelism (cloud) (web UI)
Depot
Remote build acceleration — Docker & GitHub Actions runners (cloud) (web UI)
Bitbucket Pipelines
CI/CD built into Bitbucket Cloud (cloud) (web UI)
Travis CI
Hosted CI for open source & teams (cloud) (web UI)
Buildkite
Hybrid CI — your agents, their dashboard (cloud) (web UI)
Jenkins
The classic self-hosted automation server (port 8080, web UI, brew: jenkins-lts)
Drone CI
Container-native CI server (self-hosted) (port 80, web UI)
Concourse
Pipeline-centric CI with reproducible builds (self-hosted) (port 8080, web UI)
TeamCity
JetBrains CI/CD server (self-hosted or cloud) (port 8111, web UI)
GoCD
Open-source CI/CD with value-stream pipelines (self-hosted) (port 8153, web UI)
Argo CD
GitOps continuous delivery for Kubernetes (self-hosted) (port 8080, web UI)
Flux CD
GitOps toolkit for Kubernetes (self-hosted)
Spinnaker
Multi-cloud continuous delivery (self-hosted) (port 9000, web UI)
Azure DevOps
Azure Pipelines, Repos, Boards & Artifacts (cloud) (web UI)
Buildkite Agent
Self-hosted runner for Buildkite pipelines
Jenkins Agent
Build node that connects to a Jenkins controller
GitHub Actions Runner
Self-hosted runner for GitHub Actions
Blacksmith
Managed high-performance CI runners for GitHub Actions (cloud) (web UI)
GitLab Runner
Self-hosted runner for GitLab CI/CD (brew: gitlab-runner)
6.34Build & Compile
Build & Render Farm
built-in tool
Workbox
Google's service-worker libraries for PWAs
Vite PWA Plugin
Zero-config PWA for Vite (vite-plugin-pwa)
Next.js PWA
PWA/service-worker support for Next.js
Nuxt PWA Module
PWA module for Nuxt (@vite-pwa/nuxt)
Xcode Build / Xcode Cloud
Apple's build system (xcodebuild) + Xcode Cloud CI
Bazel
Fast, scalable multi-language build system (Google)
Tuist
Xcode project generation & build optimization
Buck2
Meta's fast, hermetic multi-language build system
CMake
Cross-platform build-system generator (C/C++)
Ninja
Small, very fast build backend
Meson
Fast, user-friendly build system (Ninja backend)
Gradle
JVM/Android build automation with build cache
Apache Maven
Java build & dependency management
distcc
Distribute C/C++ compiles across machines
Icecream (icecc)
Distributed compiler with central scheduler
Bazel Remote Execution
Run Bazel actions on a remote farm (RBE)
BuildGrid
Open-source Remote Execution API server (self-hosted)
Incredibuild
Commercial distributed build acceleration
ccache
Compiler cache for C/C++ rebuilds
sccache
Shared compiler cache (C/C++/Rust) with cloud backends
Bazel Remote Cache
Shared HTTP/gRPC cache for Bazel (self-hosted) (port 8080)
Tuist Cache
Binary caching for Xcode builds (Tuist)
6.35Internal Developer Portals
Backstage
Spotify's open-source developer portal framework (self-hosted) (port 7007, web UI)
Port
No-code internal developer portal (cloud) (web UI)
Cortex
Service catalogue with scorecards & maturity (cloud) (web UI)
OpsLevel
Service maturity & ownership portal (cloud) (web UI)
Humanitec
Platform orchestrator for internal platforms (cloud + agent) (web UI)
Score
Open workload spec for portable deployments (CLI)
Roadie
Managed (hosted) Backstage (cloud) (web UI)
6.36Infrastructure as Code
Terraform
HashiCorp's declarative infrastructure as code (CLI)
OpenTofu
Open-source, community fork of Terraform (CLI)
Pulumi
Infrastructure as code in real languages (CLI / cloud)
Ansible
Agentless configuration management & automation (CLI)
Chef
Policy-as-code configuration management (Progress Chef)
Puppet
Declarative configuration management at scale (Perforce)
Salt
Event-driven remote execution & config management (CLI)
Packer
Build identical machine images for any platform (CLI)
AWS CloudFormation
Native AWS infrastructure as code (templates / CLI) (web UI)
AWS CDK
Define AWS infra in code, synth to CloudFormation (CLI)
6.37API Testing & Synthetic Monitoring
Postman
API platform — build, test, mock & monitor (app / cloud) (web UI)
Bruno
Open-source, offline, git-friendly API client (app / CLI)
Insomnia
API client for REST, GraphQL & gRPC (app)
Grafana k6
Developer-centric load & performance testing (CLI)
Artillery
Load testing & smoke tests for APIs and services (CLI)
Checkly
Monitoring-as-code — API checks & browser synthetics (cloud + CLI) (web UI)
Changedetection.io
Website change detection & notifications (port 5000, web UI)
6.38Proxies & Load Balancers
Reverse Proxy
built-in tool
Debug Share
built-in tool
ProxySQL
High-performance MySQL proxy (port 6033, brew: proxysql)
MySQL Router
Routing for MySQL InnoDB Cluster (port 6446)
Nginx Proxy Manager
Web-UI reverse proxy (Docker) (port 81, web UI)
keepalived
VRRP virtual IP failover + LVS load balancing
6.39Proxy Gateways
HAProxy
TCP/HTTP load balancer & proxy (brew: haproxy)
Traefik
Container-native reverse proxy & LB (port 8080, web UI, brew: traefik)
Squid
Caching forward proxy (HTTP/HTTPS/FTP) (port 3128, brew: squid)
3proxy
Tiny multi-protocol proxy (HTTP/SOCKS) (port 3128)
Tinyproxy
Lightweight HTTP/HTTPS forward proxy (port 8888, brew: tinyproxy)
6.40CDN & Edge
Cloudflare
built-in tool
Akamai
Enterprise CDN, security & edge compute (cloud) (web UI)
Fastly
Real-time CDN with VCL/Compute edge (cloud) (web UI)
Imperva
WAF-first CDN & DDoS protection (cloud) (web UI)
Amazon CloudFront
AWS CDN tied to S3/EC2 origins (cloud) (web UI)
Google Cloud CDN
GCP CDN on global load balancing (cloud) (web UI)
Azure Front Door
Microsoft's global entry point: CDN + WAF + LB (cloud) (web UI)
6.41Hosting
Hostinger
built-in tool
DigitalOcean
built-in tool
Vultr
built-in tool
Linode (Akamai)
built-in tool
Hetzner
built-in tool
Sakura Cloud
built-in tool
ConoHa
built-in tool
Cloudways
built-in tool
SiteGround
built-in tool
WP Engine
built-in tool
Kinsta
built-in tool
Pressable
built-in tool
Contabo
built-in tool
Cloud Servers
built-in tool
Abacus SuperComputer
Always-on Ubuntu VM from Abacus.AI (2 vCPU / 8 GB, SSH + root) (web UI)
Fly.io
Deploy apps as microVMs on Fly's global edge (cloud CLI)
Coolify
Self-hosted PaaS (Heroku/Netlify/Vercel alt.) (port 8000, web UI)
Dokploy
Open-source deployment platform (PaaS) (port 3000, web UI)
CapRover
Self-hosted PaaS on Docker Swarm (port 3000, web UI)
Kamal
Deploy containers to your own servers over SSH (37signals)
Dokku
Minimal self-hosted PaaS (git push deploy)
6.42AWS Control
S3 Buckets
built-in tool
EC2 Instances
built-in tool
Lightsail
built-in tool
CloudFront/CDN
built-in tool
Route 53 DNS
built-in tool
RDS Databases
built-in tool
DynamoDB
built-in tool
CloudWatch Logs
built-in tool
SNS Topics
built-in tool
Billing Alerts
built-in tool
IAM Key Warnings
built-in tool
6.43FinOps & Cloud Cost
Infracost
Cost estimates for Terraform, in CI (self-hosted CLI / cloud)
OpenCost
CNCF open-source Kubernetes cost monitoring (self-hosted) (port 9003, web UI)
Kubecost
Kubernetes cost visibility & optimization (self-hosted / cloud) (port 9090, web UI)
CloudZero
Cloud cost intelligence & unit economics (cloud) (web UI)
Vantage
Multi-cloud cost reporting & optimization (cloud) (web UI)
Finout
No-agent FinOps platform with unified cost (cloud) (web UI)
CloudHealth
Multi-cloud cost & governance (VMware/Broadcom, cloud) (web UI)
AWS Cost Explorer
Native AWS cost analysis & forecasting (API) (web UI)
GCP Cloud Billing
Google Cloud billing reports, budgets & BigQuery export (API) (web UI)
Azure Cost Management
Native Azure (and AWS) cost analysis & budgets (API) (web UI)
6.44Containers
Containers
built-in tool
Kubernetes Clusters
built-in tool
Docker
built-in tool
OrbStack
built-in tool
Vagrant
built-in tool
Kamal
built-in tool
Proxmox VE
Open-source virtualization — KVM VMs + LXC containers (port 8006, web UI)
VMware vSphere
Enterprise virtualization — ESXi hypervisor + vCenter (port 443, web UI)
Microsoft Hyper-V
Windows Server hypervisor (Type-1)
XCP-ng
Open-source Xen hypervisor (XenServer alternative) (port 443, web UI)
Nutanix
HCI platform — AHV hypervisor + Prism management (port 9440, web UI)
Scale Computing HyperCore
SC//HyperCore HCI appliance (HC3) — REST API on :443 (port 443, web UI)
VergeOS
Verge.io — integrated virtualization, storage and networking (port 443, web UI)
HPE Morpheus
Hybrid-cloud management & orchestration (REST API) (port 443, web UI)
Platform9
Managed Kubernetes / private cloud (SaaS control plane) (port 443, web UI)
Azure Local
Azure Stack HCI successor — monitored via Azure ARM, no local API (web UI)
OpenShift Virtualization
Run VMs alongside containers on OpenShift (KubeVirt) (web UI)
OpenStack
Open-source private-cloud IaaS platform (web UI)
VMware vMotion
Live-migrate running VMs between ESXi hosts
Proxmox VE Live Migration
Live-migrate KVM VMs across Proxmox cluster nodes
Hyper-V Live Migration
Move running Hyper-V VMs between hosts with no downtime
Watchtower
Auto-update running Docker containers
Podman
Daemonless, Docker-compatible containers
Apple Container
Apple's native `container` tool — Linux containers in per-container VMs
Lima
Linux virtual machines (container machines) on macOS
Colima
Container runtimes on macOS via Lima (Docker/containerd/k8s)
OrbStack
Fast Docker & Linux machines for macOS
Kubernetes
The container orchestrator (kubectl) (port 6443)
Helm
The Kubernetes package manager (charts)
Dev Containers (VS Code)
Reproducible dev environments in a container
K3s
Lightweight certified Kubernetes (self-hosted) (port 6443)
minikube
Local single-node Kubernetes for development
kind
Kubernetes IN Docker — disposable clusters
k3d
k3s in Docker — lightweight multi-node clusters
k0s
Zero-friction single-binary Kubernetes (port 6443)
MicroK8s
Canonical's low-ops Kubernetes (snap) (port 16443)
RKE2
Rancher's security-focused Kubernetes (Gov-grade) (port 6443)
Talos Linux
API-managed immutable OS purpose-built for Kubernetes (port 50000)
kubeadm
The official cluster bootstrapper (vanilla K8s) (port 6443)
OpenShift / OKD
Red Hat's enterprise Kubernetes platform (port 6443, web UI)
Rancher Desktop
Desktop Kubernetes + container runtime for Mac
nerdctl
Docker-compatible CLI for containerd
Docker Swarm
Docker-native clustering (docker swarm / stack) (port 2377)
Portainer
Web UI for Docker & Kubernetes (self-hosted) (port 9443, web UI)
Rancher
Multi-cluster Kubernetes management (self-hosted) (port 443, web UI)
Nomad
HashiCorp workload orchestrator (self-hosted) (port 4646, web UI)
6.45Service Mesh (Kubernetes)
Istio
Envoy-based service mesh for Kubernetes
Linkerd
Lightweight, fast CNCF service mesh
Consul Connect
HashiCorp Consul service mesh & discovery (port 8500, web UI)
Cilium Service Mesh
eBPF-based, sidecarless service mesh & CNI
Kuma
Universal service mesh (Kong, CNCF) (port 5681, web UI)
Gloo Mesh
Istio-based multi-cluster service mesh (solo.io)
NGINX Service Mesh
Lightweight service mesh on NGINX/NGINX Plus (F5)
AWS App Mesh
Managed Envoy service mesh on AWS (ECS/EKS/EC2)
Kong Gateway
Cloud-native API gateway on Envoy/Nginx (self-hosted / cloud) (port 8001)
Tyk
Open-source API gateway & management (self-hosted / cloud) (port 8080, web UI)
Apache APISIX
Dynamic, high-performance API gateway (self-hosted) (port 9180, web UI)
Envoy Gateway
Gateway API management plane for Envoy Proxy (self-hosted)
6.46Apps & CMS
WordPress
built-in tool
WordPress Sites
built-in tool
Convex
built-in tool
RevenueCat
built-in tool
Drupal
built-in tool
Joomla
built-in tool
Statamic
built-in tool
Grav
built-in tool
Kirby
built-in tool
Craft CMS
built-in tool
ClassicPress
WordPress fork without the block editor (web UI)
Backdrop CMS
Drupal 7 fork for small-to-medium sites (web UI)
Bedrock (Roots)
Composer-managed WordPress boilerplate
Trellis (Roots)
Ansible server provisioning for WordPress
WordPress Playground
WordPress running in WebAssembly — no server needed (port 9400, web UI)
Ghost
Modern publishing & newsletter platform (port 2368, web UI)
Webflow
Visual website builder & hosted CMS (cloud) (web UI)
Framer
Design-first website builder with hosted CMS (cloud) (web UI)
Instatic
Self-hosted visual CMS with an AI page editor (open-source) (port 3001, web UI)
6.47Knowledge & Memory
Obsidian
built-in tool
Vault Notes
built-in tool
GraphRAG
Graph-based retrieval-augmented generation (Microsoft)
Graphify
Turn a codebase into a queryable knowledge graph (AI coding-assistant skill)
Logseq
Local-first outliner & PKM (Markdown/Org)
Notion
All-in-one workspace — docs, wikis, databases (cloud)
DokuWiki
Flat-file PHP wiki — the closest macOS Server “Wiki” replacement (port 80, web UI)
MediaWiki
The wiki engine behind Wikipedia (PHP/MySQL) (port 80, web UI)
Wiki.js
Modern self-hosted wiki (Node.js) (port 3000, web UI)
BookStack
Self-hosted docs/wiki organised as books (PHP) (port 6875, web UI)
Outline
Self-hosted team knowledge base (real-time) (port 3000, web UI)
Trilium Notes
Hierarchical personal notes (self-hosted server + app) (port 8080, web UI)
Zotero
Reference & research manager (app + API)
Readwise
Highlights sync & read-later (cloud API)
Memos
Lightweight, privacy-first notes/memo hub (port 5230, web UI)
Linkding
Minimal, fast self-hosted bookmark manager (port 9090, web UI)
Karakeep
AI bookmark/read-it-later (formerly Hoarder) (port 3000, web UI)
Wallabag
Self-hosted read-it-later (Pocket alternative) (port 80, web UI)
Docmost
Open-source collaborative wiki & docs (Confluence/Notion alt.) (port 3000, web UI)
AFFiNE
Docs + whiteboard + database (Notion/Miro alt.) (port 3010, web UI)
AppFlowy
Open-source Notion alternative (docs/boards/DBs) (web UI)
Joplin Server
Sync server for Joplin notes (E2EE) (port 22300, web UI)
Shiori
Simple self-hosted bookmark manager (Go) (port 8080, web UI)
6.48E-Commerce
Store Health
built-in tool
Sales Channels
built-in tool
Square
built-in tool
WooCommerce
WordPress e-commerce plugin (PHP) (web UI)
Adobe Commerce (Magento)
Enterprise PHP commerce platform (port 80, web UI)
Shopware
Symfony-based commerce platform (PHP) (port 80, web UI)
Saleor
GraphQL-first headless commerce (Python) (port 8000, web UI)
Medusa
Node.js headless commerce engine (port 9000, web UI)
Vendure
Node.js/GraphQL headless commerce (port 3000, web UI)
Stripe
Payments & checkout API (cloud) (web UI)
PayPal
Online payments & checkout (cloud) (web UI)
DOKU
Indonesian payment gateway (cards, e-wallets, VA, QRIS) (web UI)
Mollie
European payments (iDEAL, cards, SEPA) (cloud) (web UI)
Paddle
Merchant-of-record for software sales (cloud) (web UI)
Lemon Squeezy
Digital-products storefront & MoR (legacy — moving to Stripe) (web UI)
Braintree
PayPal's card/wallet gateway (GraphQL API) (cloud) (web UI)
PAY.JP
Japanese card payments API (cloud) (web UI)
KOMOJU
Japanese multi-method payments (konbini, cards, wallets) (web UI)
Adyen
Enterprise payments platform (webhook/report-driven) (web UI)
Wise
Multi-currency business account & payouts (cloud) (web UI)
GMO Payment Gateway
Japan's largest PSP (per-order API; no list API) (web UI)
Shopify
Hosted commerce platform & channel (cloud) (web UI)
Amazon
Amazon marketplace selling channel (cloud) (web UI)
FedEx
Shipping rates, labels & tracking (cloud) (web UI)
UPS
Shipping rates, labels & tracking (cloud) (web UI)
DHL
Shipping rates, labels & tracking (cloud) (web UI)
eBay Seller Hub
eBay marketplace selling channel (cloud) (web UI)
Etsy
Handmade/vintage & POD marketplace (cloud) (web UI)
Walmart Marketplace
Walmart marketplace selling channel (cloud) (web UI)
6.49QR & Link Management
QR & Link Health
built-in tool
BL.INK
Enterprise link management (cloud) (web UI)
Bitly
Links, QR codes, analytics (cloud) (web UI)
Rebrandly
Branded short domains (cloud) (web UI)
Short.io
Teams, custom domains (cloud) (web UI)
Dub.co
Modern marketing links & QR (open-source core) (web UI)
QR Code Generator PRO
Dynamic QR codes (cloud) (web UI)
Beaconstac (Uniqode)
QR analytics & management (cloud) (web UI)
Flowcode
Marketing QR dashboards (cloud) (web UI)
Scanova
QR campaign management (cloud) (web UI)
QR TIGER
Dynamic QR management (cloud) (web UI)
GS1 Digital Link
Own your product-QR resolver (self-host or SaaS) (web UI)
6.50Student Information Systems
PowerSchool SIS
K-12 student information system (cloud) (web UI)
PowerSchool Attendance
Attendance tracking within PowerSchool (cloud) (web UI)
Blackbaud SIS
Independent/private-school SIS (cloud) (web UI)
FACTS SIS
Private/faith-based school SIS (cloud) (web UI)
Infinite Campus
K-12 SIS & state reporting (cloud) (web UI)
Veracross
All-in-one independent-school platform (cloud) (web UI)
openSIS
Open-source student information system (self-hosted) (web UI)
RosarioSIS
Open-source SIS (PHP/PostgreSQL, self-hosted) (web UI)
SchoolPass
Attendance, dismissal & safety (cloud) (web UI)
RFID/NFC Attendance
Tap-card attendance with RFID/NFC readers (self-hosted) (web UI)
6.51Learning Management
Canvas LMS
Instructure Canvas — courses, assignments, grading (web UI)
Blackboard Learn
Higher-ed LMS (cloud) (web UI)
Schoology
K-12 LMS by PowerSchool (cloud) (web UI)
Google Classroom
Google's classroom & assignment tool (cloud) (web UI)
Moodle
Open-source LMS (self-hosted, PHP) (web UI)
Open edX
MOOC-scale open LMS (self-hosted) (web UI)
ILIAS
Open-source LMS (self-hosted, PHP) (web UI)
BigBlueButton
Open-source virtual classroom (self-hosted) (web UI)
Zoom
Video meetings & online classes (app)
Google Meet
Google's video meetings (cloud) (web UI)
ExamSoft
Secure exam delivery & analytics (cloud) (web UI)
ProctorU
Online exam proctoring (cloud) (web UI)
TAO Testing
Open-source assessment platform (self-hosted) (web UI)
6.52Digital Library
EBSCOhost
Research databases & e-journals (cloud) (web UI)
ProQuest
Dissertations, e-journals & databases (cloud) (web UI)
JSTOR
Academic journals & books archive (cloud) (web UI)
Koha
Open-source integrated library system (self-hosted) (web UI)
DSpace
Open-source institutional repository (self-hosted) (web UI)
Greenstone
Open-source digital-library builder (self-hosted) (web UI)
6.53Campus & School Ops
aSc Timetables
School timetable generator (desktop)
Mimosa Scheduling
Timetabling / scheduling software (desktop)
FET Timetabling
Open-source automatic timetabling (self-hosted/desktop)
Slate Admissions
Admissions & enrolment CRM (cloud) (web UI)
OpenApply
Admissions & enrolment for K-12 (cloud) (web UI)
Finalsite Enrolment
School websites & enrolment (cloud) (web UI)
FACTS Tuition Management
Tuition billing & payment plans (cloud) (web UI)
Flywire Education Payments
Cross-border tuition payments (cloud) (web UI)
StarRez
Student housing & residential life (cloud) (web UI)
eRezLife
Residence life & housing management (cloud) (web UI)
Ellucian Banner
Higher-ed ERP / student system (cloud or self-hosted) (web UI)
Workday Student
Cloud ERP for higher education (cloud) (web UI)
ParentSquare
School-home communication (cloud) (web UI)
Remind
Teacher-family messaging (cloud) (web UI)
Asset Panda
Asset & device tracking (cloud) (web UI)
Incident IQ
K-12 IT helpdesk & asset management (cloud) (web UI)
ClassLink
Education SSO & rostering (cloud) (web UI)
6.54Sourcing & Suppliers
AliExpress
Global supplier marketplace for drop-shipping (cloud) (web UI)
Alibaba
B2B wholesale sourcing (cloud) (web UI)
CJdropshipping
Sourcing + warehousing + fulfilment (cloud) (web UI)
Spocket
US/EU-supplier drop-ship marketplace (cloud) (web UI)
Zendrop
Drop-ship sourcing & auto-fulfillment (cloud) (web UI)
SaleHoo
Vetted supplier directory (cloud) (web UI)
DSers
AliExpress order automation (official) (cloud) (web UI)
6.55Print-on-Demand
Printful
Print-on-demand & fulfilment (cloud) (web UI)
Printify
Print-on-demand marketplace (cloud) (web UI)
Gelato
Global/local print-on-demand network (cloud) (web UI)
Gooten
Print-on-demand fulfilment platform (cloud) (web UI)
6.56Shipping & Fulfilment
Drop-shipping Health
built-in tool
AfterShip
Universal shipment tracking across 1,000+ carriers (cloud) (web UI)
ShipStation
Multi-channel order & label management (cloud) (web UI)
Easyship
Global shipping rates, duties & labels (cloud) (web UI)
Shippo
Multi-carrier rates, labels & tracking API (cloud) (web UI)
Pirate Ship
Free, discounted USPS/UPS labels (cloud) (web UI)
6.57Inventory Sync
SkuVault
Warehouse & inventory management (cloud) (web UI)
Cin7
Inventory & order management (cloud) (web UI)
Zoho Inventory
Multi-channel inventory & order management (cloud) (web UI)
Katana Cloud Inventory
Manufacturing & inventory control (cloud) (web UI)
6.58Profit Analytics
Triple Whale
E-commerce profit & attribution dashboard (cloud) (web UI)
Lifetimely
P&L and LTV analytics for Shopify (cloud) (web UI)
BeProfit
Profit & expense tracking dashboard (cloud) (web UI)
6.59Mesh Networking
RNS Nodes
built-in tool
Reticulum
Cryptography-based mesh networking stack (any medium)
Nomad Network (NomadNet)
Resilient comms over Reticulum (pages, files, messaging)
Sideband
LXMF messaging app over Reticulum (desktop/mobile)
Meshtastic
LoRa mesh radio for text & location (off-grid)
RNode LoRa Devices
Open LoRa radio interface for Reticulum (flash & configure)
Yggdrasil
Self-arranging encrypted IPv6 mesh (experimental)
cjdns / Hyperboria
Encrypted IPv6 mesh routing (source-routed)
B.A.T.M.A.N.-adv
Layer-2 community Wi-Fi mesh routing (Linux)
OLSR (olsrd)
Optimized Link State Routing for MANETs
Babel (babeld)
Robust distance-vector mesh routing protocol
Briar
P2P messaging over Tor, Wi-Fi & Bluetooth
AREDN
Amateur-radio high-speed mesh (ham licence)
qaul
Internet-independent P2P mesh messaging app
Serval Mesh
Off-grid mesh comms (Serval Project)
Ratspeak
Private, account-free mesh messaging (Reticulum-based)
6.60Anonymity Networks
Tor
Onion-routing anonymity network (client/relay/bridge/onion service) (port 9050, brew: tor)
I2P
Garlic-routed network — router, tunnels, eepsites, messaging (port 7070, web UI)
6.61Secrets & Vaults
Vault Links
built-in tool
Bitwarden
Password manager — cloud or official self-host (web UI)
Vaultwarden
Self-hosted Bitwarden-compatible server (Docker) (port 8222, web UI)
HashiCorp Vault
Secrets, PKI & dynamic credentials (self-hosted) (port 8200, web UI)
Step CA
Your own private certificate authority (self-hosted) (port 8443)
Let's Encrypt
Free TLS certificates via ACME — health & renewal monitor
Infisical
Open-source secrets for app configs (cloud or self-hosted) (port 8080, web UI)
Doppler
Hosted secrets & config manager (cloud) (web UI)
1Password SCIM Bridge
Automated 1Password user provisioning (self-hosted bridge) (port 3002)
1Password
Password manager with developer secrets API (cloud) (web UI)
Keeper Security
Password manager & Secrets Manager (cloud API) (web UI)
6.62Monitoring
Disk Health
built-in tool
Service Guardian
built-in tool
Grafana
Dashboards for any data source (self-hosted) (port 3000, web UI, brew: grafana)
Prometheus
Time-series metrics & alerting (self-hosted) (port 9090, web UI, brew: prometheus)
Alertmanager
Route and deduplicate Prometheus alerts (self-hosted) (port 9093, web UI)
Node Exporter
Unix host metrics for Prometheus (self-hosted) (port 9100, web UI, brew: node_exporter)
Windows Exporter
Windows host metrics for Prometheus (remote) (port 9182, web UI)
Zabbix
Enterprise monitoring — agents, SNMP, triggers (self-hosted) (port 8080, web UI)
Nagios Core
The classic check-based monitor (self-hosted) (port 80, web UI)
Checkmk
Auto-discovering IT monitoring (self-hosted) (port 8080, web UI)
Healthchecks.io
Cron & heartbeat monitoring (cloud or self-hosted) (web UI)
Datadog
Hosted metrics, logs, traces and synthetics (SaaS) (web UI)
New Relic
Hosted APM, infrastructure and logs (SaaS) (web UI)
Sentry
Error tracking and performance monitoring (web UI)
Honeycomb
Observability for high-cardinality events and traces (web UI)
Dynatrace
Enterprise observability and AIOps platform (web UI)
Matomo
Full-featured self-hosted web analytics (port 80, web UI)
Plausible
Lightweight, privacy-first analytics (port 8000, web UI)
Umami
Simple, privacy-focused analytics (Node) (port 3000, web UI)
GoAccess
Real-time access-log analyser (CLI/HTML)
Netdata
Real-time system metrics dashboard (port 19999, web UI, brew: netdata)
Uptime Kuma
Self-hosted uptime monitor (port 3001, web UI)
Scrutiny
S.M.A.R.T. drive health dashboard (port 8080, web UI)
Glances
Cross-platform system monitor (web/API) (port 61208, web UI)
Beszel
Lightweight server monitoring hub + agents (port 8090, web UI)
Speedtest Tracker
Scheduled internet speed tests + history (port 80, web UI)
UptimeRobot
Cloud uptime/SSL monitoring with status pages (web UI)
NUT (Network UPS Tools)
UPS monitoring server (upsd) for many devices (port 3493)
Homepage
Self-hosted services dashboard (gethomepage.dev) (port 3000, web UI)
PeaNUT
Modern web dashboard for NUT UPS servers (port 8080, web UI)
6.63Security Tools
Security
built-in tool
Malware Audit
built-in tool
Security Audit
built-in tool
EDR Fleet
built-in tool
Fail2ban
Bans IPs after suspicious activity (intrusion prevention) (brew: fail2ban)
Wazuh
Open-source SIEM & XDR (self-hosted) (port 443, web UI)
Suricata
High-performance IDS/IPS engine (self-hosted)
Snort
The classic network IDS (self-hosted)
LuLu
Free open-source outbound firewall (macOS app)
Burp Suite
Web app security testing — intercepting proxy & scanner (macOS app) (port 8080)
Yakit
Open-source web security testing platform & MITM (macOS app)
Strix
AI-assisted penetration testing from the local CLI
Fuzzilli
Coverage-guided JavaScript engine fuzzer (reviewed local binaries)
OWASP ZAP
Open-source web-app security scanner (DAST) — spider, active scan, proxy (port 8080)
Little Snitch
Commercial network monitor & firewall (macOS app)
Murus
GUI front-end for the macOS pf firewall (app)
Radio Silence
Lightweight macOS outbound firewall (app)
Vallum
Per-app outbound firewall & throttle (app)
Hands Off!
Per-app network + disk access control (app)
NetBarrier
Two-way macOS firewall (Intego, app)
ClamAV
Open-source antivirus engine (self-hosted) (brew: clamav)
YARA
Pattern-matching engine for malware (self-hosted)
AbuseIPDB
Crowd-sourced IP reputation / blocklist (cloud API) (web UI)
Phishing Catcher
Catch phishing domains from CT logs (self-hosted)
URLhaus
Malware-URL feed & lookup API (cloud · abuse.ch) (web UI)
OpenPhish
Live phishing-URL feed (cloud) (web UI)
MISP
Threat-intelligence sharing platform (self-hosted) (port 443, web UI)
CAPE Sandbox
Malware sandbox w/ config extraction (self-hosted) (port 8000, web UI)
Cuckoo Sandbox
Automated malware-analysis sandbox (self-hosted) (port 8090, web UI)
YARA-X
YARA rewritten in Rust — faster CLI scanner (self-hosted)
Volatility 3
Memory-forensics framework (self-hosted)
capa
Detect capabilities in executables (self-hosted)
oletools
Analyse malicious Office docs / OLE (self-hosted)
radare2
Reverse-engineering framework / disassembler (self-hosted)
binwalk
Firmware / embedded-file carving & analysis (self-hosted)
Nuclei
Template-based vulnerability scanner (self-hosted CLI)
OpenCTI
Cyber threat-intelligence platform (self-hosted) (port 8080, web UI)
TheHive
Security incident-response platform (self-hosted) (port 9000, web UI)
Cortex
Observable analysers & responders engine (self-hosted) (port 9001, web UI)
IntelOwl
OSINT / threat-intel analysis platform (self-hosted) (port 443, web UI)
AlienVault OTX
Open Threat Exchange IOC feed (cloud) (web UI)
Security Onion
NSM + SIEM + IDS Linux distro (self-hosted) (port 443, web UI)
GRR Rapid Response
Remote live-forensics / IR framework (self-hosted) (port 8000, web UI)
OpenEDR
Open-source endpoint detection & response (self-hosted) (web UI)
Santa
macOS binary allowlisting / blocklisting (self-hosted)
KnockKnock
Reveal persistently installed Mac software (self-hosted)
BlockBlock
Monitor & block persistence in real time (self-hosted)
ThreatLocker
Zero Trust app allowlisting & endpoint control (agent + cloud portal)
OPSWAT MetaDefender
Multi-engine malware scanning & file CDR (self-hosted / API) (port 8008, web UI)
osquery
Query your endpoint like a database (agent)
Fleet
Self-hosted osquery fleet manager (web UI + API) (port 8080, web UI)
Velociraptor
Endpoint visibility & DFIR hunting (self-hosted) (port 8889, web UI)
Zeek
Network security monitor / traffic analysis (self-hosted)
OpenVAS / Greenbone
Vulnerability scanning (self-hosted) (port 9392, web UI)
CrowdStrike Falcon
Cloud-native EDR/XDR (macOS sensor + API)
SentinelOne
Autonomous EDR/XDR (macOS agent + API)
Microsoft Defender for Endpoint
Microsoft EDR for macOS (agent + Graph API)
Sophos Central
Endpoint protection / MDR (macOS agent + API)
Bitdefender GravityZone
Endpoint protection / EDR (macOS agent + API)
Malwarebytes
Anti-malware (macOS app; business via Nebula API)
Huntress
Managed EDR/MDR for SMB & MSPs (agent + API)
Jamf Protect
Mac-native endpoint security (agent + API)
LimaCharlie
API-first SecOps cloud / EDR (agent + API)
Airlock Digital
Application allowlisting & execution control (agent + API)
Admin By Request
Endpoint privilege management / just-in-time admin (agent + API)
CyberArk EPM
Endpoint Privilege Manager (agent + API)
BeyondTrust EPM
Endpoint Privilege Management for Mac (agent + API)
AutoElevate (CyberFOX)
MSP privilege elevation & local-admin control (agent + API)
VirusTotal
Multi-engine file/URL reputation (API)
Cloudmersive
Virus-scan & content-protection API (cloud / self-host)
Hybrid Analysis
Malware sandbox (Falcon Sandbox) — API
Kolide
Device trust & posture (osquery-based agent + API)
AdGuard
Ad/tracker blocker app + AdGuard DNS & VPN (commercial)
CyberChef
The cyber-Swiss-army-knife for data (web UI)
6.64Secrets Scanning & Supply Chain Security
Snyk
Developer security — code, deps, containers & IaC (cloud + CLI) (web UI)
Dependabot
Automated dependency-update & security PRs (GitHub) (web UI)
Renovate
Automated dependency updates, any platform (self-hosted / app)
Trivy
All-in-one vuln, secret, IaC & SBOM scanner (self-hosted CLI)
Grype
Fast vulnerability scanner for images & SBOMs (self-hosted CLI)
Syft
Generate SBOMs from images & filesystems (self-hosted CLI)
Cosign
Sign & verify container images and artifacts (self-hosted CLI)
Sigstore
Keyless signing ecosystem — Cosign, Fulcio, Rekor (self-hosted / public)
Chainguard
Minimal, low/zero-CVE container images (cloud + chainctl) (web UI)
Socket
Proactive dependency / supply-chain attack detection (cloud + CLI) (web UI)
GitGuardian
Secrets detection across code & CI (cloud + ggshield CLI) (web UI)
Gitleaks
Open-source secrets scanner for git repos (self-hosted CLI)
TruffleHog
Find & VERIFY leaked secrets across code, git history, cloud & CI (self-hosted CLI)
OSV-Scanner
Dependency vulnerability scanner backed by OSV.dev (self-hosted CLI)
Lynis
Host security auditing & hardening for Unix/Linux/macOS (self-hosted CLI)
Semgrep Supply Chain
SAST + reachable-dependency (SCA) scanning (self-hosted CLI / cloud)
6.65Policy, Compliance & Governance
Vanta
Automated compliance — SOC 2, ISO 27001, HIPAA, GDPR (cloud) (web UI)
Drata
Continuous compliance automation & audit readiness (cloud) (web UI)
Secureframe
Compliance automation across 40+ frameworks (cloud) (web UI)
Sprinto
Compliance automation for fast-moving teams (cloud) (web UI)
Thoropass
Compliance + audit in one (formerly Laika, cloud) (web UI)
Hyperproof
Compliance operations & evidence management (cloud) (web UI)
OneTrust
Privacy, GRC & data governance suite (cloud) (web UI)
LogicGate Risk Cloud
No-code GRC & risk workflow platform (cloud) (web UI)
AuditBoard
Connected risk, audit & compliance platform (cloud) (web UI)
Eramba
Open-source GRC platform (self-hosted) (port 443, web UI)
SimpleRisk
Open-source risk management (self-hosted) (port 443, web UI)
OpenGRC
Open-source governance, risk & compliance (self-hosted) (port 8080, web UI)
OpenControl
Compliance-as-code documentation toolkit (self-hosted CLI)
Open Policy Agent (OPA)
General-purpose policy engine, Rego (self-hosted CLI) (port 8181)
Conftest
Test config files against OPA/Rego policies (CLI)
OPA Gatekeeper
OPA policy admission controller for Kubernetes (self-hosted)
Kyverno
Kubernetes-native policy engine, no new language (self-hosted)
HashiCorp Sentinel
Policy as code for the HashiCorp stack (CLI)
Checkov
Static policy scanning for IaC (self-hosted CLI)
Prowler
Open-source multi-cloud security & compliance scanner (CLI)
Scout Suite
Multi-cloud security-auditing tool (CLI)
CloudQuery
Cloud asset inventory as SQL (self-hosted CLI)
Steampipe
Query cloud APIs with SQL + compliance mods (CLI)
Cloud Custodian
Rules engine for cloud governance & remediation (CLI)
AWS Config
Native AWS resource configuration & compliance (API) (web UI)
AWS Security Hub
Aggregated AWS security findings & standards (API) (web UI)
OpenFGA
Open-source fine-grained authorization (Zanzibar-style, self-hosted) (port 8080)
Authzed / SpiceDB
Zanzibar-style permissions database (self-hosted / cloud) (port 50051)
Permify
Open-source fine-grained authorization service (self-hosted) (port 3476)
Aserto / Topaz
Authorization built on OPA + Zanzibar (self-hosted / cloud) (port 8383)
immudb
Immutable, cryptographically-verifiable database / audit log (self-hosted) (port 3322)
Securiti
Data privacy, security & governance platform (cloud) (web UI)
BigID
Data discovery, privacy & governance at scale (cloud) (web UI)
DataGrail
Privacy platform — DSR & data mapping automation (cloud) (web UI)
Transcend
Privacy & data-rights automation, incl. AI governance (cloud) (web UI)
MineOS
Data-governance & privacy operations platform (cloud) (web UI)
Osano
Consent management & privacy compliance (cloud) (web UI)
OpenMetadata
Open-source metadata, catalogue & lineage platform (self-hosted) (port 8585, web UI)
DataHub
Open-source metadata platform & data catalogue (self-hosted) (port 9002, web UI)
Amundsen
Open-source data discovery & metadata engine (self-hosted) (port 5000, web UI)
Apache Atlas
Metadata & governance for the Hadoop/data ecosystem (self-hosted) (port 21000, web UI)
Microsoft Purview
Data governance, compliance, retention & eDiscovery (cloud) (web UI)
Google Vault
Retention, legal hold & eDiscovery for Google Workspace (cloud) (web UI)
Smarsh
Communications capture, archiving & supervision (cloud) (web UI)
Logikcull
Self-service eDiscovery & legal hold (cloud, Reveal) (web UI)
Everlaw
Cloud litigation & eDiscovery platform (cloud) (web UI)
6.66MDM & Device Management
Apple Business Manager
built-in tool
Kandji
Apple MDM + endpoint security & compliance (agent + API)
Mosyle
Apple MDM + endpoint security (agent + API)
Jamf Pro
Apple MDM — device management & compliance (agent + API)
Microsoft Intune
Cross-platform MDM/MAM in Microsoft 365 (cloud + Graph API)
Addigy
Cloud Apple MDM for MSPs & IT teams (agent + API)
SimpleMDM
Straightforward Apple MDM with a clean REST API (cloud)
JumpCloud
Cloud directory + cross-platform MDM & SSO (agent + API)
Fleet (Apple MDM)
Open-source MDM + osquery for cross-platform device ops (self-hosted) (port 8080, web UI)
Munki
Open-source macOS software deployment (self-hosted)
MicroMDM
Open-source, self-hosted Apple MDM server — the Profile Manager replacement (port 8080)
NanoMDM
Minimal, scalable open-source Apple MDM server (port 9000)
AutoPkg
Automated macOS software packaging (CLI)
6.67Logging & Observability
Graylog
Centralized log management (self-hosted) (port 9000, web UI)
Logstash
ELK's ingest & transform pipeline (self-hosted) (port 9600, brew: logstash-full)
Kibana
ELK's search & dashboard UI (self-hosted) (port 5601, web UI, brew: kibana-full)
Loki
Grafana's log store — like Prometheus, for logs (self-hosted) (port 3100, brew: loki)
Vector
High-performance logs/metrics pipeline (self-hosted) (port 8686, brew: vector)
Fluent Bit
Ultra-light log forwarder (self-hosted) (port 2020, brew: fluent-bit)
Splunk
Enterprise log search, SIEM and observability (port 8000, web UI)
Elastic Cloud
Hosted Elasticsearch, Kibana and observability (web UI)
Dozzle
Live Docker container log viewer (port 8080, web UI)
6.68Incident Management & On-Call
PagerDuty
On-call scheduling & incident response (cloud API) (web UI)
Opsgenie
Alerting & on-call by Atlassian (cloud API) (web UI)
incident.io
Slack-native incident response & on-call (cloud API) (web UI)
Rootly
Slack-native incident management (cloud API) (web UI)
6.69Status Pages
Statuspage
Atlassian's hosted status pages (cloud API) (web UI)
Better Stack
Uptime monitoring, incidents & status pages (cloud API) (web UI)
Gatus
Automated health checks + status page (port 8080, web UI)
6.70Mining
Mining Rigs
built-in tool
Braiins OS+
Open ASIC firmware (Antminer) — autotuning + API (port 4028, web UI)
Hive OS
Cloud mining fleet OS & dashboard (web UI)
Awesome Miner
Windows-based mining management for large fleets (web UI)
LuxOS / Foreman
ASIC firmware (LuxOS) & Foreman fleet management (port 4028, web UI)
6.71AI / LLMs
AI Administrator
built-in tool
AI Models
built-in tool
Ollama
built-in tool
LM Studio
built-in tool
Model Costs
built-in tool
Skill Manager
built-in tool
Open WebUI
built-in tool
RAG Manager
built-in tool
Vector Databases
built-in tool
Firecrawl
built-in tool
Crawl4AI
built-in tool
Apify
built-in tool
Playwright
built-in tool
Browserbase
built-in tool
MLX
Apple-silicon model serving via MLX — CLI server or the oMLX menu-bar app (port 8080)
TurboFieldfare
Gemma 4 26B-A4B on Apple Silicon in ~2 GB of RAM (port 8080)
Cerebras
Very fast hosted inference on wafer-scale hardware (web UI)
MLX (Apple)
Apple's ML framework for Apple Silicon
vLLM
High-throughput LLM inference server (OpenAI-compatible) (port 8000)
llama.cpp Server
Lightweight local LLM server (OpenAI-compatible) (port 8080)
Mojo (Modular MAX)
Modular's AI language + MAX inference server (OpenAI-compatible) (port 8000)
LocalAI
Self-hosted, OpenAI-compatible inference server (port 8080, web UI)
Jan
Private, offline AI desktop app (OpenAI-compatible) (port 1337)
PrivateGPT
Ask questions of your documents, 100% offline (RAG) (port 8001, web UI)
IBM watsonx.ai
IBM's enterprise AI platform — Granite + third-party models (cloud/on-prem) (web UI)
Mem0
Memory layer for AI agents — self-hosted (Docker) or cloud (port 8888, web UI)
CrewAI (open source)
Multi-agent crews — Python framework + CLI (local)
Open Computer
Virtual OS for AI agents — QEMU VM per agent (Mintplex Labs) (web UI)
LiteLLM
Proxy/gateway for 100+ LLM APIs (OpenAI-compatible) (port 4000, web UI)
Tetrate Agent Router
Hosted LLM router — one OpenAI-compatible API (cloud) (web UI)
AnythingLLM
All-in-one self-hosted RAG chat app (port 3001, web UI)
Hugging Face
Model hub, Inference API & local tooling (web UI)
ChatLLM Teams
Abacus.AI's multi-model team chat & agent workspace (cloud) (web UI)
LibreChat
Self-hosted multi-provider AI chat UI (port 3080, web UI)
NotebookLM
Google's source-grounded research notebook (cloud) (web UI)
Open Notebook
Open-source, self-hosted NotebookLM alternative (port 8502, web UI)
OpenCode
Open-source AI coding agent (terminal)
Goose
Open-source local AI agent (CLI + desktop)
6.72AI Clusters
Exo Cluster
built-in tool
GPU Fabric
built-in tool
Petals
BitTorrent-style distributed inference of big models
Distributed Llama
Tensor-parallel Llama across cheap nodes (root + workers) (port 9998)
Slurm
HPC workload manager / job scheduler (port 6817)
Ray
Distributed compute for AI (training/serving/tuning) (port 8265, web UI)
Apache Spark
Distributed big-data processing engine (port 8080, web UI)
Dask
Parallel computing for Python (scales pandas/NumPy) (port 8787, web UI)
JupyterLab
Interactive notebooks for data & AI (Python) (port 8888, web UI)
Run:ai
GPU orchestration & fractional GPUs on Kubernetes (NVIDIA) (web UI)
NVIDIA Base Command Manager
GPU/HPC cluster provisioning & management (ex-Bright) (port 8081, web UI)
6.73Agent Platforms
Agent Platforms
built-in tool
Agent Registry
built-in tool
Task Queue
built-in tool
Model Router
built-in tool
Repository Connectors
built-in tool
Agent Sessions
built-in tool
Agent Jobs
built-in tool
OpenClaw
built-in tool
Hermes
built-in tool
Odysseus
built-in tool
DeerFlow
built-in tool
CoWork OS
built-in tool
OpenAI Codex Runtime
built-in tool
Claude Code CLI
built-in tool
Gemini CLI
built-in tool
Factory Droid
built-in tool
OpenCode
built-in tool
Goose
built-in tool
LangGraph Platform
built-in tool
CrewAI Enterprise
built-in tool
Microsoft AutoGen
built-in tool
Genspark
built-in tool
Agent Zero
built-in tool
NVIDIA NemoClaw
built-in tool
OpenHuman
built-in tool
Apple Intelligence
built-in tool
Sandcastle
Orchestrate sandboxed coding agents (isolated containers)
SuperAGI
Open-source autonomous-agent framework (self-hosted) (port 3000, web UI)
OpenHands (OpenDevin)
Open-source autonomous AI software engineer (self-hosted) (port 3000, web UI)
E2B
Secure cloud sandboxes for AI agents (spin up / clone / kill) (web UI)
Browserbase
Headless browser infrastructure for AI agents (cloud sessions) (web UI)
Manus
Autonomous general AI agent (cloud API) (web UI)
Devin
Cognition's AI software engineer (cloud API) (web UI)
GitHub Copilot
AI pair programmer — live org seat/usage monitor (web UI)
OpenAI Operator
OpenAI's browser-using agent (cloud) (web UI)
Hyperagent
Airtable's fleet-of-agents platform (cloud) (web UI)
Herdr
Agent multiplexer — tmux for AI coding agents (terminal)
ChatGPT Work Sites
OpenAI's work agent + published Sites/web apps (alpha) (web UI)
Lakebed
Agent-native runtime for full-stack TypeScript capsules (alpha) (port 3000, web UI)
6.74ML Workbench
MLflow
ML experiment tracking & model registry (self-hosted) (port 5000, web UI)
pandas
The standard Python DataFrame library
Polars
Fast multicore DataFrame library (Rust core)
scikit-learn
Classic machine-learning library for Python
XGBoost
Gradient-boosted decision trees (high-accuracy tabular ML)
PyTorch
Deep-learning framework (GPU/MPS accelerated)
Kaggle
Datasets, notebooks & competitions (CLI)
Kubeflow
ML toolkit & pipelines on Kubernetes (web UI)
ClearML
Experiment tracking, orchestration & MLOps (self-hostable) (port 8080, web UI)
Weights & Biases (Local)
Self-hosted experiment tracking & dashboards (port 8080, web UI)
DVC Studio
Data/model version control + experiment dashboard (web UI)
6.75AI Governance & Safety
Langfuse
Open-source LLM observability & tracing (self-hosted / cloud) (port 3000, web UI)
Helicone
LLM observability & gateway — logs, costs, caching (self-hosted / cloud) (web UI)
Arize Phoenix
Open-source LLM tracing & evaluation (self-hosted) (port 6006, web UI)
OpenLLMetry
OpenTelemetry instrumentation for LLM apps (SDK)
Promptfoo
Prompt/RAG testing, evals & LLM red-teaming (self-hosted CLI)
Ragas
Evaluation framework for RAG pipelines (Python)
Guardrails AI
Input/output validation guardrails for LLMs (Python)
NeMo Guardrails
Programmable guardrails for LLM conversations (NVIDIA, Python)
Lakera Guard
Real-time GenAI security — prompt-injection firewall (cloud / self-host) (web UI)
Protect AI
AI/ML security — model scanning & ML supply chain (cloud + OSS) (web UI)
garak
LLM vulnerability scanner / red-teaming (self-hosted CLI)
TruLens
Evaluation & tracking for LLM apps — feedback functions (Python) (web UI)
WhyLabs
AI observability & data/LLM monitoring (cloud + whylogs) (web UI)
Fiddler AI
AI observability & model monitoring with explainability (cloud) (web UI)
Credo AI
AI governance, risk & compliance platform (cloud) (web UI)
Holistic AI
AI governance, risk & audit platform (cloud + OSS) (web UI)
6.76GPU Infrastructure
NVIDIA DCGM
NVIDIA Data Center GPU Manager — telemetry & health (port 5555)
DCGM Exporter
Export NVIDIA GPU metrics to Prometheus (port 9400)
6.77Speech AI
Handy
Free local push-to-talk speech-to-text (Whisper)
Wispr Flow
AI voice dictation that types into any app
Voicebox
Open-source local voice-to-text for macOS
Whisper
OpenAI's speech-to-text model (Python)
Whisper.cpp
Fast C/C++ Whisper inference (CPU/Metal)
Faster Whisper
CTranslate2 Whisper — up to 4× faster
Coqui TTS
Open-source text-to-speech & voice cloning (port 5002, web UI)
Piper TTS
Fast, local neural text-to-speech
VibeVoice
Microsoft's long-form, multi-speaker TTS
Kokoro TTS
Small, fast, high-quality open-weight TTS (82M)
6.78Image & Video AI
ComfyUI
Node-graph Stable Diffusion / video workflows (port 8188, web UI)
AUTOMATIC1111 WebUI
Stable Diffusion web UI (txt2img/img2img) (port 7860, web UI)
InvokeAI
Pro Stable Diffusion studio (Unified Canvas) (port 9090, web UI)
Fooocus
Simplest Stable Diffusion — type a prompt, get art (port 7865, web UI)
6.79MCP
MCP Servers
built-in tool
Fleet Skill
built-in tool
MCP Server
built-in tool
6.80Self-Hosted Apps
PhotoPrism
AI-powered photo library (port 2342, web UI)
ResourceSpace
Open-source digital asset management (self-hosted) (port 80, web UI)
Pimcore
Open-source PIM / DAM / CMS platform (self-hosted) (port 80, web UI)
Paperless-ngx
Scan, OCR & archive documents (port 8000, web UI)
Paperless-AI
AI auto-tagging & chat for Paperless-ngx (port 3000, web UI)
FreshRSS
Self-hosted RSS reader (PHP) (port 80, web UI)
Miniflux
Minimalist RSS reader (Go) (port 8080, web UI, brew: miniflux)
Mixpost
Self-hosted social media scheduling (port 80, web UI)
Mealie
Self-hosted recipe manager & meal planner (port 9000, web UI)
Tandoor
Recipe manager & meal planner (port 8080, web UI)
Grocy
Groceries & household ERP (port 80, web UI)
Dashy
Feature-rich homelab dashboard (port 4000, web UI)
Heimdall
Simple application start page (port 80, web UI)
Homer
Static, fast services dashboard (YAML) (port 8080, web UI)
6.81Web3
The Graph
built-in tool
Foundry
Fast Solidity toolkit (forge/cast/anvil) (port 8545)
Anvil
Local Ethereum testnet (Foundry) (port 8545)
Solidity
Smart-contract compiler (solc)
Hardhat
Ethereum dev environment (Node.js) (port 8545)
Ganache
Personal Ethereum blockchain (dev) (port 8545)
IPFS
Distributed file system (Kubo) (port 5001, web UI, brew: ipfs)
Ceramic
Decentralized data network (ComposeDB) (port 7007)
6.82Crypto
Bitcoin Core
Full Bitcoin node (bitcoind) (port 8332)
Ethereum Node
go-ethereum (geth) execution node (port 8545)
BTCPay Server
Self-hosted Bitcoin payment processor (port 23000, web UI)
XMRig
Monero (RandomX) CPU/GPU miner
6.83RPC Services
Alchemy
built-in tool
Infura
built-in tool
6.84Tools
Apache Tika
Content detection & text/metadata extraction (port 9998)
Gotenberg
Stateless API to convert documents to PDF (port 3000)
LanguageTool
Self-hosted grammar & style checker (offline Grammarly alternative) (port 8081)
SearXNG
Private metasearch engine (self-hosted) (port 8080, web UI)
Stirling-PDF
Self-hosted PDF toolbox (merge/split/OCR…) (port 8080, web UI)
IT-Tools
Handy developer/IT utilities in one page (port 80, web UI)
Excalidraw
Virtual hand-drawn whiteboard (port 80, web UI)
Penpot
Open-source design & prototyping (Figma alt.) (port 9001, web UI)
Whoogle Search
Private, ad-free Google results proxy (port 5000, web UI)
6.85Home Automation
Apple Home
built-in tool
Power Control
built-in tool
Nori / SuperNori AI
AI family hub display + proactive family AI agent (cloud + device) (web UI)
Home Assistant
Open-source home automation hub (port 8123, web UI)
Node-RED
Flow-based automation wiring (port 1880, web UI, brew: node-red)
Homebridge
Bridge non-HomeKit devices to Apple Home (port 8581, web UI)
ESPHome
Firmware for ESP IoT devices (Home Assistant) (port 6052, web UI)
openHAB
Vendor-neutral automation platform (port 8080, web UI)
6.86Cameras
motionEye
Web frontend for motion (DIY NVR) (port 8765, web UI)
RTSP Cameras
Any RTSP-streaming IP camera (port 554)
ONVIF Cameras
Standards-based camera discovery & control (port 80, web UI)
go2rtc
Camera stream restreamer (RTSP/WebRTC/HLS) (port 1984, web UI)
Tapo Cameras
TP-Link Tapo Wi-Fi cameras (RTSP/ONVIF) (port 554)
Frigate
NVR with real-time object detection (port 5000, web UI)
Scrypted
High-performance camera hub (port 11080, web UI)
Shinobi
Open-source video management (CCTV) (port 8080, web UI)
ZoneMinder
Full-featured CCTV / video surveillance (port 8095, web UI)
Agent DVR
Cross-platform NVR with AI detection (self-hosted) (port 8090, web UI)
Blue Iris
Powerful Windows NVR (run on a Windows host) (port 81, web UI)
6.87IoT
SwitchBot
built-in tool
Zigbee
built-in tool
Zigbee2MQTT
Bridge Zigbee devices to MQTT (no vendor hub) (port 8080, web UI)
Z-Wave (Z-Wave JS UI)
Control Z-Wave devices via MQTT + web UI (port 8091, web UI)
Matter
Commission & control Matter devices (port 5580)
Thread
Low-power mesh for Matter devices
OpenThread Border Router
Run your own Thread border router (self-hosted)
Bluetooth (BLE)
BLE sensors & trackers
Bluetooth Beacons
iBeacon / Eddystone proximity beacons (BLE)
TP-Link Kasa & Tapo
Kasa & Tapo plugs/bulbs/strips + the kasa CLI
Amazon Alexa
Voice assistant ecosystem
Google Home
Google Home / Nest ecosystem
HomePod
Apple smart speaker & Home hub (AirPlay 2 / Matter / Thread)
6.88MQTT Brokers
MQTT Message Bus
built-in tool
Mosquitto
Eclipse MQTT broker (port 1883, brew: mosquitto)
EMQX
Scalable, clustered MQTT broker (port 1883, web UI, brew: emqx)
HiveMQ
Enterprise MQTT broker (Java) (port 1883, web UI)
6.89POS Systems
Toast POS
Restaurant POS platform (cloud) (web UI)
Lightspeed
Retail & hospitality POS (cloud) (web UI)
Floranext
All-in-one florist software — POS, e-commerce & orders (cloud) (web UI)
6.90CRM & Loyalty
Salesforce
The enterprise CRM (cloud) (web UI)
HubSpot
CRM + marketing/sales hubs (cloud) (web UI)
Zoho CRM
Affordable full-suite CRM (cloud) (web UI)
SuiteCRM
Self-hosted open-source CRM (PHP) (port 80, web UI)
EspoCRM
Lightweight self-hosted CRM (PHP) (port 80, web UI)
Odoo CRM
CRM inside the open-source ERP (Python) (port 8069, web UI)
Pipedrive
Sales-pipeline-first CRM (cloud) (web UI)
Square Loyalty
Points & rewards on Square (cloud) (web UI)
Loyalzoo
Digital loyalty for independents (cloud) (web UI)
Thanx
Guest engagement & loyalty for restaurants (web UI)
Punchh
Enterprise restaurant loyalty (PAR, cloud) (web UI)
VoucherVault
Self-hosted vouchers, gift cards & loyalty (port 8000, web UI)
6.91Helpdesk & Ticketing
Zammad
Open-source helpdesk & ticketing (self-hosted) (port 8080, web UI)
osTicket
Classic open-source support ticket system (PHP/MySQL) (port 80, web UI)
Freshdesk
Cloud helpdesk / customer support (API) (web UI)
6.92IT Assets
GLPI
Asset inventory & ITSM with CMDB (PHP/MySQL) (port 80, web UI)
Snipe-IT
Open-source IT asset management (PHP/MySQL) (port 80, web UI)
AssetTiger
Cloud asset tracking with barcodes (API) (web UI)
Lansweeper
IT asset discovery & inventory (cloud/on-prem API) (web UI)
Workwize
Global IT equipment lifecycle & logistics (cloud API) (web UI)
6.93Project Management
Jira
Issue tracking & agile project management (cloud API) (web UI)
Linear
Fast issue tracking for product teams (cloud, GraphQL API) (web UI)
Taiga
Open-source agile project management (self-hosted) (port 80, web UI)
OpenProject
Open-source PM with Gantt & roadmaps (self-hosted) (port 80, web UI)
Plane
Open-source Jira alternative (self-hosted) (port 80, web UI)
Leantime
Open-source PM for non-project managers (PHP/MySQL) (port 80, web UI)
Basecamp
Project management & team collaboration (cloud API) (web UI)
monday.com
Work OS — boards, projects & workflows (cloud API) (web UI)
Vikunja
Self-hosted to-do / task manager (port 3456, web UI)
Planka
Realtime kanban board (Trello alternative) (port 1337, web UI)
Kimai
Self-hosted time tracking (port 8001, web UI)
Focalboard
Self-hosted project boards (Trello/Notion alt.) (port 8000, web UI)
6.94PMS
Channel Manager
built-in tool
SuiteOp
built-in tool
Symplehost
AI property management for short-term rentals (cloud) (web UI)
Breezeway
Property operations & services for STRs (cloud) (web UI)
Operto
Smart-lock & guest-experience automation for STRs (cloud) (web UI)
PriceLabs
Dynamic pricing & revenue management for STRs (cloud) (web UI)
Beyond
Dynamic pricing, insights & direct booking for STRs (cloud) (web UI)
Wheelhouse
Dynamic pricing & market analytics for STRs (cloud) (web UI)
AirDNA
Short-term-rental market data & analytics (cloud) (web UI)
RankBreeze
Airbnb listing optimization & rank tracking (cloud) (web UI)
Truvi
Direct-booking website builder for STRs (cloud) (web UI)
Hostaway
Short-term-rental PMS & channel manager (cloud API) (web UI)
Guesty
STR property-management platform (Open API) (web UI)
OwnerRez
Vacation-rental PMS for owners & small managers (v2 API) (web UI)
Lodgify
Direct-booking website builder + channel manager (web UI)
Uplisting
STR PMS / channel manager (invite-only API) (web UI)
Streamline VRS
Enterprise vacation-rental management (partner-gated API) (web UI)
RemoteLock
Cloud access control for smart locks (REST API) (web UI)
Minut
Noise & occupancy sensors for rentals (Enterprise API) (web UI)
NoiseAware
Noise monitoring for rentals (partner-provisioned API) (web UI)
Hospitable
Guest-messaging automation & STR management (cloud) (web UI)
Hostfully
STR property-management platform & digital guidebooks (cloud) (web UI)
Boostly
SMS marketing & direct-booking growth for STRs (cloud) (web UI)
Cloudbeds
Hotel PMS, booking engine & channel manager (cloud) (web UI)
Beds24
PMS & channel manager with a deep API (cloud) (web UI)
AirHost
Japanese STR PMS & channel manager (cloud) (web UI)
HappyGuest
Digital guest directory & concierge for hospitality (cloud) (web UI)
Alexa Smart Properties
Managed Alexa for hotels & senior living (cloud) (web UI)
QloApps
Open-source hotel reservation system (port 80, web UI)
HotelDruid
Hotel/B&B management & bookings (port 80, web UI)
OpenHotel PMS
Open property-management system (web UI)
BookStack
Wiki/docs for SOPs & property info (port 80, web UI)
Easy!Appointments
Open-source appointment scheduling (port 80, web UI)
Turno
Vacation-rental cleaning & turnover scheduling (cloud) (web UI)
Rentals (Laravel)
Custom Laravel vacation-rental app (port 80, web UI)
6.95Meeting Rooms & Desk Booking
Skedda
Desk & space booking (cloud API) (web UI)
Robin
Room scheduling & desk booking (cloud API) (web UI)
Envoy Workplace
Workplace, visitor & desk management (cloud API) (web UI)
YAROOMS
Meeting room & desk booking (cloud API) (web UI)
OfficeSpace
Space management & desk/room booking (cloud API) (web UI)
Condeco (Eptura)
Enterprise room & desk booking (cloud API) (web UI)
DeskFlex
Desk & room reservation system (cloud API) (web UI)
Matrix Booking
Room, desk & resource booking (cloud API) (web UI)
6.96Coworking & Shared Spaces
OfficeRnD
Coworking & flex-space management (cloud API) (web UI)
Nexudus
Coworking management & white-label platform (cloud API) (web UI)
Optix
App-first coworking management (cloud API) (web UI)
Cobot
Coworking space management (cloud API) (web UI)
6.97Facilities & Maintenance
IBM Maximo
Enterprise asset management & CMMS (cloud/self-managed API) (web UI)
FMX
Facilities management & maintenance (cloud API) (web UI)
Archibus
IWMS — facilities, real estate & assets (API) (web UI)
6.98Accounting & ERP
Money Forward Cloud
Japanese cloud accounting & back office (cloud) (web UI)
freee
Japanese cloud accounting & HR (cloud) (web UI)
Xero
Cloud accounting for small business (cloud) (web UI)
ERPNext
Open-source ERP — accounting, inventory, HR (self-hosted) (port 8080, web UI)
Odoo
Open-source ERP suite — self-hosted (Python + PostgreSQL) (port 8069, web UI)
QuickBooks
Intuit cloud accounting (cloud) (web UI)
Plaid
Bank account linking & financial data (cloud API)
Expensify
Expense & receipt management (cloud API) (web UI)
Firefly III
Self-hosted personal finance manager (port 8080, web UI)
Actual Budget
Fast local-first envelope budgeting (port 5006, web UI)
Ghostfolio
Open-source wealth/investment tracker (port 3333, web UI)
Invoice Ninja
Self-hosted invoicing & payments (port 80, web UI)
Maybe
Open-source personal finance / net worth (port 3000, web UI)
6.99Healthcare
OpenEMR
Open-source EHR & practice management (PHP/MySQL) (port 80, web UI)
OpenMRS
Open-source medical record platform (Java) (port 8080, web UI)
GNU Health
Hospital & health information system (Python/Tryton) (port 8000, web UI)
LibreHealth
Open-source EHR / toolkit (PHP/MySQL) (port 80, web UI)
Orthanc
Lightweight DICOM server / PACS (REST API) (port 8042, web UI)
OpenDolphin
Open-source EHR / electronic karte (Japan) (port 8080, web UI)
ORCA
Japan Medical Association receipt/billing system (port 8000, web UI)
6.100Automation & Workflows
Automatio.ai
AI no-code web automation & scraping (cloud) (web UI)
Zite
AI app & workflow builder (cloud) (web UI)
AppSheet
Google no-code app builder from a spreadsheet/DB (cloud) (web UI)
Make (Integromat)
Visual scenario automation + AI agents — 3,000+ apps (cloud) (web UI)
Zapier
Cloud iPaaS — connect 7,000+ apps (cloud) (web UI)
n8n
Source-available workflow automation (self-hosted) (port 5678, web UI)
Pipedream
Developer-first workflow automation (cloud) (web UI)
Power Automate
Microsoft cloud + desktop automation (cloud) (web UI)
Activepieces
Open-source no-code automation (self-hosted) (port 8080, web UI)
Windmill
Scripts → workflows & internal apps (self-hosted) (port 8000, web UI)
Huginn
Self-hosted agents that watch & act (self-hosted) (port 3000, web UI)
Flowise
Drag-and-drop LLM app builder (self-hosted) (port 3000, web UI)
Langflow
Visual builder for LLM/agent flows (self-hosted) (port 7860, web UI)
Dify
Open-source LLMOps / AI app platform (self-hosted) (port 80, web UI)
Elgato Stream Deck
Hardware macro keypad with LCD keys
Touch Portal
Turn a phone/tablet into a macro deck (no extra hardware)
Bitfocus Companion
Open-source control surface for larger automation workflows (port 8000, web UI)
X-keys
Programmable keypads for NOCs & operations
Matric
Phone macro deck with live metric tiles
QMK / VIA
Open keyboard firmware + live key remapping
6.101Workflow Orchestration
Temporal
Durable execution platform for reliable workflows (port 8233, web UI)
Restate
Durable execution for resilient services (single binary) (port 9070, web UI)
Apache Airflow
Programmatic data-pipeline orchestration (DAGs) (port 8080, web UI)
6.102HRIS Integration
Unified.to (HRIS API)
Unified API across HRIS providers (web UI)
Apideck (HRIS API)
Unified HRIS API & integration platform (web UI)
Truto
Unified API for HRIS & more (cloud) (web UI)
Bindbee
Unified HRIS / employment API (cloud) (web UI)
6.103VoIP & Telephony
Asterisk
The open-source PBX engine (self-hosted) (port 5060, brew: asterisk)
FreePBX
Web GUI distro on Asterisk (self-hosted, Linux) (port 80, web UI)
FreeSWITCH
Carrier-grade softswitch (self-hosted) (port 5060)
FusionPBX
Multi-tenant web GUI on FreeSWITCH (self-hosted) (port 443, web UI)
Issabel PBX
Unified-communications distro on Asterisk (self-hosted) (port 443, web UI)
Kamailio
High-performance SIP server/proxy (self-hosted) (port 5060)
OpenSIPS
SIP proxy/router for large platforms (self-hosted) (port 5060)
PBXact
Sangoma's commercial PBX (appliance/cloud) (port 80, web UI)
Plivo
Voice & SMS API platform (cloud) (web UI)
Telnyx
Carrier-grade voice, SIP trunking & numbers (cloud) (web UI)
Bird (MessageBird)
Omnichannel CPaaS — SMS, voice, WhatsApp (cloud) (web UI)
Sinch
Global SMS, voice & verification CPaaS (cloud) (web UI)
Twilio Voice
Programmable voice calls & TwiML (cloud) (web UI)
VitalPBX
Modern Asterisk-based PBX distro (self-hosted) (port 443, web UI)
Vonage APIs
Voice, SMS & video APIs (cloud, ex-Nexmo) (web UI)
Wazo Platform
API-first open telecom platform (self-hosted) (port 443, web UI)
Yate
Flexible telephony engine — SIP/H.323/SS7 (self-hosted) (port 5060)
3CX
Commercial software PBX (self-hosted or hosted) (port 443, web UI)
6.104Contact Centre & IVR
Twilio Studio
Drag-and-drop IVR & call-flow builder (cloud) (web UI)
Twilio Flex
Programmable contact centre (cloud) (web UI)
Amazon Connect
AWS cloud contact centre (cloud) (web UI)
Genesys Cloud
Enterprise CX platform — Architect IVR (cloud) (web UI)
Five9
CCaaS with strong outbound dialing (cloud) (web UI)
Talkdesk
AI-forward cloud contact centre (cloud) (web UI)
RingCentral Contact Center
CCaaS on the RingCentral platform (cloud) (web UI)
8x8 Contact Center
UCaaS + CCaaS in one platform (cloud) (web UI)
Vonage Contact Center
Salesforce-centric contact centre (cloud) (web UI)
Dialpad Ai Contact Center
AI-native contact centre & real-time coaching (cloud) (web UI)
Aircall
Lightweight cloud call centre for teams (cloud) (web UI)
CloudTalk
Cloud calling for support & sales (cloud) (web UI)
GoTo Connect
Phone system + contact centre (cloud) (web UI)
Zoom Contact Center
Omnichannel CC on the Zoom platform (cloud) (web UI)
Freshdesk Contact Center
Freshworks phone channel (ex-Freshcaller, cloud) (web UI)
Zendesk Talk
Voice channel inside Zendesk Support (cloud) (web UI)
Intermedia Contact Center
CCaaS bundled with Intermedia Unite (cloud) (web UI)
6.105SEO & Marketing
Analytics
built-in tool
IndexNow Manager
built-in tool
Cloudflare Analytics
Privacy-first web & edge analytics (cloud) (web UI)
Ahrefs
Backlinks, keywords & rank tracking (cloud) (web UI)
Google Search Console
Search performance, indexing & sitemaps (cloud) (web UI)
Google Analytics
GA4 web & app analytics (cloud) (web UI)
PageSpeed Insights / CrUX
Core Web Vitals & Lighthouse scores per URL (cloud) (web UI)
Plausible Analytics
Privacy-first, self-hostable web analytics (port 8000, web UI)
Umami
Simple, self-hosted, privacy-focused analytics (port 3000, web UI)
Matomo
Full GA-style analytics, self-hosted (web UI)
GoatCounter
Minimal, open-source web analytics (port 8081, web UI)
PostHog
Self-hostable product analytics suite (port 8000, web UI)
Bing Webmaster Tools
Bing search performance & URL submission (cloud) (web UI)
Yandex Webmaster
Yandex search performance & indexing (cloud) (web UI)
Semrush
Keywords, competitors & site audit (cloud) (web UI)
Moz
Domain Authority & backlinks (cloud) (web UI)
Majestic
Backlink index — Trust & Citation Flow (cloud) (web UI)
DataForSEO
SERP, keyword & backlink data API (cloud) (web UI)
SerpApi
Real-time SERP scraping API (cloud) (web UI)
Yahoo! JAPAN Ads & Search
Japan's #2 search/ads ecosystem (cloud) (web UI)
Ptengine
Analytics + heatmaps, popular in Japan (web UI)
KARTE
Real-time user/CX analytics (PLAID, JP) (web UI)
AdEbis (アドエビス)
Ad attribution & marketing analytics (JP) (web UI)
Naver Search Advisor
Naver's Search Console (KR) — IndexNow partner (web UI)
Naver Analytics
Naver's free web analytics (KR) (web UI)
Beusable
Heatmap & UX analytics (KR) (web UI)
Airbridge
Mobile attribution & analytics (AB180, KR) (web UI)
adbrix
Mobile attribution & analytics (IGAWorks, KR) (web UI)
Google Lighthouse
Audit performance, PWA, SEO & accessibility
Shlink
Self-hosted URL shortener with REST API & analytics (port 8080, web UI)
YOURLS
Your Own URL Shortener (PHP) (port 80, web UI)
Kutt
Modern open-source URL shortener (port 3000, web UI)
Polr
Minimalist self-hosted link shortener (Laravel) (port 80, web UI)
Dub.co
Open-source link management for marketing teams (port 8888, web UI)
Nahpet
Self-hosted URL shortener with custom domains & analytics (port 3000, web UI)
Flink (URL Shortener)
Self-hosted shortener that keeps the path after the alias (port 8080, web UI)
Chhoto URL
Tiny, fast self-hosted URL shortener (Rust) (port 4567, web UI)
6.106Conversion Rate Optimization
Optimizely
Enterprise A/B testing & experimentation (cloud) (web UI)
VWO
A/B testing, heatmaps, surveys (cloud) (web UI)
AB Tasty
Personalization & experimentation (cloud) (web UI)
Statsig
Modern experimentation & feature flags (cloud, API) (web UI)
GrowthBook
Self-hosted A/B testing & feature flags (open-source) (port 3100, web UI)
Mixpanel
Product analytics & funnels (cloud) (web UI)
Amplitude
Product analytics & journeys (cloud) (web UI)
Hotjar
Heatmaps & session recording (cloud) (web UI)
Microsoft Clarity
Free heatmaps & session recording (cloud) (web UI)
FullStory
Digital experience & session replay (cloud) (web UI)
Lucky Orange
Heatmaps, recordings, live chat (cloud) (web UI)
Mouseflow
Session replay & heatmaps (cloud) (web UI)
Heap
Autocapture funnels & journeys (cloud) (web UI)
Contentsquare
Experience analytics & journeys (cloud) (web UI)
UserVoice
Product feedback & feature requests (cloud) (web UI)
Canny
Feature-request boards (cloud, API) (web UI)
Survicate
Website & in-product surveys (cloud) (web UI)
Qualtrics
Experience-management surveys (cloud) (web UI)
LaunchDarkly
Enterprise feature-flag management (cloud, API) (web UI)
Unleash
Self-hosted feature-flag management (open-source) (port 4242, web UI)
6.107Social Media
Buffer
Social media scheduling & publishing (cloud API) (web UI)
Postiz
Open-source, self-hosted social media scheduler (port 5000, web UI)
Postly
AI-powered social media publishing platform (web UI)
Post Planner
Content discovery & social scheduling (web UI)
Postcron
Multi-platform social media scheduler (web UI)
Publer
Social media scheduling & analytics (web UI)
Hootsuite
Social media management suite (cloud API) (web UI)
Later
Visual social scheduling (Instagram-first, cloud API) (web UI)
Metricool
Social analytics, scheduling & ads (cloud API) (web UI)
SocialPilot
Social scheduling for teams & agencies (cloud API) (web UI)
Mastodon
Self-hosted federated microblogging (ActivityPub) (web UI)
strfry
Fast C++ Nostr relay (single binary, one-click Docker) (port 7777)
nostr-rs-relay
Rust Nostr relay on SQLite (one-click Docker) (port 8080)
Nostream
TypeScript Nostr relay — Postgres, paid relays (Docker Compose) (port 8008)
HAVEN
Personal Nostr relay suite + Blossom media (Docker Compose) (port 3355, web UI)
Blossom Server
Nostr media/blob server — images & files (one-click Docker) (port 3000, web UI)
Pixelfed
Federated photo sharing (Instagram alt.) (port 80, web UI)
Lemmy
Federated link aggregator (Reddit alt.) (port 8536, web UI)
Misskey
Federated microblogging (rich Mastodon alt.) (port 3000, web UI)
6.108Media Servers
MediaMTX
RTSP/RTMP/HLS/WebRTC/SRT media server (port 8554, brew: mediamtx)
SRS
Simple Realtime Server — RTMP/WebRTC/SRT (port 1935, web UI)
Owncast
Self-hosted live streaming + chat (port 8080, web UI)
Restreamer
Restream one input to many platforms (port 8080, web UI)
Icecast
Audio streaming server (net radio) (port 8000, web UI, brew: icecast)
AzuraCast
Complete self-hosted radio station (port 80, web UI)
Jellyfin
Free home media server (Plex alternative) (port 8096, web UI, brew: jellyfin)
Plex Media Server
Popular home media server (port 32400, web UI)
Emby
Media server with live TV/DVR (port 8096, web UI)
PeerTube
Federated, P2P video platform (ActivityPub) (port 9000, web UI)
Navidrome
Self-hosted music server (Subsonic-compatible) (port 4533, web UI)
Audiobookshelf
Self-hosted audiobook & podcast server (port 13378, web UI)
Tvheadend
TV streaming server & DVR (DVB/IPTV) (port 9981, web UI)
TSDuck
MPEG transport-stream toolkit (CLI)
Wowza Streaming Engine
Commercial streaming server (RTMP/SRT/HLS) (port 8088, web UI)
Immich
Self-hosted photo & video backup (Google Photos alt.) (port 2283, web UI)
Channels DVR Server
Whole-home DVR for live TV & streaming (self-hosted) (port 8089, web UI)
Jellyseerr
Media request manager (Jellyfin/Plex/Emby) (port 5055, web UI)
Bazarr
Automatic subtitles for Sonarr/Radarr (port 6767, web UI)
Tdarr
Distributed media transcoding/health automation (port 8265, web UI)
Komga
Comics & manga server (self-hosted) (port 25600, web UI)
Kavita
Fast ebook/comic/manga server (port 5000, web UI)
RomM
Self-hosted ROM manager & player (port 8080, web UI)
Overseerr
Media request manager for Plex (port 5055, web UI)
Ombi
Media request system (Plex/Emby/Jellyfin) (port 3579, web UI)
Airsonic-Advanced
Self-hosted music streaming (Subsonic API) (port 4040, web UI)
Calibre-Web
Web reader/manager for a Calibre ebook library (port 8083, web UI)
Tautulli
Plex monitoring, history & stats (port 8181, web UI)
6.109Download Automation
qBittorrent
Open-source BitTorrent client with Web UI (self-hosted) (port 8080, web UI)
Transmission
Lightweight BitTorrent client + daemon (self-hosted) (port 9091, web UI)
SABnzbd
Usenet (NZB) downloader with Web UI (self-hosted) (port 8080, web UI, brew: sabnzbd)
NZBGet
Lightweight, efficient Usenet downloader (self-hosted) (port 6789, web UI)
Sonarr
Automated TV series management (self-hosted) (port 8989, web UI)
Radarr
Automated movie management (self-hosted) (port 7878, web UI)
Lidarr
Automated music collection management (self-hosted) (port 8686, web UI)
Readarr
Automated book & audiobook management (self-hosted) (port 8787, web UI)
Prowlarr
Indexer manager for the *arr stack (port 9696, web UI)
Tube Archivist
Self-hosted YouTube archive (index + watch) (port 8000, web UI)
Pinchflat
Self-hosted YouTube media downloader/archiver (port 8945, web UI)
6.110AV & Stage
AV Feeds
built-in tool
Dante (Audinate)
Audio-over-IP networking (AoIP)
Q-SYS
QSC's AV processing & control platform (port 1710, web UI)
QLC+
Open-source DMX lighting control (port 9999, web UI)
grandMA3
MA Lighting console / onPC show control
grandMA2
MA Lighting grandMA2 console / onPC
Depence²
Real-time 3D previz & show control (Syncronorm)
PixMob
Crowd LED wearables for stadium light shows
Xylobands
RF-controlled LED wristbands for events
OBS Studio
Live production, streaming & recording (port 4455)
NDI
Video-over-IP for production (NDI) (port 5959)
Resolume Arena / Avenue
VJ / media-server software (port 8080, web UI)
MadMapper
Projection mapping & LED control
Liquidsoap
Scriptable radio/audio stream engine
MPV
Scriptable media player (CLI)
Kodi
Media centre with JSON-RPC remote (port 8080, web UI)
VLC
Player with HTTP/telnet remote interfaces (port 8080, web UI)
Yodeck
Cloud digital signage (Pi players) (web UI)
Screenly / Anthias
Digital signage — cloud or open source (port 80, web UI)
Google Cast / YouTube Cast
Chromecast casting & control (port 8009)
ArKaos GrandVJ / XT
Live VJ mixing & video mapping
ArKaos MediaMaster (ChamSys)
Stage media server for lighting desks
Syphon
GPU frame sharing between Mac apps
SRT (tools)
Secure Reliable Transport for live video (port 9710)
WebRTC (WHIP/WHEP)
Sub-second video in any browser (port 8889)
AirServer
Turn this Mac into an AirPlay/Cast/Miracast receiver
Reflector
AirPlay/Cast screen receiver (Squirrels)
Chrome Remote Desktop
Free remote control of this Mac (web UI)
Riverside.fm
Remote podcast & video recording studio (cloud) (web UI)
6.111Render Farm
AWS Deadline / Deadline 10
Render farm queue manager (VFX/3D)
OpenCue
Open-source render manager (self-hosted)
Qube!
Commercial render farm / job manager (PipelineFX)
6.112Tracking & Telematics
Traccar
Open-source GPS tracking server (self-hosted) (port 8082, web UI)
OwnTracks
Private self-hosted location tracking (MQTT/HTTP) (port 8083, web UI)
TeslaMate
Self-hosted Tesla data logger (Docker) (port 4000, web UI)
Samsara
Fleet telematics platform (cloud API) (web UI)
Geotab
Fleet telematics (MyGeotab API) (web UI)
Fleetio
Fleet maintenance management (cloud API) (web UI)
Onfleet
Last-mile delivery management (cloud API) (web UI)
Bouncie
Connected-car OBD tracker (cloud API) (web UI)
AutoPi
Programmable vehicle IoT dongle (cloud API) (web UI)
flespi
Telematics IoT gateway & MQTT broker (cloud API) (web UI)
Chapter 7
Sites, Domains & the Web
From the vhost on your Mac to the registrar, the DNS, the CDN and the search engines — one pane that tells you whether a domain is actually healthy, and a set of tools to fix it when it is not.
A working website is more than a running Apache. The domain has to resolve, the certificate has to be valid, the right machine has to answer, the CDN has to be in front of it, and the search engines have to know it exists. FrontierStack gathers all of that into the Sites pane and a small family of companion tools, so the whole chain — registrar, DNS, TLS, CDN, host, SEO — is visible and fixable from one window. This chapter covers the web above the stack; for the vhosts and certificates themselves see Chapter 4.
7.1The Sites pane and Domain Health
Open Sites from the sidebar. At the top sits the Domain Health section, a live dashboard that collects every hostname FrontierStack knows about: the local Apache and Nginx vhosts you have defined, the vhosts on linked servers, every Cloudflare zone on your token, and every domain in the registrar monitor. Each domain gets a row with a set of status badges; press Check on a row, or Check All in the header, and the app probes the domain end to end and colours the badges green or amber.
The point of the dashboard is to answer one question reliably: is this domain actually serving, and from where? Because the checks run against the public internet (a real DNS lookup, a real HTTP request, a real TLS handshake), they catch the failures a local config check never sees — a record that points at the wrong IP, an expired certificate, a Cloudflare zone stuck in "pending", a site that resolves but returns a 502.
| Check | How it is measured | What a problem looks like |
|---|---|---|
| DNS | A real resolver lookup of the hostname (host/dig) and the IP it returns. | No record, or an address that is not your server. |
| HTTP | A live request that records the status code (curl -w %{http_code}). | Anything outside 200–399 — a 404, a 502, a redirect loop. |
| SSL / TLS | A TLS handshake reading the certificate end date (openssl s_client → x509 -enddate); the badge shows days remaining. | Expired, expiring soon, or a name that does not match. |
| HTTP/3 | A teal badge when the server advertises HTTP/3 in its Alt-Svc header. Apache has no HTTP/3 of its own — the usual way to earn this badge on an Apache site is the HTTP/3 toggle in the domain's Cloudflare zone pane (browsers then speak QUIC to the edge while the origin stays h1/h2). Remember HTTP/3 rides on UDP 443: a TCP-only firewall makes browsers silently fall back to HTTP/2. | No badge on a site you expected to serve h3 — the edge setting is off, or UDP 443 is blocked. |
| Cloudflare | Zone status and plan from your token, shown as e.g. active · Pro. | A zone "pending" because the nameservers were never switched at the registrar. |
| Serving host | Derived from the answering IP and the Server header. | "This Mac (Apache)" when you expected a remote box, or "Cloudflare" masking the origin. |
7.2Proving domain ownership
Vendors verify that a domain is yours by asking you to publish a DNS TXT record only its owner could create — the same proof-by-DNS idea as ACME's DNS-01 challenge, but every vendor has its own record format. The Verify button on a Domain Health row keeps those formats in one place: pick the service — Google (Search Console / Workspace), Microsoft 365, Meta, Apple Business Manager, Atlassian, OpenAI, Stripe, GitHub organizations, or a custom record — paste the token from the vendor's console, and FrontierStack publishes the TXT record straight into the domain's Cloudflare zone. If the domain isn't on your Cloudflare token, it hands you the exact record to add at your DNS host instead. A bare token is completed automatically (paste abc123 for Google and the record becomes google-site-verification=abc123).
The sheet also shows the verification records already published on the apex — a quick audit of who this domain is currently proven to — and Check DNS queries public DNS (1.1.1.1) for the new record, so you know the proof is visible before you press "Verify" on the vendor's side.
For certificates, the Let's Encrypt service pane (Security & Secrets category) is a standing health check on the other kind of domain proof: it watches the ACME API, Let's Encrypt's status page and a domain's live certificate, and — because ACME clients renew when 30 days remain — alerts when a certificate is overdue for renewal, catching broken certbot/acme.sh automation weeks before visitors ever see an expiry warning.
7.3AI SEO and "Fix My Site"
Two of the badges on a domain row are not just diagnostics — they are buttons that hand the problem to the AI Administrator. Fix My Site takes a broken or misbehaving site and runs the assistant through a fixed playbook: reproduce the fault by curling the site locally with its Host header, read the relevant logs, check that Apache, PHP and the database are running, and then state the single most likely root cause with concrete next steps. With Allow changes off it only advises; with it on it may apply the reversible fixes (restart a service, correct a wrong value in a config file, repair the database). There is a WordPress-aware variant for the classic white screen, "Error establishing a database connection", broken permalinks and stuck maintenance mode.
The SEO action runs an on-device read-only audit: the assistant fetches the home page, robots.txt and the sitemap, scores the site out of 100 and writes a short report (titles, meta descriptions, headings, crawlability, structured data). The result opens in an SEO report sheet so you can read the findings and act on them.
7.4One-click CMS installs (Apps & CMS)
Installing a CMS is only the first day of its life; WordPress Sites covers the rest. Choose a host — This Mac or any fleet server — and scan for wp-config.php under the usual web roots, and every WordPress install on that machine appears with its core, plugin and theme versions and whatever is waiting to be updated. Update all exports the database before it touches anything, because a bad plugin update is recoverable and a lost database is not. Check integrity compares the core files against the checksums WordPress.org publishes, which is the quickest way to find a defaced or backdoored install; add a free WPScan token and the pane also checks your installed plugins and core against the vulnerability database, marking anything with no published fix. Multisite networks list their subsites. The remaining jobs are the ones that otherwise mean an SSH session and a half-remembered command: resetting the password of a locked-out administrator, search-replace to move a site between domains (WP-CLI rewrites URLs buried in serialized PHP, where a plain SQL replace corrupts them — so always dry-run first), cloning a site to staging, and exporting or optimising the database. A clone copies the files, gives the copy its own database, rewrites the URLs inside it and sets it to discourage search engines, so staging can never write to production or outrank it. Everything runs through WP-CLI over SSH, and the pane offers to install WP-CLI on any host that lacks it. Pin a site and Alerts will tell you about pending updates, a failed integrity check or a new vulnerability.
If your WordPress lives on managed hosting rather than your own machines, the hosting panes now list those sites too: WP Engine, Kinsta, Cloudways and Pressable each pull your installs through their API — environment, primary domain and status — and they roll up into Cloud Servers alongside your VPS instances, so one inventory covers everything you run. These are sites rather than machines, so they carry no power controls.
The Apps & CMS section installs a self-hosted CMS onto your Apache/PHP/MySQL stack in a single flow, each with its own pane: WordPress, Drupal, Joomla, Statamic, Grav, Kirby and Craft CMS. The installer downloads the app (or runs composer create-project for the Composer-based Statamic and Craft), extracts it into the document root, and — for the ones that need a database (WordPress, Drupal, Joomla, Craft) — creates the database and user and writes the config where the app expects it. The flat-file CMS (Grav, Kirby, Statamic) need no database at all. It then opens the app's setup or admin page so you can create your account (/wp-admin/install.php, /admin, /panel, /cp, /admin/install…), while FrontierStack wires the virtual host, PHP and trusted HTTPS around it. For the install folder you can pick a site Apache already manages — a menu prefills its domain, document root and port — or Choose… a new empty folder; a matching Apache vhost is created for a new folder, or updated when the domain is an existing site. If an install misbehaves, Fix My Site (AI) above debugs it.
7.5The Domain Registrar monitor
Sites tells you whether a domain works today; the Domain Registrars pane (in the DNS category) tells you whether it will keep working. Add a domain and FrontierStack watches three things on a schedule and raises an alert when any of them drifts:
- Expiry — the registration end date, registrar and nameservers, pulled over RDAP (with a
whoisfallback). Works for any domain, whatever the registrar. - DNS — whether the domain still resolves (
dig). - SSL — the certificate expiry, checked directly with
openssl.
A renewal warning fires when the expiry is within your reminder window, already past, or when auto-renew is off. For supported registrars the pane can import your domain list and auto-renew status by API — GoDaddy, Porkbun, Gandi, Value Domain, Route 53 (via the AWS CLI) and Cloudflare (reusing the Cloudflare token). Registrars without a usable list API (Namecheap, Squarespace, Onamae) you add by hand; RDAP still monitors them.
domain_check (read-only) and domain_register tools, the latter gated behind an explicit confirmation. Registration reuses your stored registrar credentials and a registrant-contact profile you fill in once.7.6Cloudflare: zones, DNS, cache and tunnels
The Cloudflare pane is where you paste an API token and choose which zones appear in the sidebar. Each zone you Pin to sidebar becomes its own pane with that zone's Cloudflare/DNS/HTTP/SSL health, DDoS and bot protection, WAF rules, Workers, CDN analytics, development mode and cache purging (everything, a list of URLs, or by prefix). Scope the token carefully: a read-only token lists zones, but DNS edits, certificate DNS-01 validation, Dev Mode, cache purge and zone creation each need their own permission, and creating a brand-new zone needs the account-level Zone · Zone · Edit permission. The pane links straight to Cloudflare's token templates, a Test Token button probes the live API and lists exactly which of those abilities the token has or lacks (reads are exercised directly; writes are probed with deliberately-invalid requests, so nothing is changed), and a Dashboard button deep-links into the Cloudflare web console for the current zone.
When a pinned zone shows a warning or its HTTP check has stopped answering, the pane's Diagnose button finds out why instead of leaving you with a coloured dot. It probes each layer of the serving path in order — the zone's state at Cloudflare, the public nameservers, DNS resolution, HTTPS through the edge (decoding Cloudflare's 52x errors: 521 origin down, 522 timeout, 524 the app or its database hanging, 525/526 origin TLS), the origin server's ports 80 and 443 directly, and finally the machine FrontierStack knows serves the domain: the local web server if that is this Mac, or a linked server's on-host monitor service states (a stopped mysql surfaces right in the report). When the public path is broken it also sweeps the fleet: which linked servers are up, which binds the origin IP, and which already serves this domain's vhost — so a host that went offline and took the sites' front-door IP with it is named directly, together with the server that could take over. Each layer is shown pass/fail, ending with a plain-language conclusion — which layer broke and what to do about it.
Cloudflare turns up across the app: the AI's dns_record tool writes records into a zone you manage and updates existing ones in place — including flipping a subdomain between proxied (orange cloud) and DNS-only — issue_certificate can validate over Cloudflare DNS-01, and email_auth_dns can publish SPF/DMARC for you (see Chapter 13). The same account also powers Cloudflare DDNS and the Cloudflare Tunnel for exposing a local site — both covered in Chapter 9.
7.7Hosting providers
Not everything you run lives on a Mac. The Hosting category brings VPS and managed providers into the same window. VPS providers — DigitalOcean, Vultr, Linode, Hetzner, Sakura and others — expose their servers through an API token: paste it, and the pane lists each server with plan, location, status and IP, and lets you power one on, off or restart with a confirmation. Dashboard-style providers (managed hosting such as Hostinger) store their token and surface quick links to the control panel, docs and sign-up. Either way the credential lives in the Keychain, and the servers you can reach over SSH become part of your fleet (Chapter 8).
7.8IndexNow: instant search-engine submission
When a page changes, you do not have to wait for a crawler to notice. IndexNow Manager (in SEO & Marketing) tells the participating engines — Bing, Yandex, Seznam, Naver and others — immediately. Pick one of your managed sites, press Install Key File, and FrontierStack writes the <key>.txt file into the site's document root so the engines can confirm you own the key; Verify checks it is being served. Then submit a single URL, fire off the pending queue, or feed it from a sitemap, and it can auto-submit on a schedule. Everything goes to api.indexnow.org, which fans out to all participating engines; the URL's host must match the selected site and its key.
gsc_verify_domain and index_site tools, hands-off when you are signed in to Google. The Index button on each Domain Health row drives both paths at once.7.9Site Transfer: copying sites between machines
Two tools move a site without a manual rsync dance. Copy Websites Between Apache handles the local case: when you have more than one Apache install on the Mac (say a Homebrew one and an old Server.app one), choose the source install, tick the sites you want, and FrontierStack copies their document roots and vhost definitions into the currently selected Apache. Sites with the same domain are overwritten, so it is also how you re-import after a migration.
To move a site to another machine, the AI's promote_site tool clones a local site to one named fleet host: it uploads the document root, writes the vhost (Apache or Nginx) on the far side, reloads the web server, and can add the Cloudflare A record pointing at the new host — the same steps as a manual fleet push, in one call.
7.10Provisioning a new web project
The pieces above combine into a single flow for standing up a project's infrastructure from nothing. The idea is a clean division of labour: your AI tool (over MCP) owns the code; FrontierStack owns the infrastructure. The built-in Provision Web Project skill walks the assistant through the recipe in order:
- Discover — inventory the target, its privilege access, installed Apache/Nginx and connected DNS provider; identify or install missing prerequisites before making a public change.
- Zone —
cloudflare_zone_createmakes the Cloudflare zone and returns the nameservers to set at the registrar (and tells you plainly if the token lacks account-level zone-create rights). - Vhost + folder —
vhost_createdefines the Apache/Nginx site. If you did not provide a document root, FrontierStack creates an empty platform-appropriate folder and reports its path. It does not design or generate site content. - DNS —
dns_recordpoints the name at the host. - TLS —
issue_certificateissues a Let's Encrypt certificate. - Preview — a temporary share for a localhost test point (Chapter 9).
- Promote — optionally
promote_siteclones it onto a fleet host.
Domain registration can join the front of this recipe through domain_register, so an agent can in principle buy the name, create the zone, stand up the vhost, issue the certificate and clone to the fleet — with every money-spending or system-changing step previewed for your approval first.
Part III
Fleet, Network & Security
Link servers into one fleet, then network, harden and monitor them all from a single window — Macs, Linux and BSD boxes, Raspberry Pis and Windows hosts alike.
Chapter 8
Connecting Servers: Locations & the Fleet
One Mac is a start. FrontierStack reaches out over SSH to every other server you run — and knows where on the network it is sitting when it does.
Everything so far has been about the Mac in front of you. This part of the manual widens the lens to the whole estate: the Linux boxes in a rack, a vintage Xserve still running macOS Server, a Raspberry Pi on a shelf, a cloud VPS, even a Windows host. You link each one once over SSH, and from then on FrontierStack treats them as a single fleet — running diagnostics, fanning commands out, deploying sites, and watching their health. It also keeps track of where this Mac is on the network, so a laptop that moves between home, office and a café doesn't fire false alarms about servers it simply can't see right now.
This chapter covers linking and running the fleet. Chapter 9 goes deeper on the network and perimeter, Chapter 10 on hardening and the security audits, and Chapter 11 on continuous monitoring and alerts. The AI Administrator can drive almost everything here over the same tools — see Chapter 13.
8.1Locations & Places
Open Locations & Places ▸ Locations. A location is simply a named network — Home, Office, On VPN — recognised from several signals: the Wi-Fi SSID, the router (gateway) MAC address, the Wi-Fi BSSID, the subnet prefix of your IP address (e.g. 192.168.1.), your public IP block, and whether a VPN is up. The header shows where you are right now (Now: Office), with the live snapshot beneath it: Wi-Fi name, IP, gateway and VPN state. Detection runs every 30 seconds.
When FrontierStack sees a network it doesn't recognise it offers a New network detected banner — click Add… to save it. You can also press Add Current Network as Location, then refine the criteria: a location matches when all the set criteria hold (with SSID and router MAC treated as any-of), so leaving a field blank simply ignores it. When several locations match, the most specific one wins rather than the first in the list. Use the Mode picker to pin a location manually instead of auto-detecting — handy when the signals are ambiguous.
Not all signals are equally trustworthy, and this matters more than it sounds. A subnet prefix is not an identity: home routers, cafés and hotels hand out 192.168.1.× everywhere, so a location defined only by its subnet would happily match a completely different building. The router MAC is the strongest signal — it is unique to one piece of hardware and readable without any special permission — which is why Update all criteria from current network is the one-click fix for a location that was saved before router matching existed.
8.12.1Pinning a place with GPS
For the awkward case — two sites that genuinely share a subnet and you would rather not fuss with MAC addresses — a location can also carry a GPS pin. Stand in the place, open the location and press Pin This Spot (GPS); a Radius slider sets how far counts as "here" (150 m by default, because indoor positioning is coarse and a site is a building, not a point).
The pin is a cross-reference, not a requirement. It does two things: it lets a weak match be confirmed, and — more usefully — it lets a wrong one be vetoed, so Home stops claiming a café that happens to use the same subnet. To keep that from ever making detection worse, a location identified only by shared criteria (a subnet, a VPN toggle) is no longer reported as confirmed when a position is available and contradicts it; you get Away / Unknown instead of a confident wrong answer.
Devices belong to Locations too. In Device Discovery, a monitored device's ⋯ menu ▸ Assign to Location places it at a specific site — or leave it Automatic, where it falls into whichever location owns its subnet. You can also set it from the device's own pane, and each location's row lists the devices assigned to it. When the Mac arrives at a recognised location, FrontierStack checks those devices (skipping any seen recently, e.g. over VPN) and shows each one's status: green reachable, red if it should be here but isn't answering, and orange when it's on a Wi-Fi segment this Mac can't reach — usually a different access point or band, such as a 2.4 GHz-only sensor while the Mac is on 5 GHz. Orange means “can't verify from here”, not “gone”.
The point of all this is the Location-Dependent Monitoring section. Mark a device, Wi-Fi network, Cloudflare zone or watch as critical in Overview ▸ Alerts, then scope it here to Only at Office. That check is paused everywhere else: your NAS won't ring as DOWN from a hotel, and your home Wi-Fi won't alert as lost while you're at work. Paused items resume silently when you return. When the location itself changes, FrontierStack can post a local notification, send a "📍 Now at: Office" alert through your Messaging Gateways, or both.
get_location tool: the active location, how it was determined (pinned vs auto-detected), the live snapshot, and every configured location's criteria. It uses this to reason about whether a LAN-only service is reachable from where you are now, or whether you're away over VPN.8.2Linking a server over SSH
A server joins the fleet through the Link a Server sheet — reachable from a device's pane, from Device Discovery, or from the Cloud Servers and Remote Tools panes. Enter a name, the host or IP, the port, an SSH username (root, ubuntu, ec2-user…) and the login password. That password is used exactly once: the app installs this Mac's managed SSH key into the server's authorized_keys, then connects key-only from then on. Nothing is stored except the server's address — the password is discarded.
For a key-only server with no password login, expand Can't use a password? Install the key manually, copy the shown public key into the server's authorized_keys yourself, then link. Tick Also install the monitoring helper to set up the host monitor in the same step (covered below).
Linked servers carry a small green or red status dot for reachability. If it goes red with Permission denied (publickey) — typically after a server is reinstalled, or the key was never installed — the AI tool repair_ssh_access clears the stale host key and re-installs the managed key, using a one-time login password you keep as a vault secret. The password is read locally and re-installs key access; on success the dot turns green again.
repair_ssh_access tool reads its one-time password from the local .env vault by name; the value is never sent to the AI model.8.3The managed key and the saved sudo password
Key access lets the app connect, but many useful operations — reading /var/log, editing Apache config, reloading a firewall — need root on the server. FrontierStack handles this with a per-host sudo password, saved in the macOS Keychain (never in plain files). It is captured automatically when you link a server, and you can set or change it later in the host's pane or in the Remote Tools target section (the Sudo password field).
When a root-only command runs, the helper primes sudo's credential cache with that saved password over the SSH session, then runs the command. If no password is saved, root operations fall back to passwordless sudo -n and simply report "needs sudo" when that isn't configured. Because secrets are referenced by name, you can keep several — for example a distinct MySQL password per server in the .env vault.
sudo -S over the encrypted SSH channel only when a root action actually runs, and they are never shown to the AI model or written to logs. Revoke one by clearing the field; re-enrol or re-key a single host without touching the others.8.4Fleet Run — one command across every node
Fleet & Remote ▸ Fleet Run fans a single operation out across all linked servers at once, or a selected subset, with a live per-host result. Pick your Targets (toggle hosts; the reachability dot shows which are up), choose an Operation, and press Run on N Server(s) — everything runs concurrently over SSH and each host reports back below, expandable to its full output.
Operations are OS-aware: a package update maps to apt, dnf, pacman, zypper, apk or brew depending on the host; a service restart tries systemd, then Homebrew. You never write per-OS commands by hand.
| Operation | What it does across the fleet |
|---|---|
| Update / upgrade all packages | Runs the host's package manager's update + upgrade. Confirmed before it fans out. |
| Install a package | Installs a named package (e.g. htop) on every selected host. |
| Restart a service | Restarts a named unit (e.g. nginx) via systemd or brew. |
| Check reboot-required | Reports which hosts are waiting on a reboot after updates. |
| Disk usage (df) | One-shot df across the fleet to spot a filling disk. |
| Uptime & load | Uptime and load average per host. |
| git pull a repo | Pulls a repository at a given path on each host — a quick deploy. |
| Custom command | Runs a verbatim shell command on every selected host. Double-check before fanning out. |
Fleet Run is the fastest way to spot drift: run Disk usage or Uptime & load to compare hosts at a glance, or use the file-checksum and health-check tools in Remote Tools (next) to find a config that's diverged across the fleet.
8.5Remote Tools — per-node diagnostics
Fleet & Remote ▸ Remote Tools is a suite of SSH-driven diagnostics, distilled from real fleet-debugging work. Choose the target first — a pinned server, or Other (IP / host)… for an ad-hoc address that isn't a saved server (its sudo password persists in the Keychain too) — then the tool and its parameters. Read-only checks need no root; ones that read protected logs or config use the saved sudo password through the helper, and a few are marked mutating.
| Tool | Purpose |
|---|---|
| Ping · Traceroute · Whois | Basic reachability, path and registration lookups, run from the chosen node. |
| Net Info · Netstat | Interfaces and addresses; routing table, interface/protocol stats, active sockets. |
| Port Scan · Port Check · Web Check | Scan a range, test a single port, or fetch an HTTP/HTTPS endpoint and report the status. |
| TLS Inspect · TLS Expiry | Inspect a certificate; check expiry across selected nodes at once. |
| System Resources · Listening Ports | Load, memory and disk for the node; what's listening (optionally with sudo). |
| Tail Log · Config Test | Tail any log path; validate the web server's configuration. |
| File Diff · Healthcheck | Compare a file's contents across nodes (drift); hit a vhost's paths over loopback on each node. |
| rsync Deploy | Push a local folder to a remote path — with a dry-run preview and an optional --delete. |
| Security · SSH · Exposure · Auth · User audits | Read-only audits (see Chapter 10) on any node or ad-hoc IP. |
| Flush DNS · Restart Backend | Flush the resolver cache; kick the macOS Server web backend (mutating — sites blip). |
Some tools work across several selected nodes at once — File Diff, Healthcheck, TLS Expiry and Serving Path Diagnosis (who's up, which public IPs each node binds, per-process CPU saturation and stopped services, cross-checked against every pinned Cloudflare zone's origin IP) are fleet-wide by design — which is exactly how you confirm every web node is serving the same content with a valid certificate. The bottom of the pane also offers safe over-SSH editing of /etc/hosts (root, through the helper) and the SSH user's ~/.ssh/known_hosts, each backed up to .fsbak first.
8.6Recovering a wedged server — and a safe power reset without SSH
A server can stop answering SSH while its services keep running — overloaded, not down. FrontierStack shows this: when SSH is unreachable but a service port still answers (say MySQL on 3306), the server's dot turns orange, not red, and its pane reads "SSH is wedged, but the server is still serving" and lists what's answering, with the database's version banner. The machine is alive — only its management channel is stuck — so don't assume it's dead or blindly cut the power.
Try a normal Reboot first. After Reboot, the dot flashes while FrontierStack waits out a grace period and then polls, refreshing the instant the host returns — no need to keep pressing Refresh.
Make a power reset safe — without SSH. When a database is still answering, the pane shows a red-outlined EMERGENCY box, Prepare databases for a safe power reset. Each step runs over the database's own connection (no SSH), using the credentials saved in Database Health, top to bottom: Stop accepting writes (reads still work, reversible), Quiesce & flush to disk, then Clean-shutdown. After a clean shutdown a hard power-cycle is safe, because nothing dirty is left in memory to corrupt. Coverage differs by engine — MySQL, Redis and MongoDB can be cleanly stopped over their protocol; PostgreSQL can be quiesced and flushed but not stopped over SQL, so you flush then power-cycle. The clean-shutdown button is red and confirms first.
Power-cycle, then bring it back. The hardware power controls (SwitchBot plug, smart powerboard/PDU, KVM) each offer Shut Down Databases First in their confirmation, so you can flush and stop the databases before cutting power. And if the shutdown relieved the pressure and SSH recovers, a Start button starts the database again over SSH — so the ideal path is often: clean-shutdown the runaway database, let the box recover, and Start it, with no power-cycle at all.
8.7The Host Monitor (remote agent)
SSH diagnostics run on demand. For continuous visibility, install the Host Monitor — a tiny, read-only Go helper (fsagent) that lives on the server and reports its own health, with no per-cycle SSH. From a linked host's pane, choose to install it (or tick the box in Link a Server); over the existing key the app pushes the right binary for the host's OS and architecture, sets up the platform service (systemd, launchd or BSD rc.d), and pins its TLS certificate. The AI tool install_monitor does the same on request.
Once enrolled, the monitor streams live metrics: CPU, memory, per-mount disk, network interfaces up, detected services, firewall and fail2ban state — and on GPU hosts, per-GPU temperature and utilisation, so a mining or ML rig surfaces thermals. list_monitors reports the fleet's helpers, their versions and latest metrics. Crucially, the monitor keeps watching and can alert even when the Mac app is offline, notifying directly through its own channels and replaying anything it buffered when the app returns. Logs windows prefer the monitor too — it runs as root on the server, so it reads privileged logs without needing the sudo password at all.
An enrolled host's pane also keeps a Behavior & History chart — CPU, memory and disk at five-minute resolution for up to 30 days, against a learned baseline that flags unusual behaviour. Vertical lines place incidents on the same timeline: a solid red line is a server reboot (derived from the reported uptime), a dashed orange line is a watchdog issue — a forced service restart, a database-corruption warning or a reboot escalation. If the OS crash reporter starts using CPU (a process crashing repeatedly), an orange Crashes curve joins the chart, so "MySQL was force-restarted twice last night and something was crash-looping" is visible at a glance.

The monitor is read-only by default. Turning on Allow actions in its Host Monitor pane unlocks a small, fixed set of control verbs — never arbitrary shell — driven by the gated monitor_action tool: restart/reload/start/stop an allowlisted service, flush DNS, reload the firewall or fail2ban, or reboot. Each action is logged on the server. Targets cover Linux (amd64/arm64/arm — covering every Raspberry Pi), macOS (including legacy Intel builds back to OS X 10.11 El Capitan), FreeBSD (pfSense/OPNsense/TrueNAS) and Windows.
Keeping a monitor healthy over time is handled for you. Rotate monitor credential replaces its bearer credential in place: the new secret is generated on the Mac, sent over your approved FS1 signing key, and activated on the server without ever being shown or handed to an AI. With Allow self-update enabled, pushing a newer build is safe by construction — the candidate binary's release signature is verified, it must pass a compatibility self-test before it is given root, and the previous binary is kept as a rollback; if the new one fails to answer its health check, FrontierStack restores the old one automatically. Pull-mode updates fetch the binary through a short-lived, single-use grant rather than a durable token. When a monitor is verifying FS1-signed requests, its pane shows a FS1 signed badge.
8.8Cloud Servers, Server Clone & Remote Apache
Alongside the compute panes, AWS ▸ DynamoDB lists the tables in the selected region with their status, item count, size and partition/sort key. It leans on the two things that actually cost you: the capacity mode capsule separates provisioned tables — which bill for their read and write units continuously, whether or not anything touches them — from on-demand tables that bill per request; and a no PITR flag marks any table without point-in-time recovery, which is off by default on every new table and is the only way to rewind after a bad write. Point-in-time recovery can be switched on or off from each row's menu. DynamoDB has no bulk describe call, so each table is queried individually and the list is capped at 40 per region.
Fleet & Remote ▸ Cloud Servers rolls up one inventory across every cloud provider that has a configured API token — DigitalOcean, Vultr, Linode, Hetzner, Sakura, Contabo — plus AWS EC2, Lightsail and RDS. It is a read-only roll-up (power control stays in each provider's own pane). Each running instance with an IP offers a Services button to discover what's listening, and a + Helper button that links the instance over SSH and installs the monitor in one move — just set the right username and key in the sheet.
Server Clone is a guided wizard that stands a fleet server up to match this Mac: it installs the detected Homebrew stack, copies configs and site files to their original paths, pushes your domain configs and reloads the web server, and can clone MySQL databases (local mysqldump piped into mysql on the target over SSH). Every step runs over key-based SSH and is safe to re-run; existing data isn't deleted.
When a single site is ready to go live, the Promote to Production push (from a domain's context menu) sends its vhost config to the same path it uses locally, optionally copies the document root and database, points DNS at the target via Cloudflare, and can issue a real Let's Encrypt certificate with certbot — files, database, vhost, DNS and HTTPS in one push.
You can also manage a remote server's Apache directly. The Apache pane gains a host selector (This Mac / each linked server) when any remote host exists; pick a server and FrontierStack discovers its Apache over SSH — version, config layout, and every active vhost with its real log paths — and lets you edit vhosts, modules, MIME types, ports and WebDAV, with each change validated (httpd -t) and gracefully reloaded before it sticks, rolling back if the config is invalid. It even understands the legacy macOS Server.app Apache tree. From the Sites list, Push to Server… renders a local site's vhost onto a monitor-linked server with its document root swapped in. Chapter 7 covers the local Apache and Sites workflow these mirror.
8.9KVM-over-IP: console and power, lights-out
SSH and Screen Sharing need the machine to be up and on the network. When it isn't — a kernel panic, a BIOS/firmware screen, a network stack that never came up — you need out-of-band access: a KVM-over-IP appliance that captures the real HDMI output and injects USB keyboard/mouse, independent of the operating system. The Remote KVM pane registers as many of these as you own — PiKVM, JetKVM, TinyPilot, NanoKVM, GL.iNet Comet, or any generic unit — each pinnable, each one click from its web console down to the BIOS.
Units with power control close the loop. A PiKVM with an ATX board, a network PDU, or GL.iNet's Comet Pro (GL-RM10) — which is a KVM and a smart power plug in one device — can switch mains power, so you can hard power-cycle a truly frozen box. Link such a unit as a server's power source in its Power section (beside SwitchBot, UPS and PDU commands) for On/Off/Cycle. The AI Administrator can drive it too: list_kvms, kvm_power, and server_power — the last reaches a host's linked plug/PDU/KVM to restart a hung server that won't answer reboot_host.
8.10Old Macs, Raspberry Pis & Windows hosts
Part of the point of a fleet is keeping older or odd hardware useful. A vintage Xserve or Mac mini still running macOS Server links like any other host; the Remote Apache discovery understands Server.app's own Apache tree and its internal ports, so its websites show up and can be edited, and the legacy Intel builds of the monitor run as far back as OS X 10.11 El Capitan. A shelf of Raspberry Pis links as ordinary Linux boxes — the monitor's arm build covers every Pi including the Zero — so you watch their CPU, disk and services right alongside everything else.
Windows hosts join over Microsoft's OpenSSH server: link them like a Linux box for SSH diagnostics, and install the monitor as a native Windows Service (because Windows services don't reliably inherit machine environment, its config is read from a file beside the executable). Windows monitor installs are done manually with the supplied PowerShell installer from the Host Monitor pane, rather than auto-pushed.
For interactive control beyond diagnostics, the catalog also carries the remote-access tools — RustDesk, MeshCentral, Apache Guacamole, Windows Remote Desktop and WinRM — but those are services you run, not the SSH fleet itself. The fleet's strength is uniform, scriptable, low-overhead management of everything from one window — and, with Chapter 13's run_script targeting any node by name, an AI that can diagnose and fix a remote server two steps at a time: a read-only test, then a minimal fix, re-run to confirm.
8.11Migration wizards: moving a stack onto a new device
Retiring an old server rarely means "reinstall everything by hand." FrontierStack ships guided migration wizards that lift a stack off a legacy machine and stand it up on a destination you choose — this Mac, another Mac, or a Linux box. The source is only ever read; everything is written to the target.
The Migrate Setups pane handles a MAMP, XAMPP or Apple Server.app web stack. It auto-detects the source, then lets you tick exactly what to carry: the Homebrew tools, web files, MySQL databases, the sites (vhosts), MIME overrides, Apache modules, PHP settings, WordPress wp-config.php fix-ups and Git repositories. A Set up on picker chooses the destination: leave it on This Mac for the full in-app migration, or pick a linked host to install the stack on that new device over SSH, copying the web files (rsync) and databases (dump over SSH) across — with a Linux toggle to use apt/dnf instead of Homebrew.
The Apple Server Migration pane is a one-click wizard for a whole Server.app machine. Point it at the source (this Mac or a remote one) and it inventories every service with serveradmin — Websites, Mail, Calendar and Contacts, Messages (XMPP), VPN, DNS, DHCP, NetInstall, Open Directory, File Sharing, Time Machine, Profile Manager and more — and anything else it finds running, such as a git server, databases, Docker or a standalone Nginx. Each service shows a status badge and a modern equivalent; where there's more than one sensible replacement (Calendar → Radicale / SOGo / Baïkal, VPN → WireGuard / strongSwan, DHCP → dnsmasq / Kea) you choose which one. Pick a target machine and OS, and the wizard installs the equivalents and prints a precise carry-over checklist. Services with dedicated importers — Websites (full vhost + file copy) and Open Directory (users and groups) — hand off to their own panes; a detected git server hands off to the Git Server migration.
serviceproxy, and on older releases — High Sierra especially — that process wedges: it carries on accepting connections but stops answering them. Ping succeeds, the port scans as open and SSH still works, so the sites look reachable while every one of them hangs. It is routinely misdiagnosed as a DNS or network fault for exactly that reason, and a plain “is the service running?” check will not catch it either, because the process never dies. Give the source machine a Service Guardian watch on http://127.0.0.1/ with service serviceproxy (use server-httpd to watch the backend behind it) so a wedge is spotted and healed with launchctl kickstart while you plan the move. Migrating the sites to a plain Apache removes the wedge-prone proxy from the serving path for good.serveradmin as root, so save that host's sudo password in its settings first (Chapter 8, "The managed key and the saved sudo password"). Some Apple services carry their config automatically (DNS zones, Apache vhosts, Postfix main.cf); others install the replacement and hand you the steps — the wizard labels each one Automatic, Assisted or Manual so there are no surprises.8.12The Git Server: Gitea & repository migration
The Git Server pane stands up a self-hosted Gitea (behind Caddy for automatic HTTPS) on any target — this Mac, a linked server, a NAS, a Docker host or a Linux box — detecting the platform and installing the right way. Once it's running, connect with an access token for a live monitor: version, repository count and backup-staleness alerting when a mirror falls behind its source.
The same pane migrates or mirrors another Git server into Gitea. Point it at on-disk bare repos — the legacy macOS app Simple Git Server, Xcode Server, Gitolite, a plain git-daemon, or any folder — or at a running remote server via any git://, https:// or ssh:// clone base (enumerate the repo names over SSH, or paste them). Scan lists the repositories; Migrate mirror-clones each one with full history, every branch and tag, and pushes it into Gitea, creating the destination repo through the API. The copy runs on this Mac.
Chapter 9
Networking & the Perimeter
See every device on your LAN, read your router's live state, and reach a service from the outside world — with or without opening a single port.
A Mac that runs services lives inside a network, and that network is where most real-world trouble starts: a router whose WAN link flapped, a forgotten device on the wrong subnet, a port you opened months ago and never closed. FrontierStack treats the network and its perimeter — the boundary between your LAN and the internet — as first-class objects. It reads your router directly, scans the LAN to build an inventory, draws a data-flow map, and gives you several disciplined ways to expose a service to the outside.
This chapter covers the network around your servers. For linking the servers themselves over SSH see Chapter 8; for the host firewall, fail2ban and the security audit see Chapter 10; and for Cloudflare DNS and TLS see Chapter 7.
9.1Routers & firewalls you can read and drive
FrontierStack talks to network gear through its own management API where one exists, and over SSH where it does not. The two tightest integrations are OPNsense (its full REST API) and Cloudflare (covered in Chapter 7); a wider set of routers and firewalls report live status. Add a device in the Router & Network pane with its address, vendor and API key, and the AI Administrator's router_info tool can then read its version and model, uptime, CPU and memory, WAN links and gateways (up or down), interfaces and client count — plus the raw API JSON for any field FrontierStack does not map. It is read-only: it queries the device's own API, never SSH.
| Device | How FrontierStack reaches it |
|---|---|
| OPNsense | Full REST API — live status, firewall rules, port-forward (rdr) for the perimeter |
| pfSense | REST via the API package |
| MikroTik RouterOS | REST API (RouterOS v7+) |
| Ubiquiti UniFi / EdgeOS | Controller / gateway API key |
| OpenWrt | LuCI / ubus API |
| DD-WRT | Web admin / SSH |
| ASUSWRT | Router web API / SSH |
| FRITZ!Box | TR-064 / web admin |
| TP-Link Omada | Controller API |
router_info still reports that it is pinned, where, and whether it is reachable — and tells you to add its API key in Router & Network to read version, gateways, WAN and interfaces live.For OPNsense and pfSense, an API key unlocks a continuous firewall monitor (the toggle in the pinned device's pane): every Alerts sweep polls the firewall itself for gateway state, interface carrier and service liveness — so a WAN line that dies while a multi-WAN router silently fails over (servers browse fine, inbound to your sites is dead) raises an alert naming the gateway and the port that lost carrier, instead of an unexplained sea of red site dots. Nothing is installed on the router: OPNsense's REST API is built in, and pfSense needs only its REST API v2 package. The same pane can also join an OPNsense router to your tailnet: sign in to Tailscale on your Mac (Google accounts work), mint a pre-auth key, paste it in the device pane's Tailscale section — FrontierStack installs the os-tailscale plugin if needed, saves the key and login server (Headscale too), and restarts the service over the API, no browser login on the router required.
Attack and failure signals. The same sweep that watches gateways also watches for trouble on the router itself, and a router in distress turns orange with a warning triangle in the sidebar — hover for the reason. On OPNsense with the Intrusion Detection plugin enabled, FrontierStack reads its recent Suricata alerts over the same API and shows the count and top signature (an attempted attack surfaced without opening the firewall UI; pfSense's REST API does not expose IDS uniformly, so this is OPNsense-only for now). Across every monitored router — OPNsense, pfSense, OpenWrt and the rest — each sweep also flags an unexpected reboot (uptime dropped sharply: a crash, a power event, or an attack), a brute-force spike on the router's admin/SSH (repeated failed logins, with the busiest source IP named from the router's own log), resource stress (memory or load dangerously high — a DoS, a runaway or compromised process), and an available firmware update (outdated firmware means known holes). Each raises an alert; signals a given platform cannot report are simply skipped, never a false all-clear. OPNsense and OpenWrt report the most; pfSense's API is more limited.
Driving and diagnosing a router. The AI Administrator can now do more than read: reboot_router restarts an appliance the same way it reboots a server (OPNsense/pfSense via API, OpenWrt over SSH), gated behind "Allow changes"; and when a task is genuinely better done in the router's own console, the assistant offers to open its Web UI with open_web_ui, resolving the address from the device pane rather than guessing. FrontierStack itself deliberately does not edit these appliances' firewall rules — OPNsense/pfSense/OpenWrt manage rules through their own config system, so the pane and the assistant point you at the native firewall page instead (right-click a router ▸ Open firewall rules… deep-links it). Two pane conveniences round this out: a Diagnostics button runs an API-free reachability check (ping, the common admin ports 80/443/8443/53, reverse DNS, gateway) so you can triage a router even without an API key; and for a router or firewall, Discover Services offers to open the Web UI rather than port-scanning it (a scan of your own perimeter device is rarely what you want). If SSH to an OPNsense or pfSense box is refused, SSH is either disabled or — more often — only allowed on certain interfaces (commonly the LAN, not the WAN): reaching it over the LAN, e.g. through a VPN, usually works, while from outside it is typically blocked. Enable SSH and its listening interfaces in the web UI (System ▸ Settings ▸ Administration ▸ Secure Shell on OPNsense). The SSH button itself is only hidden for consumer gateways that have no admin shell at all (NTT, some TP-Link/FRITZ!Box), where the Web UI is the only way in.
9.2Device Discovery: an inventory of your LAN
Open Device Discovery and press Find Monitors (or pick a subnet first). FrontierStack sweeps the chosen /24 using every method available at once, so routers, access points, switches, NAS boxes (Synology, QNAP, ZimaCube/ZimaOS…), printers, cameras and other servers all surface:
- Ping / ARP — an ICMP sweep, with ARP/MAC giving each host's vendor; turn on TCP Probe to find hosts that filter ICMP.
- Bonjour (mDNS) and SSDP / UPnP — advertised services and their friendly names.
- SNMP and LLDP / CDP — add model, port and neighbour details when
net-snmpandlldpdare installed (buttons in the pane install them). - Windows service ports — a machine that filters ICMP is still found by probing its distinctive ports (RDP, WinRM, SMB and friends), so Windows PCs no longer hide from the sweep.
The scan also notes how each host can be reached. An AnyDesk badge appears when AnyDesk is running locally or answering on its default port 7070, and a Tailscale badge — green when the peer is online — is built from this Mac's own tailscale status, matching mesh peers to discovered devices (only endpoints, hostnames and OS are kept; login names are never retained). On a directly-connected LAN, the Macs and devices macOS already knows through Bonjour appear before the slower IP sweep, so the list fills in quickly. A device's detail view carries matching AnyDesk and Tailscale rows with an Open app shortcut.
The AI Administrator's discover_devices tool runs the same scan and auto-pins the devices whose type it can identify confidently. Anything ambiguous is listed back rather than guessed at, so the assistant can ask you what it is and then pin it with pin_device. A pinned (monitored) device appears in its type's sidebar section; double-click it to open its pane, or use Open Web UI, Discover Services, Reclassify or Remove from its row. If you already know an address, the Add a device by IP field probes and pins it directly — no full scan needed.
9.3The Data Map
The Data Map pane draws a per-location data-flow diagram: where your data lives and how it moves across the devices and services at one site. FrontierStack serialises the location's inventory — the discovered devices, their roles, and (optionally) scanned ports — scrubs it of secrets, and hands it to your subscription Claude through the local claude CLI (not the metered API the in-app harness uses). The reply comes back as a Mermaid flowchart plus a short narrative, rendered offline in the pane; the last diagram for each location is kept, and you can save it to your Obsidian vault as a runbook. Locations themselves are explained in Chapter 8.
9.4Opening a port: UPnP and NAT-PMP/PCP
To reach a service from the internet the classic way, a port on the router has to forward to your Mac. Rather than make you log into the router by hand, FrontierStack can ask the router for a mapping using the standard protocols it advertises:
- UPnP IGD (via
miniupnpc) — the common consumer-router method. - NAT-PMP / PCP (via
libnatpmp) — Apple's and the modern equivalent. - OPNsense — a perimeter rule and port-forward through its API directly.
These tools are installed on demand the first time you use them. A mapping made for a temporary session (see Debug Share) is torn down automatically when the session ends.
9.5Dynamic DNS: following a changing IP
Home and small-office connections rarely have a static IP, so a hostname you point at today's address goes stale tomorrow. The Dynamic DNS pane keeps a hostname tracking your current public IP. Add an entry with a Name, a Hostname (for example myhost.duckdns.org) and the account data for your provider; press Update Now to publish immediately, or turn on Update automatically. You choose whether the updater runs only while FrontierStack is running or permanently as a system service, so the record stays current even when the app is closed. Cloudflare users get a tighter path: a Cloudflare DDNS A record that follows your public IP, driven by the same Cloudflare integration as Chapter 7; a generic interval-based updater covers other providers via an update URL.
9.6Tunnels and mesh: reaching in without opening up
The better way to reach a service from outside is to skip inbound ports entirely. A tunnel makes an outbound connection that an outside endpoint rides back in on, traversing NAT with nothing forwarded:
- Cloudflare Tunnel — a Quick Tunnel gives you a public
*.trycloudflare.comURL with no account, or a named tunnel for a permanent hostname. - Tailscale — Serve keeps a service private inside your tailnet; Funnel publishes it to the internet through your Tailscale node.
For ongoing connectivity between machines, a mesh or VPN network gives every node a stable private address wherever it roams. FrontierStack manages the common ones — by API on a router that supports it (OPNsense), or over SSH on a server:
| Network | What it is |
|---|---|
| WireGuard | Modern, fast kernel VPN tunnels — the base layer most of the rest build on |
| Tailscale | WireGuard mesh with exit nodes and subnet routers, set up over SSH or the OPNsense API |
| Headscale | Self-hosted, open-source Tailscale control server |
| NetBird | Open-source zero-trust networking, self-hostable |
| Nebula | Lightweight overlay mesh (Slack / Defined Networking) |
| ZeroTier | Zero-trust SD-WAN / virtual networks — agent plus API |
9.11.1Tailnet: the whole-network view of Tailscale
The per-server Tailscale controls live inside each server's own pane and work over SSH: they answer “is the daemon up on this box”. The Tailnet pane answers the questions that span the whole network, which only Tailscale's own API can: paste an API access token (device read is enough — the pane never writes) and it lists every device with its addresses, OS, client version, owner, tags and last-seen time.
What earns the pane its place is the Needs attention list. It surfaces node keys that are about to expire — a scheduled outage, because when a key lapses the device silently drops off the tailnet until somebody re-authenticates it — devices waiting for approval, devices advertising routes nobody approved (the usual reason a subnet is unreachable even though the node is plainly up), and devices that stopped checking in weeks ago. Key expiry and pending approvals also raise Alerts.
9.11.2Running your own ZeroTier controller
ZeroTier's client is only the member side; networks are normally administered at my.zerotier.com. But every zerotier-one install can also be the controller for its own networks — fully self-hosted, no third party holding your membership list — and that path ships with no local administration UI at all. The ZeroTier Controller pane is that missing interface.
It shows the controller's identity and the networks it owns, and works the member-authorisation queue with one-click authorise/deauthorise. Members authorised but unseen for a fortnight are flagged, because an unused grant is a standing hole in the network. You can edit a network's name, privacy, routes and IP assignment pool, and write flow rules in ZeroTier's own rules language — compiled locally as you type, with templates for the common cases and a warning before you save a rule set that would lock everybody out.
Everything runs over SSH against the controller's own loopback API. The controller listens on 127.0.0.1:9993 and authenticates from a root-readable token, so FrontierStack never needs — and actively discourages — a publicly reachable controller API; the built-in audit flags it if one has been exposed anyway, along with loose file permissions and a missing backup. There is also a Prometheus export, a warm-standby backup/restore, and an assistant for migrating networks out of ZeroTier Central.
identity.secret irreplaceable: lose it and every network ID it owns is orphaned. Back it up encrypted, off the box.9.7UniFi: Cloud Gateways and Dream Machines
Ubiquiti's consoles get their own pane, because a UniFi gateway is doing more than a generic router probe can see. The UniFi pane speaks both of Ubiquiti's APIs, and they answer different questions. A Site Manager key — one key, created at unifi.ui.com — lists every console on your account with its model, firmware and online state. That is the only way to learn a remote site has lost power or its internet connection, because a console that is off the network cannot tell you anything locally. A local console key, created on the console itself under Settings ▸ Admins & Users, unlocks what the gateway is doing right now.
Locally the pane shows WAN links with their ISP, latency and throughput, and marks which link is actually carrying traffic. That last detail matters: when a primary line drops, UniFi fails over silently to the backup, which is usually slower and often metered, and the normal way people discover this is the following month's bill. It also lists adopted devices and their firmware, firewall rules in the order the gateway evaluates them, the client list, and every port forward. Each enabled forward is a deliberate hole through the firewall, so the pane flags the ones that accept connections from any source address — correct for a public web server, worth a second look for anything else.
Alerts cover a console dropping offline, a WAN link going down, running on the backup link, a device leaving the network, and internet-exposed port forwards. The pane is deliberately read-only: rule and network changes stay in the UniFi console, where their validation lives. PoE switch ports are handled in the next section, and plain console reachability still appears in Router & Network alongside the other vendors.
9.8Power over Ethernet: the power button for devices that have none
Access points, cameras, door controllers and desk phones have no power switch. Their only supply is the switch port they are plugged into, which means the recovery move for a wedged one — power-cycle it — normally involves a vendor web UI, or a walk to the cabinet.
The Power over Ethernet pane makes the port the button. Add a managed switch by IP and you get, per port: its PoE state (delivering power, searching, fault), powered-device class, priority and wattage where the switch reports it — plus power off/on and a proper power cycle. It also shows the switch's power budget: total watts, watts in use, and a warning when you cross the switch's own usage threshold, past which it starts shedding low priority ports — so port priority is editable here too.
This works broadly because PoE is standardised: RFC 3621's POWER-ETHERNET-MIB is implemented by essentially every managed PoE switch — Cisco, Aruba/HPE, Netgear, TP-Link/Omada, Ubiquiti, MikroTik, D-Link, Zyxel. Reading uses the SNMP community from Device Discovery. Switching a port needs a read-write community, added per switch and kept in your Keychain: cutting power to whatever is plugged in deserves a deliberate opt-in, and most switches keep that community separate and often disabled until you set it. With Monitor on, a port in fault state or a switch over its power budget raises an Alert — both otherwise stay invisible until someone notices a camera has gone dark.
9.9Internet Health and speed tests
The Internet Health pane is your view of the link itself. It continuously pings a list of Targets (Cloudflare's 1.1.1.1 and others, which you can edit), showing latency and packet loss and re-testing every 30 seconds; hosts that block ICMP fall back to a TCP-connect latency on :443. Live Traffic graphs real-time throughput across every active interface; Addresses & Networks lists each interface, its subnet (a network you can reach directly) and the gateway. A built-in traceroute shows the ISP and transit providers your traffic crosses. Press Test Now in the Speed Test section — or ask the AI with internet_speed — to measure download, upload, latency and responsiveness, using the Ookla speedtest CLI if installed and Apple's networkQuality otherwise.
9.10Debug Share: expose a localhost server, briefly
When you need to show a colleague or a phone a dev server running on localhost, the Debug Share pane exposes it for a session and then closes itself. Enter the port (or press Scan localhost to find a running server), choose how to Expose via, set an Auto-close time, and press Open debug session. Every share also closes automatically when FrontierStack quits.
| Method | Reach |
|---|---|
| Cloudflare Quick Tunnel | Public *.trycloudflare.com URL, no account — ideal for a quick client or phone preview |
| Tailscale Serve | Private — reachable only inside your tailnet |
| Tailscale Funnel | Public, through your Tailscale node (Funnel must be enabled in the tailnet) |
| LAN forwarder | A 0.0.0.0:<auto> → 127.0.0.1:port bridge so other machines on this LAN can reach a loopback-only server |
The LAN forwarder has two extras. If the host firewall is on, the pane shows Open port in firewall to allow that port in the pf rules just for the session. And an Outside access picker can map a WAN port via UPnP, NAT-PMP or the OPNsense API and pair it with a DDNS host, so a LAN share becomes reachable from the public internet — the mapping is removed when the share closes. The AI Administrator can open, list and close sessions too (debug_share_open / _list / _close), including over MCP when "Allow changes" is on.
9.11Named tunnels: a permanent public hostname
A Quick Tunnel is deliberately throwaway. When you want a service on this Mac to be reachable permanently at a real address — a self-hosted app, an internal dashboard, a webhook receiver — use a named tunnel instead. It gives the service a stable hostname on one of your own Cloudflare zones (say app.example.com), survives reboots, and — like every tunnel — opens no inbound port: the Mac dials out to Cloudflare's edge, so there is nothing to forward and nothing for a port scan to find.
Create one in the Cloudflare pane's Named Tunnels section: New Tunnel…, then a hostname under one of your zones and the local port it fronts. FrontierStack drives the whole setup through the Cloudflare API using the token you already hold — it creates the tunnel, writes its ingress rule (hostname → http://localhost:PORT), adds a proxied CNAME pointing the hostname at <id>.cfargotunnel.com, and then installs the persistent daemon with cloudflared service install. That last step needs a one-time admin prompt (it writes a LaunchDaemon under /Library); cloudflared itself is fetched from Homebrew on first use. Untick Run on this Mac now if you only want the tunnel and DNS created, to run cloudflared on some other host. Delete unwinds all of it — daemon, DNS record and the account-side tunnel. The AI Administrator has the same three verbs (tunnel_create / tunnel_list / tunnel_delete), with creating one gated behind a red confirmation because it publishes a service to the internet.
cloudflared service install runs a single system daemon per Mac, so one named tunnel runs locally at a time. You can still create and route additional named tunnels through the app and run their cloudflared connectors on other machines — the account, the hostname and the DNS are all set up either way.Chapter 10
Security & Hardening
The perimeter is only half the job. This chapter is about closing the doors you are not using, watching the ones you are, and proving who is allowed through them.
A server is most exposed not when something attacks it, but when it quietly drifts: a firewall left open, a password login no one disabled, a certificate that expired last week, a mail server that will relay for anyone. FrontierStack treats hardening as a continuous, observable state rather than a one-time checklist. The Security pane is your console for the host in front of you; the AI Administrator (Chapter 13) carries the same checks across your whole fleet over SSH. Everything here is read-only until you ask for a change, and every change is one you could make by hand.
10.1The firewall: Application Firewall and pf
macOS ships two firewalls and FrontierStack reads both. The Application Firewall (ALF) is the per-app layer you set in System Settings; the Security pane reports its state — enabled, stealth mode, block-all-incoming, and how many app rules exist — so you can confirm at a glance that it is on. The pf packet filter is the lower, port-level layer, and this is the one FrontierStack manages directly.
App-managed pf rules live in their own file, ~/Library/Application Support/FrontierStack/pf-frontierstack.conf, loaded into a dedicated frontierstack anchor that is wired idempotently into the system /etc/pf.conf. Keeping rules in their own anchor means FrontierStack never edits Apple's base ruleset and your rules survive a reload without trampling anything. Adding or removing a rule reloads pf through an authenticated admin prompt.
From the AI side, the firewall_rule tool adds or removes a single allow/deny rule for a port, optionally scoped to a source address. It detects the target's operating system first: This Mac and remote macOS hosts get pf (the frontierstack anchor); Linux servers get ufw. It never sends a ufw command to a Mac or a pf rule to Linux.
ufw on a server you only reach over the network, confirm the rule allows your management path, and keep a second way in (console, KVM-over-IP, Headless Setup's Screen Sharing).10.2Intrusion prevention and the open-ports watch
An open port that has to stay open still needs a guard. The Security pane integrates two intrusion-prevention engines. fail2ban bans IP addresses that match abusive log patterns — SSH and Apache brute force are the classic cases; the pane shows whether it is installed and running, its jail count and how many addresses are currently banned, with a one-click Reload and a "write a starter jail.local" action that drops in a sane SSH jail without overwriting your overrides. CrowdSec adds a shared reputation network on top, showing its active decision count and a Metrics button. Both run as root services installed via Homebrew.
The Open Ports section lists every listener on the host. A companion watch — remote-control and screen-sharing exposure — specifically flags VNC/Screen Sharing (:5900), Apple Remote Desktop, AnyDesk, TeamViewer, Chrome Remote Desktop, Splashtop, RustDesk and Tailscale exit-node advertising, and turns red when someone is connected right now. The Recent Intrusions and Active Bans sections aggregate detections from fail2ban.log, CrowdSec, Suricata's eve.json and Wazuh's alerts.json, newest first; sources you do not run are simply skipped. A new ban, a new listener or an active inbound session can each raise an alert — configure delivery in Chapter 11.
10.3SSH hardening
SSH is the single most valuable door on most servers, so the Security pane includes an SSH Hardening Audit. It reads the effective configuration with sshd -T — not just the file on disk, but what the daemon actually applies after its drop-ins — and flags the settings that matter: PermitRootLogin, PasswordAuthentication, and the rest. When SSH is reachable from the network the pane says so plainly, because that is exactly where the findings matter.
The baseline for an internet-facing host is key-based authentication with PasswordAuthentication no. Apply fixes by editing /etc/ssh/sshd_config.d/ rather than the main file, so package updates leave your hardening intact. FrontierStack's own fleet channel already follows these rules: it uses Ed25519 keys, BatchMode=yes, IdentitiesOnly=yes and host-key trust-on-first-use recorded in known_hosts (Chapter 8). If a host's key access breaks, the repair_ssh_access tool reinstalls the managed key using a one-time login password held in your local vault — the password is read on your Mac and never sent to the AI.
10.4Server Security: the posture check for a remote host
Everything above describes the Security pane for this Mac. The Server Security pane is its counterpart for a linked server: the same posture check, read over SSH, for any host in your fleet. Open a server's detail and click Check… beside Security, or open the pane directly and pick a server from the host menu. A single scan reports the SSH hardening that matters (PermitRootLogin, PasswordAuthentication, the listening port), whether a firewall is present and enabled (ufw, firewalld, nftables or raw iptables), the intrusion-prevention engines running (fail2ban, CrowdSec), the count of pending security updates (apt, dnf, yum), every service listening on all interfaces, and host-integrity smells — world-writable directories missing the sticky bit, unexpected SUID binaries.
Each finding is scored High · Warning · Info · OK and rolled up into a one-line summary badge, so you can sweep a fleet and see at a glance which host needs attention. The pane never changes anything: a Fix it link takes you to the pane that actually makes the change — the Server Firewall pane to enable a firewall or edit rules, the Remote Tools SSH-hardening review, or the security tools that install fail2ban/CrowdSec. It reads deepest as root or with password-less sudo; without either it runs what it can and tells you so. Cross-links run both ways: the local Security pane links to macOS Firewall, Server Security links to Server Firewall, and a pinned server's panes link to both.
10.5The Malware Audit pane
The Malware Audit pane is a defender's dashboard for a single Mac, built in sections from the cheap, always-on checks down to the heavy forensics.
| Section | What it checks |
|---|---|
| Protections | Apple's own layers — Gatekeeper (blocks unsigned apps), SIP (System Integrity Protection), FileVault, and XProtect / XProtect Remediator, which scan and remove known malware automatically. Re-check refreshes them. |
| Persistence & Autoruns | Third-party LaunchAgents and LaunchDaemons — the classic macOS persistence spot. Unsigned items show in orange so you can confirm you installed each one; Apple-signed items are normal. |
| ClamAV On-Demand Scan | Signature-based antivirus. Point it at a path, Scan, and read the list of infected files. Run Update Signatures (freshclam) before the first scan. Read-only: it reports, it never deletes or quarantines. |
| YARA Rule Scan | Rule-based classification against IOCs and malware families, using YARA-X (yr) or classic YARA. Pair it with rules from your threat-intel feeds. |
| File Reputation | Computes a file's SHA-256 and opens its VirusTotal report (70+ engines, no API key). The file itself is never uploaded — only its hash. |
The same on-demand ClamAV scan is mirrored in the Security pane, and the AI's malware_scan tool runs ClamAV and/or YARA against any path on request — equally read-only.

10.6Deeper forensics tooling
When a quick scan is not enough, the heavier analysis lives as installable services in the Security Tools catalog category — reveal them with the catalog filter (Chapter 6). Volatility 3 is a memory-forensics framework for examining a RAM capture; capa identifies the capabilities hidden inside an executable; the CAPE and Cuckoo sandboxes detonate a suspicious sample in isolation and extract its configuration and behaviour. Alongside them sit Wazuh (host SIEM/XDR with file-integrity monitoring) and threat-intel feeds such as URLhaus, OpenPhish and OpenCTI to feed your YARA and sandbox rules. These are full tools, not built-in panes; FrontierStack installs and manages them so they are there when an incident demands them.
10.7The EDR Fleet board
If your endpoints already run a commercial EDR agent, the EDR Fleet pane gives you one read-only roll-up across every console. Choose Add Console…, pick a provider and paste its API credentials — stored in the Keychain, never in the AI's view. Endpoint and open-detection counts are pulled from each vendor's REST API for SentinelOne, Huntress, CrowdStrike, Sophos Central, Bitdefender GravityZone and Microsoft Defender for Endpoint; Jamf Protect and LimaCharlie connect for reachability, and any other console can be added as Generic (reachability only). A Fleet totals row sums the lot. The board refreshes every few minutes; a console going unreachable raises an alert under the Security group, with its open-detection count riding along in the alert detail. Open Console jumps you to the vendor's own dashboard for the deep work.
10.8Read-only security audits
The fastest way to learn where a host actually stands is the AI's security_audit tool, which runs a comprehensive, entirely read-only sweep on This Mac or any linked server over SSH. It self-detects the OS and checks pending security updates, disk encryption (FileVault or LUKS), the firewall (Application Firewall + pf on macOS, ufw / iptables on Linux), SSH hardening, listening ports, UID-0 and privileged accounts, passwordless-sudo (NOPASSWD) entries, intrusion prevention and recent failed logins. It uses passwordless sudo only where it is available and degrades gracefully where it is not. Nothing changes; you get a prioritised list of findings and specific fixes, which you can then apply yourself or hand back to the AI behind the usual approval card. Set target to a server's name to audit it remotely; omit it for the local Mac.
10.9The Security Audit pane: an exploitable-only auditor in a sandbox
The read-only security_audit sweep above tells you how a host is configured. The Security Audit pane asks a harder question: what here can an attacker actually exploit? It turns a coding agent into an adversarial auditor that maps the target, hunts from many angles — injection, broken access control, authentication and authorization, business logic, cryptography, exposed secrets, SSRF, misconfiguration and chained attacks — then tries to disprove each of its own findings, so what survives is only the issues with a concrete attack path. Every finding carries a scenario and a fix; there is no theoretical noise.
It runs in two modes. Codebase points the agent at a repository or web-project folder and audits the source. Infrastructure audits your own estate from the signals FrontierStack already gathers — Cloudflare zones and their TLS/WAF settings, domain and certificate health, each pinned server's OS, exposed services, remote-access and MDM/Activation Lock/FileVault posture, and the local firewall — assembled into a redacted inventory the agent then attacks.
The whole run happens inside a Sandcastle Docker sandbox, so an adversarial agent pointed at untrusted code never touches your host directly. The app provisions the sandbox image and runner the first time you run an audit (it needs Docker or Podman running); after that, runs start immediately. Findings render with severity badges and can be saved to Obsidian or raised as Alerts for anything critical or high. As everywhere else, only a redacted prompt leaves your Mac — secrets are stripped first — and the sandboxed agent authenticates with your Claude subscription using a token from claude setup-token (or an Anthropic API key).
.env, private keys, service-account.json — is refused rather than mounted into the sandbox. Audit a clean checkout.10.10Strix: AI penetration testing
The audits so far are read-only: they inspect how a host is configured and where its code might be exploitable. Strix goes further — it runs an active penetration test. From the Strix AI Security Testing section of the Security pane you point it at a repository folder, a Git URL, a domain, a URL or an IP address (or pick one of your linked hosts), choose a depth of Quick, Standard or Deep, and it maps the attack surface, attempts real exploit paths, and writes a penetration-test report.
FrontierStack does this by driving the open-source Strix command-line agent locally on your Mac and reading the run artifacts it leaves on disk — the findings, the run metadata and the report — rather than scraping any hosted service. If the CLI is not installed the section says so and offers an Install Strix… link; Update Strix upgrades it through uv or pipx, never by piping a script into a shell. An AI provider key is optional; when you supply one it is stored in the macOS Keychain, handed only to the local Strix process, and never displayed or sent to any cloud model — the pane shows only whether a key is configured.
The tiles summarise the last run: Critical, High and Medium counts, duration, anything new in the last 24 hours, and any failed scans. A run in progress shows live phase text and a Stop button; when new critical or high findings appear you get a local notification unless Silence alerts is on. Open Findings and Export Report surface the detail, and Re-run Failed Scan and Restart Scan Engine recover from a bad run. Serious findings are treated as sensitive and are never sent to cloud AI. The AI Administrator can drive Strix as well, through strix_status, strix_scan and strix_control, all covered in Chapter 13.
10.11Certificate Sources and TLS
An expired certificate is a self-inflicted outage. The Certificate Sources dashboard gives you one row per issuance stack on the host — Let's Encrypt (via acme.sh), Certbot, Step CA, Traefik and Cloudflare SSL — with expiry read directly from the certificates themselves using openssl. Cloudflare uses the token and zone you configured for its analytics; sources that are not present on this Mac show dimmed. For Traefik you can point the dashboard at its acme.json; for Step CA, at its URL.
For issuing certificates, FrontierStack offers two paths. mkcert creates a locally-trusted certificate — ideal for development on .localhost or LAN names, where a public CA is irrelevant; the Certificates pane's Get action uses it when installed. For anything the public must reach, use Let's Encrypt: the AI's issue_certificate tool runs acme.sh or certbot on This Mac or a linked server, and for the DNS-Cloudflare method it reads a CF_TOKEN vault secret that is injected at run time, never sent to the model.
10.12Mail security
A mail server is two distinct risks: it can be spoofed (someone forges mail as your domain) and it can be abused (it relays mail for a stranger). FrontierStack addresses both, with tools that understand the old Apple Server case where Postfix sits underneath.
- Anti-spoofing DNS —
email_auth_dnsbuilds the SPF, DMARC and (optional) DKIM TXT records: SPF declares who may send for the domain, DMARC tells receivers how to treat failures, DKIM cryptographically signs outgoing mail. Withpublish=cloudflareit creates the records for you; otherwise it prints the exact records to paste into BIND, dnsmasq or your registrar. - DKIM keys —
generate_dkim_keyrunsopendkim-genkeyon the server for a domain and selector and returns the public key as the TXT record to publish; the private key stays on the server for the OpenDKIM milter. - Postfix hardening —
harden_mail_postfixapplies safe defaults over SSH withpostconf: require SMTP AUTH to relay (this closes an open relay), reject unknown and unlisted sender domains, optionally enforce sender/login matching. It reloads Postfix and prints the effective settings. - Open-relay test —
test_open_relayruns a safe SMTP conversation (EHLO / MAIL FROM / RCPT TO to an external domain, then QUIT without sending) and reports whether the external recipient was rejected (good) or accepted (an open relay — bad).
serveradmin, which can overwrite main.cf and silently undo a harden_mail_postfix change. Review the result afterwards and, if it reverts, re-apply the equivalent settings through Server.app.10.13Who may change things from outside
Everything above hardens the machines FrontierStack looks after. This section is about hardening FrontierStack itself — because an app holding SSH keys, database passwords and cloud tokens for a whole fleet is a more attractive target than any single server it manages.
FrontierStack can be driven from outside through several doors: the MCP server for AI clients, the inbound HTTP control server for webhooks and the mobile panel, App Intents for Shortcuts and Siri, and — when you enable them — agent integrations. Each already carries its own token. Above all of them sit two settings in Remote Control & Lock, and it is worth being clear about which question each one answers.
The App Lock answers what survives a lock. Set a password, lock the app, and the window is covered while every external surface is either blocked outright or held to read-only.
External changes answers a different question: in an unlocked app, how much must an outside caller do before it can change anything? It applies to every external surface at once — the MCP server, the control panel, Shortcuts and the command line. Three levels. Full auto lets external tools act without asking — defensible only when you trust every connected client and the machine it runs on. Confirm each action, the default, puts an approval panel in front of every change, naming the caller. Password required demands your password before an external tool touches a server at all.
The confirm tier has a release valve that matters during an incident. Approving a change offers Allow for session, which grants five minutes — but only for that one caller and that one kind of action. Approving a service restart from an MCP client does not authorise a shell from that client, and does not authorise a restart requested through the mobile panel. The narrowness is the point: repeated prompting during an outage is exactly what drives people to switch to full auto permanently, and a grant that leaked sideways would be worse than the prompting it replaced.
Three properties hold at every level, and they are what make the setting trustworthy rather than merely configurable. Reading is never gated — a monitoring client keeps working whatever you choose, because a dashboard that goes dark during an incident is a liability. Credentials, shell access and FrontierStack’s own settings can never be changed from outside, at any level; those are refused rather than prompted, on the reasoning that a request arriving from a remote tool is simply the wrong origin for reading a password or running an arbitrary command. And session grants are never written to disk: quitting the app or locking it clears them, so a five-minute convenience cannot quietly become a standing permission you forgot you gave.
10.14Agent login with auth.md
Passwords are the worst credential to automate, so FrontierStack never asks you to paste a long-lived one for a third-party service. Instead it discovers auth.md — an open specification (originated by WorkOS) that a service can publish at https://<host>/auth.md to tell AI agents how to sign in on your behalf. A service's Connect ▸ Login Automation (auth.md) disclosure, and the AI's check_authmd tool, fetch that public file and summarise the advertised flows (agent-verified or user-claimed), scopes and OAuth endpoints — or report that none is published. The grant itself happens at the service and issues a short-lived, revocable, scoped token; FrontierStack stores no password. Cloudflare and Firecrawl publish an auth.md today, with more services appearing.
10.15The signed-request trust model (FS1)
FrontierStack's own control surfaces — the local control server, the MCP server, and the remote fsagent — are protected by a bearer token over TLS. A token alone, though, is a shared secret: replayable, and no proof of who is calling. The FS1 signed-request scheme adds a second factor on top. Every request is signed by an approved per-device Ed25519 key; the server keeps an allow-list of public keys and rejects anything signed by a key it has not explicitly approved. A leaked token then controls nothing on its own — this is the HTTP equivalent of the SSH keys your fleet already trusts.
Each request carries the device's key id, a timestamp, a random nonce and a signature over a canonical string. The server verifies the key is approved, the timestamp is within a 60-second window, the nonce is unseen (claimed only after the signature checks out, so a bad signature cannot burn nonces), and the signature is valid. The same scheme is implemented identically in the macOS app, the Go agent and the iOS client, pinned by a cross-language test.
You manage devices in the Paired Devices pane, in the Overview group of the sidebar (it used to live inside this Security pane). Each paired phone or tablet shows its label, key fingerprint, last-seen time, a scope picker and a Revoke button. Pairing is meant for one or two people with a couple of devices each — enrolment is capped at four — and each device carries a scope:
| Scope | Read status & logs | Restart services | Fleet ops | Tools / CLI / scripts |
|---|---|---|---|---|
readOnly | Yes | — | — | — |
restart | Yes | Yes | — | — |
operate | Yes | Yes | Yes | — |
full | Yes | Yes | Yes | Yes |
The same section holds the per-surface Require request signing switches for the control and MCP servers. Roll-out is deliberately gentle: the servers accept a token or a signature while signing is optional, with a bootstrap exception so you can enrol the first key with the token you already hold — turning on enforcement can never lock everyone out.
Two further per-device controls sit on each row. Allow AI Administrator (on by default, at any scope) governs whether that one phone may talk to the AI at all — you can let a trusted handset chat while blocking another, and the switch only ever restricts: even with it on, the AI still requires the app unlocked, a signed device, and a full-scope "Allow changes" for anything that mutates. Allow remote shell is offered only at full scope and is off by default; it is the explicit grant a phone needs to open a command-line shell and to install its own SSH key on your servers for direct access when this Mac is offline. If a handset is lost, Secure lost phone blocks the device and its older queued actions at once, closes its sessions, strips its direct-SSH keys from reachable servers and deactivates its push token; offline servers stay listed so you can finish the cleanup when they return.
Bluetooth pairing fallback. When a new phone cannot reach this Mac over Wi-Fi or Tailscale — a locked-down guest network, client isolation, a captive portal — enrolment can still complete over Bluetooth. Turn on Allow Bluetooth pairing (off by default) and the Mac advertises a short-lived GATT service only while the Pair dialog is open; the phone scans the same one-time QR code and runs the identical signed-enrolment handshake, just carried over BLE instead of HTTPS. Because the FS1 signature is transport-agnostic, the Bluetooth path inherits the same trust guarantees without a TLS channel.
restart, not full. Once every device is enrolled, turn on Require request signing for both servers (and require_sign on agents). After that a leaked or screenshotted token controls nothing, because the caller must also hold an approved private key. Revoke a device the moment a phone is lost or a person leaves.10.16Hardening the headless Mac
A display-less server has its own security trade-offs, and the Headless Setup tool (covered fully in Chapter 8 and Chapter 17) surfaces the one that matters most here: its System Status section warns when FileVault is on, because an encrypted Mac with no keyboard or screen cannot be unlocked at boot — it will sit at the FileVault prompt instead of coming back online. For a headless box you generally choose between full-disk encryption and unattended restart, and FrontierStack makes that choice explicit rather than letting you discover it after the next power cut. Enabling Screen Sharing or Remote Login on such a host is exactly the kind of exposure the Open Ports watch will then keep an eye on.
Chapter 11
Monitoring & Alerts
A continuous health sweep watches every service, device and subsystem you care about, and turns the first sign of trouble into a message on the app you already check.
A control panel that only lets you change things is half a tool. The other half is knowing when something has gone wrong — ideally before it becomes an outage. FrontierStack runs a continuous monitor sweep across everything you have told it to watch and turns the first sign of trouble into a message on whatever channel you choose. This chapter covers the Local Health board that summarises it all, the Alerts pane that raises and delivers warnings, the messaging gateways that carry them, and the specialised monitors for cloud services, project tools, power and storage.
11.1The Local Health board
Open Overview ▸ Local Health for the single screen that answers "is anything broken right now?" Every monitored service, device and subsystem appears as a row marked UP or DOWN, grouped by area — web and database services, the fleet, sites and certificates, disks, UPS and SNMP devices, connected cloud accounts. At the top sits a one-line summary in the form X up / Y down, so you can take in fleet-wide status in a glance without reading every row.
The board is the same data the AI Administrator reads through its get_server_health tool: ask it "what's down?" and it reports exactly what this screen shows, then offers to investigate before suggesting a fix (see Chapter 13). The sweep runs about every sixty seconds; each DOWN item is also attributed to the pane that owns it, which is why a red count capsule can appear on a sidebar row and on the Dock icon — you are told where the trouble is, not just that there is some.
11.2The Alerts pane: what is watched

The Local Health board shows status; the Alerts pane (Overview ▸ Alerts) decides what is worth a message and sends it. Switch on "Monitor critical services and alert me" and the sweep starts raising alerts. What it watches:
- Site & service health — HTTP/loopback checks, TCP ports, and deeper protocol probes (an SMTP/IMAP login, a database
SELECT 1, an LDAP bind) so a service that is listening but actually broken still trips. The MySQL probe additionally reads the connection pool (current use vsmax_connectionsand the "too many connections" refusal counter): it alerts when the pool passes 90% or when clients were refused between sweeps, and every sweep is charted as Connection Health History in the Database Health pane — pool % over time with red lines marking refusal bursts and outages. - Linked servers — every fleet host's SSH endpoint is reachability-checked each sweep (a bare TCP connect, no login attempt), so a server that is completely off raises a plain "Server down" alert — and a "Server recovered" when it returns. This is separate from the SSH cool-down notice, which fires only when a host is up but rate-limiting connections.
- Certificates & domains — TLS expiry across the whole fleet, plus registrar / DNS / SSL checks that warn you days ahead rather than on the morning a domain lapses (Chapter 7).
- Disks filling up — a volume crossing its free-space threshold, surfaced from the Disk Health monitor below.
- Security exposure — a new open port or unexpected listener, a VPN tunnel drop, or a critical SSH-hardening failure while SSH is reachable from the network.
- Failed payments & billing — connected paid services (OpenAI, Anthropic, Cloudflare, Google Cloud) returning insufficient-quota, low-balance or auth errors — the symptom of a lapsed card.
- Connected cloud services — live monitors for Stripe, Shopify, Freshdesk, SendGrid and more, firing when a metric you chose crosses its threshold.
Most checks are threshold-based, so you decide what "trouble" means: alert when a certificate is within N days of expiry, when open tickets pass a number, when a disk crosses a percentage. Conservative thresholds turn a post-mortem into a heads-up. The pane also offers "Alert on intrusions" — new fail2ban/CrowdSec bans, high-severity Suricata signatures and notable Wazuh alerts (level ≥ 7) are messaged as they happen, and existing history is never re-alerted.
11.3Messaging gateways
An alert is only useful if it reaches you. The Alerts pane lets you enable several gateways at once and list multiple recipients per channel, so the right people are reached on the app they already have open. Paste a bot token or webhook URL, send a test, and you are live. The AI Administrator can enumerate the enabled gateways with get_messaging_channels and send through them with send_notification (Chapter 13).
| Gateway | Best for |
|---|---|
| Telegram | A bot token; multiple chats per gateway. Fast, free, reliable phone push. |
| LINE (Messaging API) | Reaching people who live in LINE, especially in Japan and Korea. |
| Slack / Discord | Incoming webhooks into a team channel; route ops alerts where the team already talks. |
| ntfy | Simple phone push via the public server or your own self-hosted ntfy. |
| Apprise | One extra hop that fans out to 80+ destinations (Pushover, Matrix, Gotify, Microsoft Teams, PagerDuty and many more). |
| Email (SMTP) | Anything that must land in an inbox; also carries the scheduled AI evaluation reports. |
| SMS / WhatsApp | Reaching a phone directly, via Twilio or the WhatsApp Business Cloud API. |
| Slack/Discord webhooks | Persistent team-visible history of every alert and recovery. |
| KakaoTalk | A "send it to me" alert for KakaoTalk users. |
| iMessage (Apple Messages) | A native "send it to me" alert straight from your Mac — no external service. |
| PagerDuty / Opsgenie (paging) | Real on-call paging with escalation — see below. |
11.11.1Paging the on-call (PagerDuty, Opsgenie, urgent ntfy)
The message gateways above are fire-and-forget text. The paging channels are different in kind: they are stateful. When a monitored item goes down, FrontierStack triggers an incident keyed to that item — PagerDuty (an Events API v2 routing key) or Opsgenie (a GenieKey) then runs your escalation policy, pushing, texting or phoning whoever is on call until someone acknowledges. When the item recovers, FrontierStack resolves the same incident automatically. Because the incident is keyed per item, a flapping service updates one incident rather than paging the rotation over and over, and nobody is woken for an outage that has already ended. Without an on-call service, the ntfy gateway's Page on down toggle sends "down" alerts at ntfy's maximum priority — a louder, repeating tone that overrides many phones' quiet settings — while recoveries and reports stay at normal priority. Each paging channel has a Send Test Page button that triggers a real incident and auto-resolves it about ten seconds later, proving the whole escalation path end to end.
Tokens and webhooks live in the macOS Keychain and never leave your Mac. You can also send a scheduled AI Evaluation Report: the AI Administrator composes a summary from your live monitored health (running read-only diagnostics) and emails it daily or weekly, or pushes it to all enabled channels — with an optional fuller report whenever two or more critical items are down at once.
11.4Delivery errors and how to fix them
A monitor is worthless if its alerts silently fail to send. FrontierStack verifies every send: when a gateway fails, it is recorded in the Delivery Errors section of the Alerts pane with plain-English fix-it guidance, the raw error underneath, and a Fix button that scrolls straight to the misconfigured channel's settings. A red badge appears on the sidebar's Alerts row and on the Dock icon so you actually notice, and it stays until you clear it. The AI Administrator reads the same list through get_alert_errors, so you can simply ask "why aren't my alerts arriving?"
The common causes are mundane and quick to fix:
| Symptom | Likely cause & fix |
|---|---|
| Email rejected at send | A blank SMTP From address, or a missing recipient — fill both in the Email channel. |
| Email connection refused / times out | Wrong port or transport; match your provider (587 STARTTLS or 465 SSL) and host. |
| Telegram / Slack / Discord 401 or 404 | A bad or revoked token / webhook URL — paste a fresh one and send a test. |
| Reports never arrive | Report delivery is set to "Email only" but no Email channel is configured — switch to "All enabled channels" or set up Email. |
11.5The on-host Service Watchdog & database health
The monitors above run on your Mac. For a critical server you also want a watchdog that lives on the box itself, so it keeps working when your Mac is asleep, offline, or simply not the machine that failed. FrontierStack's Service Watchdog is deployed with the host monitor (Chapter 8): it health-checks a service on a short interval, restarts it when it fails, and — as a last resort, and only when you have allowed it — reboots the machine, with a minimum-interval guard so a still-broken service can't cause a boot loop. Each watch has a check type: a process check, an HTTP or TCP probe, or a purpose-built MySQL or PostgreSQL check.
fsck, xfs_repair, chkdsk and similar filesystem tools can temporarily stall every service on the system disk. Both the local Service Guardian and the on-host Service Watchdog recognise those repair processes and pause automatic recovery — including service restarts and remote reboot escalation — without changing your saved policy. Failure counters are cleared, and recovery waits another 60 seconds after repair ends before starting fresh. The desktop and phone show the hold. A manually confirmed service control remains available if you deliberately need it.The database Heartbeats catch failures a process/port check misses. A MySQL Heartbeat asks for SELECT 1 without a password. Success or “access denied” proves that MySQL answered; a refused, timed-out or saturated connection is unhealthy. No MySQL password is stored and no tables are read. A blank probe name becomes the non-root fs_watchdog, which need not be a real account. A PostgreSQL Heartbeat uses pg_isready without a database username or password. With error-log early-warning switched on, the watchdog also tails the database's own error log and raises a critical event the first time it sees a corruption signature. Because all of this runs on the server, it can alert you autonomously over ntfy or a webhook even while your Mac is off; turn that on with Alert me directly from this server in the host's Service Watchdog panel.
Aborted_connects — about two a minute, several thousand a day. Nothing is wrong: the server is healthy and the check is doing its job. But the counter fills with the Heartbeat's own traffic, which can hide a real signal such as a brute-force attempt or a misconfigured app. The MySQL Heartbeat panel offers an optional fix: create fs_watchdog@localhost and [email protected] with an empty password and no privileges at all (USAGE only — the account can read nothing and cannot connect from off the server), so the probe logs in cleanly and is counted as an ordinary connection. FrontierStack creates it only when you ask, using the MySQL administrator password you saved in Database Health, and shows the exact CREATE USER statements before running them; you can copy the SQL and run it yourself, or remove the account later from the same panel. Leaving it alone is a fine choice — the count is cosmetic.mysqlcheck integrity scans, verified backups and optional auto-repair, choose Open table checks & auto-repair in the watch or open Database Health, then expand the database's Scan & repair settings. Use a dedicated account such as frontierstack_health@localhost, never root. Grant USAGE for login and SELECT 1; add PROCESS only for fleet-wide connection visibility and SELECT only on schemas you explicitly inspect. Restrict the account to localhost or the monitor's exact private address. FrontierStack runs the client on the server, so there is no reason to expose MySQL to the wider network.To create a check-only account, replace your_database and the example password:
CREATE USER 'frontierstack_health'@'localhost' IDENTIFIED BY 'use-a-unique-random-password';
GRANT SELECT ON `your_database`.* TO 'frontierstack_health'@'localhost';
Save that login in Database Health. Leave auto-repair off until both a manual check and verified backup succeed. If a complete backup or repair needs another privilege, add only the schema-scoped privilege MySQL names; never use *.*. For a monitor connecting from another machine, replace localhost with that one exact private address.
The pinned server's Services row shows a green DB checker: On dot while scheduled table scans or server self-heal are active, Paused when a target exists but neither is running, and an orange Needs login instead of green when a selected MySQL scan has no database password. Database Health and the Heartbeat are complementary: the former checks tables on a slower schedule, while the latter detects outages quickly and can restart MySQL on the server.
When a database isn't down but is slow or stuck, the Why slow/stuck? button on each target in the Database Health pane answers it on demand: it reads the server's live activity (SHOW FULL PROCESSLIST on MySQL, pg_stat_activity on PostgreSQL), groups the running queries by shape so a burst of the same query collapses to one line with a count, and states the verdict — a single query hammered in a burst, a long-runner blocking others, connections waiting on a lock, oversized result sets streaming to clients (the bandwidth cost), or connections near the ceiling. A useful subtlety: if the load is bursty it may read idle between spikes, and the tool says so and tells you to re-run during one, rather than falsely reporting all-clear. Remote targets are probed over SSH, so no database port need be exposed.
11.11.2Pausing checks for maintenance
A watchdog that restarts things is exactly what you don't want while you are deliberately taking a service down. Rather than switching protection off — and relying on yourself to remember to switch it back on — use Pause Checks… in the Guardian's header, or the pause button on an individual service row. Choose a window from 15 minutes to a day.
While paused, the Guardian stops health-checking and stops restarting whatever you paused, so your work doesn't fight it. Nothing is disabled and no setting is lost. Keep Alive, Auto Recover, thresholds and intervals are all left exactly as they are, and checking resumes on its own when the window ends — or immediately, if you press Resume Now. A pause never survives its own window, even if you quit and reopen the app.
11.6Case study: the High Sierra Server.app serviceproxy wedge
Old Macs still running macOS Server (Server.app) on High Sierra have a well-known failure: the web front proxy — the launchd job com.apple.serviceproxy, which binds ports 80/443 in front of the real backend — occasionally wedges. It keeps accepting TCP connections but never answers them, so every website behind it goes dark while every process check still looks healthy. There is no fix from Apple; the stack is end-of-life. The Service Watchdog was built with exactly this case in mind.
How to set the watch up. On the server's pane, add a watchdog entry for the service name serviceproxy and — this is the important part — give it an HTTP check with the target http://127.0.0.1/, not a process check. The HTTP probe is the only check that sees the real failure (connections accepted, no answer); on failure the watchdog heals it with launchctl kickstart, which is precisely the manual fix an admin would type. Any HTTP status below 500 counts as alive (a 403/404 from the proxy still proves it is answering); each probe times out after 6 seconds, so a wedged proxy fails the check by timing out. The backend behind the proxy can be watched the same way as server-httpd.
Timings that work well. Check every 30 seconds; restart after 3 consecutive failed checks; try up to 3 restarts; leave the post-restart grace at its default (~20 s, generous enough for Apache on old hardware). That confirms a wedge for ~90 seconds before acting — long enough that one slow response or a momentary load spike never triggers a kickstart, short enough that sites are back about two minutes after a real wedge, hands-off. If the sites are critical, tighten to a 15–20 s interval with 2 failures (≈40 s to confirm) — going tighter than that mostly buys false restarts, because a genuinely slow old box can take a few seconds to answer under load. Leave “Reboot the server if recovery still fails” off unless the machine is truly unattended: a kickstart resolves the wedge in practice, and reboot-as-last-resort on a box like this mostly adds downtime (the anti-boot-loop guard enforces at least 30 minutes between watchdog reboots regardless).
Why not a process check? There is no process named serviceproxy — the job runs as httpd with a special config — and monitors older than v1.6.1 read a healthy proxy as permanently “down” because of that, restarting it over and over and, if reboot escalation was allowed, rebooting a healthy machine on a schedule. From v1.6.1 the monitor asks launchd for the job's real state instead, so a process check now tells the truth; the HTTP check remains the one that catches the actual wedge. If an older server of yours has been rebooting with no visible cause, check its monitor version first — and note that “Why did it reboot?” attributes watchdog-initiated reboots explicitly (with the reason, on v1.6+ monitors; older monitors leave a stamp that is still reported).
serviceproxy altogether: the Apple Server Migration wizard (Chapter 8) inventories a Server.app machine and moves its websites to a plain Apache on a supported system, taking the wedge-prone proxy out of the serving path. Until then, the HTTP watch keeps the old box honest.One guarantee closes the loop on delivery: an alert is never silent. On top of the messaging gateways, every state-change alert also raises a native macOS notification and push, independent of the gateways — so even with email off and every channel disabled, a service going down still reaches you on the Mac. Database recovery — running mysqlcheck/pg_amcheck and the AI-guided rebuild — is covered in Chapter 5.
11.7Incidents, on-call and status pages
For teams that already run formal incident response, FrontierStack connects to the tools you use rather than replacing them. Each has a live pane reached from its catalog entry: paste a read-only API key and it shows current state.
- Incident management & on-call — PagerDuty (open and high-urgency incidents, who is on-call, services), Opsgenie (open/unacknowledged alerts, with a US/EU region toggle), incident.io and Rootly (active incidents).
- Status pages — Statuspage (unresolved incidents and components that are down) and Better Stack (monitors up / down / paused).
Set up the key in each pane (for example PagerDuty ▸ Integrations ▸ API Access Keys) and the pane confirms the connection. These feed the same monitoring picture, so an open PagerDuty incident or a down status-page component shows alongside your own health.
11.8SaaS live monitors & project-management panes
FrontierStack does not stop at infrastructure. A config-driven SaaS live monitor watches connected cloud accounts and refreshes every few minutes. Each service has a credentials form, live metric tiles, an "Alert me" toggle and a threshold; alarmable services raise a DOWN alert when the metric crosses the line, and the rest are watched for reachability. Live monitors include Stripe (disputes needing response, balance), Shopify and WooCommerce (open orders), Freshdesk and Zammad (open/pending/overdue tickets), SendGrid, Mailgun and Postmark (bounces and blocks), GitHub Copilot (inactive seats), and identity providers Okta and Microsoft Entra ID. Pin a service to make it always-on-Local-Health regardless of its alert setting.
The same pattern gives project-management tools live token-login panes: Jira (open / unassigned / blocked / in-sprint counts), Linear, monday.com, OpenProject, Plane and Taiga. These are dashboards rather than alert sources, but they put your team's workload in the same window as the servers that run it. Email delivery has its own unified Email Delivery pane that combines transactional-provider metrics with SPF/DKIM/DMARC checks (Chapter 7).
11.9Queue Operations
Queue Operations is a read-only dashboard for RabbitMQ, Kafka, NATS/JetStream, Redpanda, AWS SQS, Azure Service Bus, Google Pub/Sub, Celery/Flower, Redis Streams, Apache Pulsar and Apache RocketMQ. Add one monitor for each broker, namespace or cloud account. FrontierStack shows queue or consumer-group names, ready and in-flight counts, consumer counts, lag, dead-letter counts and oldest-message age when the provider exposes them. It never reads or stores message bodies.
Client and administration ports are kept separate. For example, RabbitMQ clients use AMQP on 5672 while its management API normally uses 15672; NATS clients use 4222 while monitoring normally uses 8222; Pulsar clients use 6650 while its HTTP admin API uses 8080. Keep monitoring endpoints private. Use TLS and a monitoring-only account whenever the dashboard is not reached through the on-host FrontierStack monitor.
For a linked server, select its installed monitor and FrontierStack asks the credential-free helper for bounded summaries over the signed connection. Cloud providers use their normal local CLI profiles or a scoped credential saved in Keychain. Critical thresholds join the Alerts sweep, the same sanitised summaries are available in the iPhone/iPad app, and the AI Administrator can answer queue-health questions through the read-only get_server_health tool. The dashboard has no purge, delete, publish, acknowledge or replay action.
11.10UPS monitoring and SNMP devices
Power is the failure mode people forget until the lights go out. FrontierStack discovers UPS units three ways — macOS power sources (pmset -g ps), the NUT daemon (upsc), and apcupsd (apcaccess) — and shows charge, runtime, load and input in the UPS section of Power Control. Turn on alerts and you are paged when a unit goes on battery, hits a low-charge threshold you set, or loses comms with its controller. Pin a UPS to keep it on Local Health and on the Places map; one-click buttons install NUT or apcupsd if they are missing. Because a scan waits on those daemons, a Stop button appears while one is running — if a NUT server has wedged, stop the scan instead of waiting; readings already found are kept and automatic refresh pauses until you press Refresh.
For anything else that speaks SNMP — managed switches, printers, network UPSes, NAS units — the SNMP / OIDs section of a device's detail pane queries it directly. Pick a built-in template (System, Host Resources, Interfaces, Printer RFC 3805, UPS RFC 1628, Synology, QNAP, APC PowerNet) and press Query for a label-and-value readout, or fetch a single custom OID by hand. You can also watch an OID: set a comparison and threshold (greater-than, equals, contains, or simply "alert on any change") and FrontierStack polls it and raises an alert when the condition is met. It uses net-snmp, installable in one click.
11.11Disk, RAID and SMART health
Drives fail with warning if you are listening for it. The Disk Health pane (a built-in monitoring tool) combines several layers. Volume space and Time Machine status are always shown. With smartmontools installed (a one-click Install button), each physical drive is enriched with deep SMART attributes — health, temperature, power-on hours, reallocated and pending sectors, and predicted-failure flags — visible per drive with a Check button and a Details sheet for the raw report. A drive trips an alert on a SMART failure or on concerning attributes (reallocated/pending sectors or a predict-fail), not only on outright death.
Software AppleRAID sets (mirror, stripe, concat) appear in their own section with level, status and per-member state; an alert fires when a set is degraded or a member drops offline. Under Alerts & Thresholds, switch on disk alerts and they route to your channels exactly like every other monitor.
Taken together, these monitors give you one board to glance at, one pane to tune, and one set of channels to reach you on — and an AI Administrator (Chapter 13) that reads the same health and sends the same notifications on your behalf. The host monitors that feed fleet-wide CPU, memory and GPU metrics into this picture are covered in Chapter 8.
Part IV
Automation & AI
Scripts and schedules, the AI Administrator, MCP, and the AI stack — the four chapters that turn FrontierStack from a control panel into something that works on its own.
Chapter 12
Scripts, Cron & Automation
Save the commands you run all day, schedule them on real system cron, and wire FrontierStack into Apple Shortcuts, Siri and the rest of your Mac — from a one-click script to a hands-free voice command.
A good server administrator does the same handful of things over and over: run a backup, warm a cache, restart a backend the right way, check a vhost is actually serving what you think. FrontierStack lets you capture each of those as a saved script, run it with one click, and — when you trust it — hand it to cron so it runs unattended. From there it reaches outward, into Apple Shortcuts, Siri, the frontierstack:// URL scheme and scheduled actions the app performs on its own.
This chapter covers the mechanical side of automation: scripts, schedules and the macOS automation surfaces. The intelligent side — an AI that writes, saves and schedules these scripts for you — is Chapter 13. Everything here is something the AI Administrator can drive through its own audited tools, so the two chapters describe the same machinery from two ends.
12.1The Scripts & Cron pane
Open Scripts & Cron from the sidebar. It is your saved-script library and your scheduler in one place. The Saved Scripts section at the top lists every script you have kept, each with its name and the first line of its body. For each one you get four buttons: Run (execute it now), Schedule (hand it to cron, below), Edit (open the editor), and a trash icon to delete it. Press Add Script… to write a new one.
A saved script is a genuine executable file on disk — shell, PHP or Python — not a fragment the app interprets. Give it a clear name and a note describing its purpose, so that six months later (or the AI Administrator, scanning your library) can tell at a glance what it does and pick the right one. Because the saved file is exactly what runs, what you test by hand is exactly what runs on a schedule.
Each script can target This Mac by default, a local Docker container, or a linked server over SSH by name. Where a script needs a credential, it references a named secret from the local .env vault as an environment variable ($DB_PASSWORD, "$SSH_SUDO_PASS"); the app injects the real value at run time and never lets it reach a cloud model (Chapter 13).
12.2Scheduling with cron
The Cron Jobs section is a friendly front-end onto your real system crontab — not a separate scheduler the app invents, but the same cron that has run unattended work on Unix for decades. Each row shows a job's name, a plain-English description of its schedule (FrontierStack translates the five-field syntax for you), and the command it runs, with a switch to enable or disable it and buttons to Run it now, Edit it, or delete it.
Press Schedule on a saved script, or Add Job… for an arbitrary command, to open the schedule builder. Pick a cadence — hourly, daily at a time, weekly — and FrontierStack writes the crontab entry, tagging its own jobs with a # AC: comment so it can find and update them by name later. The same applies through the AI Administrator: list_cron reads your jobs, and schedule_cron creates or updates one (updating in place if a job of that name already exists).
For full control, expand Edit raw crontab at the bottom of the pane. This is the standard crontab in a text editor; FrontierStack-managed jobs appear as # AC: comments so you can see which lines it owns. Edit by hand and press Apply.
FS_TRIGGER, FS_LOCATION, FS_DEVICE, FS_DISK…) as environment variables. Cron handles time; triggers handle events.12.3The bundled sample scripts
FrontierStack ships a small read-only library of proven, battle-tested admin scripts. They are not your scripts — you cannot edit them in place — but you can read any one's full source, learn from it, and copy it into your own library to adapt. They encode real-world quirks of a Mac web stack (especially the old macOS Server backend), so reading one before writing your own saves you the surprises. The AI Administrator reads them first too, via list_sample_scripts and read_sample_script, so its scripts inherit the same hard-won knowledge.
| Script | What it does |
|---|---|
apache_real_docroot | Discovers the document root a vhost is actually serving — not what the config claims, but what Apache resolves at run time. |
apache_url_matrix | Reports the HTTP status for a list of paths on a vhost, tested over the real host header, so you can see at a glance which URLs are healthy. |
fleet_file_diff | Compares one file's checksum across your fleet to find configuration drift — where a machine has quietly diverged from the rest. |
macos_httpd_vhosts | Dumps the macOS Server backend's vhost → docroot map, so you can see exactly what that legacy stack is serving. |
macos_web_restart | Restarts the macOS Server web backend the right way — the correct sequence, not a blunt apachectl. |
node_healthcheck | A fleet drift / health check for one vhost across nodes. |
php_opcache_check | Reports OPcache status for both the CLI and the web SAPI, which are configured separately and easy to get out of step. |
12.4Apple Shortcuts, App Intents & Siri
FrontierStack ships native App Intents — actions that appear in the macOS Shortcuts app, in Spotlight, and (for several of them) as built-in Siri phrases you can speak. Drop them into a Shortcut you trigger from a hotkey, the menu bar or a Folder Action; they work from Automator too, since Automator can run Shortcuts and AppleScript. The shipped actions:
| Action | What it does | Built-in Siri phrase |
|---|---|---|
| Run Server Script | Runs one of your saved scripts by name. | — |
| Start / Stop Service Group | Starts or stops every service in your group at once. | “Start my servers with FrontierStack” |
| Restart Service | Restarts Apache, Nginx, MySQL or PostgreSQL. | “Restart a service with FrontierStack” |
| Restart Docker Container | Restarts a named container. | — |
| Get Local Health | Returns the Local Health summary (services up / down). | “Check server health with FrontierStack” |
| Apply Sidebar Preset | Switches the sidebar to a saved preset. | — |
| Flush DNS Cache | Flushes the macOS DNS resolver cache. | — |
| Send Notification | Sends a notification through your alert channels. | — |
| Ask Server Assistant | Sends a plain-English question to the AI Administrator and returns the answer into your workflow. | “Ask FrontierStack…” |
The catalogue is wider still — Get Server Status, List Servers, List Docker Containers, Check a Website and more are all available to build Shortcuts with, even where they carry no stock Siri phrase.
12.5Driving the app from a script
Because the App Intents are real Shortcuts actions, you can call them from a shell step with the macOS shortcuts command-line tool — useful inside a saved script, a cron job, an Automator “Run Shell Script” action or any launcher. Wrap a FrontierStack action in a one-line Shortcut, then invoke it with shortcuts run "My Shortcut", chaining it with anything else your script does.
The AI Administrator can do this assembly for you. Ask it for an automation script that drives the app through Shortcuts and it calls list_app_intents to see the available actions and the exact shortcuts run invocation for each, then authors the script with save_script (or schedules it with schedule_cron). You get a finished, runnable script rather than a hint.
12.6Scheduled app actions
A cron job runs a shell command. A scheduled app action is different: it is a task the app itself performs on a schedule, using its stored credentials and the same audited tools you and the AI Administrator use — not a raw shell command. Use an app action to reboot a linked server, start, stop or restart a local service the app controls, or flush DNS on a timetable. They are managed through schedule_app_action and listed by list_app_actions, and they appear under Scheduled App Actions in the pane. The natural way to create one is to ask the AI Administrator — “reboot web-03 every night at 3am” — and approve it.
There is one important difference from cron: an app action only runs while FrontierStack is open. It performs the action through the app, so it catches nothing that falls due while the app is closed. Cron, by contrast, runs at the system level whether the app is open or not. Choose cron for things that must happen no matter what, and app actions for things the app must do with its own credentials and tools.
12.7The frontierstack:// URL scheme
Every pane, server, site, container and Cloudflare zone has a frontierstack:// deep link. From AppleScript, an Automator shell step, a launcher or any script runner, a single line such as open frontierstack://pane/Security brings the app forward and jumps straight to that pane. It is the fastest way to wire FrontierStack into an existing workflow when you want the app on screen at a particular place rather than running an action headless. The complete URL-scheme reference is in Chapter 18.
12.8Auto-export of backups, logs and the change-log
The last piece of routine automation is getting FrontierStack's own generated files off the Mac on a schedule. In the Backups overview, the Auto-export to a folder section copies generated artefacts to any folder you choose — a Dropbox folder for off-site safety, or a folder watched by Hazel to drive your own downstream rules. Three feeds are built in:
- Settings backup — a zip of your configuration backups.
- Change-log — the running record of changes made through the app.
- App logs — a zip of FrontierStack's own logs.
For each feed you set an interval (hourly, 6-hourly, 12-hourly, daily or weekly), pick the destination folder, and optionally turn on Empty after export to rotate the source after each copy (handy for the change-log and app logs, so they do not grow without bound). Export now runs a feed immediately, and each feed shows its last result. Files land as FrontierStack-<feed>-<timestamp> in your chosen folder.
You now have the full mechanical toolkit: scripts you save and run, cron and app actions that run them on a schedule, Shortcuts and Siri that trigger them by hotkey or voice, a URL scheme that jumps anywhere, and auto-export that ships the results off-box. The next chapter introduces the operator who can author and wire all of this for you — the AI Administrator.
Chapter 13
The AI Administrator
A tool-using assistant that can see your servers, diagnose what is wrong, and fix it on your approval — with your secrets kept out of the model.
The AI Administrator — the AI Harness — is what makes FrontierStack more than a control panel. It is a tool-using assistant with a live, accurate picture of your setup. You describe a problem in plain English; it investigates with read-only diagnostics, explains what it found, and proposes a fix that you approve before anything runs. It works on this Mac and on every server you have linked over SSH, and it never sees your passwords. This chapter explains how it thinks, what it can do, and how to keep it safe.

.env secret vault and long-term memory.13.1Choosing a model
The Administrator is not tied to one vendor. At the top of the pane you choose the model that drives it:
- FrontierStack AI — the default Harness engine when its zero-retention service is available. It needs no API key of your own and runs Qwen3 through Enfour's AI Cloud. Use of FrontierStack's AI servers is free for users for now and may become a paid service later. The upstream key and provider endpoint stay on Enfour's server; prompts are deterministically redacted before upload and the service must attest zero retention. Because this final Harness engine is already zero-retention, FrontierStack skips the separate cloud Prompt Firewall pass instead of sending the same text twice. Tool restrictions and approvals remain unchanged.
- A cloud model — the most capable option for hard diagnosis and multi-step work. You supply an API key (stored locally).
- Your AI subscription via VibeProxy — the recommended route if you already pay for Claude Pro/Max, ChatGPT Plus/Pro, Gemini, Kimi, Qwen or GitHub Copilot. VibeProxy bridges those subscriptions to the harness, so the same frontier models answer with no per-token bill — a metered API key charges for every request, while a subscription you already own costs nothing extra. Install it from the VibeProxy pane (Chapter 15); if it stops, the harness falls back to another engine automatically.
- A local model — Ollama, LM Studio, or any OpenAI-compatible server on your Mac (LocalAI, Jan, llama.cpp), plus Apple Intelligence: the on-device Foundation Model on Apple silicon with macOS 26, used natively or via Apfel (a one-command install the AI Models pane sets up, runs, and can start at login or app launch for you). Local models keep work entirely offline — nothing leaves the Mac, so the pre-send screening below isn't needed and is hidden. See Chapter 15 for running local models.
- Your own subscription tool over MCP — drive the whole app from Claude Code, Claude Desktop or Cursor on the flat plan you already pay for, with no per-token bill. This is covered in Chapter 14.
13.2Let a vision model inspect a pane
When a setting is visible in FrontierStack but the Administrator's tools cannot inspect that control, click Attach Screenshot… above the prompt. This is a model capability, not a Qwen-only feature: FrontierStack sends the appropriate image format to compatible OpenAI-style, Anthropic and local Ollama vision models. A custom or routed model whose capability is unknown can be tried, although its server may reject the image.
FrontierStack never captures your screen automatically. You select one image and review the exact prepared preview. The app limits it to 1,800 pixels, strips metadata by re-rendering it, and uses macOS text recognition locally to black out lines containing known stored credentials, personal account names, private fleet identities or secret-like tokens. OCR is defence in depth, not a guarantee: crop to the relevant pane and check the preview before sending.
13.3How a conversation works
You type a request the way you would brief a colleague — “why is the site throwing 502s?”, “check whether the certificate on shop.example.com is about to expire”, “restart Postgres on db-02”. The Administrator then works in a loop:
- It grounds itself. Before acting it discovers what you actually run — the service catalog, your linked servers and devices, the current health board — so its answers match your machine, not a generic guess.
- It investigates read-only. It reads logs, runs diagnostics, checks ports and certificates, and inspects config files. None of this changes anything.
- It explains, then proposes. It tells you what it found and, if a change is needed, shows the exact command or file edit it wants to run.
- You approve. Nothing that changes the system runs until you click approve on that specific action. It then runs the fix and re-checks to confirm.
13.4The trust model: read-only by default
This is the most important section in the chapter. The Administrator is built so you can hand it production servers without losing control.
| Setting | What it unlocks |
|---|---|
| (default) | Read-only. The assistant can look at everything — logs, health, config, diagnostics — but cannot change anything. |
| Allow changes | Permits mutating actions (restart a service, write a file, issue a certificate, open a firewall port). Each one still shows an approval card. |
| Allow scripts | Permits the general shell tool and saved-script execution. The script and a plain-English explanation are shown for approval before it runs. |
Two principles sit on top of these toggles:
- Per-action approval. Even with changes enabled, every mutating step is shown to you first — the actual command or diff — and nothing runs until you approve that action. There is no “approve everything” mode for ad-hoc changes.
- Remote actions need their own consent. Controlling a linked server through its monitoring helper additionally requires that server's own “Allow actions” switch, set in its Host Monitor pane (Chapter 8).
- Destructive database actions need a high-end model. Repairing, restoring or rebuilding a database is irreversible enough that FrontierStack hard-gates those steps to a frontier model — a small or on-device model can still read the log and diagnose, but is refused the destructive tool until you switch to a capable model (Claude Opus/Sonnet, GPT-4o/o-series, Gemini Pro).
DELETE, TRUNCATE, database/table drops, unscoped updates, file-removal and overwrite primitives, disk wipes, and destructive saved scripts, cron jobs or event triggers are refused before approval. Structured file writes preserve the previous file. vhost_remove disables one Apache/nginx vhost reversibly while preserving its document root. An intentional restore from a named backup remains available only through the separately gated local recovery workflow.13.5The secrets vault
Real administration needs credentials — a database password, an SSH sudo password, a Cloudflare token. FrontierStack keeps these in a local .env vault so the model never sees them.
You add named secrets in the Administrator's Script secrets (.env) bar — for example DB_PASSWORD, CF_TOKEN, SSH_SUDO_PASS. When the assistant writes a script that needs one, it references the name, not the value:
mysql -u root -p"$DB_PASSWORD" -e "SHOW DATABASES;"
At run time the app injects the real value as an environment variable — locally, or over SSH on the target server — and injects only the names a script actually references. The model is told the secret names (so it can write correct scripts) but never the values, and command output is secret-redacted before it is sent.
- Shell:
$NAME/"$NAME" - PHP:
getenv('NAME') - Python:
os.environ['NAME']
PROD_DB_PASSWORD, STAGING_DB_PASSWORD, a per-server BALTHAZAR_MYSQL_PW. The assistant picks the name that matches the target; if the mapping is unclear it asks rather than guessing.13.6Prompt Firewall
Prompt Firewall is an optional semantic check on top of FrontierStack's always-on deterministic redaction. Choose On this Mac to use an Ollama or supported local OpenAI-compatible model, or explicitly choose Enfour's AI Cloud. It can warn and ask, automatically redact what it finds, or block the send.
On-device screening keeps the check entirely on this Mac. Enfour's AI Cloud receives only text after FrontierStack has removed known credentials, usernames, private addresses and secret-shaped patterns. It is free for users for now. The cloud service must attest zero retention on every response; if that assurance or the service disappears, screening returns an unverified result and Block mode stops the send. Enfour's upstream provider key and endpoint never reach the app, allowing Enfour to change the trusted provider later without distributing a new key or remotely configuring the app to call an arbitrary address.
13.7What the Administrator can do: the tools
The assistant acts only through a fixed set of audited tools. Each is guard-railed: read-only tools always work; mutating tools need the toggles above and an approval. Grouped by job:
| Area | Representative tools |
|---|---|
| Discover & ground | app_capabilities (what FrontierStack can manage), search_app_help (current Help for FrontierStack settings and controls), list_targets (servers & devices), get_server_health, get_location, get_sidebar_state |
| Diagnose (read-only) | diagnose (ping, dig, curl, netstat, df, ps…), read_logs/tail_log, security_audit, port_check, cert_expiry_check, whois_lookup, ip_analysis, metrics_snapshot, php_test/python_test |
| Control services | service_action (Homebrew services), repair_service, reload_webserver, restart_app, monitor_action (via a server's helper), reboot_host |
| Web & databases | list_sites/read_site_file/write_site_file, vhost_create/vhost_remove, list_databases/run_sql, db_dump/backup_now/restore, issue_certificate |
| Network & perimeter | firewall_rule, flush_dns, dns_record (Cloudflare), router_info (status, health & security signals), reboot_router, open_web_ui, discover_devices/pin_device, internet_speed |
| Mail security | email_auth_dns (SPF/DMARC/DKIM), harden_mail_postfix, test_open_relay, generate_dkim_key, install_mail_cert |
| Security testing | strix_status (read the Strix install, scan history & findings), strix_scan (run an authorised penetration test), strix_control (stop, re-run, restart, silence) — the two acting tools are local-only |
| Files & the shell | read_remote_file/write_remote_file/upload_file, and run_script — general shell on this Mac or any linked server |
| Scripts & schedules | list_scripts/run_saved_script/save_script, schedule_cron, schedule_app_action, list_sample_scripts |
| Messaging | get_messaging_channels, send_notification, get_alert_errors |
| Knowledge | list_skills/load_skill, list_notes/read_note, obsidian_search/obsidian_read_note, remember/list_memory/forget |
| The app itself | open_pane, set_pane_visible, manage_palette, set_services_visible — the assistant can navigate and reshape the sidebar for you |
The general-purpose run_script tool is the assistant's shell: anything the fixed tools do not cover, it does by writing a small, readable script and showing it to you for approval. On a remote server it works in two passes — a read-only test script to find the problem, then a minimal fix, then a re-test to confirm.
13.8Skills, notes and memory
Three features let the Administrator work from your knowledge rather than generic defaults.
13.11.1Skills
Skills are curated, multi-step playbooks — a fleet security audit, a web-stack restart procedure — managed in the AI Skill Manager. The assistant lists them cheaply (names only) and loads one's full instructions on demand, so a task follows your approved procedure instead of improvising.
13.11.2Notes shared with the AI
The Notes pane (Chapter 3) holds credentials, runbooks and instructions, each behind a per-note lock that is off by default. The assistant can read only the notes you have explicitly unlocked with Share with AI; it sees their titles to know what exists, and reads a body only when a task needs it.
13.11.3Long-term memory
Tell the assistant “remember that LINE is my preferred channel” or “never send messages on weekends” and it saves the rule to a durable memory.md so it honours it in future sessions. You can list and forget memories at any time.
13.9This Mac and your fleet
Almost every tool takes a target. Omit it and the tool runs on this Mac; set it to a linked server's name and the same diagnostic, log read, script or fix runs there over SSH (read-only tools stay read-only). So the same conversation can move fluidly from “check this Mac’s disk” to “now do the same on web-01 and edge-03”. Linking servers and the host-monitor helper are covered in Chapter 8.
Before privileged work, the harness reads a non-secret access status for the selected target. A linked server reports whether its SSH/root/sudo password is saved locally in FrontierStack's Keychain; only the fact that access is available reaches the model, never the value. This Mac reports whether the approved privileged helper is ready or whether a supported action will show the normal interactive macOS administrator-password prompt. When access is available, the assistant should try the bounded tool after your approval instead of stopping at instructions. Free-form AI scripts are not automatically given a server's saved password.
13.10Custom instructions and history
The Custom Instructions editor (Chapter 17) lets you shape the assistant's standing behaviour — house style, what to summarise, defaults you always want. Past conversations are kept in the history menu so you can return to an investigation, and the assistant can pick up where it left off.
13.11A worked example
To see the pieces together, here is a typical exchange — “the shop is down with 502s.”
The assistant callsget_server_healthand sees Apache up but PHP-FPM down on web-01. It reads the PHP-FPM log withread_logs(target web-01) and finds the pool failing to start after a config edit. It shows you the offending lines, proposes a one-line fix towww.confviawrite_remote_file, and — once you approve — reloads withreload_webserverand re-checks the site over loopback. Green. If you ask, it sends a one-line all-clear to your team withsend_notification.
Throughout, no password reached the model, every change waited for your approval, and the whole thing is something you could have done by hand — just faster.
Chapter 14
MCP & Driving FrontierStack from Your Own AI
Run FrontierStack as an MCP server so Claude Code, Cursor or any MCP client can operate your servers — on the flat plan you already pay for, with no per-token bill.
Chapter 13 covered the AI Administrator built into the app. This chapter is about the other direction: exposing FrontierStack to an AI tool you already use. FrontierStack runs as its own MCP server, so an external harness — Claude Code, Claude Desktop, Cursor, Codex or any Model Context Protocol client — can drive the whole app. The same guarded executors, the same approval cards, the same read-only-by-default posture — reached from your editor or terminal.
14.1Why drive FrontierStack over MCP
Two reasons stand out:
- No metered AI bill. When the harness is your own subscription tool — Claude Code on a Claude plan, a Cursor seat — the AI runs on the flat plan you already pay for. There is no per-token API charge for operating your servers.
- One agent for code and infrastructure. The coding agent already in your editor can now inspect and operate the servers that code runs on: read a production log, restart a service, check a certificate, run a migration — without leaving the tool you are working in.
14.2How it works
FrontierStack publishes its tool registry over MCP and binds the server to localhost behind a required token. Tool calls from the client route to the same executors the built-in Administrator uses and act on live app state — so your coding agent sees your real services, sites, fleet and health, not a copy. The safety model is identical to Chapter 13:
- Read-only until you opt in. The MCP surface stays read-only until you enable changes and scripts, exactly like the in-app assistant.
- The same approval card in front of every change. A mutating tool call from Cursor or Claude Code raises the same approval in FrontierStack that an in-app request would.
- Secrets never leave the Mac. The vault behaves the same way: scripts reference names, values are injected at run time and never sent to the model.
It also teaches a cold agent about FrontierStack itself. The read-only search_app_help tool searches only the app-authored Help index, so an outside harness can answer where a setting lives or what a control means without arbitrary file access. The frontierstack://manual resource supplies the canonical English/Japanese desktop and iPhone/iPad manual locations. Both are advertised by MCP discovery.
Stateless MCP is the default. FrontierStack supports MCP 2026-07-28: every HTTP request carries its protocol version, client capabilities and route, so it needs no hidden session or Mcp-Session-Id. server/discover reports the server's capabilities and cache hints. The owner-only Keychain bridge keeps the older initialize flow available for Claude Code, Cursor and other clients that have not moved to the new revision yet; the bridge never writes the bearer token into their configuration.
14.3Enabling the MCP server
On first contact FrontierStack offers to start its MCP server for you. You can also enable it yourself:
- Open the MCP settings in FrontierStack and turn on the MCP server. It binds to
localhostand shows the token and the endpoint URL. - Pick your client in the pane — Claude Code, OpenAI Codex CLI, Cursor, Gemini CLI or Claude Desktop — and copy the ready-made command or config. The website's MCP page has the same snippets.
- Or use the one-click Add to… button, which writes the entry straight into that client's own config file (
~/.codex/config.toml,~/.cursor/mcp.json,~/.gemini/settings.json, Claude Desktop's config). Any other MCP client works too — the protocol is an open standard. - Start a conversation in your tool and ask it to list FrontierStack's tools or your fleet to confirm the connection.
The installed frontierstack CLI also uses stateless MCP by default. Run frontierstack discover for machine-readable protocol and capability information; frontierstack info reports both the preferred stateless revision and the supported legacy revisions.
The separate MCP Servers pane can manage other servers in either generation. Its Automatic setting tries server/discover first and falls back to legacy initialize only when necessary. A green Stateless mark appears in the server list only after the HTTP server proves support; a stateless stdio server can be marked explicitly because the external client owns that process and handshake.
localhost by default. Treat the token like a password. To reach FrontierStack from another device, pair it properly (next section) rather than exposing the port.14.4Signed requests and device pairing (FS1)
The control and MCP servers add a per-device signed-request layer — FS1 — on top of the bearer token and TLS. Each paired device holds its own Ed25519 private key and signs every request; FrontierStack verifies the signature against the device you approved, so a leaked token alone cannot drive anything.
- Per-device scopes. Each device is granted a scope from read-only up to full control, set on the Mac.
- One-tap revoke. Remove a device and it is cut off instantly, without affecting the others.
- This is the same mechanism the iPhone and iPad app uses to pair — see the Mobile Manual, and the trust model in Chapter 10.
14.5External AI jobs
Beyond live MCP, FrontierStack can hand a job to a subscription AI CLI — package up a task and let your local Claude (or similar) work it under your plan, then bring the result back into the app. This is how heavier, longer-running analysis runs without a metered API bill, and it pairs with the Data Map (a per-location data-flow diagram) so the agent has the context it needs. External AI jobs are managed from the AI stack (Chapter 15).
14.6Skills, notes, memory and Obsidian over MCP
An external harness reaches the same knowledge surfaces as the built-in Administrator, subject to the same gates:
- Skills — your curated playbooks are discoverable and loadable on demand.
- Shared notes — only notes you unlocked with “Share with AI” are readable.
- Long-term memory — the same
memory.mdof preferences and standing rules. - Obsidian — if you have linked an Obsidian vault, the agent can search your SOPs and runbooks and follow the documented procedure (Chapter 12).
14.7The Fleet Skill — portable context for any agent
The MCP server lets an agent act on your fleet. The Fleet Skill is the other half: static context that teaches an agent your world before it touches anything. The Fleet Skill pane generates a SKILL.md — your servers and their roles, OS, services and how to reach them; your network locations; your KVMs and power sources; and a free-text block of your own rules and preferences — with every secret stripped out. An agent that reads it picks the right host, uses the right path, and respects your conventions instead of guessing.
It is written to ~/.claude/skills/fleet/SKILL.md, which Claude Code discovers automatically — the description: in its frontmatter tells the model when the skill is relevant. MCP-connected agents can pull the same content through the get_fleet_context tool, and you can optionally also emit ~/AGENTS.md for CLIs that read that convention. Turn on auto-update and the skill is rewritten a few seconds after your fleet, locations or KVMs change, so it never drifts from reality.
Think of it as the difference between a map and a remote control. The MCP is the remote control — live, authenticated, able to do things. The skill is the map — zero-setup, portable, safe to hand to any agent, and the thing that stops a capable tool from doing the wrong thing in the right way.
14.8When to use which
| Use… | When… |
|---|---|
| The built-in AI Administrator (Ch 13) | You want everything in one window, including the approval cards and the cost monitor, and you are happy to supply a model/key or run locally. |
| FrontierStack over MCP (this chapter) | You already live in Claude Code or Cursor, want one agent for code and servers, and want to avoid a per-token bill by using your subscription. |
| External AI jobs (Ch 15) | The task is heavy or long-running and you want it handed to a subscription CLI rather than run interactively. |
All three reach the same guarded tools and the same live app state. Pick by where you prefer to work; the safety guarantees do not change.
Chapter 15
The AI Stack
The other side of AI: not the assistant that runs your servers, but the AI infrastructure your servers run — agent runtimes, local models, sandboxes, GPUs and the bill for all of it, watched from one window.
The previous two chapters were about AI operating FrontierStack: the built-in Administrator (Chapter 13) and driving the app from your own tool over MCP (Chapter 14). This chapter is the reverse. It covers the AI infrastructure FrontierStack helps you run and monitor — agent platforms, local model servers, code sandboxes, browser automation, GPU fabric, ML tooling, governance, and the cost of all of it. These are services in the catalog like any other, grouped under the AI categories in the sidebar, but they deserve a chapter of their own because running AI is now a stack you operate, not a box you call.
15.1The Agent Platforms board
Open Agent Platforms from the sidebar to see every AI agent runtime FrontierStack knows about, on one board with a live status dot per row. The header reads, for example, "3 of 7 running" — how many configured runtimes are reachable and up. A runtime row shows its running state, the model it is serving, and, where the runtime reports them, its agents, tokens and active sessions. The AI tool get_agent_platforms exposes exactly this to the Administrator, so you can ask "which agent runtimes are down?" in plain English.
The runtimes fall into two kinds. Some are CLI runtimes — detected by their command-line tool being installed (and answering --version): the coding agents Claude Code, Gemini CLI, OpenAI Codex and Factory's droid. Others are HTTP runtimes that expose a status endpoint and are polled for live metrics. A handful of cloud agent products (OpenHands, Manus, Devin, OpenAI Operator, E2B) appear lower down as catalog entries you connect rather than poll.
| Platform | What it is |
|---|---|
| OpenClaw | Self-hosted agent runtime, monitored for running state and model. |
| Hermes | Agent runtime polled over HTTP for status, model and sessions. |
| DeerFlow | Deep-research / multi-step agent runtime. |
| LangGraph Platform | Graph-based agent orchestration; status and model surfaced on the board. |
| CrewAI Enterprise | Multi-agent "crew" runtime. |
| Microsoft AutoGen | Multi-agent conversation framework. |
| Genspark | Autonomous agent platform. |
| Agent Zero | General-purpose autonomous agent. |
| NVIDIA NemoClaw | NVIDIA agent runtime. |
| OpenAI Codex / Claude Code / Gemini CLI / Factory Droid | Coding-agent CLIs; detected by install + version, shown as on-demand. |
Because configured runtimes feed the broader system, a runtime that goes down — or hits a token quota (rate-limit, 429, billing) — raises an Alert and appears red on the Local Health board, in the services group. You configure each runtime's endpoint and credentials once; from then on it is watched like any other service.
15.2Registry, Task Queue, Model Router & Connectors
Four companion panes break the agent fleet down by concern, all reading the same live runtime state:
- Agent Registry — the master list: every runtime plus the cloud agent products in the catalog, with a "credentials saved" marker for each whose token is in the Keychain. This is where you see, in one place, everything FrontierStack can talk to.
- Task Queue — active agent sessions and runs across your runtimes. Per-invocation CLIs (Claude Code, Gemini, Codex, Factory) appear as "on-demand" since they spin up per task rather than running a daemon.
- Model Router — which model and which API key each runtime uses. It reads each runtime's reported model and the provider key it needs, and shows whether that key is present (edit keys in AI Models). Use it to confirm a runtime is pointed at the model — and the spend — you intend.
- Repository Connectors — the Git providers your agents can read and write. Capture a GitHub, GitLab or Bitbucket personal access token (stored in the Keychain) and FrontierStack runs a live
/userreachability check so you know the credential works before an agent needs it.
Agent runtimes and connectors authenticate with credentials you save once. Like everywhere in FrontierStack, those tokens live in the macOS Keychain, never in the app's settings file and never sent to a cloud model.
/user check confirms the token works; it does not limit what the token can do — that is the PAT's scope, set at GitHub/GitLab/Bitbucket.15.3Agent Sessions & the built-in terminal
Agent Sessions is the manager for goal-driven ops and SaaS loops you build yourself — "one-shot or recurring", as the header says. A session has a goal in plain English, a title, a step budget, and a switch for whether it may make changes. Run it once, or set it recurring (it re-runs when its interval elapses) to watch something on a schedule. Each session drives the same guarded tools as the Administrator (Chapter 13) and streams every step to a transcript you can stop at any time; scripts are never permitted from a session loop. This is the home of agents like "watch this endpoint and restart it if it stalls" or "reconcile inventory every morning."
FrontierStack also embeds a real terminal for when you want a shell beside your agents. The engine is SwiftTerm, running a login zsh in a PTY, and you can restyle it: under Terminal Style you import colour themes from iTerm2 (.itermcolors), Ghostty, or generic Alacritty/Warp key-value files, on top of built-in dark, light and Solarized themes. The terminal is the same engine the agent-loop console uses, so what you see matches what your sessions run against.
15.4Running local models
You do not have to send anything to a cloud model at all. FrontierStack manages local inference servers and can point the Administrator at one of them. The big three local apps are first-class:
- Ollama — the simplest local model runner; pull and serve models, and select one as the Administrator's engine.
- LM Studio — the LM Studio pane detects the install, lists loaded models and what is downloaded via the
lmsCLI, and shows "N models loaded" or "no model loaded" in its header. - VibeProxy — the odd one out: not a model runtime but a bridge to the AI subscriptions you already pay for. Connect Claude Code, ChatGPT, Gemini, Kimi, Qwen, GitHub Copilot or Z.AI GLM once, and those models appear in the harness picker without a separate metered API key. The VibeProxy pane installs it with Homebrew, starts and stops it, carries the usual Group Start / Run at startup settings, and opens the CLI Proxy API dashboard for request logs and account status.
- LocalAI — a self-hosted, OpenAI-compatible server you run as a catalog service on port 8080.
Beyond these, the AI / LLMs category carries the whole self-hosted-inference shelf — vLLM, llama.cpp, Apple's MLX-LM server, Jan, LiteLLM (a proxy fronting 100+ providers), Open WebUI, AnythingLLM, PrivateGPT and RAG/vector tooling. The point of running one locally is privacy and cost: when the Administrator's engine is a local model (Ollama, a loopback endpoint, or Apple's on-device model), nothing is redacted because nothing leaves your Mac — the secret-scrubbing that protects cloud engines simply is not needed.
15.5Code sandboxes & browser automation
Agents need somewhere safe to run code and a way to read the live web. FrontierStack manages both.
For code, the E2B pane manages secure cloud sandboxes via the e2b CLI: enter an API key (stored in the Keychain as E2B_API_KEY, or authenticate once with e2b auth login), then list, spawn from a template, and kill running sandboxes — with a Kill All for housekeeping and an "include paused" toggle. A green dot marks running sandboxes; orange marks paused. It is the disposable, isolated machine an agent uses so its code never touches your servers.
For the web, the AI category includes browser and crawl tooling: Browserbase (managed headless browsers), Crawl4AI, Firecrawl and Apify for turning sites into clean, model-ready text, plus Playwright for scripted automation. These give an agent eyes on pages that have no API.
15.6GPU infrastructure & clusters
If your AI runs on real GPUs, the GPU Fabric pane gives you read-only health of the hardware. Pick a linked server and run diagnostics over SSH: GPU inventory and temperature (nvidia-smi), NVLink status, the GPU topology matrix, NVSwitch Fabric Manager health, DCGM inventory (dcgmi), InfiniBand and RoCE/RDMA links, Slurm GPU allocation, and composable-fabric CLIs (WEKA, Liqid, GigaIO). The GPUs live on Linux hosts, so this targets a server in your fleet; on a non-GPU machine the tools simply report "not found". Run one check or Run All Checks at once.
GPU thermals and load on a host are also surfaced through the standard host monitors (Chapter 8) when an agent is installed, so a GPU box that overheats raises an alert like any other machine. For scale-out, the AI Clusters category carries Exo (run one model across several of your Macs), Petals, Distributed Llama, Ray, Slurm and Run:ai; the ML Workbench category carries the experiment-tracking and pipeline tools (MLflow, ClearML, Weights & Biases, Kubeflow, JupyterLab) for the training side of the house.
15.7AI governance & safety
Running agents in production means watching what they do and bounding what they can. FrontierStack catalogs the AI Governance & Safety shelf so these tools sit alongside the runtimes they observe: Langfuse, Helicone and Arize Phoenix for LLM observability and tracing; Promptfoo, Ragas and garak for evals and red-teaming; Guardrails AI, NeMo Guardrails and Lakera Guard for input/output validation and prompt-injection defence; and governance platforms such as Credo AI and Holistic AI. Install and monitor them as catalog services; they are the audit trail and seatbelts for the agents on the boards above.
15.8The AI cost monitor
Running an assistant, your own agents, several local models and outside harnesses means spend in several places. AI Model Costs pulls it into one view. The header shows this month's total and the percentage of budget; a colour-coded bar turns orange at 80% and red at 100%. The AI tool get_ai_costs exposes the same figures to the Administrator.
The dashboard tracks three streams together:
- Metered API spend, per provider and model, computed from an editable price table (USD per million tokens), or entered directly from an invoice. Connect Accounts auto-pulls month-to-date spend from OpenAI, Anthropic, OpenRouter, DeepSeek and a self-hosted LiteLLM proxy — several accounts per provider, each its own cost line.
- Flat subscriptions — ChatGPT Plus, Claude Pro/Max, Cursor, Perplexity, T3 Chat and the like — folded into the month's total and shown as their own slices. Toggle one off to exclude it without deleting it.
- Local CLI usage — a one-click scan of this Mac's Claude Code and Codex logs sums the month's tokens per model as an estimate.
A by-provider breakdown (donut chart), a six-month trend with the budget line, and an Ask AI button that hands your spend to a cost-optimisation advisor round it out. A billing-health watcher probes connected paid services for out-of-credits, hard-limit, past-due or suspended states and raises an alert — catching a key that is about to stop working before it does.
Part V
Business & Reference
Tailoring FrontierStack to a vertical, then the practical book-end: settings, licensing, updates, shortcuts and troubleshooting.
Chapter 16
Business & Vertical Solutions
FrontierStack already speaks the language of more than a thousand services. A preset reveals the handful that matter to your business — and a few panes turn them into a working back office.
The catalog in Chapter 6 is deliberately enormous. No single business runs a graph database, a render farm and a hotel channel manager at once — so the point of this chapter is not breadth but focus. FrontierStack ships with presets and saved Setups that hide everything irrelevant and surface the dozen or so services a particular line of work actually needs. This chapter walks the verticals the app is tuned for and shows which services each one reveals.
Think of it as a lens, not a new product. The web stack, monitoring, scripts and the AI Administrator you met earlier do not change; a preset simply decides what you see first.
16.1Presets, Setups and the vertical lens
Two mechanisms tailor the app. Presets are built-in starting points: choose Presets ▸ Drop-shipping or Presets ▸ Small Business and the sidebar reshapes to that trade — the right service categories appear, an opinionated set of monitor panes float, and the noise of the other 900 services recedes. Setups are your own saved snapshots of that view (which services are shown, which are pinned, the floating-palette layout, and an optional network location to bind it to). You build them in the Setups pane and flip between them from the Presets menu, exactly as covered in Chapter 3.
The workflow is the same for every business below: apply the preset, set up the two or three services you actually use (paste an API key, enable a channel), and save the result as a Setup so you can snap back to it after a detour into "show everything".
16.2The Small Business preset
This is the classic macOS Server use case, modernised: a single Mac mini running the back office for a shop, studio or practice. The Small Business preset reveals the categories a storefront depends on, every one of them self-hostable on the Mac in front of you, with the backups, monitoring and hardening from Parts II–III underneath.
| Need | Services revealed |
|---|---|
| Point of sale | Square (built-in pane), Toast, Lightspeed, Floranext |
| CRM & loyalty | SuiteCRM, EspoCRM, Odoo CRM (self-hosted); HubSpot, Zoho, Pipedrive; Square Loyalty, VoucherVault |
| E-commerce & CMS | WooCommerce, Medusa, Saleor; WordPress, Drupal, Ghost; Stripe / PayPal / Square checkout |
| Mailing lists | Listmonk, Mautic (self-hosted); Mailchimp, Brevo, SendGrid |
| Mail server | The built-in Mail Server pane, mailcow, Modoboa, with SPF/DKIM/DMARC tooling |
| Calendars | Radicale, Baïkal, SOGo (CalDAV/CardDAV); the Calendar Health pane |
| Accounting | ERPNext, Xero, QuickBooks, freee, Money Forward |
| Helpdesk | Zammad, osTicket (self-hosted); Freshdesk (live ticket counts) |
Several of these are more than catalog entries. The CRM, helpdesk, store and mailing-list services with simple, key-based APIs surface live metrics in their pane — Freshdesk shows open/pending/overdue tickets, Shopify shows open orders, Mailchimp shows subscriber totals — and you can switch on "Alert me" with a threshold so a backlog reaches you on your usual channels (Chapter 11).
16.3Hospitality & short-term rentals
For vacation rentals and small hotels, FrontierStack includes a built-in Channel Manager pane (category PMS) that turns your property-management platform into a live dashboard. It is the engine room of the hospitality preset.
Open Channel Manager and, under PMS Health, enable the one platform you run and paste its credentials — the field labels adapt per platform: an Account ID for Hostaway, an API key for Lodgify, a client ID + secret for Guesty, a Bearer token for Cloudbeds, an API token for Beds24, or an Application Access Key for a custom AppSheet app you built yourself. Check confirms the API endpoint is reachable; Sync pulls live reservations, and the Reservations (Platform API) section lists guests, channels, dates and totals, with revenue and an occupancy dial at the top.
Not every OTA needs a platform API. The Calendar Sync section ingests each channel's iCal export — point a channel at its iCal URL, or Import from ICS Feeds to pull in the Airbnb, Booking.com, Vrbo and Expedia feeds you added in the ICS Feeds pane — merges them into one calendar with no API key at all, and lets you Save or Copy the combined .ics to share to Apple, Google or Outlook.
Turnovers close the loop. The Cleaning & Turnovers — Turno section either connects Turno's API directly or, more simply, lets you Copy reservation iCal for Turno — add that calendar inside Turno and it auto-books a clean from every check-out.
16.4Drop-shipping & e-commerce fulfilment
The Drop-shipping preset reveals five purpose-built categories — Sourcing & Suppliers, Print-on-Demand, Shipping & Fulfillment, Inventory Sync and Profit Analytics — alongside your e-commerce platform and SEO tools, and floats the Drop-shipping Health monitor.
| Stage | Services revealed |
|---|---|
| Sourcing & suppliers | AliExpress, Alibaba, CJdropshipping, Spocket, Zendrop, SaleHoo, DSers |
| Print-on-demand | Printful, Printify, Gelato, Gooten |
| Shipping & fulfilment | AfterShip, ShipStation, Easyship, Shippo, Pirate Ship |
| Inventory sync | SkuVault, Cin7, Zoho Inventory, Katana |
| Profit analytics | Triple Whale, Lifetimely, BeProfit |
The live piece is delivery tracking. Drop-shipping Health reads AfterShip's tracking API directly (store your key once) and tallies shipments by state — in-transit, delivered, pending, and a problem list of the ones stuck or exception-flagged — so a stalled package surfaces before the customer emails. The inventory, marketplace and profit sections are framed placeholders that light up as you connect their catalog services; AfterShip is wired live today, with the others reachable through their own panes.
16.5Education
Schools and campuses live across a different set of categories. There is no single "education preset" button, but the catalog groups the pieces cleanly, and a Setup pins exactly the ones your institution uses.
| Function | Services revealed |
|---|---|
| Student information | PowerSchool, Infinite Campus, Veracross; openSIS, RosarioSIS (self-hosted) |
| Learning management | Canvas, Schoology, Google Classroom; Moodle, Open edX, ILIAS, BigBlueButton |
| Digital library | Koha, DSpace, Greenstone (self-hosted); EBSCOhost, JSTOR, ProQuest |
| Campus & school ops | Slate & OpenApply admissions, FACTS tuition, StarRez housing, FET timetabling, ParentSquare |
The open-source members of each row — Moodle, Koha, openSIS — are full self-hosted web apps you can run on the stack from Chapter 4, monitored and backed up like any other site. The cloud members are reached through their credential panes for at-a-glance status.
16.6Business messaging & customer comms
Reaching customers where they already are is its own category. Business Messaging collects the store-to-customer channels that matter region by region: WhatsApp Business, LINE Official Account, WeChat and Zalo official accounts, KakaoTalk Channel and AlimTalk, Messenger, Instagram DMs, plus inbox and bot tools such as Intercom, ManyChat, Respond.io, WATI and Gorgias.
Three of these carry a live reachability check today — WhatsApp Business surfaces its verified name and quality rating, Intercom and ManyChat confirm the token works — while the rest capture credentials and a deep link to their console. The AI Administrator can see this picture too: its get_messaging_channels tool reports which channels are connected and which alert gateways can actually send, so you can ask it to confirm where a broadcast could go.
16.7Calendars, Accounts & Apple services
A Mac-based business is also an Apple business. Several built-in panes manage the parts of Apple's ecosystem that touch your servers.
- Calendars. Calendar Discovery scans common CalDAV ports (Radicale 5232, Apple 8008/8443, SOGo 20000, 80/443) and the
/.well-known/caldavpath; add an endpoint to Calendar Health to keep it watched. This is the path to keep an old macOS Server CalDAV alive, or to stand up Radicale or Baïkal fresh. - Accounts. The Accounts pane reads Open Directory and LDAP, and can migrate exported entries into a target directory via
ldapadd— the bridge for moving users off legacy Apple directory servers. - Apple services. The Apple Services pane reports the signed-in Apple Account, which iCloud+ services are enabled, and Find My Mac status — a quick audit of what this machine is tied to.
- Apple Home. Because HomeKit's database is private to system apps, the Apple Home pane drives it through the Shortcuts bridge: any scene or automation you wrap in a Shortcut with a Home action becomes runnable from FrontierStack, useful for tying premises automation to your ops.
16.8Accounting, healthcare, AV & print
A few more verticals round out the catalog, each surfaced as a category you pin into a Setup:
- Accounting & ERP. ERPNext self-hosted; Xero, QuickBooks, freee, Money Forward, Plaid and Expensify by API — the books beside the storefront.
- Healthcare. Open-source clinical systems for practices that self-host: OpenEMR, OpenMRS, GNU Health, LibreHealth, the Orthanc DICOM/PACS server, and Japan's OpenDolphin and ORCA. Treat these with the security discipline of Chapter 10; patient data raises the stakes.
- AV & Stage. For venues and production: the AV Feeds pane plus Dante audio-over-IP, Q-SYS, QLC+ and grandMA lighting, OBS, NDI, Resolume, digital signage and Chromecast control — the show and the network behind it in one window.
- Print Production. A built-in pane for print and pre-press shops, sitting in the Fleet & Remote group alongside the render farm.
None of these is a deep how-to here — the per-service detail lives in Chapter 6. The job of this chapter is to show that whatever your business is, FrontierStack already knows the services it runs on, and a preset or Setup is all it takes to reveal exactly those and nothing more.
Chapter 17
Settings, Licensing & Updates
One Settings pane holds every preference; an Ed25519 licence unlocks your tier offline; Sparkle keeps the app current; and a single switch turns telemetry off.
Almost everything you can configure about FrontierStack itself — as opposed to the services it manages — lives in one place: the Settings pane. This chapter is the reference for that pane and for the three systems that surround it: how the app is licensed, how it updates itself, and what it does and does not send back about how you use it. Several of these controls also shape the AI Administrator, so it cross-references Chapter 13; for anything that goes wrong, see Chapter 18.
17.1The Settings pane
Open it from the sidebar, or from the app menu with ⌘, — the standard macOS Settings window is just a signpost with a Full Settings button that opens the same pane, because FrontierStack keeps every preference together rather than splitting them between two windows. The pane is a single scrolling form of grouped sections: General, License & Subscription, Updates, Privacy & Diagnostics, Locations, Text Editor, Images, Menus, Capabilities, and the cloud/backup destinations.
The General section holds the preferences you set once and forget. Pick a Default Browser (Safari, Chrome, Firefox, Edge, Brave or Arc, if installed) and every "Open in Browser" action across the app uses it. Show in Menu Bar adds a global menu-bar item for starting and stopping your service group. Appearance forces Light or Dark regardless of the system setting, and Theme (accent) tints the whole UI — pair Amber or Terminal Green with Dark for a classic terminal look. Launch at login and a keyboard-navigation focus ring round it out.
Two General toggles deserve attention because the AI can also set them (below). Run commands in the in-app console is on by default: installs and shell commands stream live in a FrontierStack window and panes auto-refresh when a command finishes. Turn it off to send those commands to Terminal.app instead. Interactive sessions — SSH, REPLs — always open in a real terminal. The companion External Terminal picker (under Text Editor) chooses which terminal app the "Open in Terminal" actions use: Terminal and iTerm run the command inline, while other apps open an executable .command.
17.2App-setting keys the AI can change
A handful of these preferences are exposed to the AI Administrator through the get_app_settings and set_app_setting tools, so you can simply ask: "switch my default browser to Firefox", or "stop showing the Presets menu". The assistant reads and writes only the keys in the table below — nothing else about Settings is reachable from a prompt.
| Key | Type | What it controls |
|---|---|---|
defaultBrowserBundleID | bundle id | The browser used by every "Open in Browser" action. Empty = system default. |
showInMenuBar | bool | Whether the global menu-bar item appears. |
preferInAppConsole | bool | Run commands in the in-app console (on) or send them to Terminal.app (off). |
menu.showPresets | bool | Show the Presets menu in the menu bar. |
menu.showLocations | bool | Show the Locations menu in the menu bar. |
The last two also live under the Menus section of the pane, alongside the App Settings… (⌘,) button. Hide a menu you never use; show it again the moment you do.
17.3Accounts and advanced settings
Two panes sit just outside Settings but are worth naming here. The Accounts pane (sidebar ▸ Accounts) is not about billing — it connects FrontierStack to a directory service (Active Directory, Microsoft Entra ID, Okta, OpenLDAP, FreeIPA, 389 Directory Server, Jamf or a local/remote Open Directory), tests the binding, and imports user accounts. It also includes an Open Directory editor for managing OD users and groups on a Mac that runs one. Directory work is covered with the rest of identity in Chapter 10.
"Advanced settings" in FrontierStack means the per-site Advanced Settings sheet for a website — the full Apache <Directory> and <VirtualHost> editor (Options flags, AllowOverride, Require rules, ServerAdmin, custom ErrorDocument). You reach it from a site in the Sites pane; anything the form doesn't model is editable through Edit as Text…. It is documented with the web stack in Chapter 7.
17.4Custom Instructions for the AI
The single most powerful "setting" for the AI is not in the Settings pane at all: it is the Custom instructions bar at the bottom of the AI Administrator pane. The text you write there (stored as frontierstack.md) is appended to every AI request — the assistant chat, one-shot Ask AI, skills, and the MCP server — so it is the right place to state persistent preferences once: your preferred language and tone, things the assistant should always or never do, and facts about your setup it should assume.
Click Custom instructions to expand the editor, toggle Add my instructions to every AI prompt, and type. Examples that work well: "Always reply in Japanese", "Prefer Homebrew over Docker", "Never restart MySQL during business hours (09:00–18:00)", "My production fleet host is web1.example.com". Save with the Save button, or open the file in your external editor. Because this file flows through the whole harness chain, it complements — but does not replace — the trust model in Chapter 13: instructions steer the AI's behaviour, while the read-only default and per-action approvals govern what it is allowed to do.
DB_PASSWORD); the value is injected as an environment variable at run time and never sent to a cloud model. Reference secrets in scripts as $NAME. See Chapter 13.17.5Command-Line PATH and Homebrew
Two reference panes from Chapter 2 belong to the same family of app-level controls. The Command-Line PATH pane (sidebar ▸ Command-Line PATH) shows the directories a login shell searches for commands and lets you add your own to a managed block in ~/.zprofile (or the profile you choose); entries you add are prepended to PATH and take effect in a new terminal. The app already deep-resolves tools through the shell, so this is mainly to make commands such as mlx_lm.server resolve instantly. The Homebrew pane installs and updates Homebrew itself and the formulae behind many services. Both are covered in full when you first set up the app; this chapter simply notes that they live alongside Settings as the place to manage the command environment.
17.6Licensing
FrontierStack is a free download with paid tiers, sold and billed through Square — card data is vaulted by Square, never seen by FrontierStack. After purchase you receive a licence code in the form FSK-XXXX-XXXX-XXXX. Open Settings ▸ License & Subscription ▸ Activate License…, paste the code, and this Mac is bound to your plan. Promo codes are applied at checkout on the website.
| Tier | Price | Servers | Notes |
|---|---|---|---|
| Free mode | Not a checkout plan | 2 | The built-in fallback without a paid entitlement; limited features. |
| Standard | ¥15,000/year or ¥45,000 one-time | 10 | Add-on server packs widen the limit. The one-time purchase receives Lifetime status. |
| Standard — Bleeding edge | ¥7,500/year | 10 | Campaign subscription with no price rise after year one while it remains active. |
| Full Fleet | ¥45,000/year | Unlimited | Everything, plus the Wild Frontier update channel. No one-time or Lifetime option. |
The section shows your tier, a status pill (Active, Lifetime, Past due, Canceled), the renewal date, your licence code and this Mac's server cap. Manage / Renew… and Buy / Upgrade… open the website; the ⋯ menu offers Check status now, Deactivate this Mac and Sign out. One licence equals one Mac, but you can self-transfer it to a new Mac a limited number of times per year — the old Mac quietly drops to Free on its next check-in. The same self-serve status and seat list are available on the My Licence web page at frontierstack.app/license. The identical controls also live in a dedicated Licences pane in the Overview group of the sidebar, for when you want a full-window view rather than the Settings section.
machine_id = SHA-256(IOPlatformUUID + bundle id), so copying the app to another Mac does not copy the licence. The app trusts the token until it expires plus a grace period, then refreshes; if a paid plan lapses it degrades to Free mode. Lifetime applies only to a one-time Standard purchase and never lapses; Full Fleet has no Lifetime option. This is a deterrent, not heavy DRM — reads keep working; only the limits and premium features are gated.17.7Updates
FrontierStack updates itself with Sparkle, driven by the in-app UpdateManager. The Updates section of Settings is the whole control surface. Automatically check for updates and Download updates in the background are on by default: a new build downloads silently and then offers an Update button that installs it and relaunches the app. Press Check Now any time; the current version is shown beside it.
The Check for updates menu sets how often the background check runs. Automatic (the default) checks daily — more often on Wild Frontier — while Once a day, Every 3 days, Once a week and Every 2 weeks pin a fixed interval, so if daily prompts feel noisy you can drop back to, say, a weekly check. It has no effect while automatic checking is off, and Check Now always works regardless of the interval.
There are two channels. Stable is the default and ships only when there is enough to justify an update. Wild Frontier delivers frequent, roughly every-other-day bug-fix builds — turn it on if you have requested a change and want the fix fast. To switch, choose it from the Update channel picker. Wild Frontier early builds require a Full Fleet plan; every other plan always receives Stable updates, and the pane tells you so if your tier can't opt in.
17.8Telemetry & privacy
FrontierStack collects a deliberately small amount of anonymous usage data, and you can switch all of it off. The Privacy & Diagnostics section has two toggles, both on by default. Share anonymous usage analytics sends a small daily ping to frontierstack.app; Send crash reports adds a technical backtrace, and only after you approve the prompt that appears when the app has crashed.
The analytics ping contains a random install ID (no account, no login), the app and macOS version, your hardware model and locale region, your update channel, and whether you used any AI feature. Your country is derived server-side from your IP by Cloudflare. No documents, file contents, configuration, keys, passwords or personal data are ever sent. Crash reports add only a kind, message and stack trace, written locally first so you can decline before anything leaves the Mac.
Two more sections round out the pane: Capabilities exports CAPABILITIES.md and capabilities.json — a complete, live description of every service and AI tool — for handing to an external AI engine; and the Cloud Services, Backups (Local Git), Amazon S3 and Cloud Sync (rclone) sections configure where settings backups and site files are stored. With Settings, licensing, updates and privacy understood, turn to Chapter 18 for keyboard shortcuts, the URL scheme and troubleshooting.
Chapter 18
Keyboard, URL Scheme & Troubleshooting
The fast paths and the safety nets: shortcuts, deep links, the app's own logs, and a calm answer for the handful of things that go wrong.
This closing chapter is the reference you reach for when you already know what FrontierStack does and just want to do it faster — or when something is red and you want the shortest route to green. It collects the keyboard shortcuts, the frontierstack:// URL scheme, where the app keeps its own logs, and a symptom-to-fix table for the problems that actually come up. None of it is essential reading; all of it saves you time.
18.1Keyboard shortcuts
FrontierStack is a native Mac app, so the system shortcuts you already know — ⌘W to close a window, ⌘, for Settings, ⌘Q to quit — all work. On top of those, the app adds a small, deliberate set of its own. The philosophy is restraint: most actions live on clearly labelled buttons, and almost every dialog follows the Mac convention that Return confirms and Esc cancels, so you rarely need to memorise anything.
| Shortcut | Does | Menu equivalent |
|---|---|---|
| ⌘F | Open the Search palette — find any service, tool, pane or action by name and jump straight to it. | Toolbar magnifying-glass button |
| ⌘? | Open the in-app Help window. | Help ▸ FrontierStack Help |
| ⌘⌥⇧W | Close all floating palettes at once. | Palettes ▸ Close All Palettes |
| Return | Confirm the default button in any sheet (Save, OK, Add, Install…). | The highlighted button |
| Esc | Cancel or dismiss the current sheet or palette. | Cancel / Done button |
The menu bar carries the rest of the app's reach: dedicated Services, Locations, Monitors, Presets and Palettes menus let you switch a service, change location, toggle a monitor, apply a saved preset or pop out a floating palette without leaving the keyboard. Because these are real menu commands, macOS lets you assign your own shortcut to any of them under System Settings ▸ Keyboard ▸ Keyboard Shortcuts ▸ App Shortcuts — add FrontierStack, type the menu item's exact name, and pick a key.
18.2The frontierstack:// URL scheme
FrontierStack registers the frontierstack:// URL scheme, which deep-links straight to any pane, server or service. Opening such a URL brings the app to the front and navigates — expanding the right sidebar group and scrolling to the destination. This is how a link in a note, a Shortcuts action, or a line in a script can send you (or a teammate) to exactly the right screen.
From Terminal you trigger one with open; from Shortcuts use the Open URLs action; in a note or web page it is an ordinary link. The forms are:
| URL | Goes to |
|---|---|
frontierstack://server/<name-or-id> | That fleet host's pane (falls back to Local Health if unknown). |
frontierstack://website/<domain> | The Sites pane. |
frontierstack://container/<name> | The Docker pane. |
frontierstack://pane/<Name> | Any pane by its display name, e.g. pane/Security, pane/Apache, pane/Alerts. Spaces are URL-encoded (%20). |
frontierstack://service/<catalog id> | A catalog service by its id. |
frontierstack://kube/<context> | A Kubernetes context (or the Clusters pane with no argument). |
frontierstack://security · ://alerts · ://health | Shortcuts to the Security, Alerts and Local Health panes. |
frontierstack://device/<id> · ://wifi/<ssid> · ://zone/<id> | A discovered device, a Wi-Fi network, a Cloudflare zone. |
frontierstack://open?sel=<raw> | The exact escape hatch: an internal selection value that round-trips precisely. |
A few worked examples:
open "frontierstack://pane/Security"
open "frontierstack://server/mac-mini-office"
open "frontierstack://website/example.com"
Deep links are the connective tissue of automation in FrontierStack. A preset can include a link that jumps to its dashboard; a runbook in Notes can link each step to the pane where you carry it out; an alert message can point at the failing service. The same scheme also names two read-only resources for AI — frontierstack://capabilities and frontierstack://health — that the MCP server exposes (see Chapter 14).
frontierstack:// URL brings the window forward so you can unlock, but it will not navigate — external automation cannot move the app around behind the lock screen.18.3Reading the app's own logs
When you need to know what FrontierStack itself did — not what a service did, but the app — there are three places to look, in increasing depth.
- The Change Log (Audit). The Logs pane includes a Change Log that records every setting and configuration change with the responsible actor: User, the AI Harness, the Web control panel, MCP, or Automation. If a service goes down, this tells you exactly what touched it and who or what was responsible — the fastest first question in any incident.
- The in-app console. Installs and shell commands run in a real terminal window inside the app (a PTY, so password prompts and y/n questions work), streaming live output. Because the app knows when the command finishes, it refreshes the pane that launched it. You can export a console transcript from its actions bar. Theme it under Terminal Style in Overview.
- The log files. FrontierStack writes its own log to
~/Library/Logs/FrontierStack. Open that folder in Finder, or read it in Console.app, when you want the raw record — it is the most detailed account of what the app was doing. The Auto-export feature (Overview ▸ Settings) can copy these logs, your change-log and settings backups to a folder on a schedule.
read_log tool accepts a source of "frontierstack" to tail ~/Library/Logs/FrontierStack, "os" for the system log, or a service name like "nginx" or "postfix". On a linked server it reads over SSH, and output is capped and secret-redacted before any of it reaches a cloud model (Chapter 13).18.4Common problems & fixes
Most trouble in FrontierStack is one of a small, familiar set, and the app usually offers the fix as a button rather than a chore. The table below maps the symptom you see to the shortest route back to green.
| Symptom | Likely cause | Fix |
|---|---|---|
| A service won't start. | A port is already in use, the binary isn't installed, or the config is invalid. | Open the service's pane and read the status detail. Use Ports in Use to find a conflict; install or repair via Homebrew; for web servers, validate the config before reloading. The AI Administrator's repair_service can diagnose and fix common cases on your approval. |
| A linked server's status dot is red: "Permission denied (publickey)". | The server was reinstalled, its host key changed, or the app's SSH key was never installed. | Run Repair SSH access (the AI's repair_ssh_access tool, Chapter 8). It clears the stale host key and re-installs the app's managed key using a one-time login password stored as a vault secret — the password is read locally and never sent to the model. The dot turns green on success. |
| Alerts aren't arriving. | A channel is misconfigured: a wrong token, an unverified sender, a bad webhook. | Open Alerts. A per-send Delivery Errors section lists exactly which channel failed and why; fix the credential and Clear delivery errors. Send a test to confirm before relying on it (Chapter 11). |
| The AI refuses an action. | It is read-only by default, or a specific server toggle is off. | Enable Allow changes (and Allow scripts if it wants to run one) on the AI Administrator, or the relevant per-server toggle. The refusal message names the exact setting — see below. |
| Homebrew is missing. | The package manager many services rely on isn't installed. | Open the Homebrew pane (Overview). The app can install Homebrew for you and then offers one-click installs of formulae from each service's pane. |
| A certificate isn't trusted. | A self-signed or local certificate the system doesn't yet trust. | For local development, issue with mkcert, which installs a trusted local CA; for public sites use Let's Encrypt. Manage both in Certificates and the Sites ▸ TLS tab (Chapter 7, Chapter 10). |
18.5MCP onboarding & the actionable refusal
The first time the app sees a chance to, it asks — once — whether you would like to start the MCP server so an outside AI tool (Claude Code, Cursor, Claude Desktop) can drive FrontierStack. The prompt explains the model plainly: the server is localhost-only, token-protected, and read-only by default. Start MCP server turns it on; an optional toggle on the same sheet lets you allow changes there and then; Not now simply remembers that you were asked. The server stays off until you choose otherwise (Chapter 14).
This connects to a small design idea that runs through the whole app. When any external surface — the MCP server, an App Shortcut, the AI — refuses to make a change, it does not just say "no". It tells you why, and where to turn it on. A refusal might read: changes are off — enable them in the AI Administrator; or, for MCP, enable it in Remote Control & Lock ▸ MCP. The reason it points you to the app rather than offering to flip the switch itself is the core of the trust model: a remote agent can ask, but only you, at this Mac, can grant. A refusal is therefore never a dead end — it is a signpost to the one toggle that unblocks you.
18.6Getting help
Three resources back you up, in order of immediacy.
- The in-app Help window. Press ⌘? or choose Help ▸ FrontierStack Help for the built-in documentation, which leads with the AI features and covers every pane and service. Many panes also carry a ? button that opens Help at the matching section. Help's "Open in app" links jump you straight to the pane they describe — Help stays open while the main window comes forward.
- The website Help & FAQ. frontierstack.app/help mirrors the in-app documentation in a browsable form, and the FAQ answers the questions new users ask most. Migration guides live at frontierstack.app/migrate.
- Support & feedback. At frontierstack.app/support two short forms reach the team directly: a support request (include your macOS version) when something is wrong, and a feature request for what would make FrontierStack better. Both go straight to the people who build the app.
That brings the manual to a close. You have met FrontierStack as a control panel, a monitoring system and an AI administrator; you have stood up the web stack, linked a fleet, hardened the perimeter, wired up alerts, and handed the keys — carefully, on your terms — to an assistant that can see and fix your servers. The rest is doing. Keep ⌘? close for the in-app Help, visit frontierstack.app when you want the latest, and tell us at Support what you would like next. Thank you for running your servers with FrontierStack.