For Agents · What's Working

we run AI on a Mac mini in the office. not a SaaS subscription.

each build below is something we ship for our own listing work, or a working real estate agent we trust is running. specific stacks. named phases. what each replaces. and the GitHub repos you fork to get started. the most expensive part is the weekend you spend setting it up.

Last updated June 15, 2026. refreshed roughly weekly. mined from r/ClaudeAI, r/LocalLLaMA, r/ChatGPTCoding, and X builders shipping real implementations.

01 · The build

Your client memory, on a Mac mini in the office

they think you have an elephant memory. you have a Mac mini.

we've been running our entire client memory on a Mac mini in the office — OpenClaw + Hermes Agent + iMessage MCP + Apple Notes MCP + Calendar MCP — and it has fundamentally changed how we follow up with buyers and sellers. zero vendor lock-in. zero cloud. the conversations live where they already lived. the agent just learned how to read them.

the stack

OpenClaw + Hermes Agent + iMessage MCP + Apple Notes MCP + Calendar MCP, running on a Mac mini (M-series, 16GB)

how it runs

  1. Phase 1: The Local Runtime

    a Mac mini sitting on a shelf running OpenClaw as the agent host. no Zapier, no n8n, no $400/month CRM AI add-on. it's a process on a machine you own.

  2. Phase 2: The Memory Spine

    three MCP servers exposed to the agent. iMessage MCP reads chat.db. Apple Notes MCP reads the local SQLite store. Calendar MCP reads EventKit. every showing conversation, every voice-to-text from the car, every "remember they hated the cul-de-sac" note — indexed and queryable.

  3. Phase 3: The Plain English Layer

    ask the agent things like "what did the Johnsons say about schools back in March?" or "which buyers in my pipeline mentioned wanting a pool but not a HOA?" or "who did i tell i'd send a Winter Park list to and never followed up?" it answers in seconds. citations back to the actual iMessage thread.

  4. Phase 4: The Closing Move

    the real unlock isn't search. it's tone. when you call a buyer back, you open with: "you mentioned you weren't sold on the local high school back in March — i pulled three homes in the next zone for you."

what this replaces

  • a CRM "notes" field nobody reads
  • the panic of remembering what someone said six weeks ago
  • ABSOLUTELY any subscription that wants to host your client data

your texts are already the best CRM you'll ever have. you just needed something that could read them.

where to start (real code)

  • modelcontextprotocol/servers

    Anthropic's official MCP server reference repo. filesystem, fetch, Postgres, SQLite, Brave Search all included. clone this first to understand how MCP works before wiring iMessage / Notes / Calendar.

  • steipete/openclaw

    OpenClaw daemon — the easiest local agent runtime to set up. search GitHub for the latest; the README plus the example skills folder will get you started.

  • mcp-server-imessage

    community-maintained iMessage MCP servers. search GitHub and pick one updated within the last 30 days. same approach for mcp-server-apple-notes.

how this helps

for you
no more "wait, what did they say last month?" the answer is one question away. 10-15 minutes saved per client re-engagement, multiplied across your book.
for your business
clients feel remembered, which is what they pay you for. referral rates lift because you're the agent who remembers everything — names, deal breakers, school preferences, the spouse's job change.
for your clients
they get the experience of working with someone who actually paid attention. the kid's name, the contractor estimate they mentioned, the price ceiling they walked back from. recalled accurately, every time.

the honest catch

your client data lives on your machine. turn on FileVault — three clicks in System Settings. don't sync the agent's memory to iCloud. if you ever sell or trash that Mac mini, wipe it like it's full of contracts. effectively it is.

02 · The build

Lead webhook in, voicemail script out — under five minutes

speed-to-lead isn't a mindset problem. it's a UX problem. fix the UX.

we've been routing every new lead through a Cloudflare Worker → Telegram bot → Claude API loop, and the speed-to-lead is now under five minutes without anyone having to think about anything. no CRM dashboard. no "lead inbox." just a Telegram message on your phone with three buttons.

the stack

Cloudflare Worker + aiogram + Claude Opus 4.8 + your CRM's webhook output

