FrontierStack User Manual Manual home
Desktop Manual Mobile Manual 日本語 frontierstack.app ↗

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.

Version 1.0.0 · First Edition · August 2026
Published by Enfour, Inc.

Table of Contents

Getting Started
  1. 1Introduction
  2. 2Installation & First Run
  3. 3The Interface
Running Services
  1. 4The Web Stack
  2. 5Databases & Data
  3. 6The Service Catalog
  4. 7Sites, Domains & the Web
Fleet, Network & Security
  1. 8Connecting Servers: Locations & the Fleet
  2. 9Networking & the Perimeter
  3. 10Security & Hardening
  4. 11Monitoring & Alerts
Automation & AI
  1. 12Scripts, Cron & Automation
  2. 13The AI Administrator
  3. 14MCP & Driving FrontierStack from Your Own AI
  4. 15The AI Stack
Business & Reference
  1. 16Business & Vertical Solutions
  2. 17Settings, Licensing & Updates
  3. 18Keyboard, URL Scheme & Troubleshooting

Part I

I

Getting Started

What FrontierStack is, how it thinks, and how to get it running on your Mac.

1

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.
screenshot to be added
Figure 1.1. The FrontierStack main window: the service sidebar on the left, the active pane in the centre, and live health at a glance.Capture: open the app at the Local Health pane with a few services running, sidebar expanded

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 .env vault. 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.
SecurityThe AI Administrator, the privileged helper and every remote action are off until you enable them. Nothing in this manual happens behind your back; each capability is something you switch on deliberately. See Chapter 13 for the full trust model.

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.

TermWhat it means
ServiceAnything 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).
PaneA screen in the app for one service or tool, opened from the sidebar.
The helperA small privileged tool (an SMAppService daemon) that performs admin actions without a password prompt each time. Optional; you install it on first run.
LocationWhere the Mac is on the network right now (home, office, away). Locations make alerts and reachability network-aware (Chapter 8).
Linked serverAnother machine you have connected over SSH so FrontierStack can run diagnostics and scripts on it. Your fleet is all of them together.
The AI AdministratorThe built-in tool-using assistant. Also called the AI Harness. Covered in depth in Chapter 13.
MCPModel 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 vaultA 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.

2

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:

RequirementDetail
macOSmacOS 13 (Ventura) or later. The optional helper uses SMAppService, which is a macOS 13+ API.
ArchitectureApple silicon or Intel. The app manages the Homebrew stack at /opt/homebrew on Apple silicon (or /usr/local on Intel).
HomebrewRecommended but not required to launch. Most services are installed as Homebrew formulae; FrontierStack can install Homebrew for you (see below).
Admin accountAn 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.

  1. 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.
  2. 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.
  3. 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.

screenshot to be added
Figure 2.1. The main window on first launch, before any services are installed: sidebar on the left, the health overview in the centre, and the helper-install prompt at the bottom of the sidebar.Capture: open the app on a clean Mac with no services running, sidebar expanded, the "Install helper" affordance visible at the foot of the sidebar

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.

  1. Click Install on the helper row at the bottom of the sidebar.
  2. 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.
  3. 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.

SecurityThe helper is signed by the same Enfour, Inc. team (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.

NoteWhy a separate package manager at all? FrontierStack manages real services using the tools macOS and Homebrew already ship, rather than bundling its own copies. That means the versions you run are mainstream, updatable, and identical to what you'd get on the command line — no proprietary fork to get stuck on.

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.

  1. 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_sources tool runs the same read-only scan.)
  2. 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.
  3. For settings, the Import All Settings action copies the source's php.ini, my.cnf and nginx.conf over the matching Homebrew config. A .pre-mamp.bak backup of each file is kept so you can compare or revert.
  4. 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.
  5. Review afterwards. Source configs often reference the old tool's paths and ports (for example MAMP's extension_dir, datadir, socket, or port 8889), 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.

WarningMigration is a big, partly irreversible operation. It installs Homebrew services, overwrites the matching Homebrew config files, and imports databases and vhosts. Back up anything precious first, and always run the detection scan and review the plan before choosing Import Selected. The .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:

WhatWhere
App settings & data~/Library/Application Support/FrontierStack/
Secrets & tokensThe 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.

3

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.

screenshot to be added
Figure 3.1. The FrontierStack main window: the categorised service sidebar on the left, the active pane in the centre, and the toolbar across the top.Capture: open the app on a pane with a populated sidebar (several services and a couple of pinned servers visible), sidebar expanded to a comfortable width

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 categoryWeb 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.

TipThe sidebar is not a fixed menu — it is your menu. With a thousand services in the catalog, the point is to show only the handful you run. Hide aggressively; you can always bring something back from Search or the Presets menu.

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.

NotePresets, Setups and Hide are purely about the interface. They never start, stop or change a service — they only decide what you look at. Nothing you do here can break a running server.

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.

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.

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.

TipWhen the manual tells you to open a pane you do not see in your sidebar, do not go hunting — press ⌘F and type its name. Search reaches hidden panes, so your tidy sidebar costs you nothing.

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.

SecurityThe Share-with-AI lock is the boundary between your secrets and the model. A locked note is invisible to the assistant — it cannot list it, read it or leak it. Unlock deliberately, per note, only for the credentials a given task needs. See Chapter 13 for how shared notes feed the AI's tools.

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

II

Running Services

Running the web stack, databases, the service catalog and your sites on the Mac in front of you.

4

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.

NoteAll of FrontierStack’s own additions to Apache live in an app-managed config tree at /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:

SectionWhat it does
PortsSet 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 ModuleChoose which version’s mod_php (libphp.so) Apache loads for websites — see the next section.
WebDAVEnable 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.

