I Replaced 2.5 Hours of Daily Busywork with a $0 AI Agent Setup A developer replaced 2.5 hours of daily busywork with a $0 AI agent setup running on a Mac Mini M4. The system uses local LLMs (Ollama with Qwen models), Python scripts, and cron jobs to automate email triage, calendar checks, weather updates, and market data refreshes, reducing daily attention time to about 10 minutes. The setup costs nothing beyond existing hardware and avoids cloud subscriptions. Three months ago I was spending almost three hours a day on tasks a script could do. Email triage, inbox checks, calendar reminders, weather lookups, market data refreshes. Nothing creative. Nothing that needed my brain. Just... mechanical. I didn't want another SaaS subscription. I didn't want to glue together Zapier and Notion and hope it worked. I wanted something I owned, running on hardware I already had, costing me nothing after setup. So I built it. And it actually works. Here's what I automated, how I built it, and what broke along the way. | Task | Before | After | |---|---|---| | Check 3 email accounts for urgent stuff | ~25 min | Agent alerts me only when something matters | | Fiverr inbox — new inquiries + scams | ~20 min | Hourly scan, instant Telegram notification | | Calendar — what's happening today? | ~10 min | Morning summary at 9 AM, prep alerts 30 min before | | Weather check before leaving | ~5 min | Agent tells me if I need an umbrella | | Market data for my watch face | ~15 min | Live data every 15 min, zero interaction | | Code review on my own repos | ~45 min | Automated PR summaries in 12 seconds | Total: ~2 hours 40 minutes → ~10 minutes of actual attention The 10 minutes is me reading alerts and deciding what to do. The agent doesn't make decisions. It surfaces information. Everything runs on a Mac Mini M4 I already owned. No cloud VMs, no rented GPUs for this part. Mac Mini M4 always on, ~8W idle ├── Ollama local LLM │ ├── qwen3.5:9b — general reasoning │ └── qwen3-coder:30b — code analysis via network GPU ├── Python scripts + cron jobs ├── Telegram Bot API — notifications └── Background services Garmin updater, health checks Monthly cost for the AI layer: $0 . The Mac Mini was already running 24/7 for other projects. Let's be honest: "AI agent" is an overused term. What I built is a collection of Python scripts that use a local LLM for the parts that need understanding, and plain old regex/cron for everything else. The agent isn't one thing. It's a system: That's it. No autonomous web browsing. No decision-making without my input. Just: see → understand → tell me. I sell automation services on Fiverr. Checking the inbox was eating 20 minutes a day. Worse: half the messages were scams "contact me on WhatsApp for big project" . My agent now: Is this a legitimate business inquiry or a scam? Scam indicators: external contact requests, generic greeting + immediate project offer, poor grammar with urgent tone, requests to communicate off-platform. Message: {message text} Respond: LEGITIMATE or SCAM with one-sentence reasoning. Results after 3 months: The LLM handles the nuance. Regex would miss edge cases. A human would get bored and slip up. I have API keys for OpenAI, Anthropic, and Google. I use them for complex reasoning tasks. But for automation? Cost math: That's not nothing for a side project. But more importantly: latency . Local inference is faster for simple tasks, doesn't need internet, and doesn't send my emails/Fiverr messages to a third party. The cloud is my fallback for tasks the 9B model can't handle. Maybe 5% of queries. Week 1: The Fiverr login session expired after 48 hours. I was running headless Chrome with saved cookies. Fiverr's session management is aggressive. Fix: Switched to Safari with AppleScript automation. No session issues since — Apple's keychain handles authentication transparently. Week 2: Alert fatigue. I set the agent to notify on every email. Bad idea. Fix: Two-tier system. "Urgent" alerts from known contacts, specific keywords → instant notification. "Everything else" → digest at 9 AM and 6 PM. Unsubscribe-style filtering. Week 3: The weather API I was using free tier rate-limited me. Fix: Added a fallback chain. Primary → wttr.in → OpenWeatherMap rarely hit . The agent doesn't care which source works. Month 2: LLM started hallucinating calendar events that didn't exist. Fix: Added validation layer. LLM extracts event details → script queries the actual calendar API → confirms before alerting. LLM suggests, system verifies. bash /usr/bin/env python3 """Main agent loop — runs every hour via cron""" import schedule import time from agents import email agent, fiverr agent, calendar agent, weather agent from notifier import telegram alert def run all checks : """Run all agents and collect alerts""" alerts = Each agent returns alert text, priority or None alerts.append email agent.check alerts.append fiverr agent.check alerts.append calendar agent.check alerts.append weather agent.check Send urgent immediately, batch low-priority urgent = a for a in alerts if a and a 1 == "urgent" batch = a for a in alerts if a and a 1 == "normal" for alert in urgent: telegram alert alert 0 , priority="high" if batch: digest = "📊 Agent Digest\n\n" + "\n\n".join a 0 for a in batch telegram alert digest, priority="normal" Cron runs this script hourly if name == " main ": run all checks php import ollama def should alert email data: dict - tuple bool, str : """Use local LLM to decide if an email warrants immediate notification""" prompt = f"""You are an email triage assistant. Analyze this email: From: {email data 'sender' } Subject: {email data 'subject' } Preview: {email data 'preview' :200 } Rules: - ALERT if: from known contact, contains "urgent/meeting/action required", payment-related, or from a service I actively use - SILENT if: newsletter, promotional, automated notification, no action needed Respond ONLY with: ALERT: reason or SILENT: reason """ response = ollama.chat model="qwen3.5:9b", messages= {"role": "user", "content": prompt} result = response 'message' 'content' .strip is alert = result.startswith "ALERT" reason = result.split ": ", 1 1 if ": " in result else "No reason given" return is alert, reason bash /bin/bash notify.sh — called by any agent BOT TOKEN="..." CHAT ID="..." MESSAGE="$1" PRIORITY="${2:-normal}" curl -s -X POST "https://api.telegram.org/bot${BOT TOKEN}/sendMessage" \ -d chat id="${CHAT ID}" \ -d text="${MESSAGE}" \ -d parse mode="HTML" /dev/null The agent is informational , not autonomous . I don't let it: The rule: The agent tells me what I need to know. I decide what to do. This isn't laziness — it's risk management. AI is excellent at detection, mediocre at judgment. Time saved: ~2.5 hours/day = ~75 hours/month. That's almost two full work weeks. What I did with the time: Unexpected benefit: I make better decisions because I'm not decision-fatigued. When you've already spent mental energy on inbox triage, your judgment on actual work suffers. Cost: $0 for AI, ~12 hours initial setup, ~30 minutes/week maintenance. If you're spending 1 hour/day on mechanical tasks: probably yes. If you're expecting a magic "AI agent" that runs your life: no. This is scripting with a smart layer on top. The LLM handles ambiguity. Everything else is just... code. Start with one task. Get it reliable. Add the next. I began with just email triage. Two weeks later I added Fiverr. Then calendar. Then weather. Each one took an evening. The compound effect is what matters. I write about building automation systems that actually work — local AI, self-hosted tools, and side projects that make money while you sleep. → Check out my automation work on Fiverr http://www.fiverr.com/s/XLyg → Follow CelebiBots on Telegram https://t.me/celebibot en