how it runs

  1. Phase 1: The Catch

    lead form on the site (or Zillow webhook, or Follow Up Boss, or whatever you use) fires into a Cloudflare Worker. the Worker normalizes the payload — name, phone, address of interest, price band, source — and pushes it into Telegram.

  2. Phase 2: The Triage Message

    the message that hits your phone looks like: "new lead — Sarah K., 407 area, interested in 1234 Magnolia (asking $685k), came in from Zillow 47 seconds ago." with three inline buttons underneath: DRAFT VOICEMAIL / SCHEDULE TOMORROW / NOT NOW.

  3. Phase 3: The Voicemail Generator

    tap DRAFT VOICEMAIL. the Worker pings Claude with the lead context + your last 20 voicemail transcripts (so it talks like you, not like a script) + whatever notes the CRM has on this address. 30 seconds later you get back a voicemail in your voice, ready to record.

  4. Phase 4: The Loop Back

    the Worker writes the outcome back to the CRM so nothing falls through. the lead is now on the hook in under five minutes from form submission.

what this replaces

  • decision fatigue on every single new lead
  • the "i'll get to it after this showing" black hole
  • generic ISA scripts that sound like a robot ate a real estate textbook

speed-to-lead isn't a mindset problem. it's a UX problem. fix the UX.

where to start (real code)

  • python-telegram-bot/python-telegram-bot

    the canonical Python Telegram bot library. inline keyboards (the DRAFT VOICEMAIL button pattern) are documented under InlineKeyboardMarkup. look at the examples folder first.

  • aiogram/aiogram

    async alternative if you want better performance or prefer async/await. same functionality as python-telegram-bot, different ergonomics.

  • anthropics/anthropic-sdk-python

    official Anthropic SDK for calling Claude. the README has the simplest possible example — send a prompt, get a response. build the voicemail-draft prompt around that.

how this helps

for you
90 seconds per lead intake. first reply in under 5 minutes instead of "i'll call them back tonight" that turns into next week. decision fatigue drops because the bot did the cognitive work.
for your business
speed-to-lead is the killer conversion metric. leads that get a human voice within 5 minutes convert at multiples of leads that get "i'll get back to you."
for your clients
they get a real, voice-recorded response in minutes — not a chatbot, not silence. their first impression of you is responsiveness, which sets the entire relationship.

the honest catch

your voice has to be in the prompt. feed it 5-10 of your actual past first-replies to leads. without them the bot writes generic and the lead can smell it before the second sentence.

03 · The build

A 7am Telegram that tells you every promise you've made this week

trust is just kept promises, stacked.

we've been running a 7am Telegram briefing every morning that surfaces exactly which promises got made to clients in the last seven days and which ones are about to come due. it quietly became the most important thing on the phone.

the stack

Claude Code skill + iMessage MCP + Slack MCP + Gmail MCP + macOS cron + Telegram Bot API

how it runs

  1. Phase 1: The Sweep

    cron fires at 6:45am. a Claude Code skill walks through the last 7 days of iMessage (via MCP into chat.db), the last 7 days of Slack DMs and team channels, and the last 7 days of Gmail (sent + received).

  2. Phase 2: The Promise Extractor

    Claude reads the corpus with one job: find every sentence where you committed to do something. "i'll send," "i'll pull," "let me get you," "by Tuesday," "before the weekend." it doesn't care about chitchat. it only cares about debt you owe people.

  3. Phase 3: The Triage

    each promise gets tagged: who, what, by when, and whether you already delivered it (cross-referenced against later messages and calendar events).

  4. Phase 4: The 7am Telegram

    at 7am sharp the phone buzzes. "three commitments open this morning: the Smiths — callback you promised by Thursday (today). the Johnsons — price comp you said you'd send tomorrow. the Wilsons — tour proposal, no deadline given, 6 days old."

  5. Phase 5: The Trust Compound

    you clear them before the first showing. nobody ever wonders if you forgot.

what this replaces

  • the sticky note system
  • the "did i text them back?" 2am spiral
  • ABSOLUTELY any "follow-up reminders" feature in your CRM

trust is just kept promises, stacked.

where to start (real code)

  • modelcontextprotocol/servers

    has filesystem and Gmail integration patterns. the Gmail MCP server is what you wire up for the email side. read the auth patterns carefully — OAuth setup is the longest part.

  • slackapi/bolt-python

    Slack's official Python framework. you won't post anything — you're reading your own DMs and channels for commitments. the Bolt examples cover read-only usage cleanly.

  • anthropics/anthropic-cookbook

    the "extracting structured data" patterns are exactly what you want. the prompt that distinguishes "a real commitment" from "chat noise" lives in this style.

