Building an AI Agent That Runs on a Mac Mini in My Office
What OpenClaw/Clawdbot is, how I built it, and what it actually does day-to-day. The stack, the model selection, and where it breaks.
There's a Mac Mini sitting on a shelf in my home office that runs 24/7. It handles research, captures ideas, monitors business data, and automates tasks I used to do manually. I built it myself over the last few months, and it's become the most useful tool in my workflow.
I call it OpenClaw. Sometimes Clawdbot. The name doesn't matter — what matters is what it does and how it works.
The core idea is simple: I wanted a personal AI agent that could take instructions via Telegram, execute multi-step tasks using browser automation and APIs, and report back with results. Not a chatbot. Not a fancy prompt wrapper. An actual agent that does work.
The stack looks like this.
Telegram is the interface. I send messages to a bot, and OpenClaw processes them. I chose Telegram over building a custom UI because I already have it on my phone, it handles media well, and the bot API is dead simple. Why build a frontend when a messaging app already exists?
Browser automation handles anything that requires interacting with websites. Scraping data, filling forms, checking competitor pricing, pulling reports from platforms that don't have APIs. This is the most fragile part of the system — websites change their layouts, CAPTCHAs pop up, sessions expire. But when it works, it saves me hours.
Google Places API is wired in for local business research. When I'm prospecting for my AI marketing service or doing competitor analysis for a client, OpenClaw can pull business data — reviews, ratings, contact info, opening hours — at a scale that would take me days to do manually.
The second brain capture system is where it gets interesting. Throughout the day, I have ideas, find articles, see tweets, or think of tasks. Instead of trying to remember them or switching to a notes app, I fire a message to OpenClaw. It categorises the input, stores it in a structured format, and surfaces relevant items when I need them.
Model selection was its own journey. I started with GPT-4 because that's what everyone was using. It worked fine but the costs were high for the volume of requests I was making. I experimented with Claude, Gemini, and several other models before landing on a setup that uses Gemini 2.5 Flash as the primary model with Claude Sonnet as a fallback.
Why Gemini Flash as the primary? Three reasons. Speed — it responds fast enough for real-time Telegram interactions. Cost — significantly cheaper per token than the frontier models. Quality — for the kinds of tasks OpenClaw handles most often (categorisation, extraction, summarisation, simple reasoning), Flash is more than capable.
Claude Sonnet handles the tasks that need deeper reasoning. Complex research synthesis, nuanced writing, anything where the quality of thinking matters more than speed. The routing logic is simple: most requests go to Flash, and I manually route complex ones to Sonnet when I know the task needs it.
What does OpenClaw actually do in a typical day?
Morning: I ask it to pull overnight Google review data for clients. It checks Google Places API, compares against yesterday's data, and flags any new reviews that need a response. This takes about 30 seconds and replaces what used to be 20 minutes of manual checking.
During work: I dump ideas, links, and notes into Telegram as they come to me. OpenClaw tags and stores them. When I sit down to write or plan, I ask it to surface everything I've captured on a topic.
Research: When I'm exploring a new market or product idea, I give OpenClaw a research brief. It uses browser automation and API calls to pull data, then synthesises it into a summary. It's not as good as doing the research myself, but it gets me 70% of the way there in 10% of the time.
Prospecting: For the solar installer marketing service, OpenClaw can identify potential clients in a geographic area, pull their Google review count and rating, check if they're running ads, and compile a list with contact info. That prospecting workflow used to take me an entire afternoon. Now it runs in the background while I do other work.
Where does it break?
Browser automation is the weakest link. Websites change, anti-bot measures trigger, and some sites simply can't be automated reliably. I spend about 20% of my maintenance time fixing browser automation scripts that broke because a website moved a button.
Context management is hard. For complex, multi-step tasks, the agent sometimes loses track of what it's doing or makes decisions based on incomplete context. This is a fundamental limitation of current LLMs — they're stateless by default, and bolting state management onto them is clunky.
Error handling is manual. When something goes wrong, OpenClaw tells me, but I have to diagnose and fix it myself. I haven't built sophisticated retry logic or self-healing capabilities yet.
Cost is manageable but not trivial. Between API calls, hosting, and the various third-party services OpenClaw uses, it costs about $40-60 per month to run. That's a great deal for the time it saves, but it's not free.
The whole thing runs on a Mac Mini because I wanted physical control over the infrastructure. No cloud dependencies for the core system. If AWS has an outage, my agent keeps working. The Mini sits on a shelf, connected to ethernet, and just hums away.
Am I going to productise this? Maybe. The architecture is specific to my workflows right now, but the concept — a personal AI agent accessible via messaging that handles research, automation, and knowledge management — has broad appeal. The challenge is making it reliable enough for non-technical users who can't fix browser automation scripts at midnight.
If you're thinking about building your own AI agent, start simpler than you think you need to. Get one workflow working end-to-end before adding complexity. And pick a model that balances cost and capability — you probably don't need GPT-4 for 90% of agent tasks.
Got questions about the build? I'm happy to share specifics — daine@dainereid.com.