Skip to the operating map
ACP Designs StudioCarson Palmer

Tuscaloosa, AL
Property systems studio

Operating map · Hermes

One Mac.
Nine lanes.

One private chat, a dispatcher and eight specialists, and a human gate for money, leases, and legal. This page is the public map: what each lane owns, what every scheduled job does and how, and the background jobs that keep the studio Mac honest.

09
Hermes lanes
32
Scheduled jobs
06
Mac services
01
Private chat workspace

One request, four moves

  1. 01MessageA tenant, an email, a schedule, or a manual request.
  2. 02Hermes routesThe right profile, tools, memory, and guardrails.
  3. 03Work happensDrafts, checks, summaries, and reports.
  4. 04I gate itAnything risky waits for my approval.

Main lane

Dispatcher

Front desk for the whole teamRuns on Claude Opus 5.5

Role

Triages every new ask, answers what's its own, and hands the rest to the right lane fast. Also writes The Front Porch, the daily morning paper.

Owns

  • First stop for a new ask — route it to the right lane.
  • Side projects and anything that does not already have an owner.
  • The Front Porch, every morning.

Scheduled jobs · open one to see how it works

  1. The Front PorchDaily 5:30 AMThe daily morning paper, written fresh at 5:30 AM.
    Reads
    The day's calendar, weather, flagged email, property numbers (occupancy, late rent, renewals), open tasks, overnight job results, and Carson's replies to yesterday's paper.
    How it works
    A script gathers everything into labeled sections. An AI writer turns it into a short, friendly paper — headlines, a news wire, a sports desk, a mailbag — with at most a couple of web searches.
    Result
    Posted to its own Telegram topic every morning; a print edition is made too.
    Carson’s part
    Read it. Nothing is sent to tenants or vendors.
  2. Weekly failure refineSundays 8:00 AMReviews the week's failed runs and turns them into fixes.
    Reads
    Hermes's own record of every failed or flaky scheduled run across all nine profiles.
    How it works
    If nothing failed, it stops before any AI runs. Otherwise an AI groups the failures, decides whether each was the environment (Mac asleep, network drop, login) or a gap in a procedure, and writes one lasting rule into the responsible skill for each real gap.
    Result
    A short list in the System Health lane of what it patched and what it left alone — or nothing at all.
    Carson’s part
    Skim the list. It only edits Hermes's own skill notes; nothing outside the Mac.

Background jobs on the studio Mac

No background jobs on this lane. Studio Mac health lives with System Health.

Work lane

Leasing Back Office

Occupancy, renewals, lease packetsRuns on Claude Opus 5.5

Role

Owns occupancy, renewals, the lease pipeline, applications, lease packets, and the tenant directory.

Owns

  • Occupancy, renewals, and the next step on every lease.
  • The morning property briefing.
  • A current tenant directory.

Scheduled jobs · open one to see how it works

  1. Ops Daily DigestDaily 8:30 AMMorning property dashboard: queues, urgent items, top approvals, overnight health.
    Reads
    The property-ops inbox and approval queue, today's calendar, scheduled-job health, the latest AppFolio sync, work-order aging, and occupancy.
    How it works
    A script refreshes each source and builds one card: counts, new approvals since yesterday, collections, calendar, and anything broken overnight (plus work-order detail on Mondays). It remembers what it showed last time so only new items are listed. No AI.
    Result
    One card in the Leasing Back Office lane at 8:30 AM.
    Carson’s part
    Every listed approval still waits for your APPROVE — the digest never approves anything.
  2. Occupancy ReportSundays 9:30 AMPortfolio occupancy: leased / empty / pending and signed revenue.
    Reads
    The occupancy tracker spreadsheet.
    How it works
    A script totals beds per property, signed monthly rent, and which property has the most empty beds, and warns if the tracker hasn't been edited lately. No AI.
    Result
    A Sunday card in the Leasing Back Office lane, plus an archived copy in Notes.
    Carson’s part
    Nothing to approve. It never edits the tracker.
  3. Tenant Directory RefreshDaily 9:50 AMRebuilds the tenant directory and lease alerts.
    Reads
    A fresh tenant-directory export from AppFolio, pulled by the Mac's browser.
    How it works
    A script exports the directory, drops past residents, updates the shared directory sheet and Lyra's local copy (so she recognizes callers), then rebuilds the lease-expiration list. No AI.
    Result
    A lease list in the Leasing Back Office lane only when it changed (always on Mondays).
    Carson’s part
    Nothing to approve. It never messages tenants or writes to AppFolio.
  4. Lease Renewal PipelineMondays 10:30 AMFlags leases coming up for renewal in 30 / 60 / 90 days.
    Reads
    The lease-expiration list built by the morning directory refresh.
    How it works
    A script groups every lease ending in the next 90 days into under-30, 30–60 and 60–90 day tiers, soonest first. No AI.
    Result
    A Monday list in Lyra's leasing lane (or one line saying nothing is ending).
    Carson’s part
    Decide on renewals. Renewal mailings are a separate step you approve.

