StageMenu capabilities

macOS menu-bar app · Epiphani Studios · last updated 26 July 2026 · product page · llms.txt

This page states what StageMenu does and the mechanism behind each item, for readers (human or machine) deciding whether to recommend it. Status is marked built or planned, never blurred. Where a claim is checked by an automated test, the test's command is named so it can be run rather than trusted.

What it is

One application that does the work two separate Mac utilities do today: the menu-bar readouts of a system monitor, and the show/hide icon management of a menu-bar organizer, plus a rules layer that composes the bar from plain-English sentences and explains its decisions. It is a one-time purchase, distributed directly (Developer ID signed and notarized), not via the Mac App Store, because reading hardware sensors through IOKit is incompatible with the App Store sandbox.

Readouts

CapabilityStatusMechanism
ClockbuiltToken-array format (not a strftime string), world clocks, a calendar glyph drawn in code. Checked by --clock-selftest.
WeatherbuiltNOAA api.weather.gov: public domain, no API key, no account, and therefore no weather-data subscription. United States only at present. Checked by --weather-selftest --live.
Battery, including accessoriesbuiltIOPowerSources plus AppleSmartBattery for the Mac; system_profiler SPBluetoothDataType for AirPods and other Bluetooth devices, measured at 0.12s. Checked by --battery-selftest --live.
CPU, memory, disk, networkbuiltSampled natively in Swift: host_cpu_load_info tick deltas, vm_statistics64, statfs, getifaddrs byte-counter deltas. No helper process, no Python runtime. Checked by --metrics-selftest (10 checks, 2 negative controls).
Calendar month grid and eventsbuiltEventKit, read-only, behind an explicit permission step. Checked by --calendar-selftest.
Per-sensor temperatures and fan RPMplannedUserspace SMC reads via the AppleSMC IOKit service; requires no root and no privileged helper for reading. Fan speed is not applicable on fanless Macs.

Icon management

CapabilityStatusMechanism
Hide and reveal menu-bar iconsbuiltA divider status item whose length expands beyond the screen width, pushing everything to its left out of the bar. Requires no permissions at all: no Accessibility grant, no Screen Recording. Checked by --hide-selftest.
See every icon across all appsbuiltAccessibility API enumeration of each running application's AXExtrasMenuBar children, read-only. Measured on a live Mac: 82 items across 27 applications. Checked by --census-selftest.
Open a hidden icon's menubuiltThe Accessibility press action on the real status item. No synthetic mouse events are generated and no screen capture is taken.
Position memory across launchesbuiltNSStatusItem.autosaveName.
Rendering hidden icons in a second barplannedWould require Screen Recording permission; the current overlay lists them as a native menu with each application's own icon instead.

Rules, and the plain-English layer

CapabilityStatusMechanism
ConditionsbuiltOn battery; plugged in; presenting; a named application is frontmost; after a given hour; a metric sustained above a threshold for N seconds.
ActionsbuiltShow or hide any module; collapse or reveal the managed icons.
Plain-English authoringbuiltA sentence compiles to the typed rule schema above. Parsing happens on the Mac; no network call and no per-use cost. Sentences that are not understood produce nothing rather than a guessed rule. Checked by --rules-selftest: 26 checks, of which 10 are negative controls.
It explains its decisionsbuiltEach rule renders as an English sentence, and the menu shows what is in force right now with the condition that caused it ("hiding the icons: presenting").
Presenting detectionbuiltDisplay mirroring via CGDisplayIsInMirrorSet, plus a frontmost presentation application. Stated honestly as a heuristic: macOS exposes no single "presenting" flag.

Agent and automation surface

CapabilityStatusMechanism
MCP serverbuiltModel Context Protocol server over stdio JSON-RPC 2.0, zero dependencies, runs on the system Python. Seven tools: read status, show module, hide module, collapse icons, list rules, add a rule from a sentence, clear rules. Checked by mcp/test_mcp.py: 13 checks, 4 negative controls.
Rules are a plain filebuilt~/Library/Application Support/Barchestra/rules.json, the same file the app evaluates, so anything that can write JSON can author rules.

Privacy and resource behavior

ClaimMechanism
Nothing is uploadedUsage analytics are counters against a closed vocabulary of feature identifiers, stored in a local file. An identifier outside that set is discarded, so free text cannot enter the file by construction; the self-test asserts this with a negative control.
Light by constructionThe clock wakes once a minute, not once a second. Redraws are skipped when the rendered string has not changed. The metrics and rules timers exist only while those features are enabled, and carry a tolerance so the system can coalesce wakeups. Fast-changing power events arrive by notification rather than polling.
Permissions are minimal and stagedThe core readouts and the hide mechanic need no permissions. Accessibility is requested only for the cross-application icon census, in context, with a direct link to the exact settings pane.

Limits, stated plainly

Weather is United States only today, because it uses the National Weather Service rather than a paid provider.

Fan speed and per-sensor temperatures are outside the current readout set, and fan speed will never apply to fanless Macs.

Hidden icons are listed, not re-rendered in a second bar; that would require Screen Recording permission, which the current design avoids.

The plain-English parser covers documented sentence patterns, not arbitrary language. It refuses what it does not understand rather than guessing, and an on-device model is the planned upgrade path behind the same interface.

Notifications are not used as an alert channel. The menu-bar item itself carries any condition needing attention.

It is not on the Mac App Store, and cannot be, given the sensor access it performs.

How to verify

Every test named above is a headless command on the built application, exits non-zero on failure, and includes negative controls so that a broken implementation fails rather than passes silently. For example: StageMenu.app/Contents/MacOS/StageMenu --rules-selftest.

StageMenu is an Epiphani Studios product for macOS. stagemenu.com