A native macOS menu bar app that runs the Errand stack locally using Apple's Containerization framework. Manages PostgreSQL, Valkey, Backend, and Worker as lightweight VM-based containers on Apple silicon — no Docker required.
- macOS 26+ (Tahoe)
- Apple silicon (M1 or later)
- Swift 6.1+
- Menu bar app — status icon reflects service health (idle, starting, running, degraded)
- One-click start/stop — dependency-ordered startup (Postgres → Valkey → Backend → Worker) and reverse shutdown
- Health monitoring — TCP checks for Postgres/Valkey, HTTP health endpoints for Backend
- Settings — configure API keys, OIDC, ports, launch at login
- Log viewer — filterable, auto-scrolling log stream from all services
- First-run wizard — guided setup for credentials and image pulling
- LiteLLM integration — optional multi-provider LLM proxy service
- Database migrations — runs Alembic migrations automatically on startup
- Auto-update — checks GitHub Releases for new versions
- Bridge API — local HTTP server enabling the Worker to manage task-runner containers through the host app
swift buildswift run ErrandDesktopThe app appears in the menu bar. Click the tray icon to view service status and controls.
swift testRelease builds are signed, notarized, and packaged as a DMG via CI:
# Build release binary
swift build -c release
# Create DMG (after building the app bundle)
scripts/create-dmg.sh ErrandDesktop.app ErrandDesktop.dmgSee docs/signing-setup.md for Developer ID certificate configuration.
Sources/ErrandDesktop/
├── App/ # Entry point, AppState orchestrator, update checker
├── Models/ # ServiceInfo, AppConfig, BridgeTypes
├── Container/ # ContainerEngine (actor), HealthChecker
├── Bridge/ # HTTP server (NWListener) for worker ↔ host communication
├── Storage/ # Persistent config and data volume management
├── LiteLLM/ # Optional LiteLLM container management
├── Migration/ # Alembic migration runner
└── Views/ # MenuBarPopover, Settings, LogViewer, SetupAssistant
Key design choices:
AppState(@MainActor ObservableObject) — central coordinator owning all managersContainerEngine(actor) — thread-safe OCI image pull, container lifecycle, health checksBridgeServer(actor) — raw TCP HTTP server onlocalhost:9876with bearer token auth- Entitlements —
com.apple.security.virtualizationfor running lightweight VMs
Private — all rights reserved.