How a Frustrated Indie Developer Ended Up Building a Headless Mac Utility

The story behind MacMate

👋 Hi, I'm the developer

I'm an iOS indie developer. A few months ago, I picked up a Mac Mini M4 — the base 256GB model. First thing I did? Swapped in a 2TB SSD I bought online. So far so good. The little machine now lives in a closet, running 24/7 with no monitor attached, serving as my build server and automation workhorse.

🔍 Discovering AI Agents

I discovered OpenClaw early on — back when it was still called clawdbot. The idea of having an AI agent that could actually see and control my Mac was mind-blowing. I started using it for all sorts of automation: app testing, generating screenshots for the App Store, tedious UI tasks that I hated doing manually.

Quickly became a heavy user. This was exactly what I needed as a solo developer.

😤 Where Things Went Wrong

Running OpenClaw on a headless Mac Mini turned out to be... a nightmare. Something would break every few days:

  • Long automation tasks would randomly die because macOS decided to sleep — even with all the Energy Saver settings maxed out. caffeinate helped but wasn't bulletproof.
  • Screenshots looked like they were from 1995. Turns out without a physical display, macOS doesn't bother with GPU acceleration.
  • Bought a dummy HDMI plug off Amazon. Worked great for 2 weeks. Then one day it just... stopped being recognized. No idea why.
  • I wanted OpenClaw to react to notification sounds from apps. But routing system audio to a mic input on macOS? Surprisingly difficult.
  • Also needed a way to mute the audio output — my 🦞 was browsing X at 3am and some random video woke me up. Not fun.

🔧 What I Tried First

To be fair, I found existing solutions. Ended up running Amphetamine + BetterDisplay + BlackHole together. And honestly? They worked. These are solid, well-made apps.

But for my simple needs, they felt like overkill. Too many settings, too many menus, too many things to configure. I just wanted something I could toggle on and forget about.

The Rabbit Hole

As a developer, my instinct was "I'll just fix this myself." Famous last words, right?

Started digging into Apple's APIs. Found out there's actually a proper way to prevent sleep (IOPMLib assertions). Discovered a private API for virtual displays (CGVirtualDisplay). Realized I could build audio routing directly using CoreAudio.

A week of intense coding later, I had a working app. One window. Four toggles. Done.

😅 About That Name...

Fun story: When the project was called clawdbot, I named my app clawdmate. Then they renamed to moltbot, so I changed to moltmate. Then openclaw happened and I was like...

"Fuck it. I'm not chasing names anymore. MacMate it is."

🎉 Today

My Mac Mini finally works the way I always wanted. OpenClaw runs 24/7 without hiccups. Virtual displays give me proper resolution. Audio routing just works. Sleep? What sleep?

I polished up the app and figured other folks running headless Macs might find it useful too. Whether you're deploying AI agents, running a build server, or just want to access your Mac Mini remotely without the frustrations — hope MacMate helps.

Happy automating! 🐾

Install via Homebrew:

brew install --cask --no-quarantine Daniel-Robbins/macmate/macmate

3-day full-featured trial