Repository navigation
Releases: stroke-app/ewiz
Release list
eWiz 0.18.6
Updating eWiz now shows what's happening and comes back on its own
Updates run through Sparkle: "Check for Updates…" (and the Update banner) open a window that checks, shows what's new, downloads with a progress bar, installs, and relaunches the new version — instead of the app quietly quitting and sometimes not reappearing. Checks still happen on launch and daily. One more update goes the old way to get there: this release installs through the previous updater, and every one after it through Sparkle.
eWiz 0.18.5
No more Bluetooth permission prompt from the Automation tab
The tab's live state read your connected Bluetooth devices every few seconds, which made macOS ask for Bluetooth access on every update and relaunch eWiz when you allowed it. Bluetooth is now read only when a rule actually depends on it.
The AI-agent server no longer crashes when a session ends
Ending an agent session sent a signal that crashed ewiz-mcp instead of releasing its keep-awake.
eWiz 0.18.4
The icon, the panel and the notifications now agree
They all read one shared account of what the battery is doing, so the menu bar can no longer show a full battery with a check mark while the panel says 49% and charging. The "charge complete" flash fires only when the battery actually reaches full or your limit after charging, never when "Don't charge" is switched on part-way, and it always ends after three seconds. "Charge limit reached" is only announced when the limit is actually reached.
eWiz 0.18.3 — Updates install themselves
Updates install themselves
eWiz no longer stops at "won't replace itself automatically" and a browser download. Each release's download is now signed, and eWiz checks that signature before installing the update in place and relaunching. An update that doesn't match is refused, and falls back to the download as before.
This takes effect from this version on: the update to it still goes through the download once.
eWiz 0.18.2 — AI Agents
AI Agents, in Settings
eWiz ships an MCP server that lets AI agents (Claude, Cursor and other MCP apps) keep the Mac awake through a long build, test run or download, on a timer that ends by itself. It now has a home in Settings › Automation › AI Agents:
- One switch to let agents use it at all, and a second for keeping the Mac running with the lid closed. Agents asking while it's off are told so, and where to turn it on.
- Connect adds eWiz to Claude Desktop or Cursor in one click, keeping everything else in their settings. Claude Code gets a ready-to-paste command, and any other MCP app a config block.
- Live status shows which agent is keeping the Mac awake, for what, and for how long.
eWiz 0.18.1 — A new icon
A new icon for eWiz
A lightning bolt that doubles as a wizard's hat, in the Dock, Finder, Settings › About and the license window. About and the license window now show the app's real icon instead of a separate battery drawing, so the two can't drift apart.
eWiz 0.18.0 — Battlify is now eWiz
Always Active can now switch itself on and off instead of only being held by hand
Always Active hours (Settings → Schedule) hold the Mac awake on a weekly timetable — for example weekdays from 9 AM for 9 hours. While at least one window is enabled, the switch means "hold during these hours": inside a window the lid-closed hold applies, outside it the Mac sleeps normally, with no need to remember to turn it off. Windows may wrap past midnight, so an overnight window belongs to the day it starts on. With no windows set the switch behaves exactly as before.
Turn off automatically (Settings → Charging, under Always Active) sets a deadline — 30 minutes to 8 hours, or "don't turn off". The deadline lives in the root daemon's config, so it still fires while the Mac is asleep or eWiz isn't running, and it clears the switch rather than leaving an on toggle that no longer holds anything.
The Always Active section shows which hours are set and whether it is HOLDING or WAITING right now, and the clamshell display saver follows the same verdict — it no longer forces the internal display off outside a scheduled window.
Caffeine no longer holds the screen awake on battery
Caffeine held a PreventUserIdleDisplaySleep assertion — the same one caffeinate -d takes — for as long as it was on, whatever the power source. Left on and unplugged, that kept the display lit on an idle Mac (and, because macOS won't system-sleep while the display is on, kept the whole machine up): several watts, or percents of charge per hour, from a feature meant to keep work running.
On battery Caffeine now downgrades the hold to system-only — the same work keeps running, but the screen is allowed to sleep — and restores the full hold when you plug back in. The session itself never ends, and any timer keeps running; only the reach of the hold changes. The replacement assertion is taken before the old one is released, so there's no window for the display to sleep during the swap.
Two new options in Settings → Sleep & Power → Caffeine:
- End it when I unplug — stop the session outright on battery, for a Mac that should lose no charge at all while left alone.
- Keep the screen on when on battery — the old behaviour, for when the screen genuinely has to stay lit.
The card also shows what Caffeine is holding right now, and until when.
The charge limit stays on
A request that stalled the helper's control socket used to block every other one, and the health check then tore the socket down and dropped whatever the app had queued. Requests are now served in order with a short read bound, and the check asks a question the daemon answers without its lock. The app no longer pushes placeholder settings before its first answer from the helper (which could switch the limit off), and edits are merged with the helper's current config instead of overwriting it with a copy up to 30 seconds old.
No more surprise password prompt
One missed answer from the helper no longer reads as "not installed"; the app asks again and only reinstalls after two misses.
A menu-bar icon that tells the truth
A bold bolt while current flows, a pause mark while charging is held or paused, nothing on battery or when full, and a check when a charge finishes, in every icon style (Pixel gets pixel-art marks). The mark springs in when the state changes and drops away on unplug. The panel says "Draining to 80%" above the limit rather than "Holding at 80%".
Low-battery shake
The icon trembles at 20%, and every 20 seconds under 10%. Settings → General → Menu Bar, with a Preview button.
Steadier panel
Lid mode no longer inserts a row above the tiles, and the line under them always takes one line, so pressing a tile never moves the layout.
AI agents can keep the Mac awake
A bundled MCP server lets an agent hold the Mac awake for a long task, optionally with the lid closed, on a lease that ends on its own.
Cleaner sounds
Every theme now plays at matched loudness, without clicks, and the off-key cues resolve.
License and support
The license window opens centred, asks before removing a license, and links to support. Settings → About gains Contact Support, Report a Bug and Copy Diagnostics, each filled in with what support needs.
Pick the plug-in animation from the menu, not three windows deep in Settings
Quick Actions gains an Animation button: switch it on or off, choose the style, and play it on the spot to see what it looks like without unplugging anything.
Bring your own animation
A new Custom style plays a numbered image sequence from ~/Library/Application Support/eWiz/ChargeAnimation — export frames from Rive, Lottie or After Effects and drop them in; Settings has a button that creates and reveals the folder and tells you how many frames it found. Frames are read in filename order, capped at 120, cached until the folder changes, and scaled to fit while preserving aspect, so a square export isn't stretched across a 16:10 display. With no frames present it plays the dot grid rather than flashing an empty screen. No third-party runtime, no binary format to parse: an image sequence is the one export every motion tool agrees on.
The charging animation runs at twice the frame rate
A six-step sweep at two frames a second reads as a slideshow however well it's eased; the tick is 250ms now, so a sweep takes about 1.5s instead of 3. It still only runs while plugged in with animation switched on, and stops the moment nothing needs it.
Two more shortcuts: rest / wake the Mac (⌃⌥⌘R) and cycle the menu-bar icon style (⌃⌥⌘I). The rest shortcut shows its banner before the screen goes dark — a confirmation nobody can see is not a confirmation.
Fans: monitoring, temperatures, and control where the hardware allows it
Settings › Sleep & Power now lists every fan the way a fan utility should — name (Left side / Right side, as the hardware's own tools name them), its minimum, current and maximum rpm with the live figure emphasised, and what is driving it — followed by a Temperatures card. Sensors are discovered by walking the SMC's own key table rather than a hardcoded list, because the keys differ per model and a fixed list is wrong on every Mac it wasn't written for.
Fan control is offered only where the SMC accepts it. Some Macs read every fan key and refuse every write — an M3 Pro on macOS 26 refuses all of them — which is not knowable in advance, so eWiz tries once, remembers the answer, and says plainly that the machine won't allow it rather than pretending. Where writes are accepted, Custom holds each fan at a percentage of its own min…max range (a percentage rather than an rpm figure, because two fans in one machine needn't share a range), 0% is each fan's minimum rather than off, control returns to macOS above a temperature guard, and the daemon restores auto when it stops.
Fans reading 0 rpm on a cool Apple silicon Mac is normal, and the UI says so: they stop entirely until there is heat to move.
Buying, licenses and support move to ewiz.app
Buy opens ewiz.app/buy, the license window links to ewiz.app/license for a lost key or a new Mac, Visit the Website and Donate go to ewiz.app, and Contact Support writes to hello@ewiz.app. Every license already sold keeps working, and keys issued for eWiz are accepted too.
Four more menu-bar battery styles, and a charging icon that actually shows charging
Upright, Ring, Meter and Dot join Rounded, Bars, Classic, Minimal and Pixel. Upright is a standing battery filling from the bottom; Ring is a circular gauge whose arc tracks the charge; Meter is a five-step signal-style scale; Dot is a circle filling like liquid, for a menu bar that should stay quiet. The five horizontal styles still share one drawing box so switching between them can't shift the menu-bar layout; the upright and round styles are narrower by nature, which is a choice made once rather than something that moves while you work. The picker is a grid now — nine tiles in one row would each be too narrow to tell apart.
While charging, the fill rises from your real level towards full and restarts, instead of the level disappearing behind a lone pulsing bolt. The bolt sits in a transparent halo knocked out of the fill, so it stays legible from a sliver to full rather than dissolving into it — and because the halo is alpha, it survives macOS's template tinting in both light and dark menu bars. With the animation toggle off the icon draws your true level with a steady bolt, so a static icon is never a lie. Ring gets a travelling leading segment; Meter sweeps its steps.
Menu-bar text options, a Power Adapter card, and CSV export for history
- Menu bar display is now a choice of Icon only / Percentage / Time remaining / Percentage & time instead of a percentage on-off switch. Time remaining shows time to full while charging and time to empty on battery, and falls back to the percentage whenever macOS has no estimate. Existing preferences migrate (percentage off → Icon only).
- Power Adapter card in Battery Details: adapter name, negotiated wattage, supply voltage/current, manufacturer, model, and serial. When the adapter advertises more power than the Mac negotiated, it says so — that gap is almost always the cable.
- Export history as CSV from the History window: samples, daily summary, or lid sessions, for the range currently on screen.
The menu panel, rebuilt to look like it belongs in the menu bar
320pt wide with 16pt margins, the geometry the system's own panels use. Rules stop at the text margin rather than cutting the panel into bands, row labels sit at the system size, and the surface is one flat opaque fill: the NSVisualEffectView it used to have sampled whatever window was behind it, so the same menu read as near-black over the desktop and as washed grey over an editor, and every fill inside it drifted with the ba...
Battlify 0.17.0 — Global keyboard shortcuts
Global keyboard shortcuts, with a full remapping UI in Settings › Shortcuts
- 15 bindable actions: toggle the charge limit, raise/lower it in 5% steps, pause/resume charging, cycle save mode, Low Power Mode, force discharge, Caffeine, Always Active, dim/restore the display, display off, sleep now, and open the Settings/Details/History windows.
- Remap anything: click a shortcut, type the new combination. Assigning a combination that's already taken moves it and tells you which action lost it. ⌫ removes a binding, ⎋ cancels, and Reset to Defaults restores the shipped set.
- Defaults on ⌃⌥⌘ (⌃⌥⌘C for Caffeine, ⌃⌥⌘L for Low Power Mode, ⌃⌥⌘B for the charge limit, …). Sleep, force discharge, display-off, and the Details/History windows ship unbound so nothing disruptive is one stray keystroke away.
- Needs no Accessibility permission. Shortcuts are claimed through
RegisterEventHotKey, so the window server delivers only the specific combinations Battlify registers — the app never sees anything else you type. - A brief on-screen HUD confirms what fired, since toggling something invisible like Low Power Mode is otherwise indistinguishable from a shortcut that isn't working. Combinations another app already owns are flagged as "in use" in Settings rather than failing silently, and the menu tooltips now show each action's shortcut.
Stop the two settings that let a closed Mac stay awake in a bag
"Super Save when lid closed" already cut the radios, Low Power Mode, Power Nap, wake-on-network and TCP keep-alive — and restored each one exactly as it was on wake. It missed the only two settings that decide whether the Mac sleeps at all:
- Wake when a nearby device is close (
proximitywake) — an iPhone or Watch nearby wakes the Mac. In a bag that isn't one wake, it's a wake every time your phone stirs, all night. - Stay awake for terminal sessions (
ttyskeepawake) — an open terminal or SSH session blocks sleep outright. Lid shut, in a bag, fully awake and warm.
Both are now switched off by Super Save on lid close, snapshotted first and put back verbatim on wake. Both also appear as their own rows in Sleep & Power › Wake while closed, so you can control them independently of lid close.
Turning radios off saves milliwatts; these two decide whether the machine sleeps in the first place. If your Mac has been coming out of your bag hot and empty, this is almost certainly why.
For the largest remaining win, set Sleep & Power › Deep — powering memory down (hibernatemode 25) does more for a Mac left closed for hours than every radio toggle combined.
Battlify 0.16.0 — Deep sleep
New Deep sleep setting (Sleep & Power) for Macs that stay closed for days
macOS normally keeps memory powered while the Mac sleeps so it wakes the instant you open the lid, writing a disk image only as a safety net. Deep sleep powers memory down and restores it from disk instead, which saves the small trickle that keeping memory alive costs over a long sleep. The trade is the wake: opening the lid takes several seconds while memory is read back, instead of being instant — so it's off by default and stays off when you upgrade.
On Apple silicon hibernatemode is the only lever that exists for this; the standbydelay knobs Intel Macs had aren't available, so there's nothing else to tune. Writing it needs root, so the root helper applies it — and reports back if pmset refuses.
The menu-bar glyph no longer animates while charging unless you ask it to
The animation ticked twice a second, and every tick re-rendered the status item. A status-item relayout is expensive: measured on an M3 Pro, it cost about a tenth of a core continuously, for as long as the Mac was plugged in. Turning it off drops the app to 0% CPU at idle. That is not a trade a battery app should make on your behalf, so it is now a setting in General — off by default, with a static charging bolt instead. The brief flash when charging completes still runs; it lasts about three seconds rather than the whole charge.
The helper stops working while your Mac sleeps
It used to run its enforcement loop every 10 seconds regardless. With the lid shut on battery the only moment that loop can run is inside one of the maintenance wakes macOS schedules roughly hourly — and everything it did there (reading its config off disk, walking IOKit for the battery, probing the SMC) was pure cost, holding the chip awake in exactly the window that should end as fast as possible. Measured dark wakes ran 6–45 seconds, so a 10-second loop fired three or four times inside one.
There was also nothing for it to decide: the charge limit and the heat cap only act while current is flowing in. So it now drops to a 60-second loop once the lid is closed on battery, which leaves a typical maintenance wake seeing at most one pass. Measured cost after the change: 0.03% CPU.
Anything that genuinely has to react with the lid shut keeps the fast loop — Always Active's task gating, a discharge run, a schedule boundary, a ready-by top-up, a calibration, or a pause that has to expire on time.
Battlify 0.15.0 — Automation rules
Automation rules: apply a charging or power setting while something is true of your Mac
A rule combines any of twelve conditions — external display connected, USB or Bluetooth device connected, an app running (or running and frontmost), battery charging or above a level, power adapter connected, a specific IP address or subnet, a Wi-Fi network, a VPN, headphones/other audio output in use, a drive or volume mounted, or CPU usage above a threshold. Match all or any of them, and invert any single condition.
While a rule holds it can switch save mode, set or lift the charge limit, hold charging, keep the Mac awake, turn on Low Power Mode, or dial charge power down. When it stops holding, the previous setting comes back — unless you changed that setting yourself in the meantime, in which case your choice stands.
The new Automation tab in Settings shows a live readout of every condition Battlify can see, so a rule can be filled in with the real name of the dock, drive, or network in front of you, and the menu lists any rule that's currently holding a setting.
Cut the menu-bar app's idle CPU by roughly 17× (0.73% → 0.04% on an idle Mac)
The status item re-lays out on every published change, so republishing values that hadn't actually moved was costing continuous SwiftUI layout work in the background. The battery poll was the main offender: the temperature sensor jitters by hundredths of a degree, so every poll looked like a change. It now rounds to the precision actually displayed and publishes only real changes, skips reading live wattage entirely when no window is showing it, and does two follow-up reads per power event instead of four. The lid/display poll and the automation rule engine got the same treatment.
Settings tabs no longer overflow the window
Each tab claimed a fixed 76pt minimum plus padding, so a sixth tab pushed the row past the width of the window — the gaps went uneven and the last tab was clipped by the window edge. Tabs now share the bar equally, with margins at both ends, and the stray focus ring on the selected tab is gone.