WarningEditing 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.so Apache 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.

screenshot to be added
Figure 4.1. A virtual host’s settings: ServerName, document root, bind address and port, with TLS and PHP options.Capture: open the Apache pane, select a site in the Websites list, and show its settings editor with ServerName and document root filled in
TipBind a site to 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:

MethodUse 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 CertificateA 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.

Securitymkcert’s local CA is trusted only by the Mac it runs on, and Let’s Encrypt certificates are real public certificates — never use a self-signed certificate for a site the public will visit. The Cloudflare API token for DNS-01 issuance is stored as a 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 so myapp.test resolves 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, unbound or nsd; 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.

The same tools the AI uses
Everything in this chapter is also available to the AI Administrator (Chapter 13) and to outside AI tools over MCP (Chapter 14) through the same guarded actions: 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.
5

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.

screenshot to be added
Figure 5.1. The MySQL pane: server status, the listening port, and the list of databases with start/stop controls.Capture: open the MySQL pane with the server running and two or three databases listed
NoteThe no-password local 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.

SecurityNever paste a database password into a chat box, a SQL tool field, or a script body. Add it to the .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.

EngineKindPort
MySQL / MariaDBRelational3306
PostgreSQLRelational5432
RedisIn-memory cache / streams6379
MemcachedIn-memory cache11211
QdrantVector (RAG / embeddings)6333
ChromaVector (embeddings)8000
WeaviateVector (hybrid search)8080
MilvusVector (distributed)19530
pgvectorVector (Postgres extension)5432
ClickHouseColumnar OLAP analytics8123
InfluxDBTime-series8086
TimescaleDBTime-series (Postgres ext.)5432
Apache DruidReal-time OLAP8888

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.

Why a vector database?
A vector database stores text as numeric embeddings so you can search by meaning rather than keyword. It is the memory behind RAG: the AI stack embeds your documents, stores the vectors here, and retrieves the most relevant passages to ground a model's answers. 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.

WarningRestore is destructive. Importing a .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.

WarningDatabase repair, restore and rebuild are irreversible enough that FrontierStack requires a high-end model to run them — a small or on-device model can read the log and diagnose, but the destructive steps are hard-gated to a frontier model (see Chapter 13). And the safety net is the backups above: a rebuild is only as good as the dump it reloads, so keep the scheduled dumps healthy.

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.

6

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)

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)

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)

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)

7

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.

CheckHow it is measuredWhat a problem looks like
DNSA real resolver lookup of the hostname (host/dig) and the IP it returns.No record, or an address that is not your server.
HTTPA live request that records the status code (curl -w %{http_code}).Anything outside 200–399 — a 404, a 502, a redirect loop.
SSL / TLSA TLS handshake reading the certificate end date (openssl s_clientx509 -enddate); the badge shows days remaining.Expired, expiring soon, or a name that does not match.
HTTP/3A 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.
CloudflareZone 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 hostDerived from the answering IP and the Server header."This Mac (Apache)" when you expected a remote box, or "Cloudflare" masking the origin.
screenshot to be added
Figure 7.1. The Domain Health dashboard at the top of the Sites pane, with DNS / HTTP / SSL badges and the serving host for each domain.Capture: capture: Sites pane scrolled to the top showing the Domain Health section with three or four domains, mixed green and amber badges, one showing "CF: active · Pro" and a serving-host label
NoteThe dashboard does not store your sites — it reads them. Local vhosts live in the Sites configuration, remote vhosts come from each linked server's Apache snapshot, and the rest come from Cloudflare and the registrar monitor. Add a site, link a server or paste a Cloudflare token and it simply appears here on the next check.

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.

TipThe AI SEO and Fix My Site actions reuse the one-shot, read-only harness, so they cost nothing extra to run and never touch your server unless you have explicitly turned changes on. Run the SEO audit before and after a content change to see the score move.

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 whois fallback). 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.

WarningA lapsed domain is the one outage no restart fixes — once it expires it can be snapped up by someone else within hours. Set a comfortable reminder window (30–60 days) and wire the registrar alerts to a channel you actually read; this is the cheapest insurance in the whole app.
Buying a domain
The same pane has a Register a new domain form. Type a name to check availability and price, then register through Porkbun or Namecheap — the buy step always previews first and only spends money when you confirm. The AI can do this too via the 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-onlyissue_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.

NoteIndexNow covers the IndexNow-participating engines. Google does not use IndexNow — for Google, FrontierStack verifies the domain in Search Console and submits the sitemap through the 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:

  1. Discover — inventory the target, its privilege access, installed Apache/Nginx and connected DNS provider; identify or install missing prerequisites before making a public change.
  2. Zonecloudflare_zone_create makes 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).
  3. Vhost + foldervhost_create defines 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.
  4. DNSdns_record points the name at the host.
  5. TLSissue_certificate issues a Let's Encrypt certificate.
  6. Preview — a temporary share for a localhost test point (Chapter 9).
  7. Promote — optionally promote_site clones 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.

SecurityEvery provisioning tool is mutating and therefore gated: nothing creates a zone, writes a DNS record, issues a certificate or buys a domain unless Allow changes is on and you approve the action. Cloudflare and registrar tokens stay in the local vault — they are injected at run time and never sent to the model. See Chapter 13 for the full trust model.

Part III

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.

8

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.

