curl -fsSL https://byper.org/install | bash

macOS charge bypass & battery toolkit: a high-performance CLI + native SwiftUI menu bar app for Apple Silicon.

────────────────────────────────────────────────────────
[t] toggle hold/charge [e] export startup log [r] raw [q] quit
curl -fsSL https://byper.org/install | bash

How it works

1.Toggle Bypass Charge on in the menu bar app, or run byper on in the terminal.
2.The counter starts ticking while Byper attaches to Apple's PowerUIAgent daemon via lldb in batch mode.
3.PowerUIAgent sets the PMIC's Mode of Operation to 7 and writes NotChargingReason 0x01000000.
4.Battery current drops to 0 mA. The charger now feeds the laptop directly, bypassing the battery entirely.
5.The counter stops and shows the elapsed time. The battery icon in the menu bar changes to a plug icon.
6.Your battery sits idle at whatever percentage it was when you toggled bypass — no cycling, no wear.
7.To resume charging, toggle Bypass Charge off or run byper off. Mode of Operation returns to 1 and current flows back into the battery.

What's included

I built Byper as both a command-line tool and a native menu bar app. It keeps things simple with four main controls:

Bypass Charge

The main switch. It flips the hardware controller into hold mode, cuts battery current to zero, and runs your Mac straight off the charger.

Powersave

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.

Caffeinate

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.

Settings & Automations

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.

Hardware truth table

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.

How it's built

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:

SUID execution means no background daemons in memory.

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).

Talking to PowerUIAgent gets around firmware write locks.

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.

Event-driven updates keep menu bar CPU usage at almost 0.0%.

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.

Direct PMIC sensor reads take under 4 milliseconds.

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.

CLI commands

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

Sample telemetry output

$ 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)

Requirements

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.

Copied to clipboard