
macOS · Epiphani Studios
You decide who is on it: the readouts you glance at, the icons you manage, and rules you write in a sentence, all in one app.
The problem
You keep the readouts visible because you want to know the moment something is wrong. So the bar fills up. Then you install a second app to hide the mess the first one made, and now you run two utilities that do not know the other exists. Neither knows you are about to share your screen. Neither knows the difference between a laptop on battery in a coffee shop and the same laptop plugged in at your desk.
The tools that react to anything you can describe are built for people who write shell scripts. Everyone else gets a grid of preset triggers, which covers the conditions the developer thought of and nothing you would say in a sentence.
A monitor and a hider, bought separately, updated separately, neither aware of the other.
What you configured on a Tuesday is what you get in a client presentation on Friday.
Fully conditional bars exist. They are configured in Lua and shell scripts.
Proof
Each part of the app ships a headless self-test with negative controls, so a regression these checks cover fails the build instead of passing quietly. These are the current counts, and they run on the same build you receive.
More than 70 are negative controls: gibberish and half-sentences must produce nothing, a dip must reset a sustained timer, a switched-off rule must never fire.
The fixture the icon-detection self-test runs against, measured on a live Mac. Reading your own bar at runtime uses the Accessibility grant described below, not this number.
More than 20 are negative controls, including that an unknown module and an unparseable sentence are both refused rather than guessed at.
Run them yourself, for example
StageMenu --rules-selftest. Every test is named on the
capabilities page.
How it works
Clock, weather, battery, CPU, memory, disk, network. Each is its own item, so you drag them where you like and they stay there.
Drag any icon to the left of StageMenu's divider and it hides, and no permission is involved. Click the chevron to see everything hidden, each with its own app icon, and click one to open its real menu; that list is the one place the app asks for Accessibility, and it asks when you first open it.
"Hide everything when I'm presenting." That becomes a real rule with a condition and an action, parsed on your Mac.
The menu shows what is in force right now and the reason: "hiding the icons: presenting." Nothing changes silently.
Features
The readouts you glance at, the icons you command, and rules you write in a sentence: your whole bar, working together. Stage Cards put the time and date, the weather with an hourly strip, and battery with time to full in one panel, one click away. Choose where StageMenu lives, in the menu bar or the Dock only, in Settings > General.
Your exact format, world clocks, and a crisp calendar mark with a month grid and your events.
In the United States from the National Weather Service, everywhere else from Apple WeatherKit, with sunrise and sunset worked out on your Mac. No key, no account, and no weather subscription.
Your Mac plus connected Bluetooth accessories, read from the same sources the system itself uses. Every device's charge sits in the battery item beside the Mac's own, and a Bluetooth item beside it counts what is connected, in five styles, or takes the place of Apple's own Bluetooth icon.
Settings > Battery shows the mode your Mac is in right now, plus what it uses on battery and on the charger, refreshed when you plug in or unplug. One click opens Hush Performance, or System Settings, to change it.
The name of the network you are on, with signal, band, link speed and security beneath, your iPhone's Personal Hotspot one click away, and nearby networks to join.
Sampled natively in Swift inside the app, with nothing bundled and nothing left running when you quit. (The optional agent server described below is a Python script, and it runs only while an agent is talking to it.)
Hiding and revealing through the divider need no permission at all, Screen Recording included. The cross-app icon list uses Accessibility, asked for at that point and not before. Screen Recording is an optional extra: allow it once and your hidden icons show their own real artwork in Settings; it reads the thin strip your menu bar sits in and nothing else. Hiding works on macOS 15, 26 and 27.
Power state, presenting, the app in front, the Wi-Fi network you are on, the hour, or a metric held above a threshold. It explains every decision it makes.
Eleven tools over standard input and output using JavaScript Object Notation Remote Procedure Call ("JSON-RPC"), with no third-party dependencies (it runs on the Python 3 that ships with the Xcode command line tools), so your artificial intelligence (AI) assistant can read and compose the bar, read the Bluetooth panel, and connect or disconnect a device by name.
Everyday
The bar empties the moment a display starts mirroring or a presentation or call app comes to the front, so your Virtual Private Network (VPN), your password manager, and the other client's project stop being part of the presentation. macOS publishes no "I am presenting" flag, so those two signals are what the app reads, and it names which one fired when it explains the decision.
On battery, the heavy readouts step aside and battery moves front and center. Plug in at your desk and the full set comes back.
The fan spins up and you want to know why. Say the CPU readout should return when anything stays pegged for a minute, and it is there when it matters and gone when it does not.
When your editor is in front the bar can clear itself, then come back the moment you switch away.
An assistant that can read your repository can now read your menu bar: what is showing, what is collapsed, and which rules are active. It can compose the bar for what you are about to do, through the eleven tools the agent surface exposes.
After nine, a rule can drop the work readouts and leave the clock and the weather.
A good show is staged: the right thing in the light at the right moment, everything else seated in the rows just off it. That is the whole idea, applied to the strip of screen you glance at all day.
Who it is for
You run Docker, a VPN, a tunnel, a password manager, two cloud drives, and a battery of build tools, and every one of them wants a permanent seat. You want them reachable in one click and invisible the rest of the time, and you want the machine's load in front of you the moment a build goes sideways. Today that is two paid apps and a compromise.
Every call is a live broadcast of your bar. One client's project name in a status item is a bad afternoon. A rule that empties the bar the instant a display mirrors, or the instant your call app takes the front, is worth more than any readout on it.
Your needs at a desk and your needs on a train are different, and no static configuration serves both. The bar should know which one you are in, without being asked twice.
Your assistant reads your code, runs your tests, and opens your pull requests. It has no idea whether your machine is thermally throttled or your VPN dropped. Giving it the menu bar is a small, concrete step toward it knowing the state of the computer it is working on.
If one of these is you, the comparison below is where to look next: every price is read from the maker’s own page and linked, so you can check it yourself.
Compare
Prices read from each maker’s own page in July 2026, and each one is linked so you can check it.
| StageMenu | iStat Menus | Bartender | Stats | Ice | |
|---|---|---|---|---|---|
| Price | $29 once | $11.99 to $14.99 once, plus a weather subscription | $24 once, plus $15 a year for Pro | Free | Free |
| Readouts and icon hiding in one app | Yes | Readouts only | Hiding only | Readouts only | Hiding only |
| Rules written as sentences | Yes | Threshold alerts | Triggers, as checkboxes | No | No dynamic rules |
| Explains its own decisions | Yes | No | No | No | No |
| MCP server for AI agents | Yes | No | No | No | No |
| Weather without a separate subscription | Yes | Subscription for the data | Not applicable | No weather | No weather |
| Price for a static bar | $29 | $11.99+ | $24 | Free | Free |
| Actively developed | Yes | Yes, for about 18 years | Yes | Yes | No code push since September 2025 |
Every figure above was read off each app’s own page and is linked in the header. StageMenu is the one that reads and hides in a single app, takes its rules as sentences, explains its own decisions, and answers to an AI agent over MCP.
For agents
StageMenu ships a Model Context Protocol server, which is the standard way an AI assistant discovers and calls tools. It speaks JSON-RPC over standard input and output with no third-party dependencies, so if you have Xcode's Command Line Tools, the Python 3 they install is enough and there is nothing further to install and no account to create. Eleven tools, grouped below into the three things they let an agent do: read status and the Bluetooth panel; compose the bar by showing a module, hiding a module, flipping one collapse-or-reveal switch for the icons, placing the hide divider, rebuilding StageMenu's own items in order, and connecting or disconnecting a Bluetooth device by name; and list, add, and clear rules. Every one of them refuses bad input rather than guessing.
Which modules are visible, whether the icons are collapsed, which rules are active, whether the app is running, and the Bluetooth panel (StageMenu --remote bluetooth).
Show or hide any module, collapse or reveal the managed icons, place the hide divider, rebuild StageMenu's own items in order, or connect or disconnect a Bluetooth device (--remote bluetooth-device), all by name rather than by clicking.
Hand it "hide everything when I'm presenting" and it returns the parsed rule, or an error if the sentence was not understood. It never invents one.
Rules are a plain file at
~/Library/Application Support/StageMenu/rules.json, the same file the app
evaluates, so anything that can write JSON can drive the bar. Nothing about this surface is
a private back door: it is the same typed rules you write yourself.
Under the hood
On macOS 15 and 26 the icon mechanic is an ordinary status item that gets very wide, which is documented AppKit behavior. On macOS 27, where the system draws every status item into one bar, StageMenu asks that bar to step the chosen apps back, and the self-tests confirm it on the running system. Either way hiding needs no permission.
Every reading is taken inside the app itself, and the optional agent server runs only while an agent is talking to it. Dragging the app to the trash removes the app; your rules and usage-counter files sit in ~/Library/Application Support/StageMenu, and deleting that folder is the rest of it.
The clock wakes on the minute boundary it needs, not every second. Metrics and rules timers exist only while those features are on, and they carry a tolerance so macOS can group their wakeups with others.
If the text to display has not changed, nothing is drawn. Most seconds in a day, a menu-bar readout has nothing new to say.
Anything needing attention changes the menu-bar item itself, so you see it at a glance. The one notice it sends, a charge warning when your Mac is plugged in and still losing power, replaces itself and clears on its own once the charge recovers.
Every module ships a headless self-test with negative controls, so a broken build is loud. The counts on this page come from those tests, not from a marketing meeting.
Switching
You keep everything you actually look at. The clock format, the world clocks, the calendar glyph, the battery with your AirPods in it: all of that is here, and United States weather arrives without the separate data subscription. What you gain is the other half of the job, because iStat does not hide icons at all. Keep iStat installed while you decide; nothing here interferes with it.
You keep the divider, the click-to-reveal, and the positions you have arranged, and you drop the Screen Recording requirement for hiding, because this hiding mechanic does not photograph your menu bar to work, plus the $15 a year if you pay for Bartender's Pro features. You also stop maintaining trigger checkboxes, and start writing the same intent as a sentence. If the 2024 sale and the telemetry that followed are why you have not upgraded, that is exactly the itch this scratches.
You are the hardest person to sell, and you should be: your setup is free, open source, and good. The pitch is that your two apps cannot coordinate, Ice has not shipped code since September 2025, and neither app empties your bar when you start sharing your screen. If that has never cost you anything, stay where you are.
You already proved the thesis: a menu bar that reacts to context is worth real effort. You wrote shell scripts to get there and you maintain them. StageMenu is the same idea for the days you would rather write a sentence than a config, plus a store of rules any agent can read and write. Your scripts will still be more powerful at the extremes, and that is fine.
StageMenu runs alongside all of them. Nothing is taken over, no other app is disabled, and you can decide after a week of watching both instead of on the strength of this page.
Privacy
The app makes outbound requests for these things: the weather lookup (the National Weather Service inside the United States, Apple WeatherKit through Epiphani's relay elsewhere, each given the coordinates of the place you set), a check for a newer version at launch and every six hours, which can be switched off and carries no account identifier, device identifier, or usage data, and, when you sign in with an Epiphani account, your settings sync. As with any network request, the server on the other end sees standard network metadata such as your address. Usage counters live in a file on your Mac, against a fixed list of feature names. A name outside that list is discarded, so free text cannot enter the file by construction, and the self-test proves it with a negative control.
Hiding icons works through the menu bar itself: a divider item on macOS 15 and 26, and the bar's own concealment on macOS 27. Neither takes a picture of your menu bar. The cross-app icon list is the only feature that touches the Accessibility grant, for reading the items and for pressing the one you pick, and the press goes to the real item rather than through synthetic mouse events.
The readouts and the hiding need no permission at all, with one exception you control: showing your events in the calendar glyph asks for Calendar access, in context, the first time you turn it on. Accessibility is requested only when you want the cross-app icon list, the same way, with a link to the exact settings pane. Three optional grants are each asked for in context: Location (the weather, the Wi-Fi network's name and network rules), Screen Recording (real artwork for hidden icons in Settings), and Bluetooth (battery levels for accessories macOS does not report).
Rules are stored as a plain file you can read, edit, or delete yourself.
Pricing
The rules layer is included rather than metered, because sentences are parsed on your Mac and cost nothing to run. There is no weather subscription, and no Pro tier holding the good parts back. It is one purchase, not a subscription.
For comparison: iStat Menus is $11.99 to $14.99 plus its weather data, and Bartender is $24 plus $15 a year for its Pro features.
FAQ
No. Hiding and revealing needs no permission at all, Screen Recording included. Accessibility is requested only if you want the app to list every icon across all your apps, and it is asked for in context with a link to the exact settings pane. Screen Recording is an optional extra that gives hidden icons their real artwork in Settings.
Stats is an excellent free monitor and Ice is a capable free hider. If a static bar plus manual hiding is what you want, they are the right answer and you should use them. StageMenu is for the part neither does: a bar that changes itself by rules you write in a sentence, and tells you why. Ice has had no code push since September 2025 and does not offer dynamic rules.
Yes. One purchase, no subscription, and the rules layer is included rather than metered. Sentences are parsed on your Mac, so there is no per-use cost to pass on to you.
The clock wakes once a minute rather than once a second, redraws are skipped when the text has not changed, the metrics and rules timers exist only while those features are on and carry a tolerance so macOS can coalesce wakeups, and fast power events arrive by notification instead of polling.
On macOS 15 and 26 the icon mechanic uses ordinary status items. On macOS 27 it uses the menu bar's own concealment, switched on only when the running system answers. Every module ships a headless self-test you can run against a new operating system in seconds, including one that asserts every icon state still resolves on the running system.
No. Sentences are parsed on your Mac and compile to a typed rule. No network call, no API key, no per-use cost.
No. Inside the United States weather comes from the National Weather Service, which is public domain. Everywhere else it comes from Apple WeatherKit through Epiphani's own relay. Either way there is no key, no account, and nothing to subscribe to.
It lets an AI agent read and compose your menu bar. Eleven tools: read status; show a module; hide a module; one collapse-or-reveal switch for the icons; place the hide divider; rebuild StageMenu's own items in order; read the Bluetooth panel; connect or disconnect a Bluetooth device by name; and list, add, and clear the rules you have written from sentences. It speaks JSON-RPC over standard input and output, with no third-party dependencies, so it runs on the Python 3 that comes with the Xcode command line tools.
StageMenu is distributed directly, signed with an Apple Developer ID and notarized by Apple.
It is made by Epiphani Studios, an independent studio. The analytics it keeps are local counters over a fixed list of feature names stored in a file on your Mac; an unrecognized name is discarded, and nothing is uploaded.
Get it
$29 once, no subscription. Join the list. Your Mac makes two routine requests, both yours to stop: the weather lookup, which sends the coordinates of the place you set, and the check for a newer version, which is a plain fetch of the version file. Nothing about your apps or your bar goes with either.
$29, once. macOS 15 or later, Apple Silicon. Developer ID signed and notarized. The current build downloads directly, and the capabilities page lists exactly what ships.
StageMenu is one app, bought once, that arranges itself from a sentence and tells you why.