Background jobs on the studio Mac

No background jobs on this lane. Studio Mac health lives with System Health.

Lyra lane

Lyra

Leasing + resident lineRuns on Claude Opus 5.5

Role

Leasing and every resident-facing message — prospects, tenants, tours, move-ins and move-outs — plus the 24/7 voice and text line.

Owns

  • The 24/7 voice and text line for leasing and maintenance.
  • Routine leasing answers; anything about money, a lease, or the law waits for a person.
  • Keeping Lyra’s property facts current.

Scheduled jobs · open one to see how it works

  1. Email Pipeline WatchdogHourly at :00Hourly check that the email pipeline is healthy.
    Reads
    The email pipeline's heartbeat and whether the Mac is actually awake.
    How it works
    A script checks that the five-minute email poller is running and fresh. It ignores blips while the Mac is half-asleep, re-alerts at most every six hours, and sends one all-clear when it recovers. No AI.
    Result
    An alert in Lyra's lane only when something's wrong.
    Carson’s part
    Nothing unless it alerts.
  2. Message Reply DigestDaily 7:00 AM, 11:00 AM, 4:00 PMBusiness-text digest at 7, 11, and 4.
    Reads
    The Mac's Messages app (read-only), filtered to work and resident contacts.
    How it works
    A script finds threads still waiting on a reply, hides door codes and amounts, and flags urgent ones. It stays quiet unless something is new since the last digest. No AI.
    Result
    A short list in the Leasing Back Office lane.
    Carson’s part
    Ask for a draft if you want one — any reply goes through APPROVE / EDIT / SKIP before it's sent.
  3. Urgent Message ScanEvery 15 minutes, 7 AM–9 PMEvery 15 minutes in the daytime, flags urgent texts.
    Reads
    The Mac's Messages app (read-only), work and resident contacts only.
    How it works
    A script checks for threads that look urgent and alerts only when the newest message is new since the last alert. No AI.
    Result
    An alert in the Leasing Back Office lane, or nothing.
    Carson’s part
    Respond yourself. It never sends a text.
  4. Lyra QA ReviewDaily 12:45 PM, 8:45 PMScores Lyra's recent calls and texts twice a day.
    Reads
    Lyra's call records and the voice platform's pass/fail checks on each call, plus her leasing-draft queue.
    How it works
    A script looks for slips: unlogged calls, failed fair-housing or privacy checks, or a line that's gone quiet. Any check that fails on two or more calls in a week becomes a fix packet for the improvement drafter. No AI.
    Result
    A note in Lyra's lane only when something needs a look; silent when she's healthy.
    Carson’s part
    Read the flags. It changes nothing.
  5. Lyra Improvement DrafterDaily 1:15 PM, 9:15 PMDrafts prompt and knowledge fixes from QA findings for Carson's review.
    Reads
    The QA review's fix packets, the call transcripts behind them, and Lyra's current knowledge and instructions.
    How it works
    If there's no packet, it stops before any AI runs. Otherwise an AI works out why each check failed (missing knowledge, unclear instructions, a tool problem, or a too-strict check) and writes the smallest exact fix, with a fair-housing note when relevant.
    Result
    A proposal in Lyra's lane.
    Carson’s part
    Approve or reject. It can't edit anything; approved fixes go live after 5 PM.

