Skip to the playbook
ACP Designs StudioCarson Palmer

Tuscaloosa, AL
Property systems studio

Operating map

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.

1

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.

2

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.

3

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.

01

Inputs

Where work enters: phone, email, forms, texts, calendars, dashboards, accounting systems, property systems, and direct requests.

02

Lanes

Named ownership areas. A lane says who handles the work, what tools are allowed, and when to escalate.

03

Schedulers

Recurring jobs that run on a rhythm: daily checks, weekly reports, monthly reviews, and always-on watchers.

04

Guardrails

Rules that keep automation from acting too freely: dry runs, receipts, approval words, rollback paths, and private data boundaries.

05

Memory

The system writes down lessons, exceptions, and proven procedures so future work is faster and less fragile.

06

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

  1. Download the zip below. Unzip it somewhere.
  2. Read setup-telegram-bot.md. Make a bot, get the chat ID. (5 min)
  3. Sign up at console.anthropic.com, add $5 of credit. (5 min)
  4. Copy .env.example to .env, fill in the three values.
  5. Test: set -a; source .env; set +a; python3 morning-brief.py
  6. Schedule it via crontab or LaunchAgent. Done.
Download starter pack (zip)

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

  1. Download the zip below. Unzip it somewhere — your Documents folder is fine.
  2. Install Obsidian (free) and open the vault folder.
  3. cd into the folder and run git init if you want version history.
  4. Read CLAUDE.md and README.md first — they explain the schema.
  5. Copy _template.project.md to projects/<your-thing>.md. Start writing.
Download vault template (zip)

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.

  1. Open Telegram, search for @BotFather, start a chat.
  2. Send /newbot. Pick a name and a username (must end in bot).
  3. BotFather sends you a token — looks like 123456:ABC.... Save it.
  4. Open a chat with your new bot and send any message (“hi”). This activates it.
  5. Visit https://api.telegram.org/bot<YOUR_TOKEN>/getUpdates — note the chat.id number 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>&1

Save 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.

1

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.

2

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.

3

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.

4

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.

1

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.

2

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.

3

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.

4

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.

5

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.

6

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.

7

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.