The system
How the system worksThe DirectoryDispatchThe LedgerAI modelsAI agentsYour installationThe appThe research libraryWhat changes for your businessUse it from your softwareEverything it can do
Messaging
iMessageWhatsApp
Ads and leads
AdsCreativeLeads
Devices
Devices
Industries
RealtorsRestaurantsHome services
Explore
How it worksPermissions and limitsCompareSet upQuestionsText me

The Ledger · the record of every request

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.

  • Every messagein and out, word for word
  • Every changeto a setting, an action or a file
  • Every AI model requestwhat the model was sent and what it answered
  • Every refusalwhat was refused, and why

Live, read from this site just now · 11:06:34 AM

—entries in this system’s Ledger

Read again every 20 seconds while this page is open.

  • —AI models named in the Ledger
  • —working sessions recorded
  • —different actions run
  • —entries tied to a task
  • —changes to files and settings
  • 1,335actions in this system’s Directory

The moving rows are an animation of entries arriving, not real entries. The numbers are real, counted from this system’s Ledger; no entry’s contents are shown here.

The Ledger, explained three ways

Every request and every response is stored, in order, in full.

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.

Choose the level of detail with the switch above; the whole site remembers your choice.

For your business

What the Ledger does for a business

The Ledger stores every request and every response, in order and in full, whoever or whatever sent it. Here is what that lets a business do, in six points, each with an example.

See exactly what was sent, to whom, when, and by which AI.

Every message, change and AI model request is an entry with the time to the second, the sender, the recipient and the full text. You read the entry instead of asking around.

  • When2:21:08 PM
  • Tothe customer who called at 2:18
  • Fromyour business number
  • Sent bythe AI assistant (Claude)
  • Text“Booked. Tom's confirmed for 4:30 and you'll get a text when he's 20 minutes out.”

An illustration. The business and the people are made up.

Settle a disagreement with the record, not memory.

A customer says they never got a confirmation. The entry shows what was sent, from which number, at what time, and when their phone reported it delivered and read.

I never got a confirmation for 4:30.
“Booked. Tom's confirmed for 4:30 and you'll get a text when he's 20 minutes out.”delivered 2:21:09 PM · read 2:21 PM · fingerprint linked to the entry before

An illustration. The business and the people are made up.

Check what an AI agent did overnight before you trust it with more.

Every action an AI agent ran, with its inputs and results, is in the Ledger. If each entry is what you would have done, you can give it a wider limit. If not, you can see exactly where it went wrong.

What did the AI agent do on the ad account last night?
  • Paused the weakest ad, under the limit you set
  • Copied the best ad as a new ad, created paused
  • Spent nothing new: the copy waits for your approval

An illustration.

Compare AI models on cost and results, from your own records.

For every AI model request the Ledger stores the model’s name, the tokens (units of text) it read and wrote, which is what AI providers charge for, the time it took and what came back. Add up two models’ entries on the same kind of work and you have their cost and their results side by side, from your work rather than a sales demo.

—AI models named in this system’s Ledger, read just now
  • model name
  • tokens read
  • tokens written
  • time taken
  • actions run
  • result or error

Nothing in it is changed without it showing.

Entries are only ever added, never overwritten. Each one carries a fingerprint that includes the entry before it, so if an old entry were edited, its fingerprint would stop matching. How the fingerprint chain works

  • Entry 4151cdc526dbfb…matches
  • Entry 42edited afterwardsdoes not match
  • Entry 436ca1daf0cf9a…matches

An illustration. The fingerprints are real SHA-256 hashes, computed in your browser.

Refused requests are recorded too.

When a request is outside your permissions, it is refused and the refusal is stored with its reason. You can see what the system would not do as easily as what it did.

  • 3:02 PMRefund everyone from last month: refused, because no permission allows a refund to many customers at once
  • 9:40 AMMessage a purchased contact list: refused
  • 11:15 PMUnlock the front door: refused, outside the allowed hours

An illustration.

If you stop using the system, you keep the Ledger, along with your phone number, your logins and the assistant’s settings. About your installation ›

One entry

What one Ledger entry contains.

Every entry has the same seven parts. This is the entry stored when a missed call at 2:18 PM was answered with a text from the business’s own number. Tap a part to highlight it in the entry.

One entryfrom the Ledger of ABC Home Services
When
2:18:53 PMPacific time
Sent by
The missed-call rulefor ABC Home Services
Action
Text a customer from your numberSEND_BY_CHANNELlimit: this caller only, approved words only
Input
{ "to": "the caller", "from": "your number", "text": "Hi, thanks for calling ABC Home Services. Sorry we missed you, we're on a job. What do you need?" }
Result
{ "accepted": true, "delivered": "2:18:55 PM", "read": "2:19:21 PM" }
Fingerprint
sha256 ba87e21b3c42d72a…
Previous
previous 573d607f028530f3…

An illustration. The business and the people are made up. The two fingerprints are real SHA-256 hashes, computed in your browser from the entry as shown.

The fingerprint chain