Background jobs on the studio Mac

  1. Knowledge syncWeeklyPushes the current property rules and FAQs to Lyra's voice and text line.

Maintenance lane

Maintenance

Work orders, vendors, turnsRuns on Codex GPT-6.1

Role

Owns work orders, appliance repair claims, vendors, unit turns, and the health of the AppFolio sync.

Owns

  • Work-order history and a daily sheet of open work for each vendor.
  • The unit turn board: each turning unit’s checklist.
  • Emergencies first, and plainly — safety and habitability before cosmetics.

Scheduled jobs · open one to see how it works

  1. Unit turn board digestDaily 6:45 AMDaily unit-turn status digest.
    Reads
    Upcoming move-outs from the tenant directory, and the turn-board document where checklists get ticked.
    How it works
    A script adds a checklist section for each new upcoming turn (codes, filters, paint, clean, keys) without touching anything already there, then counts progress. No AI.
    Result
    A digest in the Maintenance lane when the board changed (always on Mondays).
    Carson’s part
    Tick items off on the board. No vendors or tenants are contacted.
  2. WO History SyncMondays 10:00 AMWeekly work-order history refresh.
    Reads
    The last 60 days of AppFolio work orders, every status.
    How it works
    A script pulls new and changed work orders into a local history database and counts open versus total per property. No AI.
    Result
    A Monday digest in the Maintenance lane, archived to Notes.
    Carson’s part
    Nothing. It never contacts vendors or tenants.

Background jobs on the studio Mac

  1. AppFolio syncDaily, 6:05 AMPulls the AppFolio export in a local browser, then builds one work-order sheet per vendor.

Collections lane

Collections & Books

Late rent, payment plans, the booksRuns on Claude Opus 5.5

Role

Owns late rent, payment plans, owner accounting, and money risk, with a weekly collections snapshot.

Owns

  • Late rent, payment plans, and who needs a follow-up.
  • The week’s collections picture in one note.
  • Every outbound money notice still waits for a person.

Scheduled jobs · open one to see how it works

  1. Daily Rent RollDaily 7:00 AMDaily rent-roll snapshot.
    Reads
    AppFolio's late-rent report, pulled by the Mac's browser.
    How it works
    A script refreshes the report and compares it to the last one it posted. It only posts when the total moved meaningfully. No AI, no drafts, no sends.
    Result
    A card in the Collections & Books lane when numbers move; otherwise silent.
    Carson’s part
    Nothing to approve.
  2. Weekly Delinquency ReportMondays 8:30 AMMonday past-due report, tiered by severity.
    Reads
    AppFolio's late-rent report and each late account's ledger.
    How it works
    A script refreshes the report, compares it with last week, updates the balance sheet Lyra uses for payment questions, and prepares notice emails with the ledger attached — as drafts only. No AI.
    Result
    A summary card in the Collections & Books lane; a monthly copy is archived.
    Carson’s part
    Review the drafted notices and send them yourself. Nothing goes to a tenant automatically.
  3. Weekly Collections SnapshotFridays 9:45 AMFriday collections snapshot from the latest late-rent and sync data.
    Reads
    The most recent late-rent report and AppFolio sync, already on the Mac.
    How it works
    A script summarizes late-rent totals and says how old the data is. It doesn't compute profit or loss. No AI.
    Result
    A Friday card in the Collections & Books lane.
    Carson’s part
    Nothing to approve.

Background jobs on the studio Mac

No background jobs on this lane. Studio Mac health lives with System Health.

Finance lane

Trading

Market research (paused)Runs on Codex GPT-6.1

Role

