MacMonitor

A lightweight macOS menu bar application for real-time system monitoring.

MacMonitor lives in your menu bar and shows live CPU and memory usage at a glance. It uses native macOS APIs — vm_stat, sysctl, and UserNotifications — for accurate, low-overhead telemetry.

Python 3.9+ macOS 12+ MIT License v1.0.0

Capabilities

Native menu bar UI

Bar-chart icon plus live C:XX% M:XX% stats. A colored dot appears for warn, high, or stress. No app window, no Dock icon. Adapts to light and dark menu bars via template rendering.

Memory breakdown

Reads vm_stat and memory_pressure for Wired, Active, Compressed, and Cached memory. Flags lag risk when Compressed exceeds Active.

Process intelligence

Top 5 CPU and memory consumers. Kill any process from the dropdown. GPU-heavy apps auto-tagged.

Native alerts

UserNotifications with stable identifiers (replace in-place, not stack). 120-second cooldown per metric.

Installation

Clone

$ git clone https://github.com/dinexh/Monarx.git MacMonitor
$ cd MacMonitor

Virtual environment

$ python3 -m venv .venv
$ source .venv/bin/activate
$ pip install -r requirements.txt

Usage

$ python main.py

MacMonitor appears in your menu bar as C:XX% M:XX%. Click to open the dropdown.

Menu bar states

C:43% M:71%All metrics within thresholds
C:58% M:74%Memory pressure at WARN
C:91% M:83%Memory pressure is HIGH
C:35% M:76%Lag risk — Compressed > Active

Configuration

Change thresholds from Settings → Thresholds in the dropdown, or edit defaults in core/config.py. Values persist in ~/Library/Application Support/MacMonitor/config.json.

# Default thresholds
CPU_LIMIT = 85
MEM_LIMIT = 80
SWAP_LIMIT = 20
CHECK_EVERY = 5
COOLDOWN = 120

Auto-start on login

Create a LaunchAgent plist (replace paths with your clone location):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key><string>com.macmonitor</string>
  <key>ProgramArguments</key>
  <array>
    <string>/path/to/MacMonitor/.venv/bin/python</string>
    <string>/path/to/MacMonitor/main.py</string>
  </array>
  <key>WorkingDirectory</key><string>/path/to/MacMonitor</string>
  <key>RunAtLoad</key><true/>
  <key>KeepAlive</key><true/>
</dict>
</plist>
$ launchctl load ~/Library/LaunchAgents/com.macmonitor.plist

Logs: ~/Library/Logs/MacMonitor/macmonitor.log — open via View Logs in the menu.