Mac Health Check
Why? Quickly diagnose if your Mac is struggling and get actionable fixes without digging through Activity Monitor.
Quick Start
"check my mac health" β battery, RAM, CPU summary + recommendations
Workflow
Step 1: Gather System Metrics
Run these commands in parallel:
# Battery status
pmset -g batt
# RAM overview (total + usage)
system_profiler SPHardwareDataType | grep "Memory"
vm_stat
# Top processes by memory (top 5)
ps aux -m | head -6
# Top processes by CPU (top 5)
ps aux -r | head -6
# Network speed (built-in macOS tool)
networkQuality
[!NOTE] Validation checkpoint: Verify all commands succeeded before proceeding. If
pmsetreturns nothing, you're on a desktop Mac β skip battery. Ifvm_statfails, fall back totop -l 1for memory info.
Step 2: Format Concise Output
Present as a brief summary, NOT tables. Example format:
π Battery: 73% (discharging, ~20h remaining)
πΎ RAM: 17.1GB / 24GB used (71%)
β‘ CPU: Light load
π Network: β¬οΈ 262 Mbps β¬οΈ 26 Mbps (36ms latency)
Top memory: Amp (478MB), Passwords (320MB), Spotlight (310MB)
Top CPU: WindowServer (3.2%), Amp (2.1%), Finder (0.8%)
Step 3: Analyze & Recommend
[!TIP] Keep output concise β users want a quick health check, not a system report.
Apply these thresholds and provide recommendations:
Battery:
- < 20%: "β οΈ Consider plugging in soon"
- < 10%: "π΄ Critical β plug in now"
RAM:
- > 85% used: "β οΈ Memory pressure high"
- > 95% used: "π΄ System may slow down β consider closing apps"
- Any single process > 2GB: Flag it for potential action
CPU:
- Any process > 80% sustained: "β οΈ [Process] using significant CPU"
- Any process > 150%: "π΄ [Process] may be stuck β consider force-quitting"
Network:
- Download < 10 Mbps: "β οΈ Slow download speed"
- Upload < 5 Mbps: "β οΈ Slow upload speed"
- Latency > 100ms: "β οΈ High latency β may affect video calls"
Common recommendations: | Condition | Recommendation | |-----------|----------------| | mds_stores high CPU/RAM | "Spotlight indexing β will settle down" | | kernel_task high CPU | "Thermal throttling β check ventilation" | | WindowServer high | "GPU load from UI β normal if using many windows" | | Inactive app using >1GB | "Consider quitting [app] to free memory" |
Step 4: Offer Actions
[!CAUTION] Only offer to kill a process if it's clearly stuck (>150% CPU) or the user explicitly asks.
If issues found, offer:
- "Want me to kill [process]?" (if clearly stuck)
- "Should I check what's causing [issue]?"
If healthy:
- End with "β System looks healthy β no action needed"
Examples
Example 1: Healthy System
π Battery: 73% (discharging, ~20h remaining)
πΎ RAM: 17.1GB / 24GB (71%) β healthy
β‘ CPU: Light load (< 10% average)
π Network: β¬οΈ 262 Mbps β¬οΈ 26 Mbps (36ms latency)
Top memory: Amp (478MB), Passwords (320MB), Spotlight (310MB)
Top CPU: WindowServer (1.0%), Amp (0.7%), Finder (0.3%)
β
System looks healthy β no action needed
Example 2: Low Battery + High RAM
π Battery: 8% (discharging, ~45min remaining)
π΄ Critical β plug in now!
πΎ RAM: 22.8GB / 24GB (95%)
π΄ Memory pressure critical β consider closing apps
β‘ CPU: Moderate load
Top memory: Chrome (4.2GB), Slack (1.8GB), Docker (1.5GB)
Top CPU: Chrome Helper (12%), Docker (8%), Spotlight (5%)
β οΈ Chrome using 4.2GB β consider closing unused tabs
β οΈ Docker using 1.5GB β quit if not needed
Want me to help close any of these?
Example 3: Stuck Process
π Battery: 45% (charging)
πΎ RAM: 14GB / 24GB (58%) β healthy
β‘ CPU: High load
Top memory: Xcode (2.1GB), Simulator (890MB), Safari (650MB)
Top CPU: node (187%), Xcode (45%), coreaudiod (12%)
π΄ node at 187% CPU β likely stuck or in infinite loop
Process running for 8+ minutes at this level
Want me to kill the stuck node process (PID 12847)?
Troubleshooting
| Issue | Cause | Fix |
|-------|-------|-----|
| pmset returns nothing | No battery (desktop Mac) | Skip battery section |
| vm_stat weird numbers | Values are in pages | Multiply by 16384 / 1048576 for MB |
| Process names truncated | ps default column width | Use ps aux -m -o pid,rss,comm for full names |
| RAM numbers don't add up | macOS uses compressed/cached memory | Focus on "active + wired" as true usage |
| High CPU but system feels fine | Brief spikes are normal | Only flag if sustained >30 seconds |
Quality Rules
Output Validation Checklist
Before presenting results, verify:
- [ ] All four sections present (Battery, RAM, CPU, Network)
- [ ] Percentages calculated correctly (used/total Γ 100)
- [ ] Top processes listed for both memory AND CPU
- [ ] Recommendations match thresholds (not arbitrary)
- [ ] Emojis used consistently (ππΎβ‘π for sections, β οΈπ΄β for status)
Anti-Patterns to Avoid
| Don't | Do Instead |
|-------|------------|
| Show raw vm_stat output | Convert pages to MB/GB |
| List 10+ processes | Top 3-5 only |
| Use technical jargon | Plain language ("memory pressure" not "page faults") |
| Recommend killing system processes | Only suggest for user apps |
| Give advice without thresholds | Always cite the threshold being exceeded |
Naming Conventions
- Battery states: "charging", "discharging", "fully charged", "not charging"
- RAM levels: "healthy" (<85%), "high" (85-95%), "critical" (>95%)
- CPU levels: "light" (<30%), "moderate" (30-60%), "high" (>60%)
- Network levels: "slow" (download <10Mbps), "moderate" (10-50Mbps), "fast" (>50Mbps)
Testing
Evaluation Scenarios
| Scenario | Input Condition | Expected Behavior | |----------|-----------------|-------------------| | Healthy system | RAM <85%, CPU <30%, Battery >20% | Shows "β System looks healthy" | | Low battery | Battery <10% | Shows π΄ critical warning | | High RAM | RAM >95% | Shows π΄ + suggests closing apps | | Stuck process | Any process >150% CPU | Offers to kill with PID | | Desktop Mac | No battery (iMac, Mac Mini, Mac Pro) | Skips battery section gracefully | | Memory hog | Single process >2GB | Flags for potential action | | Slow network | Download <10 Mbps | Shows β οΈ slow download warning | | High latency | Latency >100ms | Shows β οΈ latency warning |
Model Coverage
- Tested on: Sonnet, Haiku
- Edge cases verified: Desktop Mac (no battery), fresh boot (low usage), compile job (high CPU spike)
Validation Commands
# Verify battery section works
pmset -g batt
# Verify RAM calculation
vm_stat | head -5
# Verify process listing
ps aux -m | head -3
# Verify network test works
networkQuality