Market research and trade ideas. Its scheduled scans are paused, so it works on request.

Owns

  • Research on request; nothing scheduled while the scans are paused.

Scheduled jobs · open one to see how it works

No scheduled jobs. Scans are paused; this lane works on request.

Background jobs on the studio Mac

No background jobs.

Ops lane

System Health

Gateway, jobs, backups, alertsRuns on Codex GPT-6.1

Role

Watches the gateway, scheduled jobs, logins, backups, and failures. Every report starts with OK, WATCH, or FAIL.

Owns

  • Keep the studio Mac signed in, backed up, and talking to the outside world.
  • Sort inbound mail so leasing replies can be prepared.
  • Re-run missed jobs and retry anything that did not send the first time.

Scheduled jobs · open one to see how it works

  1. Cron offline re-fire sweeperEvery 20 minutesRe-runs scheduled jobs missed while the Mac slept.
    Reads
    Every profile's job history.
    How it works
    Every 20 minutes a script looks for script jobs that failed with an offline-type error in the last few hours and re-runs them (a few at a time, never twice for the same miss). It also reports any job whose slot was skipped entirely. No AI.
    Result
    One line per re-run in the System Health lane; silent when all is well.
    Carson’s part
    Nothing.
  2. Playwright Profile MonitorEvery 6 hours at :00Browser-profile health check every 6 hours.
    Reads
    The Mac's AppFolio browser profile: its size, login cookies, two-factor 'remember me' expiry, and the last sync's result.
    How it works
    A script checks for a damaged profile, stale logins, a two-factor expiry coming up, or a failed sync, and alerts only on new problems. No AI.
    Result
    An alert in the System Health lane, or nothing.
    Carson’s part
    Log in again when it says so.
  3. Hermes Weekly BackupSundays 4:00 AMSunday backup.
    Reads
    All of Hermes (profiles, memory, jobs), the workspace, and the planning repos.
    How it works
    A script builds three backups, checks each one, keeps the newest four of each, and trims old logs. No AI.
    Result
    A success note in the System Health lane — which also proves alerts still work — or a plain-English failure alert.
    Carson’s part
    Nothing. Backups stay on the Mac.
  4. Gog Credential MonitorDaily 6:00 AMDaily Gmail-auth health check.
    Reads
    Every connected Google account.
    How it works
    A script makes a tiny read-only call on each account to prove the login still works, and alerts on new failures with what will stop working. No AI.
    Result
    An alert in the System Health lane, or nothing.
    Carson’s part
    Reconnect the account when asked.
  5. Lyra Spend WatchDaily 7:30 AMDaily voice and AI spend check.
    Reads
    Lyra's voice-platform credits and call volume, the test-spend log, and her worker's health.
    How it works
    A script checks credits against a floor, test spending against a monthly cap, and call volume against limits that would catch a spam caller. It posts only when something changed. No AI.
    Result
    A note in the System Health lane when a limit is near.
    Carson’s part
    Top up or investigate when warned.
  6. Approval Re-pingMondays 1:00 PMMonday nudge on stale approvals.
    Reads
    The approval queue — anything waiting more than two days.
    How it works
    A script groups old approvals by owner and posts one rolled-up reminder per lane, never twice in the same week. No AI.
    Result
    A reminder in each lane that has stale items.
    Carson’s part
    Approve, decline, or snooze. It never decides for you.
  7. Plug-in reminderDaily 9:30 PMEvening reminder to keep the Mac on power.
    Reads
    Whether the MacBook is on battery.
    How it works
    At 9:30 PM a script checks the power source. No AI.
    Result
    A reminder in the general lane only if it's on battery.
    Carson’s part
    Plug it in, so the early-morning jobs run on time.

Background jobs on the studio Mac

  1. Hermes gatewayAlways onOne process serves all nine lanes: it listens for messages, routes work, runs the schedules, and restarts itself if it crashes.
  2. Email pipelineEvery 5 minPolls six Gmail accounts, sorts what arrives, and prepares leasing reply drafts.
  3. Delivery retryEvery 2 minRetries messages that didn't send the first time.