how this helps

for you
never drop a promise. the bot remembers when you forget, which is genuinely most of the time once your book gets past 30 active clients.
for your business
trust compounds when you always do what you said you'd do. the agents who win on referrals are the ones who never let a commitment slip. this is how you scale that without scaling your memory.
for your clients
they get the response when you said they'd get it. not "next week," not "remind me again," not silence. the single most uncommon trait in real estate is reliability. this is how you ship it.

the honest catch

distinguishing real commitments from chat noise needs prompt-engineering iteration. expect 2-3 weeks of tuning before false positives drop to acceptable. start by labeling 50 examples by hand — what counts, what doesn't — and feed them into the prompt as few-shot examples.

people who actually build this

04 · The build

Text an address. PDF back in 90 seconds.

a CMA shouldn't gate a listing appointment. ever.

we've been generating full CMAs by texting "CMA for 1234 Magnolia Way Winter Park" to a Telegram bot, and a PDF comes back in about 90 seconds. you can now run one during a listing appointment while the seller is still talking. before this, a CMA was a two-hour evening project. now it's a text message.

the stack

python-telegram-bot + crawl4ai + Playwright (fallback) + Claude Opus 4.8 + ReportLab, hosted on a cheap VPS

how it runs

  1. Phase 1: The Text-In

    text the bot an address. that's it. no form, no portal login, no MLS tab juggling. the bot parses the address, geocodes it, and kicks off the run.

  2. Phase 2: The Public Data Pull

    crawl4ai hits Zillow, Redfin, and Realtor.com for the subject property plus recent sales in a half-mile radius. Playwright is the fallback when one of them gets cranky about scraping. nothing private, nothing MLS-protected — just public listing data, same as any consumer sees.

  3. Phase 3: The Comp Selection

    Claude gets the raw pile and picks 5 comps using real comp logic: same beds/baths band, sold within 90 days, similar sqft, similar lot, adjusted for pool/garage/waterfront. it shows its work — "swapped out 1456 Oak because it's a short sale, doesn't reflect arm's length."

  4. Phase 4: The Narrative

    Claude writes the actual analysis. price range with confidence. days-on-market trend for the neighborhood. seasonal note if relevant. the "if we price at $X we likely move in Y days" paragraph that sellers actually want.

  5. Phase 5: The PDF

    ReportLab assembles the PDF — cover page with the subject, comp grid, map, narrative, your logo and contact info. Telegram delivers it back to your phone as an attachment. 90 seconds from text to PDF.

what this replaces

  • the 2-hour evening CMA grind
  • showing up to listing appointments under-prepped because you ran out of time
  • the moment a seller asks "what would you list it at?" and you have to say "let me get back to you"

a CMA shouldn't gate a listing appointment. ever.

where to start (real code)

  • unclecode/crawl4ai

    AI-friendly web crawler. handles JavaScript-rendered pages (Zillow) better than plain BeautifulSoup. output is already structured for LLM consumption, saves you a parsing step.

  • microsoft/playwright-python

    if crawl4ai isn't enough, drop down to raw Playwright. slower to write, but bulletproof for sites that aggressively block scrapers.

  • reportlab

    the Python PDF generation library most CMA tools end up using. search GitHub for examples — the docs are dense but the patterns are well-documented.

how this helps

for you
90 seconds vs 2 hours per CMA. "do you have comps for this?" no longer eats your afternoon. listing appointments stop being gated on prep time.
for your business
faster turnaround wins listing appointments. the seller interviewing three agents picks the one who shows up with comps ready, not the one who says "i'll send you something this weekend."
for your clients
get a real CMA when they ask, not a delay. the trust signal of "i can pull this in 90 seconds" tells them you're operating at a different level.

the honest catch

scrapers break when Zillow or Redfin change their HTML. budget 1-2 hours per month for maintenance. if you outgrow scraping (volume or fragility), graduate to a paid data API — RentCast, HomeJunction, or Realtors Property Resource if you have access via your MLS.

05 · The build

Your entire pre-listing workflow is one command

your voice is the moat. keep it. just stop typing every word of it.

we built a custom Claude Code skill that lives at ~/.claude/skills/listing-prep/ and now the entire pre-listing workflow is one command: claude prep 1234 Magnolia Way. what used to take a full afternoon now takes about the length of a coffee refill.

the stack