How the Ledger shows whether an entry was changed afterwards.

  1. Each entry gets a fingerprint. When an entry is stored, the system calculates its SHA-256 hash: a 64-character code worked out from the entry’s exact contents. The same contents always give the same code; changing one character gives a completely different code.
  2. Each fingerprint includes the one before it. The calculation also takes in the previous entry’s fingerprint, so removing or inserting an entry breaks the link to the entry after it.
  3. Checking means calculating again. The fingerprints are recalculated in order and compared with the stored ones. The first one that no longer matches shows which entry was changed.
  4. Try it. Change one limit in the example entries, then check the chain.

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.

Each entry’s hash is SHA-256 of the previous entry’s hash followed by this entry’s payload, starting from a fixed first entry (the genesis entry). Checking the chain recomputes every hash in order; the first entry whose stored hash no longer matches is where it was edited. Nothing is updated in place: every action appends a row.

7 entries, not yet checked

The seven entries are illustrations running in your browser; the businesses and people in them are made up. The fingerprints are real SHA-256 hashes, computed in your browser, each from the entry’s contents plus the fingerprint before it.

first entry (genesis) aeebad4a
Entry#1

Text back the missed call

  • readMessages, this handle only
  • in your writing style, using only prices you approved

sent from your number

Text sent 52 seconds after the missed call. The customer replied, and a diagnostic visit was booked for 4:30 today.

previous aeebad4athis entry 4cdc7072

Entry#2

Send the invoice to Bright Roofing

  • limit≤ $5,000 without you
  • to the thread they already have with you

sent in the thread

Sent by iMessage to Bright Roofing. Opened 41 seconds later.

previous 4cdc7072this entry cd3f1bc1

Entry#3

Make 12 ad variants from the brief

  • limit36 renders per run
  • writeMeta, this account
  • limitpaused until you say go

uploaded, paused

36 files in the ad account and 12 ads created, paused. Nothing is spent until you switch them on.

previous cd3f1bc1this entry 55086552

Entry#4

Book the 2:30

  • writeCalendar, only hours you opened

invite sent

The customer’s “2:30 works” became a calendar event, and the invitation was sent.

previous 55086552this entry b717c014

Entry#5

Refund $184 to the original card

  • limit≤ $500 without you
  • used once

$184 refunded

$184 refunded and the customer told. It was under the limit, so it did not need your approval.

previous b717c014this entry ef58b2fb

Entry#6

Unlock the front door for the cleaner at 10

  • limit20-minute window, weekdays

unlocked, locked at 10:15

Scheduled. The lock opens at 9:55 and locks again at 10:15; you get a text at both times.

previous ef58b2fbthis entry 3e2f843c

Entry#7

Refund everyone from last month

  • limit≤ $500 per action, one customer per action

refused · no permission for this

Refused. No permission allows a refund to many customers at once. Nothing ran, and the refusal is stored in the Ledger.

previous 3e2f843cthis entry 981c4bdd

What counts as done

An action counts as done only when five records exist for it.

A screen that says “sent” does not prove anything was sent. The system treats an action as done only when these five records exist for that run. Here are the five for the text sent 52 seconds after the missed call.

  1. 1

    The reason

    What caused it to run. Nothing runs without one.

    Cause

    A call to ABC Home Services was not answered. The caller had found the business through a Meta ad.
  2. 2

    The request, stored before it ran

    The exact request, stored before it was sent, so nobody can describe it differently afterwards.

    Raw invocation, written before execution

    To the caller, from your number: “Hi, thanks for calling ABC Home Services. Sorry we missed you, we're on a job. What do you need?”
  3. 3

    The confirmation

    The receiving service’s own reply saying it accepted the request, in its words, not ours.

    Raw confirmation

    Accepted by the messaging service, which gave the message its own ID number.
  4. 4

    The result

    Everything that came back. An error is kept word for word, never replaced by “something went wrong”.

    Raw return (failures verbatim)

    Delivered. Read at 2:19:21 PM.
  5. 5

    The Ledger entry

    One entry that ties the four together, with the fingerprint of the entry before it.

    Proof (the Ledger entry)

    fingerprint ba87e21b3c42d72a… · previous 573d607f…

2:19:40 PM. The caller replied: “AC stopped blowing cold. How soon can someone come?” That reply is the reason for the next entry, and the chain continues.

The rule, as the system states it. 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.

An illustration. The business and the people are made up. The fingerprint is a real SHA-256 hash, computed in your browser.

Refused requests

Refused requests are stored in the Ledger too.

When a request is outside the permissions, the system refuses it and stores the refusal and the reason, the same way it stores everything it did. You can read what was refused as easily as what was sent.

Each action carries its limits: an amount, a time window, a channel, an account. A request outside them is refused, and the refusal is written to the Ledger like any other entry.

A scoped permission is issued for one task, with a limit and an expiry, and stops working when the task is done. With no permission, nothing runs; the refusal is a Ledger row.

  • Refund to many customers at once: refused
  • Messages to a purchased contact list: refused
  • Unlocking outside the allowed hours: refused
Entry#7

Refund everyone from last month

  • limit≤ $500 per action, one customer per action

refused · no permission for this

Refused. No permission allows a refund to many customers at once. Nothing ran, and the refusal is stored in the Ledger.

fingerprint 38ab01f6stored like every other entry

An illustration. The fingerprint is a real SHA-256 hash, computed in your browser.

Text me.

Tell me what you would want a record of. I’ll tell you which entries your business would store first, and what they would contain.