Playbook
Build your own version.
This is the teaching version of Carson's setup. It explains the pattern in plain English so you can copy it for your own work — your own portfolio, your own clients, your own to-do list — without needing his tools, his routes, or his data.
The shape is what travels: every input gets routed, every recurring job has an owner, every risky action has a human approval gate, and every run leaves proof. Copy that. Skip the parts that don't fit.
Looking for the actual setup? The operating map shows Carson's real agents, real schedules, and real software. This playbook is the generic version for friends and colleagues building their own.
If you only read 3 things
The shortest path through the playbook.
The whole playbook is four pages — Start, Build, Costs, and Reference. If you can only spare 15 minutes today, read these three in order. They answer “is this for me?”, “what does it cost?”, and “how do I start?”. Everything else is detail you can pick up later.
Will this help me?
4 min read · honest answer
Six “don't build this if…” cases plus the 5-minute decision test. Read this first so you don't waste the next two reads if it's the wrong tool for you.
What it costs
5 min read · honest bill
Three tiers (~$20, ~$80–$150, and $400+/month for the full setup). Real per-vendor breakdown at each level. Tells you what you're signing up for before you sign up.
30-minute quickstart
6 min read · build tonight
Smallest possible working version: one Anthropic key, one Telegram bot, one Python script, one scheduled job. Code included. Build it tonight, decide tomorrow whether to expand.
Plain-English model
The system has one job.
Turn scattered work into a visible loop.
- Capture
- A call, email, report, task, calendar item, or operator request enters the system.
- Route
- The system decides which lane owns it: leasing, maintenance, finance, collections, reporting, reliability, or executive review.
- Prepare
- The lane gathers context, drafts the next step, and checks the right source of truth.
- Verify
- The run produces proof: a log, receipt, screenshot, returned record, or dashboard check.
- Approve
- A person approves anything that affects tenants, owners, money, vendors, legal status, or customer trust.
- Remember
- The lesson goes into a playbook, memory file, daily log, or wiki so the next run starts smarter.
What to copy
Copy the operating shape.
Inputs
Where work enters: phone, email, forms, texts, calendars, dashboards, accounting systems, property systems, and direct requests.
Lanes
Named ownership areas. A lane says who handles the work, what tools are allowed, and when to escalate.
Schedulers
Recurring jobs that run on a rhythm: daily checks, weekly reports, monthly reviews, and always-on watchers.
Guardrails
Rules that keep automation from acting too freely: dry runs, receipts, approval words, rollback paths, and private data boundaries.
Memory
The system writes down lessons, exceptions, and proven procedures so future work is faster and less fragile.
Dashboards
Simple views that show what happened, what is blocked, what needs approval, and what changed since the last run.
Actual ingredients
The build uses real software.
The reference system combines OpenAI Codex, Anthropic Claude, xAI Grok, Hermes, Telegram, Google Workspace APIs, AppFolio, ElevenLabs, Twilio, iMessage, Vercel, Cloudflare Workers, macOS LaunchAgents, Hermes schedules, browser automation, Node.js, Python, and local memory/search.
Your team does not need this exact stack. You need the same categories: a model layer, a control plane, systems of record, communication channels, schedulers, background services, memory, dashboards, and approval gates.
Skip the blank page
Starter pack — working code, ready to run.
Most people stall the first time they sit down to build because the blank page is the hardest part. The starter pack is a zip with the working Python script from the quickstart, a step-by-step Telegram bot setup, an example .env, and ready-to-paste cron and LaunchAgent configs.
What's in the zip
morning-brief.py — the working script. ~80 lines. Sends a daily AI brief to your Telegram.
setup-telegram-bot.md — 5-minute walkthrough for getting a bot token + chat ID.
.env.example — template for the three secrets you fill in.
crontab.example — exact cron line for daily 8 AM scheduling.
com.you.morning-brief.plist.example — macOS LaunchAgent version if you prefer launchd.
expand-recipes.md — three more workflow recipes for after the morning brief works.
How to use it
- Download the zip below. Unzip it somewhere.
- Read
setup-telegram-bot.md. Make a bot, get the chat ID. (5 min) - Sign up at
console.anthropic.com, add $5 of credit. (5 min) - Copy
.env.exampleto.env, fill in the three values. - Test:
set -a; source .env; set +a; python3 morning-brief.py - Schedule it via crontab or LaunchAgent. Done.
The level-up
Start your own knowledge base.
The single most leveraged thing in Carson's whole setup is the Obsidian vault — plain markdown files that hold the system's durable memory and that both AIs read before working. To save you from rebuilding the structure from scratch, here's a starter vault matching his schema.
What's in the vault template
projects/ — one page per system or project you're tracking, with current state, decisions log, risks, and next checkpoint.
playbooks/ — reusable recipes for recurring tasks (“when X happens, do these steps”).
plans/ — dated plan documents for specific work.
summary.md, index.md, log.md — the navigation + chronological layer.
CLAUDE.md — instructions for AI assistants working with the vault, so they follow the schema.
_template.*.md — copy-and-fill templates for each page type.
How to use it
- Download the zip below. Unzip it somewhere — your
Documentsfolder is fine. - Install Obsidian (free) and open the vault folder.
cdinto the folder and rungit initif you want version history.- Read
CLAUDE.mdandREADME.mdfirst — they explain the schema. - Copy
_template.project.mdtoprojects/<your-thing>.md. Start writing.
Public safety rule
Explain the pattern, not the private machine.
A public version should never expose credentials, private chat IDs, exact sensitive schedules, tenant records, customer records, internal dashboards, local file paths, or secret routing. Show how the system thinks. Keep the private wiring private.
What you'll have at the end
One real loop, running on a real schedule.
A daily AI-generated summary of one thing that matters to you, delivered to Telegram at 8 AM, requiring your APPROVE before any follow-up action runs.
Concrete examples
“Read my last 24 hours of inbox and tell me what needs a reply” → DM at 8 AM with a 5-line summary → I reply APPROVE 1 to draft replies for #1.
“Check yesterday's calendar and tell me what didn't get done” → DM with carryover list → I reply APPROVE to add to today's plan.
“Read the property news for my market” → DM with 3 bullets → I reply APPROVE 2 to save bullet #2 to my notes.
What you skip on night one
Hermes, agent lanes, ElevenLabs, Twilio, AppFolio, LaunchAgents, Obsidian, the wiki, Cloudflare Workers. All of it.
You build those later, only after the basic loop feels obvious. Most people quit because they try to skip to the end.
Step 1 · 5 minutes
Get the API key.
Sign up for an Anthropic API account at console.anthropic.com. Add $5 of credit. Generate an API key and copy it somewhere safe (a password manager, not a Notes doc).
Step 2 · 5 minutes
Make a Telegram bot.
- Open Telegram, search for
@BotFather, start a chat. - Send
/newbot. Pick a name and a username (must end inbot). - BotFather sends you a token — looks like
123456:ABC.... Save it. - Open a chat with your new bot and send any message (“hi”). This activates it.
- Visit
https://api.telegram.org/bot<YOUR_TOKEN>/getUpdates— note thechat.idnumber from the JSON response. That's where DMs will go.
Step 3 · 15 minutes
Write the script.
Save this as ~/morning-brief.py. It's intentionally tiny — under 40 lines.
#!/usr/bin/env python3
import os, sys, json
from urllib import request as http
ANTHROPIC_KEY = os.environ["ANTHROPIC_API_KEY"]
TG_TOKEN = os.environ["TG_BOT_TOKEN"]
TG_CHAT_ID = os.environ["TG_CHAT_ID"]
# --- 1. Ask Claude for the morning summary
prompt = "Give me a 5-bullet morning brief. Today is " \
+ __import__('datetime').date.today().isoformat() + ". " \
+ "Cover: top news for property managers in Alabama, weather, " \
+ "one thing worth thinking about today. Be specific, no fluff."
req = http.Request(
"https://api.anthropic.com/v1/messages",
data=json.dumps({
"model": "claude-haiku-4-5",
"max_tokens": 600,
"messages": [{"role": "user", "content": prompt}],
}).encode(),
headers={
"x-api-key": ANTHROPIC_KEY,
"anthropic-version": "2023-06-01",
"content-type": "application/json",
},
)
data = json.loads(http.urlopen(req).read())
text = data["content"][0]["text"]
# --- 2. Send it to Telegram
http.urlopen(http.Request(
f"https://api.telegram.org/bot{TG_TOKEN}/sendMessage",
data=json.dumps({
"chat_id": int(TG_CHAT_ID),
"text": "*Morning brief*\n" + text,
"parse_mode": "Markdown",
}).encode(),
headers={"content-type": "application/json"},
))
print("sent.")Step 4 · 5 minutes
Schedule it for 8 AM tomorrow.
On Mac or Linux, type crontab -e and add this one line (use the full path to your script):
0 8 * * * ANTHROPIC_API_KEY=sk-ant-... TG_BOT_TOKEN=123456:ABC... TG_CHAT_ID=12345678 /usr/bin/python3 /path/to/morning-brief.py >> /tmp/brief.log 2>&1Save and exit. The cron daemon will run it tomorrow at 8 AM and every day after. Logs go to /tmp/brief.log if anything breaks.
Step 5 · ongoing
What to do next.
Read your morning brief for a week.
Notice what's useful and what's noise. Edit the prompt in your script. The system gets better when you write better prompts, not when you add more tools.
Add an APPROVE handler.
Right now the bot only sends. Make it listen for replies. When you reply “APPROVE 1,” have it run a follow-up action (draft a reply, save a note, schedule a tour). This is the real “human gate” pattern Carson uses everywhere.
Add a second loop.
Pick another recurring thing — leasing follow-up, vendor check-ins, weekly P&L. Copy the script, change the prompt, schedule it for a different time.
Move to Hermes when scripts get messy.
When you have 4-5 scripts and they start needing to share state, that's when the Hermes pattern earns its keep. Don't adopt it sooner.
The whole idea
Seven simple jobs.
Catch the work
A call, email, form, task, report, or question comes in.
Example: A resident calls about a leak. A prospect asks for a tour. An owner asks for numbers.
Send it to the right lane
Hermes acts like the front desk. It decides whether the work belongs to Lyra, property ops, maintenance, finance, collections, reliability, memory, or the main operator.
Use the right helper
AI models help with reading, writing, coding, summarizing, classifying, checking, and planning. They do not get to be the final boss for risky actions.
Look in the right software
The system checks the correct tool: AppFolio for property records, Gmail for inboxes, Google Sheets for queues, the wiki for notes, and Telegram for approvals.
Make a draft or task
The system prepares the next step: a call summary, a work-order note, a leasing follow-up, a finance brief, a task, or a dashboard update.
Ask a human before risky action
If it affects a resident, owner, vendor, money, legal status, private data, or a public message, a person must approve it.
Write down what happened
The result becomes a log, receipt, dashboard note, memory entry, or playbook update. That is how the system learns without guessing.
The tiny first version
Start with one workflow.
Do not copy the whole setup on day one. Build one tiny loop first.
Good first workflow
Pick one repeated thing your team already does every week, like leasing follow-up, daily maintenance triage, delinquency review, or owner brief prep.
First safe rule
Let the system read, sort, summarize, and draft. Do not let it send, dispatch, pay, delete, or change official records until a person approves.
Public playbook for portfolio teams. Built from a real local-first workflow system, generalized for safe reuse.