NoteIf Location Services is off, denied, or simply has no fix yet, every GPS rule is skipped and matching behaves exactly as it did before — network signals only. The feature can only make detection more accurate, never less available. FrontierStack already asks for Location access to read Wi-Fi network names, so pinning a spot needs no new permission.
SecurityCoordinates are stored on your Mac alongside the location and are never sent to your phone or anywhere else — the companion app only ever sees a phrase like "within 150m of a pinned spot". Positioning is deliberately coarse (hundred-metre accuracy), which is ample to tell two sites apart without holding a precise-GPS session open.

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.

screenshot to be added
Figure 8.1. The Locations pane: the current location at the top with its live Wi-Fi/IP/VPN snapshot, the saved locations below, and the location-dependent monitoring list.Capture: open Locations & Places ▸ Locations with two or three locations defined and one device scoped to a location
Why a laptop needs locations
A Mac mini bolted to a rack is always on the same network, so it never needs locations. A laptop is the opposite: it roams. Without locations, a LAN-only check ("is the office NAS up?") fails the moment you leave the building, and you get paged for nothing. Locations make reachability honest — checks only run where they can actually succeed.
NoteThe AI Administrator can read this with the 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.

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.

SecurityThe login password you type into Link a Server never leaves your Mac and is never stored — it authenticates one connection to copy the public key, then is discarded. Access afterwards is key-based and passwordless. The 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.

SecurityPer-host sudo passwords live in the Keychain, keyed to the host. They are handed to 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.

OperationWhat it does across the fleet
Update / upgrade all packagesRuns the host's package manager's update + upgrade. Confirmed before it fans out.
Install a packageInstalls a named package (e.g. htop) on every selected host.
Restart a serviceRestarts a named unit (e.g. nginx) via systemd or brew.
Check reboot-requiredReports which hosts are waiting on a reboot after updates.
Disk usage (df)One-shot df across the fleet to spot a filling disk.
Uptime & loadUptime and load average per host.
git pull a repoPulls a repository at a given path on each host — a quick deploy.
Custom commandRuns 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.

WarningThe Custom command and Update all operations run with a destructive-action confirmation because they execute verbatim on every selected host simultaneously. A typo fans out everywhere. Select a single canary host first when trying something new.

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.

ToolPurpose
Ping · Traceroute · WhoisBasic reachability, path and registration lookups, run from the chosen node.
Net Info · NetstatInterfaces and addresses; routing table, interface/protocol stats, active sockets.
Port Scan · Port Check · Web CheckScan a range, test a single port, or fetch an HTTP/HTTPS endpoint and report the status.
TLS Inspect · TLS ExpiryInspect a certificate; check expiry across selected nodes at once.
System Resources · Listening PortsLoad, memory and disk for the node; what's listening (optionally with sudo).
Tail Log · Config TestTail any log path; validate the web server's configuration.
File Diff · HealthcheckCompare a file's contents across nodes (drift); hit a vhost's paths over loopback on each node.
rsync DeployPush a local folder to a remote path — with a dry-run preview and an optional --delete.
Security · SSH · Exposure · Auth · User auditsRead-only audits (see Chapter 10) on any node or ad-hoc IP.
Flush DNS · Restart BackendFlush 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.

WarningThe emergency shutdown actions use the database credentials you saved in Database Health and send privileged commands (read-only, flush, shutdown) over the database's network port. They're deliberately framed in red, gated behind a confirmation for anything that stops a service, and meant only for a server that is genuinely wedged — try a normal Reboot first.

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 Behaviour &amp; History chart: CPU, memory, disk and crash-reporter curves over 24 hours, a solid red line marking a reboot, and a "no unusual behaviour" verdict against the learned baseline &mdash; 5-minute resolution, 30-day retention.
Figure 8.2. The Behaviour & History chart: CPU, memory, disk and crash-reporter curves over 24 hours, a solid red line marking a reboot, and a "no unusual behaviour" verdict against the learned baseline — 5-minute resolution, 30-day retention.Capture: capture: an enrolled host's pane scrolled to Behaviour & History on the 24-hour tab, with at least one reboot line visible.

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.

NoteIn the interface these helpers are deliberately called Monitors / the Host Monitor, never "agents", to keep them distinct from the app's AI agents. A monitor watches and reports; the AI Administrator is the thing that reasons and acts.
SecurityThe Host Monitor ships read-only and stays that way until you explicitly enable Allow actions — and even then it can only run a fixed allowlist of verbs, never an arbitrary command. Its control plane is TLS with a pinned certificate and a per-host bearer token you can rotate at any time; self-updates are release-signature verified, self-tested and auto-rolled-back. Revoke and re-enrol one host without touching the rest.

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.

screenshot to be added
Figure 8.3. The Apache pane with its host selector set to a linked server, showing the remote server's discovered vhosts with Error log / Access log and Edit buttons.Capture: open Apache, switch the host picker to a linked Linux or macOS Server host that has a saved sudo password, show 2–3 discovered vhosts

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.

WarningA power-cycle cuts mains power to the machine — unsaved work is lost and a disk caught mid-write can corrupt. Try a normal reboot first; use the hard cycle only when the host is genuinely unresponsive.

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.

NoteBefore you migrate, watch the old box. The Server.app web stack fronts ports 80/443 with Apple’s 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.
NoteDiscovery on a remote Mac runs 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.

9

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.

DeviceHow FrontierStack reaches it
OPNsenseFull REST API — live status, firewall rules, port-forward (rdr) for the perimeter
pfSenseREST via the API package
MikroTik RouterOSREST API (RouterOS v7+)
Ubiquiti UniFi / EdgeOSController / gateway API key
OpenWrtLuCI / ubus API
DD-WRTWeb admin / SSH
ASUSWRTRouter web API / SSH
FRITZ!BoxTR-064 / web admin
TP-Link OmadaController API
screenshot to be added
Figure 9.1. The Router & Network pane showing a configured OPNsense gateway with its WAN links and interface list.Capture: capture: open Router & Network with one OPNsense device added, expanded to show WAN/gateway status
NoteA router does not need API credentials to be seen. If you pinned it through Device Discovery (below) but never added a key, 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.