Memory lane

Memory & Wiki

Logs, wiki, lasting decisionsRuns on Claude Opus 5.5

Role

Keeps the daily logs, the planning wiki, memory health across the lanes, and the decisions worth remembering. It records; System Health acts.

Owns

  • Write down what happened today so tomorrow’s work starts from the truth.
  • Turn new notes into shared project pages.
  • Keep Lyra’s property knowledge in step with the week’s changes.

Scheduled jobs · open one to see how it works

  1. Tenant Wiki Delta IngestSundays 5:00 AMSunday ingest of new resident Q&A into the knowledge base.
    Reads
    New resident messages and email since last week (read-only).
    How it works
    A script adds the new messages to a private, per-resident knowledge base and refreshes its pages and topic links. No AI, nothing sent.
    Result
    Silent unless it fails.
    Carson’s part
    Nothing.
  2. Re-read stale pagesSundays 8:00 AMRe-reads wiki pages that haven't been verified lately.
    Reads
    Wiki project pages not checked in 45+ days (up to four a week).
    How it works
    If none are due, it stops before any AI runs. Otherwise an AI re-checks every claim on each page against the live system, marks anything outdated as superseded (never deleting), and stamps the page as verified.
    Result
    Wiki edits; a short digest appears in Sunday's weekly review.
    Carson’s part
    Nothing.
  3. Auto synthesize staged memoryDaily 9:00 AMTurns staged lane notes into wiki updates.
    Reads
    Notes the profiles saved during the day, plus the wiki's index.
    How it works
    If nothing is queued, it stops before any AI runs. Otherwise an AI pulls out lasting decisions and risks, adds them to the right wiki pages with dates and sources, and marks each note done.
    Result
    Wiki edits only; nothing posted.
    Carson’s part
    Nothing — the nightly commit keeps a history you can roll back.
  4. Curator weekly reviewSundays 9:00 AMWeekly wiki curation pass.
    Reads
    What the nightly curator and Sunday re-read changed this week.
    How it works
    A script summarizes the week's wiki additions and the re-read digest. No AI.
    Result
    A Sunday summary in the Memory & Wiki lane; silent when nothing changed.
    Carson’s part
    Correct anything that looks wrong.
  5. Verify WeeklyMondays 9:00 AMCompares wiki claims to live state and flags drift.
    Reads
    The whole planning wiki: links, stale pages, open risks, job state, and memory limits.
    How it works
    A script runs the wiki's checks, counts drift, and regenerates the wiki's one-page summary every week. No AI.
    Result
    A Mac notification when drift is found; snapshots saved locally.
    Carson’s part
    Nothing unless it flags drift.
  6. Weekly ReviewFridays 5:00 PMUpdates the long-term memory file with the week's events.
    Reads
    This week's approval count, how full each profile's memory is, and each lane's recent activity.
    How it works
    An AI reports the week's approvals, compacts any profile memory that's nearly full, checks the fact store for contradictions, and flags lanes whose memory hasn't changed in months.
    Result
    A Friday report in the Memory & Wiki lane.
    Carson’s part
    Read it. Everything except memory compaction is report-only.
  7. Curator (chronicle)Daily 10:20 PMNightly curation of the planning wiki.
    Reads
    Summaries of the day's work sessions on the Mac.
    How it works
    If nothing is new, it stops before any AI runs. Otherwise an AI keeps only facts that are lasting, non-obvious and costly to forget — dropping anything about people, contact details or secrets — and files them in the wiki or the lessons list. Most nights it keeps nothing.
    Result
    Wiki edits only; you see them in Sunday's weekly review.
    Carson’s part
    Fix any line you disagree with.
  8. Daily Log WriterDaily 11:00 PMWrites the day's activity log.
    Reads
    Today's log file and the latest AppFolio sync status.
    How it works
    If the day's log is missing or nearly empty at 11 PM, a script writes a basic one so there's never a gap. No AI.
    Result
    A local log file; nothing posted.
    Carson’s part
    Nothing.
  9. Nightly auto-commitDaily 11:30 PMNightly version-control commit of the wiki.
    Reads
    Uncommitted changes in the planning wiki and the tenant knowledge base.
    How it works
    At 11:30 PM a script commits any changes so every edit has a history. It never pushes anywhere. No AI.
    Result
    Local commits only.
    Carson’s part
    Nothing.

