Template · Loop: per customer, per day

Today's run, frozen. Yesterday, untouched.

A copy-paste run card for the job you run for every customer every day: each day appends its own frozen rows, so any day can be replayed exactly, and disputes answer by date instead of by memory.

The daily job touches every customer: the rebate reminder, the service check, the follow-up. It runs fine for months. Then a customer says you already reminded me twice, another says nobody ever told me, and you open the sheet to find out what Tuesday's run actually did, except Tuesday's rows were edited by Wednesday's run, and Thursday's, and nobody can show what any single day did to any single customer.

This template gives every day its own frozen rows. The twist has a name: never edit yesterday. Each run appends a new row for that customer and that date, and a mistake is fixed by a new row that points at the row it corrects. History is never rewritten, so any day can be replayed exactly as it happened.

The run card

Copy it, swap the brackets, run it on tomorrow's loop.

JOB: [THE DAILY JOB, FOR EXAMPLE: REBATE REMINDERS AND SERVICE CHECKS]
RUNS: once per customer, per day
OWNER: [WHO RECEIVES THE DAY]

Connect your AI to Zambo at https://zambo.dev/mcp (setup guides for your AI client: https://zambo.dev/add/), then run once per customer:

1. Read the customer's standing facts with memory_recall: [LAST CONTACT DATE], [CURRENT STATUS], and what today should do for [CUSTOMER NAME, ACCOUNT OR PHONE]. (1 call)
2. Do today's action in your own tool: [SEND THE REMINDER / RUN THE CHECK / MAKE THE FOLLOW-UP]. Log it with journal_log as it happens: the action, the customer key, and a hash of what was sent or found. The exact words themselves ride in step 3's frozen row. (1 call)
3. Freeze today's row with memory_remember: one short fact holding the date, the customer key, the action, the exact words sent or found, and the result. Never write over a past row. A correction is a new row that names the row it corrects. (1 call)

Once, at end of day:
4. Close the day with workflow_close. (1 call)
5. Hand the day to [THE OWNER] with handover. Summary: [N CUSTOMERS TOUCHED, K EXCEPTIONS]. Goal: [WHAT THE OWNER WATCHES]. Next steps: [TOMORROW STARTS WITH THE EXCEPTIONS]. Send the owner the client link from the result: the day's rows ride in the handover's saved notes, readable on pickup through that link. The public link is the read-only record. (1 call: the day's free wrap-up handover)
Get the Day Pass, $0.99

The budget, counted

3 calls per customer, plus 1 call to close the day, plus the free wrap-up handover. A day with N customers costs 3 x N + 1 calls.

The free day covers the first call on each of the loop's tools plus 3 shared continue calls. Counted across the named tools, memory_recall, journal_log, memory_remember, and workflow_close: the second customer spends one continue on each of the first three, 3 continues in all, and the close takes its own first call. That is 7 calls: 2 customers and the end-of-day close fit the free day, exactly. A real book does not. Twenty customers is 61 calls a day.

That loop is the pass shape by design. The Day Pass at $0.99 finishes the day's run unlimited, and when the loop runs every day, the $29 Pass is the honest price of the month. Retention, stated plainly: the frozen rows are saved notes, kept 7 days on the free tier and through a pass plus 30 days; each day's receipts and handover record do not expire. A book whose rows must answer disputes weeks later is pass shape for this reason too.

What the owner receives

One handover per day: how many customers were touched, what each day's rows say, and the exceptions that need a human first tomorrow. When a customer disputes a reminder, the answer is the row for that date: what was sent, word for word, frozen before anyone knew there would be a question. When a row is wrong, the correction row sits beside it, dated, so the trail shows both the mistake and the fix.

The twist: shared spreadsheets and CRM notes get edited by the next run, so the past is whatever the present says it was. Frozen daily rows cannot be edited by tomorrow's run. The loop's memory stops being a draft and becomes a record.

Related

Frequently asked questions

Why not just update yesterday's row when something changes?

Because then no day can be proven. If Tuesday's row can be edited on Thursday, a dispute about Tuesday has no ground to stand on. A correction written as a new row, naming the row it corrects, keeps both facts: what was recorded then, and what is known now.

What does a 20-customer day cost to run?

Counted on the card: 3 calls per customer plus 1 to close the day is 61 calls. The free tier covers 2 customers and the close. The Day Pass at $0.99 makes one day unlimited, and the $29 Pass covers the loop when it runs daily.

What does the owner see each day?

A handover for that day: customers touched, each frozen row, and the exceptions list that tomorrow starts with. Every row carries a verifiable AER-1 receipt, checkable free at zambo.dev/verify.

Who built Zambo

Brennan Zambo created Zambo, the verifiable work layer for AI, and AER-1, the agent execution receipt standard (IETF Internet-Draft draft-zambo-aer1-26). Every template in this pack runs on that receipt format. A verifiable receipt proves the saved result was not changed since it was saved, and anyone can check one free at zambo.dev/verify. It does not prove the result was right. That boundary is the point: the record settles what happened, so people can argue about the work instead of about memory.