SecurityThe router security signals are read-only monitoring, not a substitute for the appliance's own logging — but an orange dot the moment Suricata fires, someone brute-forces the admin, or the box reboots unexpectedly is often the earliest warning you will get that something is wrong at the perimeter. Wire these to an alert channel (Chapter 11) and treat an unexpected router reboot or a failed-login spike as an incident until proven otherwise.

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-snmp and lldpd are 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.

TipFound only this Mac and the gateway? That is almost always client isolation (common on guest Wi-Fi) or VLAN separation — the AP or switch is blocking device-to-device traffic. Many smart-home gadgets are 2.4 GHz-only too; if your bands are separate networks, scan that subnet explicitly with the field in the pane.

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.

SecurityForwarding a port punches a hole in your perimeter that stays open until something removes it — the single most common cause of accidental exposure. Open a port only for a service that is hardened and authenticated, prefer the tunnel methods below (which need no inbound port at all), and review forwards regularly in your router. A perimeter forward also needs a public, non-CGNAT IP to work; behind carrier-grade NAT it cannot.

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.com URL with no account, or a named tunnel for a permanent hostname.
  • TailscaleServe 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:

NetworkWhat it is
WireGuardModern, fast kernel VPN tunnels — the base layer most of the rest build on
TailscaleWireGuard mesh with exit nodes and subnet routers, set up over SSH or the OPNsense API
HeadscaleSelf-hosted, open-source Tailscale control server
NetBirdOpen-source zero-trust networking, self-hostable
NebulaLightweight overlay mesh (Slack / Defined Networking)
ZeroTierZero-trust SD-WAN / virtual networks — agent plus API
NoteTunnels and a mesh are also how the forthcoming iOS companion app reaches your Mac from anywhere — over your LAN, Tailscale or a Cloudflare Tunnel — without exposing anything to the open internet. Each device authenticates with its own signed-request key.

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.

NoteA network ID embeds its controller's identity, so networks can never be moved between controllers and cannot be carried over from Central — migrating means recreating the configuration and having members re-join the new ID. It also makes 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.

screenshot to be added
Figure 9.2. The Power over Ethernet pane: a switch's power budget above its port list, with one port mid power-cycle.Capture: capture: open Power over Ethernet with one switch added and its ports listed

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.

MethodReach
Cloudflare Quick TunnelPublic *.trycloudflare.com URL, no account — ideal for a quick client or phone preview
Tailscale ServePrivate — reachable only inside your tailnet
Tailscale FunnelPublic, through your Tailscale node (Funnel must be enabled in the tailnet)
LAN forwarderA 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.

SecurityDebug Share is built around a TTL: every session carries an auto-close timer and is also torn down when the app quits, so an exposure cannot outlive your attention. Keep the window short, prefer the tunnel methods (which open no inbound port), and remember that a Quick Tunnel URL is public to anyone who has it for as long as it lives.

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.

Notecloudflared 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.
10

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.

screenshot to be added
Figure 10.1. The Security pane: firewall state at the top, then intrusion prevention, the SSH-hardening audit, and the open-ports list.Capture: open the Security pane on a host with fail2ban installed and a few listening ports, scrolled to show the Application Firewall summary and the Open Ports section
WarningA deny rule on the wrong port can lock you out of a remote host — including the SSH port FrontierStack itself uses to reach it. Before tightening pf or 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.

SecurityServer Security is strictly read-only — it opens no rules and installs nothing. That is deliberate: a posture scan you can run against a production host without a change window is one you will actually run often, and running it often is what catches the firewall someone left off after a maintenance window. Wire a High finding to an alert channel (Chapter 11) so the scan tells you the moment a host drifts.

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.

SectionWhat it checks
ProtectionsApple'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 & AutorunsThird-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 ScanSignature-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 ScanRule-based classification against IOCs and malware families, using YARA-X (yr) or classic YARA. Pair it with rules from your threat-intel feeds.
File ReputationComputes 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.

The Malware Audit pane's top section: Apple's built-in protection layers &mdash; Gatekeeper, SIP, FileVault disk encryption and XProtect &mdash; each checked with a one-line explanation and a Re-check button. Below this (not shown) it lists persistence/autoruns and runs the ClamAV and YARA scanners.
Figure 10.2. The Malware Audit pane's top section: Apple's built-in protection layers — Gatekeeper, SIP, FileVault disk encryption and XProtect — each checked with a one-line explanation and a Re-check button. Below this (not shown) it lists persistence/autoruns and runs the ClamAV and YARA scanners.

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.

NoteEDR Fleet does not replace your vendor's console — it aggregates the headline numbers so a single board tells you "everything is connected and quiet," and pages you the moment a console stops answering. The counts are best-effort against each vendor's documented endpoints; verify against your own tenant before acting on them.

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).

WarningThe target must be a git repository (Sandcastle snapshots the tree via a git worktree), and a folder containing credential files — .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.

SecurityStrix actively probes its target, so a scan will not start until you tick “I own this target or have explicit permission to test it.” Only ever point it at systems you own or are explicitly authorised to test.

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 DNSemail_auth_dns builds 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. With publish=cloudflare it creates the records for you; otherwise it prints the exact records to paste into BIND, dnsmasq or your registrar.
  • DKIM keysgenerate_dkim_key runs opendkim-genkey on 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 hardeningharden_mail_postfix applies safe defaults over SSH with postconf: 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 testtest_open_relay runs 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).