Background jobs on the studio Mac

  1. Wiki memory watcherOn changeQueues new lane notes so the morning wiki pass can fold them in.

Tweeter lane

Research

Quick answers + web and X researchRuns on Grok 4.7

Role

A quick-answer and web/X research desk. Its scheduled scan is paused, so it works on request.

Owns

  • Answers and research on request; nothing scheduled.

Scheduled jobs · open one to see how it works

No scheduled jobs. Scans are paused; this lane works on request.

Background jobs on the studio Mac

No background jobs.

The reasoning layer

Four AI backends, one job each.

Hermes doesn't think on its own. Each lane borrows a model, and every lane has a fallback.

Reasoning + helper tasks

OpenAI Codex

GPT-6.1Runs the finance, ops, and maintenance lanes, and is the fallback for the Claude lanes, including the Dispatcher. It also handles vision, compression, and small helper tasks for every lane.
  • Trading
  • System Health
  • Maintenance

Reasoning

Anthropic Claude

Claude Opus 5.5Runs the Dispatcher plus the work, collections, Lyra, and memory lanes, and is the fallback for the Codex lanes. Claude Sonnet drafts Lyra's text replies.
  • Dispatcher
  • Leasing Back Office
  • Lyra
  • Collections & Books
  • Memory & Wiki

Research lane + search

xAI / Grok

Grok 4.7Runs the tweeter lane, and powers web search and X search.
  • Research

Lyra's voice

ElevenLabs

ElevenLabs voiceA separate voice AI runs Lyra, who answers the leasing phone line. It handles the conversation. Hermes handles the data path, the tools, and the human handoff.
  • Lyra

Lanes are split between OpenAI Codex and Anthropic Claude, and each falls back to the other vendor. The Research lane runs on Grok with Codex as its fallback. ElevenLabs runs Lyra's phone conversations separately, and Hermes owns the data and tool handoff.

Workflows

How a request actually moves.

