Hi, I’m the developer of Nexus Shell. I’ve been building it as a native SwiftUI workspace for people who manage servers from a Mac.

One of the less obvious UI problems was keeping the web-backed terminal session alive across SwiftUI navigation. Recreating the terminal view loses scrollback and can disrupt a live SSH session, so the app keeps terminal state outside the transient navigation subtree and restores only the native shell around it.
The current app combines a multi-tab SSH terminal with dual-pane SFTP, Docker management, live server monitoring, encrypted session logs, and an optional local Agent Bridge. The Agent Bridge opens real, visible terminal tabs rather than handing stored passwords or private keys to an AI agent.
It runs on Apple Silicon Macs with macOS 14.2 or later. Basic personal SSH use is free; a new account includes a 7-day Pro trial, and Pro is currently a one-time $12.88 purchase.
Product and screenshots: https://nexusshell.app/en/
For anyone building desktop developer tools in SwiftUI: which has been the harder boundary in your app — preserving long-lived state, or integrating AppKit/WebKit without making navigation fragile?
I'd separate "did it start?", "did it finish?", and "how did it finish?". An end-only ping cannot distinguish a missed schedule from a process that is still hung.
On Linux my wrapper is roughly:
The monitoring side can treat a start with no terminal event before the grace period as "hung", and no start as "scheduler or host failed".
flockprevents an overrun from overlapping the next run. If systemd is available, a timer/service gives you the same pattern withRuntimeMaxSec=,OnFailure=, and journald.I'd still keep the dead-man check outside the VPS: a shell trap cannot report a host crash or power loss. Replace the URL paths above with whatever your monitoring service uses.