WarningOn a Mac running the classic macOS Server, Postfix may be managed by 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.

NoteIf you select Password required without having set a password, external changes are blocked rather than downgraded to a prompt. A strict setting that silently became the weakest one would be worse than no setting at all.

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:

ScopeRead status & logsRestart servicesFleet opsTools / CLI / scripts
readOnlyYes
restartYesYes
operateYesYesYes
fullYesYesYesYes

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.

SecurityPair each device at the lowest scope that does its job — a phone that only needs to bounce a stuck service should be paired at 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.

11

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.

screenshot to be added
Figure 11.1. The Local Health board: grouped UP/DOWN rows with an "X up / Y down" summary at the top.Capture: open Overview &#9656; Local Health with a mix of healthy and one or two down items across services, fleet and certificates

11.2The Alerts pane: what is watched

The Alerts pane: the monitoring toggles (critical services, intrusions), the reboot-grace window that suppresses alerts during a quick reboot, and scheduled AI evaluation reports &mdash; shown switched off in a fresh setup.
Figure 11.2. The Alerts pane: the monitoring toggles (critical services, intrusions), the reboot-grace window that suppresses alerts during a quick reboot, and scheduled AI evaluation reports — shown switched off in a fresh setup.

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 vs max_connections and 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.

TipTwo settings keep alerting low-noise. A reboot grace means a target must stay down for the grace period before a "down" message is sent, so a server that is merely rebooting never pages you; reboots you trigger from inside the app are paused automatically for about ten minutes. And if several VPN-dependent services drop together while the VPN is down, you get one "VPN down" message instead of a flood. Use Send Test Alert and Check Now to confirm both wiring and thresholds before you rely on them.

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).

GatewayBest for
TelegramA 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 / DiscordIncoming webhooks into a team channel; route ops alerts where the team already talks.
ntfySimple phone push via the public server or your own self-hosted ntfy.
AppriseOne 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 / WhatsAppReaching a phone directly, via Twilio or the WhatsApp Business Cloud API.
Slack/Discord webhooksPersistent team-visible history of every alert and recovery.
KakaoTalkA "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.

SecurityAlert delivery is one of the few things FrontierStack does entirely on your Mac. Bot tokens, SMTP passwords and webhook URLs are stored in the Keychain; iMessage and KakaoTalk go through your own logged-in account. Nothing about your fleet's health is relayed through a FrontierStack server.

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:

SymptomLikely cause & fix
Email rejected at sendA blank SMTP From address, or a missing recipient — fill both in the Email channel.
Email connection refused / times outWrong port or transport; match your provider (587 STARTTLS or 465 SSL) and host.
Telegram / Slack / Discord 401 or 404A bad or revoked token / webhook URL — paste a fresh one and send a test.
Reports never arriveReport delivery is set to "Email only" but no Email channel is configured — switch to "All enabled channels" or set up Email.
NoteDelivery-error capture covers the curl-based gateways (Telegram, Slack, Discord, ntfy), Email and Apprise. WhatsApp, KakaoTalk and iMessage are best-effort: they may not surface a precise error, so test those explicitly with Send Test Alert after setup and after any account change.

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.

NoteDisk repair is an automatic safety hold. Disk Utility First Aid, 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.

NoteBecause the Heartbeat connects without a password, MySQL denies the login and counts every check in 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.
SecurityThe password-free MySQL Heartbeat is fully configured, but it does not check tables. For scheduled 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.

WarningThe local Service Guardian (Overview ▸ Service Guardian) is a different thing: it guards services on this Mac only, and only while the app is running. For a remote server, use its on-host Service Watchdog — the Guardian pane says so and points you there.

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.

TipThe same pause is available from your phone, in the companion app's Checks screen — useful when you are working on a machine and not sitting at the Mac. Pausing counts as a change, so the paired device needs permission to control services; a read-only device cannot silence a watchdog.

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).

NoteThe permanent fix is to retire 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-callPagerDuty (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 pagesStatuspage (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.

SecurityDo not expose RabbitMQ Management or the NATS monitoring port directly to the public Internet. Restrict them to localhost, a private network or a protected reverse proxy. Queue credentials belong in Keychain; message content does not belong in FrontierStack at all.

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.

NoteOld hardware Apple RAID Cards are not supported by current macOS — those disks present as a single drive, so FrontierStack cannot see the array. The pane states this so you are not misled into trusting a card-based mirror it cannot monitor. Internal NVMe drives may also return no SMART data without elevated access.

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

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.

12

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).

screenshot to be added
Figure 12.1. The Scripts & Cron pane: the saved-script library on top, with Run / Schedule / Edit buttons, and the cron jobs below.Capture: capture: open Scripts & Cron with three or four saved scripts visible and one or two cron jobs listed
The Scripts palette
Toggle Palette next to any script to add it to the floating Scripts palette — a small, always-on-top window of just your palette-tagged scripts, each with a Run button. Keep it beside your editor and pop it open any time. Press Open Palette in the pane to summon it.

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).

WarningA scheduled cron job runs automatically, without further approval. Unlike an interactive script or an AI tool call — which show you an approval card before anything happens — once a job is on the schedule, it fires on its own, every time, unattended. Schedule only commands you have tested and trust, and review the Cron Jobs list periodically so nothing keeps running that you have forgotten about.

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.