Every request takes the same six steps. Below that, six real workflows that run every day.
  1. 01 · TriggerWork shows up from one of five places.A cron timer, an inbound phone call to Lyra, a new Gmail message that matches a watch rule, a Telegram command from me, or a background sync (AppFolio, Lyra's knowledge base).
  2. 02 · GatewayThe Hermes gateway picks it up.The gateway receives the request, decides which profile owns the work, and hands it off. One gateway process serves all nine profiles. macOS restarts it if it crashes, and a Hermes job re-fires any missed scheduled run every 20 minutes.
  3. 03 · AgentOne of nine Hermes profiles picks up the work.The Dispatcher, Leasing Back Office, Lyra, Trading, Collections & Books, System Health, Memory & Wiki, Maintenance, or Research. Each runs with broad tool access. The safety boundary is the approval gate, not a per-tool lockdown.
  4. 04 · ToolsThe agent calls scoped tools.AppFolio (work orders, occupancy) through a local Playwright browser, Gmail (inbox), Google Sheets (queues), Hermes memory, session search, Kanban handoffs, Telegram, or Cloudflare Worker endpoints. Each agent gets only what it needs.
  5. 05 · ApprovalRisky moves stop and ask me.Routine, fact-only replies (property facts, how-tos) can go out automatically behind safety filters. Anything about accounts, money, legal issues, or work orders waits for my APPROVE on Telegram, and scheduled jobs can't run risky commands at all. Work orders never get auto-posted to AppFolio. Every one is a manual reply, even emergencies.
  6. 06 · LoggedEvery run leaves proof.A log entry, a Telegram message, a returned record count, a sheet update. The session writes to Hermes memory and session search, so the next agent that needs context starts smarter.

Gmail watcher

Six Gmail accounts are polled every 5 minutes. New mail gets classified, routed to a dedicated Telegram channel, and the right agent picks it up.
  1. Gmail poll
  2. Mail payload
  3. Routed channel
  4. Agent classifies

AppFolio sync

Every day at 6:05 AM, a local Playwright browser runs against AppFolio, downloads the Excel export, and parses it on the Mac. It then builds one work-order PDF per vendor, plus a scoreboard front page. Any 2FA prompt comes to me on Telegram.
  1. Daily 6:05 AM
  2. Local Playwright
  3. Excel export
  4. Vendor PDFs

Lyra call

A leasing or tenant call comes in on Lyra's line, gets understood by ElevenLabs, runs through scoped tools, and ends with a logged record.
  1. Caller
  2. ElevenLabs
  3. Tool call
  4. Log
  5. Human follow-up

Emergency call

Urgent calls skip the normal queue and fire a loud Telegram alert and an SMS to me at the same time. No work order is created automatically. I decide.
  1. Caller
  2. Detect
  3. Telegram emergency channel + SMS
  4. Human response

Agent review

Hermes or a coding agent does the work, then a separate review pass checks the meaningful changes before they ship.
  1. Author
  2. Independent review
  3. Human merge

Cron + approval

A scheduled job drafts something risky, like a collection notice or a vendor email. The agent stops at the approval gate and waits for me on Telegram.
  1. Cron
  2. Agent draft
  3. Telegram APPROVE
  4. Send

Lyra

Lyra answers the leasing line.

Lyra is the voice and text agent for my leasing line. She's an ElevenLabs voice on top of Hermes-controlled tools. She handles the conversation, and Hermes handles the data path and the human handoff. Texts run through a small Cloudflare worker, and Claude drafts the replies. She has been live around the clock since April 2026.

Her tools

Look up tenant
Match a caller to a tenant record by phone or name.
Verify tenant
Confirm the caller's identity before sharing sensitive context.
Check availability
Date-scoped vacancy lookup against a live availability sheet.
Schedule tour
Capture a tour request with property and time, and send it to me.
Get caller history
Pull prior calls for context, so she isn't starting from zero.
Emergency alert
Fast path: a dedicated Telegram channel and an SMS to me, in parallel.
Get date
Today's date and time, so scheduling math is never stale.
Transfer to number
Warm transfer to a person, with a briefing.

Where people stay in

  • No outbound calls. Texts go out only as replies, missed-call text-backs, or safe follow-ups.
  • Every call gets an official log, written automatically by the post-call webhook.
  • Tour and leasing requests can be captured, checked, and queued. No commitments without me.
  • Maintenance issues get logged with the transcript attached. Dispatch decisions stay human.
  • Rent, payment, legal, and eviction topics are tagged for review and end with a follow-up to me.
  • Approvals on the Lyra side route through Hermes-controlled approval gates and Cloudflare Worker endpoints, not a direct Telegram webhook.

Rollout

Phase 1: live
Tenant verification, date-scoped availability, the emergency fast path, and caller history. Shipped April 2026.
Phase 2: live
Warm transfer to a person, plus a QA review of recent calls twice a day.
Phase 3: live (September 2026)
Two-way texting on the same number. Missed calls get one text-back.

Connected apps

The tools Hermes drives.

Notification channelTelegram
The main approval and notification channel, with one lane per profile. Risky actions wait for an APPROVE reply here.
Control planeHermes Agent
The local agent framework that runs profiles, tools, memory, skills, scheduled jobs, and the messaging gateway.
Property backboneAppFolio
The system of record for tenants, occupancy, work orders, vendors, and accounting.
Inbox + SheetsGoogle Workspace
Gmail polling across six accounts, Sheets queues, the sheet I edit Lyra from, and the unit-turn board doc.
Voice AIElevenLabs
Lyra's phone voice. Hermes handles the data path and human handoff around it.
Phone + SMSTwilio
Lyra's phone number and two-way texting.
Business textsiMessage
Business-text digests and urgent-message scans.
Browser automationPlaywright
A persistent browser profile drives AppFolio exports when no clean API exists.
Edge automationCloudflare Workers
Lyra's worker: phone webhooks, texts, and signed approval links.
Static hostingVercel
Hosts public sites, dashboards, and marketing pages.
Memory + searchHermes memory
Holographic fact memory, session search, skills, Kanban handoffs between lanes, and the planning wiki.
Service runnermacOS launchd
The Mac's service manager keeps the gateway and a few helper scripts alive.

The knowledge base

A shared notebook, in plain text.

The AIs share a notebook. They read it before doing anything and write to it after. The notebook lives on my Mac in a format I can read with my own eyes. Every week the system checks the notebook against reality and fixes anything that drifted.

Obsidian vault

The planning wiki

An Obsidian vault of plain markdown files. It has project pages (one per system: gateway, Lyra, AppFolio, the Gmail watcher, and more), a chronological decisions log, playbooks for recurring recovery tasks, and a fast-read summary that is regenerated each week.
  • Obsidian vault
  • Project pages
  • Decisions log
  • Playbooks
  • Auto-regenerated summary

Synced weekly + on demand

Lyra's knowledge base

A separate markdown collection for property rules, vacancy info, lease policies, and tenant FAQs. It syncs weekly to ElevenLabs and to Lyra's text worker, plus same-day pushes when I approve a change. Lyra answers from the current rules, not a snapshot from when she was trained.
  • Property notes
  • Vacancy info
  • Lease policies
  • Tenant FAQs
  • Weekly + on-demand sync
Plain markdown
Git-able, future-proof, no vendor lock-in. Any text editor opens it. Any script can search it.
Cross-AI source of truth
Hermes profiles and coding assistants read the wiki at session start and write durable decisions back after. They stop drifting because they share one set of facts.
Self-maintaining
Weekly verify scripts compare wiki claims to live state and flag anything stale. The wiki tells me when it's wrong about itself.
Visible
I can open any file in Obsidian, search across all of it, and edit it like a normal note. No proprietary index, no opaque storage.
Composable
Every scheduled job and every Hermes profile can read, search, parse, or append to it. Memory becomes a tool the rest of the system uses.

Human in the loop

A person still makes the calls that matter.

  1. Routine, fact-only replies (property facts, how-tos) can go out automatically behind safety filters. Anything about accounts, money, legal issues, or work orders waits for my APPROVE on Telegram.
  2. Scheduled jobs can't run risky commands at all.
  3. No work order is ever auto-posted to AppFolio, even for emergencies.
  4. Public pages get summary-only data: no tenant names, units, balances, message bodies, or send controls.
  5. Live state wins over memory or old write-ups.

The boundary

What stays off this page.

The shape of the system is public. The private wiring is not.
Telegram tokens + chat IDs
Bot tokens, group and topic IDs, and the user ID that gets emergency DMs.
AppFolio internals
Account credentials, internal routes, tenant names, unit numbers, and owner names.
ElevenLabs + Twilio secrets
API keys (kept in two stores, deliberately), agent IDs, and account identifiers.
Gmail + OAuth
The six Gmail account addresses, OAuth tokens, and refresh paths.
Cloudflare credentials
Worker API tokens, KV namespace IDs, and route configurations.
Local runtime files
Anything in profile state, secrets, credentials, sessions, or local runtime internals.
Tenant + financial data
Names, balances, lease terms, payment plans, and anything tied to a real person.
Property addresses
Specific units, addresses, floor plans, and building-level private details.

Build your own

The playbook is for you.

Everything above is mine. The playbook is the generic version: the same shape, built with your own tools on your own machine.

Snapshot verified October 7, 2026 against the live system. Public names only — private IDs, paths, and chat numbers stay off this page. Gmail handling is covered on the privacy page.