Weft Status is a macOS menu bar companion for Weft. It shows live Weft activity from the local daemon subscription API without reading Weft's SQLite database directly.
The app is a status surface, not a scheduler. Weft remains the source of truth.
- Show current Weft state at a glance: running jobs, queued jobs, rental run rate, autopilot state, and unprocessed results.
- Support project-scoped views for active research work.
- Surface failure and attention states without requiring a terminal.
- Keep Weft as the source of truth; this app is a display and notification layer, not a scheduler.
Weft daemon subscription API
|
macOS SwiftUI app
The app subscribes to Weft's daemon activity resource over
~/.cache/weft/daemon.sock, normalizes the daemon payload into the app-facing
model in Shared/, and renders that model in the menu bar popover.
SQLite remains an internal Weft implementation detail. This app does not query
~/.config/weft/jobs.db.
- Menu bar popover with live status from the Weft daemon.
- 2x2 summary dashboard for rental count, run rate, running jobs, and unprocessed completed jobs.
- Running job rows with project badges; clicking a job copies its
wj...ID. - Unprocessed completed/failed job details when exposed by the daemon payload.
- Rental section for cloud/rental instances, with run rate, uptime, queue depth, and running-job count.
- Settings window for menu bar identity, menu bar counts, run rate display, and notification-rule preferences.
- About window with app metadata.
On-prem hosts can run jobs without appearing in the rental section. The rental section describes cloud/rental launch records only.
This repository contains a pure SwiftPM macOS app:
Shared/: the compact app-facing activity model, fixture data, freshness rules, project selection, and priority signal selection.WeftStatusApp/: the SwiftUI menu bar app, daemon client, settings, about window, and rendering surfaces.App/: macOS app bundle metadata and icon source.Checks/: lightweight model checks runnable without XCTest.
Fixture data remains as a fallback when the daemon socket is unavailable or a payload cannot be decoded.
Build the app:
swift buildRun the app:
swift run WeftStatusThis runs the SwiftPM executable directly. For normal menu bar use, prefer the installed app bundle.
Build a macOS app bundle:
just appInstall it into ~/Applications:
just install-userInstall and launch it:
just launchjust launch rebuilds, installs, stops any currently running Weft Status, and
opens the fresh installed app.
Run model checks:
swift run WeftStatusSharedChecksThe same commands are available through just build, just run, and
just check.
Settings open in a separate window from the menu bar popover. Current settings:
- Menu bar identity: icon, name, or both.
- Independent menu bar items for running jobs, queued jobs, unprocessed results, and run rate.
- Notification-rule preferences for failures, completed jobs, autopilot paused/stale, budget pressure, and queue depth.
Notification delivery is not implemented yet; the settings establish the user preferences for that surface.