Script triggers
Below the script library, Script Triggers run a saved script when an event happens rather than at a clock time — you arrive at or leave a location, a device appears or disappears on the network, or a disk mounts or unmounts. These fire only while the app is running, and the script receives context (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.

ScriptWhat it does
apache_real_docrootDiscovers the document root a vhost is actually serving — not what the config claims, but what Apache resolves at run time.
apache_url_matrixReports 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_diffCompares one file's checksum across your fleet to find configuration drift — where a machine has quietly diverged from the rest.
macos_httpd_vhostsDumps the macOS Server backend's vhost → docroot map, so you can see exactly what that legacy stack is serving.
macos_web_restartRestarts the macOS Server web backend the right way — the correct sequence, not a blunt apachectl.
node_healthcheckA fleet drift / health check for one vhost across nodes.
php_opcache_checkReports 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:

ActionWhat it doesBuilt-in Siri phrase
Run Server ScriptRuns one of your saved scripts by name.
Start / Stop Service GroupStarts or stops every service in your group at once.“Start my servers with FrontierStack”
Restart ServiceRestarts Apache, Nginx, MySQL or PostgreSQL.“Restart a service with FrontierStack”
Restart Docker ContainerRestarts a named container.
Get Local HealthReturns the Local Health summary (services up / down).“Check server health with FrontierStack”
Apply Sidebar PresetSwitches the sidebar to a saved preset.
Flush DNS CacheFlushes the macOS DNS resolver cache.
Send NotificationSends a notification through your alert channels.
Ask Server AssistantSends 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.

TipPrefer voice? With the built-in phrases you can simply say “Check server health with FrontierStack”, “Start my servers with FrontierStack” or “Ask FrontierStack…” from any Apple device signed into your iCloud and your stack answers, hands-free.

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.

NotePause something for a window with two actions, not one. To pause a service between 2am and 5am, schedule a stop action at 2am and a start action at 5am. App actions are point-in-time triggers, so a window is simply its two edges.
WarningScheduled app actions perform real changes — reboots, service stops — on their schedule with no approval prompt at the moment they fire, exactly like cron. They require “Allow changes” to have been enabled when created. Review the Scheduled App Actions list the same way you review your crontab.

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.

NoteAuto-export runs while the app is open and checks roughly every few minutes, exporting any feed whose interval has come due. Like app actions, it is an in-app schedule, so pair it with a Mac that stays awake (Chapter 17 covers keeping a headless Mac from sleeping) if you need it to run around the clock.

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.

13

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.

The AI Administrator on first run: model selection, trust controls, Prompt Firewall, the local <code>.env</code> secret vault and long-term memory.
Figure 13.1. The AI Administrator on first run: model selection, trust controls, Prompt Firewall, the local .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.
TipFor everyday questions a fast model is fine; switch to your most capable model when you are chasing a subtle production problem. The Administrator keeps the conversation when you change models.

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.

SecurityFor an external model, image pixels require their own per-image approval because the text Prompt Firewall cannot inspect pixels. A local model keeps the image local. The upload copy exists in memory for the current tool loop only, is removed before the next turn and is never written to Saved Conversations. The original screenshot remains your file.

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:

  1. 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.
  2. It investigates read-only. It reads logs, runs diagnostics, checks ports and certificates, and inspects config files. None of this changes anything.
  3. 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.
  4. 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.

SettingWhat it unlocks
(default)Read-only. The assistant can look at everything — logs, health, config, diagnostics — but cannot change anything.
Allow changesPermits mutating actions (restart a service, write a file, issue a certificate, open a firewall port). Each one still shows an approval card.
Allow scriptsPermits 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).
SecurityApproval cannot authorize permanent user-data deletion. MySQL 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.
SecurityThe Administrator, the privileged helper and every remote capability are off until you enable them. A fresh install can answer questions and run diagnostics, but cannot touch anything until you deliberately turn on Allow changes and, for shell work, Allow scripts.

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']
NoteThe vault is a flat set of names, so you can keep several of a kind — 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.

SecurityCloud Prompt Firewall is still a third party: already-redacted text leaves your Mac. Select it only if you accept that boundary. The default cloud screener uses a GPT model through Enfour's AI Cloud and a configuration that does not persist prompt or generated text; token-count metadata may still be recorded for delivery and abuse control.

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:

AreaRepresentative tools
Discover & groundapp_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 servicesservice_action (Homebrew services), repair_service, reload_webserver, restart_app, monitor_action (via a server's helper), reboot_host
Web & databaseslist_sites/read_site_file/write_site_file, vhost_create/vhost_remove, list_databases/run_sql, db_dump/backup_now/restore, issue_certificate
Network & perimeterfirewall_rule, flush_dns, dns_record (Cloudflare), router_info (status, health & security signals), reboot_router, open_web_ui, discover_devices/pin_device, internet_speed
Mail securityemail_auth_dns (SPF/DMARC/DKIM), harden_mail_postfix, test_open_relay, generate_dkim_key, install_mail_cert
Security testingstrix_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 shellread_remote_file/write_remote_file/upload_file, and run_script — general shell on this Mac or any linked server
Scripts & scheduleslist_scripts/run_saved_script/save_script, schedule_cron, schedule_app_action, list_sample_scripts
Messagingget_messaging_channels, send_notification, get_alert_errors
Knowledgelist_skills/load_skill, list_notes/read_note, obsidian_search/obsidian_read_note, remember/list_memory/forget
The app itselfopen_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.

SecurityLocked notes are never readable, and a note you have not shared returns a refusal — so the assistant cannot reach a credential you have not chosen to give it. Never paste a secret into the chat; add it to the vault or a shared note instead.

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 calls get_server_health and sees Apache up but PHP-FPM down on web-01. It reads the PHP-FPM log with read_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 to www.conf via write_remote_file, and — once you approve — reloads with reload_webserver and re-checks the site over loopback. Green. If you ask, it sends a one-line all-clear to your team with send_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.

TipKeep an eye on spend with the AI cost monitor (Chapter 15): this month's total against your budget, broken down by provider and subscription. If you drive the app from your own subscription over MCP, there is no per-token bill at all — see Chapter 14.
14

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.
NoteMCP — the Model Context Protocol — is an open standard for connecting AI assistants to tools and data. FrontierStack implements the server side; your AI tool is the client.

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:

  1. Open the MCP settings in FrontierStack and turn on the MCP server. It binds to localhost and shows the token and the endpoint URL.
  2. 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.
  3. 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.
  4. 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.

SecurityThe token is required and the server listens only on 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.md of 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).
TipBecause the external agent follows your skills, shared notes and Obsidian SOPs, it operates by your procedures — the same ones the in-app Administrator uses. Keep those up to date and both paths improve at once.

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.

