How it works
byper on in the terminal.0x01000000.byper off. Mode of Operation returns to 1 and current flows back into the battery.macOS charge bypass & battery toolkit: a high-performance CLI + native SwiftUI menu bar app for Apple Silicon.
curl -fsSL https://byper.org/install | bash
byper on in the terminal.0x01000000.byper off. Mode of Operation returns to 1 and current flows back into the battery.I built Byper as both a command-line tool and a native menu bar app. It keeps things simple with four main controls:
The main switch. It flips the hardware controller into hold mode, cuts battery current to zero, and runs your Mac straight off the charger.
A quick switch for macOS Low Power Mode. You can also pick specific heavy apps, like Xcode or Docker, and Byper will turn on Low Power Mode automatically whenever those apps take focus.
Keeps your screen awake while working. You can also set it to turn on automatically whenever bypass is active so your machine stays awake during long desk sessions.
Automates the routine parts. You can have bypass engage automatically whenever you plug in, log in, or connect an external monitor. It also includes a session logger that records your live voltage, current, and temperature to a CSV file on your Desktop.
The menu bar companion also features a vertical master slider on the left side. As you slide the knob downward, it dims and turns off features one by one. Slide it back up, and your previous settings come right back.
Software status strings and battery icons can be misleading, especially when macOS is deciding whether to charge or sleep. Because of that, Byper checks the actual hardware registers on the Apple SMC and power bus before reporting what the machine is doing.
Here is what the hardware actually reports in each state:
| Operational State | AC Connected | IsCharging | NotChargingReason (NCR) | Current Flow | Mode of Operation |
|---|---|---|---|---|---|
| Bypass Hold (byper on) | Yes | No | 0x01000000 |
0 mA | 7 (Hold) |
| Standard Fast Charging | Yes | Yes | 0x00000000 |
+500 to +3500 mA | 1 (Charging) |
| Battery Full (Resting) | Yes | No | 0x00000000 |
< 80 mA | 1 (Charging) |
| On Battery (Discharging) | No | No | 0x00000000 |
Negative (-300 to -4000 mA) | 0 (Battery) |
The Mode of Operation and NotChargingReason flags come directly from Apple's power controller. When the laptop is running on battery, current flows in reverse, so Byper reads amperage as a signed number to prevent unsigned overflow bugs in raw registry dumps.
I wanted Byper to feel like a native macOS utility that stays out of your way and uses zero resources when you are not touching it. Here is how I put it together:
Most battery utilities install a helper daemon that runs in the background all day, polling sensors every few seconds and taking up 40 to 60 MB of RAM. Byper doesn't do that. The CLI installs with the setuid bit on (chmod 4755). So when you run byper on or flip a switch in the menu bar app, the tool runs for a fraction of a second, tells the hardware what to do, verifies that the change landed, and exits completely. It leaves no background process running in memory.
| Tool | Resident Memory (RSS) | Graph | Comparison (Live Measured) |
|---|---|---|---|
| byper (CLI) | 0.0 MB |
|
baseline (exits immediately, 0% CPU) |
| byper.app (menu bar) | 46.6 MB |
|
0.0% CPU (measured live, PID 1505) |
| BatFi.app | 75.0 MB |
|
1.6× more RAM (app + helper daemon, PID 1892) |
| AlDente.app | 111.3 MB |
|
2.4× more RAM (0.0% CPU, PID 26110) |
Live memory and CPU metrics sampled directly from active processes on my Apple Silicon MacBook running macOS 27. byper.app PID 1505 (46.6 MB RSS, 0.0% CPU) vs BatFi PID 1892 (75.0 MB RSS, 0.0% CPU) vs AlDente PID 26110 (111.3 MB RSS, 0.0% CPU).
On Apple Silicon, you can't just write to the SMC registers to change charging behavior. If you try writing to keys like CHBI directly, the firmware simply rejects the write. The only process allowed to tell the charger to stop is Apple's own PowerUIAgent system daemon. So Byper finds PowerUIAgent in the process list, attaches briefly with lldb in batch mode, runs the daemon's internal charging-hold function, confirms the hardware switched to hold mode, and detaches immediately.
Instead of running an internal timer to check the battery every few seconds, the menu bar app asks macOS to notify it whenever a power event happens, using IOPSNotificationCreateRunLoopSource. The app sits completely idle until you plug in a charger, unplug, or the battery level shifts. Because of that, it consumes zero CPU while sitting in your menu bar.
Tools like powermetrics give you power breakdowns, but they spin up performance cores and take measurable CPU time. Byper talks directly to the AppleSMC user client and IOKit instead. In a single non-blocking pass, it reads each individual cell voltage, total DC input, chip package power, and memory rails in less than 4 milliseconds.
If you prefer working in the terminal, the byper command gives you full control over bypass and live hardware telemetry:
| Command | What It Does | Hardware Effect |
|---|---|---|
byper on |
Turn on hardware bypass | Sets Mode of Operation 7; halts charging at current percentage |
byper off |
Turn off bypass and resume charging | Sets Mode of Operation 1; restores full AC power delivery to battery |
byper t |
Toggle bypass state | Flips between bypass hold and standard charging |
byper s |
One-line status summary | Prints percentage, AC connection status, and current hold mode |
byper p |
Hardware power rails breakdown | Queries PMIC rails (SoC, DRAM, PMIC, DC-In, cells, top process) |
byper json |
JSON telemetry snapshot | Emits structured machine-readable metrics for scripts and monitoring |
byper mon |
Continuous stream | Emits timestamped telemetry entries every second |
$ byper p
[16:20:05] #1 Batt: 54% (AC Plugged) | Source: Power Adapter | State: [HOLD] BYPASS
|-- Flow: 0 mA | 7.30 W @ 11.70 V | Net Load: 7.30 W | Code: 0x01000000
|-- Rails: SoC: 1.42 W | DRAM: 1.85 W | PMIC: 2.10 W | DC-In: 7.30 W
|-- Cells: C1: 3820 mV | C2: 3818 mV | C3: 3816 mV
+-- Top App: WindowServer (PID: 342, 8.4% CPU, ~0.35 W)
SIP configuration. Byper needs one SIP adjustment: it disables only the SIP debug-mode restriction, not SIP itself. Your system protection, malware defenses, and everything else SIP does stay fully enabled. Run once in Recovery Terminal:
csrutil enable --without debug
Apple Silicon only. Byper is built for M1, M2, M3, and M4 MacBooks running macOS 11 or newer. Intel Macs use an older SMC layout and don't have the PowerUI architecture.
Hold level. Bypass holds your battery wherever it is when you turn it on. The firmware doesn't allow setting a future target percentage, so if you want to stay at 60%, you engage bypass when your battery hits 60%.
Toggle debounce. macOS debounces rapid charging switches. If you toggle bypass off and on within a few seconds, the system might take 15 to 45 seconds to settle and verify the second command.