Claude Code + a custom skill repo on GitHub + 10 past listings as voice examples + Keynote/PPTX template + a small Python helper for the social queue

how it runs

  1. Phase 1: The Comp Sweep

    skill pulls 5 comparable solds within the radius, same beds/baths band, last 90 days. nothing fancy — just the comp foundation any listing appointment needs.

  2. Phase 2: The MLS Description (in YOUR Voice)

    this is the part that actually matters. the skill has 10 of your past listing descriptions loaded as voice examples. when it drafts a new description it sounds like you — not like ChatGPT's idea of a luxury home. it uses your cadence, your words, the way you lean on porches and lanais and "morning light through the live oaks" instead of "luxurious entertainer's paradise."

  3. Phase 3: The Listing Presentation

    pre-fills your Keynote presentation template — subject address, comp grid, recommended price band, market-snapshot slide, marketing plan slide. you open it, tweak the recommended price, and it's ready for the appointment.

  4. Phase 4: The Social Queue

    drops three pieces of pre-listing social into a queue file. "coming soon" Instagram caption, neighborhood teaser for Stories, a LinkedIn post for the agent network. all in your voice. all referencing the actual property, not "stunning new listing!"

  5. Phase 5: The Handoff

    you review. you don't rewrite. you ship.

what this replaces

  • the afternoon of comp-pulling, description-writing, deck-tweaking, caption-drafting
  • the generic-template look that screams "i did this in 10 minutes"
  • ChatGPT prompts that produce something nobody could mistake for YOUR writing

your voice is the moat. keep it. just stop typing every word of it.

where to start (real code)

  • anthropics/anthropic-cookbook

    has skill patterns and Claude API examples. read the "tool use" and "extended thinking" sections — they're the building blocks of any skill that does more than a single prompt.

  • mvanhorn/last30days-skill

    the skill we use to mine signals for our own blog (search GitHub for the latest version). it's a working example of a non-trivial Claude Code skill — read the SKILL.md and the scripts/ folder to see how a real skill is structured.

  • your-name/listing-prep

    the one you create. your repo, your voice examples, your team's prompts, versioned in git. share read access with your team so everyone on your brokerage runs the same workflow.

how this helps

for you
hours of repetitive prep collapse into minutes. cognitive load on routine listings drops to zero, which frees attention for the parts that actually matter — the seller conversation, the strategy call, the staging walkthrough.
for your business
more listing appointments per week because prep is no longer the bottleneck. your team can run the same skill, which means your operating standard is consistent across every agent in your office.
for your clients
their listing presentation feels more polished because you put energy into the parts AI can't do (the local-market storytelling, the pricing strategy nuance). the mechanical work was already done.

the honest catch

the voice examples ARE the skill. without 5-10 of YOUR actual past listings in the prompt, the output reads identical to every other agent using the same shape of skill. maintain a "voice examples" file religiously — add new ones, retire stale ones, version it in git.

06 · The build

One source video. Five deliverables. No subscriptions.

local AI on hardware you own is the most UNDERRATED move in this business right now.

we've been running every piece of listing video through a Mac mini in the office — OpenClaw + ffmpeg + Whisper — and out the other side: a transcript, an IG Reel script, three vertical cuts with captions, a LinkedIn post, and an email pitch. one source video, five deliverables, roughly 11 hours a week saved on editing. your footage never leaves the office.

the stack

Mac mini (M-series, anything from the last few years) + OpenClaw + ffmpeg + Whisper + Claude Opus 4.8 + a watched folder

how it runs

  1. Phase 1: The Drop

    you drop a Loom, a walkthrough clip, a drone B-roll bundle, or a phone video into a watched folder. that's the only input. no upload, no portal, no waiting on a renderer in the cloud.

  2. Phase 2: The Whisper Pass

    Whisper transcribes the audio locally. seller voiceover, your walking-through narration, whatever. timecoded transcript on disk in a couple minutes.

  3. Phase 3: The Cut

    ffmpeg pulls three vertical 9:16 cuts based on transcript moments — the kitchen reveal, the backyard reveal, the agent sign-off. captions burned in from the Whisper timestamps so it plays silent on social.

  4. Phase 4: The Writing

    Claude reads the transcript and writes a 30-second Reel script if you want to re-record clean VO, a LinkedIn post in your voice with the property framing, and a follow-up email pitch for your buyer list — "new listing, here's the walkthrough, here's why this one might be the one."

  5. Phase 5: The Hand-Back

    everything lands in a folder named after the address. you scroll, you approve, you post. zero subscriptions. zero "your video is processing" screens. zero footage uploaded to a third party that might use it for training.