15

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.

PlatformWhat it is
OpenClawSelf-hosted agent runtime, monitored for running state and model.
HermesAgent runtime polled over HTTP for status, model and sessions.
DeerFlowDeep-research / multi-step agent runtime.
LangGraph PlatformGraph-based agent orchestration; status and model surfaced on the board.
CrewAI EnterpriseMulti-agent "crew" runtime.
Microsoft AutoGenMulti-agent conversation framework.
GensparkAutonomous agent platform.
Agent ZeroGeneral-purpose autonomous agent.
NVIDIA NemoClawNVIDIA agent runtime.
OpenAI Codex / Claude Code / Gemini CLI / Factory DroidCoding-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.

screenshot to be added
Figure 15.1. The Agent Platforms board: one row per runtime with a green/red status dot, the model each is serving, and live agents/sessions where reported.Capture: open the Agent Platforms pane with several runtimes configured — at least one running (green) and one down (red); show the "N of M running" subtitle
Note"Runtime" here means the engine that runs agents, not an agent you wrote. The agents you build yourself live in Agent Sessions (below) and are driven by the built-in Administrator. The two are complementary: this board watches third-party platforms; Agent Sessions runs your own goal-driven loops.

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 /user reachability 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.

SecurityRepository Connector tokens grant an agent write access to your code. Scope the PAT to the repositories it needs and no more, and revoke it at the provider the moment a runtime is retired. The connector's live /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.

TipGive a recurring session a tight step budget and leave "allow changes" off until you trust it. A read-only loop that just reports ("alert me if disk crosses 90%") is a safe first agent; promote it to a fixing loop only once you have watched its transcripts.

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 lms CLI, 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.
TipAlready paying for an AI subscription? Use VibeProxy as the harness engine before adding a metered API key: the same Claude, GPT or Gemini models answer, billed to the flat plan you already own instead of per token. Keep FrontierStack AI or a local model configured as the fallback — the harness switches over automatically if VibeProxy is off or a quota runs out.

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.

SecuritySecret redaction only runs for external engines. A local engine sees your prompts and tool output in full — which is fine, because it runs on your own hardware. The privacy win of a local model is precisely that the data never leaves the machine; treat that as a feature, and keep the model host as trusted as the Mac itself.

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.

WarningSandboxes you spawn keep billing until you kill them. After a burst of agent work, open the E2B pane, toggle Include paused, and use Kill All so nothing is left running on the clock. The same discipline applies to any cloud crawl service with per-request pricing.

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.

Why a governance shelf
An agent that can act is only as safe as its guard-rails. Tracing (Langfuse) tells you what an agent did; evals (Promptfoo) tell you whether it still behaves after a change; a prompt-injection firewall (Lakera) stops a hostile web page from hijacking it. FrontierStack does not replace these — it gives them a home next to the runtimes, so the stack you run and the stack that audits it are one click apart.

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.

screenshot to be added
Figure 15.2. AI Model Costs: month-to-date total against a colour-coded budget bar, a per-provider donut, the subscriptions list and the six-month trend.Capture: open AI Model Costs with several providers logged and a couple of subscriptions active, so the breakdown donut and trend chart are populated
TipSet a realistic monthly budget first — the bar and the budget line on the trend only mean something against one. Then connect your OpenAI and Anthropic admin keys for auto-sync, add your flat subscriptions, and the dashboard becomes a single honest answer to "what is AI costing me this month?"
SecurityCost auto-sync needs an org admin key for OpenAI/Anthropic (their cost APIs require it). That key is powerful — store it only here, where it lives in the Keychain and is used solely to read spend. Do not reuse an admin key as an agent runtime's inference key; give runtimes their own narrowly-scoped keys via the Model Router.

Part V

V

Business & Reference

Tailoring FrontierStack to a vertical, then the practical book-end: settings, licensing, updates, shortcuts and troubleshooting.

16

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".

TipAsk the AI Administrator to do the tailoring for you. Tell it what your business is — "I run a short-term rental with three listings" — and it can reveal the matching categories, enable the relevant monitor panes, and explain what to connect. It reshapes the same sidebar you would edit by hand.

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.

NeedServices revealed
Point of saleSquare (built-in pane), Toast, Lightspeed, Floranext
CRM & loyaltySuiteCRM, EspoCRM, Odoo CRM (self-hosted); HubSpot, Zoho, Pipedrive; Square Loyalty, VoucherVault
E-commerce & CMSWooCommerce, Medusa, Saleor; WordPress, Drupal, Ghost; Stripe / PayPal / Square checkout
Mailing listsListmonk, Mautic (self-hosted); Mailchimp, Brevo, SendGrid
Mail serverThe built-in Mail Server pane, mailcow, Modoboa, with SPF/DKIM/DMARC tooling
CalendarsRadicale, Baïkal, SOGo (CalDAV/CardDAV); the Calendar Health pane
AccountingERPNext, Xero, QuickBooks, freee, Money Forward
HelpdeskZammad, 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).

