When you miss a call on a job, the caller gets a text from your number within a minute and books a visit. Quotes are followed up on day 2, 5 and 10, invoices are sent by text, and ads spend money only after you reply “go”.
ABC Home Services is a made-up home services business. For each moment, Monday to Sunday: what happened, what the system did, which service it used, and the entry it wrote to the Ledger, the system’s record of every request and response.
An illustration. The business and the people are made up.
On Friday the system made 36 ad images from one written brief and uploaded them to your Meta ad account, paused. Nothing was spent. This morning you texted “go”, and the ads started.
A customer calls while you are on a roof, and you miss it.
Within a minute the AI assistant texts the caller from your business number. They say the air conditioning stopped blowing cold and pick 4:30 today, which is added to your calendar.
The system sends a follow-up on day 2 with something useful about the job. More follow-ups are scheduled for day 5 and day 10, and all of them stop as soon as the customer replies.
The system creates a Stripe invoice and sends the payment link in the customer’s existing conversation with you. Your permissions let invoices up to $5,000 go out without asking you first.
After the job, the customer is asked for a review.
The customer gets one text asking how it went. A five-star answer gets your Google review link. This customer gave three stars, so the answer came to you instead and nothing was posted.
The week’s advertising results arrive in a spreadsheet.
The system writes one row per day to a spreadsheet you own: impressions, spend, clicks, leads and booked jobs, so you can see what each booked job cost.
A customer asks for a price that is not on your price list.
Someone texts asking what a new furnace costs. The AI assistant may quote only prices you approved, so it tells them you will reply and passes the question to you. The refusal is written to the Ledger.
refused · price not on the approved list · passed to you
········→········matches
Each Ledger entry carries a fingerprint of the entry before it.
The two codes under each entry above are the first characters of real SHA-256 fingerprints, calculated in your browser: the fingerprint of the entry before, then this entry’s own, which is calculated from its text plus the one before. Press “Change one word” to edit Thursday’s entry, then “Check every entry”: the check fails at that entry, because its text no longer matches its fingerprint. This is how a changed Ledger entry is detected.
Calculating fingerprints
Services used
The services this example uses
Each card is one service. A service is a set of actions from the Directory (the table of every action the system can run), set up for your business. The days on each card are the moments above that use it. The number on each card is how many actions in the Directory that service includes.
For each action you decide what information the AI assistant may read, what it may do, whom it may reply to, and limits such as an amount or a time window. A request outside the limits is refused, and the refusal is written to the Ledger.
Permissions switched on for a home services business
What the AI assistant may read, what it may do, and whom it may reply to. Anything not listed here is switched off.
What it may read
CalendarWhat is next, and which hours are open
MessagesThe threads you choose, not all of them
PaymentsInvoices and subscriptions
Approved pricesThe price list it may quote from
What it may do
Missed call text-backFrom your number, within a minute
BookOnly into the hours you opened
Follow upDay 2, 5 and 10, with something useful to say
Invoice and refundSend, finalize, refund within a limit
Whom it may reply to
LeadsTold it is an AI assistant when they ask; passed to a person when they ask for one
A question about a price you have not approved is passed to you.
The AI assistant quotes only prices from your approved list. On Sunday someone asked about a new furnace; the question was passed to you, and the refusal is an entry in the Ledger.
Examples of actions with limits
Each card shows an action a home services business would use, the limit on it, and what came back, as it appears in the Ledger. A refused request is recorded the same way.
Text back the missed call
read: Messages, this handle only
in your writing style, using only prices you approved
sent from your number
Send the invoice to Bright Roofing
limit: ≤ $5,000 without you
to the thread they already have with you
sent in the thread
Make 12 ad variants from the brief
limit: 36 renders per run
write: Meta, this account
limit: paused until you say go
uploaded, paused
Book the 2:30
write: Calendar, only hours you opened
invite sent
Moments this week where a permission or limit applied
3 of the 8 moments above were decided by a permission or a limit. Each one is an entry in the Ledger, including any refusal.
The Directory is a table of every action the system can run. Dispatch is one web address that runs any of those actions. The Ledger records every request and response. The actions run on real computers and phones. Choose how much detail you want: for you, for your team or for your developer.
Numbers are live, read from this site just now.
The DirectoryEvery action the system can run
A table with one row for each action the system can run.
The Directory is a table. Each row is one thing the system can do for your business: send a text from your number, book a slot in your calendar, create an ad, read a web page, take a screenshot of your Mac. If an action is not in the table, the system cannot do it.
Each row stores everything needed to run that action: where it runs, what inputs it needs, what it returns, and every way to call it. Changing a setting is typing in a cell. Files added to the system’s folder are added to the table automatically.
One row per action. Each row has one column per way of calling it, and each of those cells holds the complete request (method, address, headers and body) that runs it, followed by the full response from the last run.
Why it matters to your home services business
Every action your business can use is listed in one place, with where it runs and what it needs. You can see what the system is able to do before it does anything: if an action is not in the Directory, it cannot run.
—actions in the Directory
Actions in the Directory for each service this example uses
Dispatch is a single web address. You, your staff, a spreadsheet, an iPhone Shortcut or an AI model send it the name of an action and its inputs. It finds the action in the Directory, checks your permissions, runs it on the right computer, sends back the result, and writes an entry in the Ledger.
Because every request goes through the same address, the same permissions apply whether a request comes from a text message, a link, a spreadsheet cell, a Shortcut, the command line or an AI model, and every request is recorded the same way. One action can be switched off in one place.
Every action is invoked as an HTTP POST of {"key": "<action name>", "args": {…}}. REST, MCP, spreadsheet formulas, text tags and webhooks are different ways of making that same request. Actions run on Cloudflare servers, a Mac, an iPhone, a browser, a virtual machine or a phone.
Why it matters to your home services business
One connection instead of a separate integration for every tool. Your staff, your AI models, your spreadsheets and your phone all use the same actions under the same permissions. Changing AI model or vendor does not mean rebuilding, and any action can be switched off in one place.
—ways to call each action
A text messageA web linkA spreadsheet cellAn iPhone ShortcutA command typed in a terminalAn AI model’s tool call
The LedgerA record of every request and response
A table with one row for every request and response the system has handled.
The Ledger is a record of everything the system does: every message sent and received, every action run, every change, every AI model’s answer, and every request that was refused. Nothing in it is overwritten. To find out what happened, you read it.
Each entry stores the full request and the full response. Each entry also stores a fingerprint of the entry before it, so if anyone changes an entry later, the change shows up. Refused requests are recorded the same way as completed ones.
Every payload in or out is a Ledger row. Each action appends one row containing a SHA-256 hash of the previous row; nothing is updated in place. An action counts as working only when the declared surface itself ran and five things are stored for that run: why it ran, the exact request written before it ran, the confirmation, the exact response, and the record.
Why it matters to your home services business
You can see exactly what was sent, to whom, when, and by which AI model, and settle a dispute from the record instead of from memory. You can check what an AI did before trusting it with more, and compare AI models on cost and results. Refused requests are recorded too.
Depending on the action, the work happens on Cloudflare’s servers (always on), on your Mac, on your iPhone, in a web browser signed in to your accounts, or on Android phones rented in a data centre for apps that only run on a phone.
A website or app with no way to connect to it can be recorded once — the steps a person clicks — and saved as a new action in the Directory that can be run again at any time. The browser uses your own signed-in sessions, not fake accounts.
Executors: Cloudflare Workers and containers, a Mac bridge program, iPhone Shortcuts and App Intents, persistent browser profiles, cloud Android phones and Mac virtual machines. Recording steps and compiling them turns any website into a Directory row callable through dispatch.
Choose what to set up for your home services business
Pick the services and which phone number to use. The button opens a text message to me with your choices already written in, so my reply can be about your setup.
Tell me what your home services business misses in a week: calls, follow-ups, reviews. I will reply with which moment above to set up first, and the entry it would write to the Ledger.