what this replaces

  • FlexClip, Submagic, Opus Clip, and the rest of the SaaS rental stack
  • the editor you pay $40/listing to make basic vertical cuts
  • the choice between "post on every platform" and "actually sleep"

local AI on hardware you own is the most UNDERRATED move in this business right now.

where to start (real code)

  • openai/whisper

    OpenAI's open transcription model. runs locally on a Mac, no API calls. the "large-v3" model is what you want for accuracy; the "medium" model is the speed-quality sweet spot.

  • m-bain/whisperX

    faster Whisper with proper timestamps and speaker diarization. if you're cutting clips programmatically, the precise timestamps from whisperX are what you'll align ffmpeg cuts against.

  • FFmpeg/FFmpeg

    the command-line tool that does the actual video cutting and captioning. you won't read this source — you'll learn 8-10 specific ffmpeg invocations and copy-paste them forever. lots of cookbook examples online.

how this helps

for you
11 hours per week saved on manual editing. the same number FlexClip cites in their marketing — except you keep the workflow, the data, and the savings.
for your business
more content shipped per listing equals more impressions equals more inbound. three vertical cuts plus a LinkedIn post per listing instead of one polished hero piece. the math compounds across your book.
for your clients
their listing's video gets cut into 5-7 pieces of social content instead of one polished hero piece. more eyeballs per dollar they spent on media. their listing moves faster because more buyers see it.

the honest catch

Whisper hallucinates on quiet audio. always review transcripts before publishing — it loves to invent words during silences. also, your output is only as good as your input. a shaky iPhone walkthrough won't become a polished Reel just because AI touched it.

What we tried that didn't work

or what to watch out for.

the builds above ship. these don't. or they carry enough risk that we won't run them on a real client.

  • skipping the voice examples in your custom skill or prompt

    every build above leans on this rule. if you don't feed AI 5-10 examples of YOUR voice — past listings, past replies, past CMAs — the output reads identical to every other agent using the same shape of tool. the voice examples are the skill. without them you're just running a generic API.

  • building an agent with access to client data and no off-button

    every local agent needs a kill switch. a clear way to pause indexing, revoke MCP access, or shut down the daemon. build it on day one — not after a privacy incident. same applies to API keys: rotate quarterly, scope minimally, never commit to git.

  • AI-generated property photos or fake staging

    legal and ethical issue, not a workflow choice. NAR rules require accurate representation; sellers can be liable for misrepresentation. AI editing has a place (sky replacement, lawn cleanup) but stops well short of inventing rooms or staging that isn't there.

  • auto-posting AI content without human review

    every build above ends with you in the loop. one invented feature on Facebook is a credibility loss that takes months to repair. the voicemail draft, the Reel script, the CMA summary — all of it gets human eyes before it ships. the agent does the work; you do the approval.

  • treating these as set-it-and-forget-it

    every build needs maintenance. scrapers break when target sites update. MCP servers go stale when APIs change. prompts drift as models update. budget 1-2 hours per month per build for upkeep. skip that and the systems decay into shipping bad output silently.

How this list gets made

builders, not buyers.

each entry has to pass three checks. first, we've either built it in our own ASM workflow or seen a working agent document their build publicly with code or architecture details. SaaS reviews don't count. second, every repo we cite is real and active. when the right repo is community-maintained with multiple competing forks, we say so and tell you what to search for. third, the caveat is mandatory. no build ships without one.

the signal mining is ours. we run the same last-30-days research pipeline we use for our neighborhood field notes, scoped to the ai-for-agents cluster — Claude Code workflows, Hermes / OpenClaw / MCP, Telegram and Slack bots, local AI. the queries explicitly refuse SEO listicles and SaaS-comparison content. synthesis is hand-written. nothing on this page is auto-posted.

While you build

you handle the AI side. we shoot the listings.

every build on this page gives you back time on the parts a camera can't do. the listing media itself still has to be shot right. that part we run for agents across Central Florida: one shoot for photos, drone, twilight, 3D, and video, delivered the next business day.

Newsletter

Get this in your inbox.

The For Agents Brief covers what real estate agents are actually building with AI, alongside listing marketing playbooks. 600 words every Thursday.

No spam. One-click unsubscribe.