SecuritySelf-hosting your customer data on a Mac you own means the data-protection burden is yours too. Before you go live, walk Chapter 10: TLS on every site, the firewall closed to everything but what you publish, encrypted backups off the box, and the mail server locked against open relay.

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.

screenshot to be added
Figure 16.1. The Channel Manager pane: occupancy dial and revenue at the top, live platform reservations below, and the connection panel for Hostaway, Lodgify, Guesty, Cloudbeds, Beds24 or a custom AppSheet app.Capture: open Channel Manager with one platform enabled and a few synced reservations showing, occupancy dial visible

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.

StageServices revealed
Sourcing & suppliersAliExpress, Alibaba, CJdropshipping, Spocket, Zendrop, SaleHoo, DSers
Print-on-demandPrintful, Printify, Gelato, Gooten
Shipping & fulfilmentAfterShip, ShipStation, Easyship, Shippo, Pirate Ship
Inventory syncSkuVault, Cin7, Zoho Inventory, Katana
Profit analyticsTriple 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.

NoteRun the storefront itself — WooCommerce, Medusa or a Shopify connection — mail, and analytics on the same Mac, all monitored. The preset is the lens; the rest of the manual is how you actually serve and secure those services.

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.

FunctionServices revealed
Student informationPowerSchool, Infinite Campus, Veracross; openSIS, RosarioSIS (self-hosted)
Learning managementCanvas, Schoology, Google Classroom; Moodle, Open edX, ILIAS, BigBlueButton
Digital libraryKoha, DSpace, Greenstone (self-hosted); EBSCOhost, JSTOR, ProQuest
Campus & school opsSlate & 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/caldav path; 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.
Why iCal beats an API
Calendar (iCal) sync is the quiet workhorse of hospitality and scheduling. It needs no API key, every OTA and calendar app speaks it, and it degrades gracefully — a feed that breaks simply stops updating rather than taking your bookings down. When a platform API is available it gives you richer data; when it is not, iCal still gets availability flowing.

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.

screenshot to be added
Figure 16.2. The Presets menu and the Setups pane side by side: built-in verticals on the left, the user's own saved views with the active one ticked on the right.Capture: open the Presets menu over the Setups pane with two or three custom Setups listed and one marked active
17

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.

screenshot to be added
Figure 17.1. The Settings pane, scrolled to General, License & Subscription and Updates.Capture: capture: Settings pane with General expanded showing Default Browser, Show in Menu Bar, Launch at login and the in-app console toggle, plus the License and Updates sections below

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.

KeyTypeWhat it controls
defaultBrowserBundleIDbundle idThe browser used by every "Open in Browser" action. Empty = system default.
showInMenuBarboolWhether the global menu-bar item appears.
preferInAppConsoleboolRun commands in the in-app console (on) or send them to Terminal.app (off).
menu.showPresetsboolShow the Presets menu in the menu bar.
menu.showLocationsboolShow 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.

NoteJust above the custom-instructions bar sits the Script secrets (.env) vault. The AI only ever sees a secret's NAME (e.g. 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 & SubscriptionActivate License…, paste the code, and this Mac is bound to your plan. Promo codes are applied at checkout on the website.

TierPriceServersNotes
Free modeNot a checkout plan2The built-in fallback without a paid entitlement; limited features.
Standard¥15,000/year or ¥45,000 one-time10Add-on server packs widen the limit. The one-time purchase receives Lifetime status.
Standard — Bleeding edge¥7,500/year10Campaign subscription with no price rise after year one while it remains active.
Full Fleet¥45,000/yearUnlimitedEverything, 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.

SecurityYour licence is an Ed25519-signed token the app verifies offline — no phone-home is needed to keep working. The token carries your tier, server limit and expiry, and is bound to this machine by 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.

TipIf you have just asked for a fix in support and are on Full Fleet, set the channel to Wild Frontier and press Check Now — the fix often lands within a day or two rather than waiting for the next Stable release.

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.

NoteTo opt out completely, turn off both toggles in Settings ▸ Privacy & Diagnostics. The change takes effect immediately and the random install ID is never tied to your identity. The administrator-only diagnostics dashboard described elsewhere is local to the publisher and aggregates only these anonymous signals.

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.

18

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.

ShortcutDoesMenu equivalent
⌘FOpen 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
⌘⌥⇧WClose all floating palettes at once.Palettes ▸ Close All Palettes
ReturnConfirm the default button in any sheet (Save, OK, Add, Install…).The highlighted button
EscCancel 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.

Tip⌘F is the one shortcut worth committing to memory. With more than a thousand services and a hundred-plus tool panes, scrolling the sidebar is slow; the Search palette is instant. Type a few letters of a service, a port number, or a keyword like firewall and press Return.

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:

URLGoes 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 · ://healthShortcuts 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).

SecurityDeep links obey the App Lock. While the app is locked, an incoming 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.
NoteThe AI Administrator can read the same log for you. Its 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).
screenshot to be added
Figure 18.1. The Logs pane: a server's error log on the left, the app's own ★ Change Log (Audit) on the right, each entry tagged with the actor — User, AI, Web, MCP or Automation.Capture: open the Logs pane with the Change Log visible, showing a mix of actors

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.

SymptomLikely causeFix
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.

The actionable refusal
Read a refusal as instructions. "Enable changes in the AI Administrator," "unlock in Remote Control & Lock," "the token needs Zone:Create" — each names the precise setting standing between you and the action. The app never overrides these remotely, by design, so the message is the fastest path to fixing it yourself.

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.