Files
fidelity-ai-workspace/apps/mac/AIWorkspace

AI Workspace macOS Menu Bar App

Minimal SwiftUI MenuBarExtra app for controlling local AI Workspace services.

The app is intentionally a thin UI over the service manager. It reads live status from:

python3 scripts/aiw/services.py status --profile fidelity --json

and sends lifecycle actions through scripts/aiw/services.py.

Build

swift build --package-path apps/mac/AIWorkspace

Package as .app

apps/mac/AIWorkspace/scripts/package-app.sh

Install to ~/Applications/AIWorkspace.app:

apps/mac/AIWorkspace/scripts/package-app.sh --install

Build a DMG

apps/mac/AIWorkspace/scripts/build-dmg.sh

This creates:

apps/mac/AIWorkspace/dist/AIWorkspace.dmg

The DMG contains AIWorkspace.app and an Applications shortcut for drag-and-drop installation.

One-step local install, optionally enabling start at login and opening the app:

apps/mac/AIWorkspace/scripts/install.sh --start-at-login --open

Start at login

Preferred: open the installed app and use the Start at Login toggle in the UI. The app uses macOS SMAppService for login item registration.

Development fallback after installing the app bundle:

apps/mac/AIWorkspace/scripts/install-start-at-login.sh

To remove the login item:

apps/mac/AIWorkspace/scripts/uninstall-start-at-login.sh

Run during development

swift run --package-path apps/mac/AIWorkspace AIWorkspace

Current actions

  • Refresh status
  • Start Fidelity services
  • Stop Fidelity services
  • Restart Context MCP
  • Open Mattermost through the service manager
  • Open Mattermost through the local proxy-managed launcher
  • Run Doctor
  • Copy Doctor JSON
  • Copy Photo Inbox URL
  • Copy recent logs
  • Open MCP Health
  • Open logs folder
  • Open project knowledge

Notes

  • This is not yet packaged as a signed .app bundle.
  • Start at login should be implemented later through a LaunchAgent or app login item.
  • Start at Login is available in the app UI through SMAppService. The LaunchAgent scripts are retained as development fallback utilities.
  • The app should remain a UI layer; service lifecycle remains in scripts/aiw/services.py.