← All standards
Open specificationDraftPublished October 2026Changelog

The Client Memory Build Standard

What your business knows about each customer, kept as records a person signed. The AI suggests, you approve, and every step from the quote to the chase reads the same approved list. Written so you can build it yourself.

Used by

  • Office Manager
  • Office Administrator
  • Customer Service Officer
  • AI Officer

9 min read · Published by AI Pathway

Using Claude? This standard installs as a skill. Guides for ServiceM8, Xero and Simpro.

What this is

An open build standard for what your AI remembers about each customer. A memory item is one small thing you know, like "invoices go to Jan, not Priya". It is written once, against the customer's id in your job system, and every step that deals with that customer reads it from there.

The core rule

The AI can only suggest something to remember. It counts once you, or someone you named, says yes. Until then nothing uses it, and if a customer changes their mind, the old instruction holds until you approve the new one.

What it does not do

It never treats a guess from a call summary as something the customer said, never overwrites what you approved, and never finds a customer by name. The monthly review tells you what has slipped; it does not fix anything itself.

The hard part

Hearing "send it to Jan from now on" in the middle of a call about a leak, and turning it into a suggestion rather than an action. And an approval step that only a person can take.

In March Priya Shah asked for her invoices to go to her bookkeeper. The owner said yes on the phone and the AI remembered it on the next call. The invoice step never heard about it, so the April invoice went to Priya. In May a call summary noted that she “seemed happy to pay on the day”, which she never said, and the chase rang her on the day. Every step remembered something. Nobody had agreed to any of it.

Memory, as a record

  1. The call and the message

    Office Voice, or any agent. It hears things and proposes them, with where it heard them.

    • proposal
    • source
    • supersedes

    waits for

  2. A person decides

    Someone on your approvers list says yes or no. The record keeps who and when.

    • approved_by
    • approved_at

    becomes

  3. The approved slice

    Approved items only, keyed to the client id in your job system. Versioned, never edited.

    • client_id
    • version
    • critical

    is read by

  4. Every other standard

    Quote Out, Invoice Out, Debtor Chasing, the desks. Read fresh, every time.

    • quote
    • invoice
    • chase

    reviewed by

Read it downward. The call proposes; a person decides; every other standard reads only what was approved, by the client id on the job. The arrows are what this standard checks.

One item, through the gate

  1. A call ends or a message arrives for a client.
  2. The job is read first, for the client id the job system issued. Memory is never found by name or phone.
  3. That client's approved memory is read: approved items only.
  4. Anything new that was heard is proposed, with the call it came from and whether the client said it or a model inferred it.
  5. Has a person on the approvers list approved it? If not, it stays proposed and nothing reads it.
  6. If approved, it becomes a new version, and the item it replaces is marked superseded, unchanged.
  7. Is it followed on the next interaction? If so, the quote, invoice and chase each read it fresh and follow it.
  8. If not, the review flags it, and any fix is a new proposal that goes back to a person.
The filled diamond is the person: nothing an agent proposes is read until someone on the approvers list says yes. The loop is the review, and a fix goes back through the same diamond.

Take the spec to Claude, ChatGPT or Copilot. The sentence to paste is one click away.

1. What this standard covers

A business whose AI talks to customers and does work for them, and wants what it remembers about each customer to be something the business has agreed to. Three kinds of item:

  • A fact: something true about the client or the site: "the meter is behind the side gate".
  • A preference: how the client likes things done: "text, don't call, before 9am".
  • A standing instruction: something every step must do for this client until it is changed: "invoices to accounts@, quote reference on every one". Some are marked critical, and those are the ones the review watches hardest.

Two patterns carry the standard. The first is that memory is transferred, not assumed: an agent hands over what it learned as a proposal, and a person accepts it into the record, so nothing a model concluded becomes a fact on its own say-so. The second is a librarian: on a schedule, something reads back every instruction the business has approved and reports which ones are no longer being followed. Both are older than AI. They are how a good office keeps a client file.

Out of scope. The business’s own knowledge that is not about one client, like how you price a hot water system, belongs in the Knowledge Graph, which has its own accept step. A call’s running summary (where did we get to, what did they promise) is conversation state and stays with the call step; it is not a memory item until somebody proposes it as one.

What cannot meet it. Anything with no client id to key on. A job system with no API cannot hand the call or the invoice step the id, so memory falls back to a name or a phone number, which check 4 fails. A business on Tradify can keep memory against the contact id in the ledger, and a person matches jobs to it.

2. The records it keeps, in the shape your developer needs

One record, in four statuses. The fields a person reads on the approval surface come first; the version chain comes last.

For your developer. Show the fields for your developer
MemoryItem                          # one per item, in every status
  - id
  - client_id                       # the job system's id. Never a name.
  - job_id?                         # the job it was heard on
  - type      fact | preference | standing_instruction
  - key, value                      # send_to = jan@shahprops.com.au
  - content                         # in words, for the approver
  - critical                        # standing instructions only
  - source { kind: stated | inferred | human | import,
             ref,                   # the call, message or import
             by? }                  # for an inference: which model
  - proposed_at
  - status    proposed | approved | rejected | superseded
  - approved_at, approved_by        # from the person's decision
  - rejected_at, rejected_by
  - version                         # 1, then +1 per approved change
  - supersedes?, superseded_by?     # the chain, never an edit

Approvers                           # who may decide, set by the owner
  - person[]

Decision                            # made by a person, read by the build
  - item_id, approve | reject, by, at

Review                              # one per run, scheduled or on demand
  - at
  - lines[] { item_id, version, last_followed, flag, evidence[] }
              flag: ok | not_applied | contradicted

An item approved by anything but a Decision, an inference with a stated source, and a read keyed on a name are the three defects this schema exists to make visible.

3. The checks, in order

The order follows one item through its life. It is heard and proposed, a person decides, a change to it waits its turn, every other standard reads it, and a review checks it is still being followed.

  1. An agent proposes; it never writes an approved item. Whatever an agent hears or infers becomes a proposal with its source: the call or message it came from, and whether the client said it or a model inferred it. Nothing an agent does sets an item to approved, and another model's inference is never recorded as something the client said.
  2. Only a decision by an authorised person changes a proposal, and the record says who and when. A proposal becomes approved or rejected only from a decision a person made on the approval surface, and only if that person is on the list the business set. The approved or rejected item carries the decision's time and the person's name. A decision from anyone else, including another agent, is escalated and changes nothing.
  3. An approved item is never overwritten: a change is a new version, and the old one holds until it is approved. When a client says something that changes an approved item, the build proposes a new item that names the one it would replace. The approved item keeps its content and stays in force until a person approves the change. On approval the old item is marked superseded, pointing at the new one, and the new one carries the next version number.
  4. Every other standard reads the approved slice by the client id on the job, never by name or phone. Quote Out, Invoice Out, Debtor Chasing and the rest read memory with the client id the job system issued, taken from the job the event names. The slice they get holds approved items only: never a proposal, a rejected item or a superseded one.
  5. A critical standing instruction is read fresh and followed on every later interaction. Before each step that acts for a client, the build reads that client's approved slice again and follows every standing instruction marked critical. A copy read once and kept is not a read: an approval made since then would never reach it.
  6. A review lists every approved standing instruction, flags drift, and changes nothing. On a schedule or on demand, the build publishes a review of every approved standing instruction, with its version and when it was last followed. It flags any instruction that a later interaction did not follow, and any pair that contradict each other. A fix is a new proposal for a person to decide; the review itself writes no approval.
  7. It survives the builder. Someone other than the builder can explain what it does, and it runs on an account the business owns.
  8. The pass test passes. On the business's own phone line, approval surface and systems: a client states a preference on a real call, it arrives as a proposal, and nothing uses it until the owner approves it. The next call and the next invoice follow it. A change said on a later call is proposed and does not apply until approved. The review lists the instruction and its version.

4. How it joins Cash Seam and the rest

Cash Seam already carries one job id from the call to the chase, and every job names its client. This standard hangs memory off that client id and adds no id of its own. A step that already read the job has the key it needs; one more read gets it the approved slice.

StandardWhat it reads from memory
Booked After Hours and Client DeskWho to ask for, site access, a do-not-call window. The call also proposes what it hears.
Quote OutWhere quotes go, and anything the owner has agreed about how this client is quoted.
Invoice OutWhere invoices go, and the reference the client's accounts team needs on them.
Debtor ChasingWho to chase, and when not to: the client who pays on the 20th, every month.
Follow-UpHow this client likes to be followed up, and how often is too often.

None of those standards changes. Each one already reads the job before it acts; conforming to this one adds a read of the approved slice by the job’s client id, and following what it says. The call step is the only one that also proposes.

5. One item, from the call to approved

Priya already has an approved instruction, version 1: invoices to accounts@shahprops.com.au. On Tuesday morning she rings about a leak, and near the end says to send invoices to Jan, her bookkeeper, from now on.

  1. Tuesday, 10:14am. Proposed. The call ends and two proposals arrive. One is a standing instruction, send_to jan@shahprops.com.au, source stated, the call’s id, supersedes version 1. The other comes from the call summary: “happy to pay by card on the day”, source inferred, by the summary model. Neither is approved.
  2. Tuesday, 3pm. The old version holds. The leak job completes and Invoice Out reads Priya’s approved slice. Version 1 is still the approved one, so the invoice goes to accounts@. That is correct: nobody has agreed to the change yet.
  3. Wednesday, 7:30am. A person decides. Dana, the owner, opens the approval list. She approves the change to Jan and rejects the card-on-the-day guess, because Priya never said it. Each decision is recorded with her name and the time.
  4. Wednesday, 7:30am. Versioned. Version 1 is marked superseded and points at the new item, which is approved as version 2. Version 1’s words are unchanged: anyone can still see what was in force on Tuesday, and why.
  5. From then on. The next quote, invoice and chase for Priya each read her slice fresh and go to Jan. The rejected guess is never read by anything.

6. The review

An approved instruction is only worth something if it is still being followed. Monthly, and whenever the owner asks, the build lists every approved standing instruction with its version and the last time something followed it, and flags two kinds of drift:

  • Not applied: a quote, invoice, chase or call after the instruction was approved that did not follow it. The flag names the record that missed it.
  • Contradicted: two approved instructions for the same client that disagree, usually because one came in from an old system. Each flag names the other.

The review writes nothing to memory. A fix is a new proposal that names the item it would replace, and it waits for a person like any other. Choosing between two contradicting instructions is the owner’s call, not the review’s.

7. What stays with a person

  • Approving or rejecting every proposed item, by someone on the approvers list.
  • Who is on the approvers list, and which standing instructions are critical.
  • Choosing between two instructions that contradict each other.
  • Acting on everything the review flags.
  • Telling the customer what you have on file about them, if they ask.

8. Connect a Grok Bot or Claude to the memory, without it approving anything

Think of the new office junior with the client file: they read it before every job and leave a sticky note when they learn something, but only the boss writes in the file. A bot that builds your debtor list or chases your quotes reads the client’s approved memory before each draft and proposes anything new it hears. It never approves its own proposal, never edits an approved item, and never matches a client by name. Your login stays yours: the bot holds a key you can delete.

What each piece of access is for.

  • Read the book, on an Office Voice key. Lets the bot call get_memory for what your calls and your own notes hold about a caller. It comes with Connect at $19a month per business. Office Voice keys that memory by phone number, not the client id on the job, so the bot checks the number belongs to the job’s client and skips it where two clients share one.
  • Not Write drafts and notes. That box also allows record_fact, which makes a fact live the moment it is written with no one approving it. A bot that can call it fails check 1. Leave it off on a memory bot’s key.
  • Your own sheet or SharePoint list, if you host it. The bot reads approved rows by the job’s client id and adds new rows as proposed. Its connection can add a row but cannot mark one approved: decisions sit in a tab or list only the approvers can write to.
  1. Pick where the memory lives. Office Voice’s memory has what was said on the phone; your own list meets every check today. You can use both, with Office Voice proposing into your list.
  2. Under Keys (office-voice.com/app/keys), create a key with Read the book only, and add it to the bot as the Grok Bot and Xero guide sets out. The same key works in Claude.
  3. Tell the bot, in its standing instructions, to read memory each time it drafts for a client, not once at the start of a run, and to write anything it would remember as a proposed row for you to review.
  4. Fill the approvers: the owner and whoever runs the office. A bot’s account is never one of them.
  5. Run the checklist in section 11 against a real client.

Why not the bot’s own memory? Grok Bot and Claude can both remember things between chats, but that memory belongs to the bot, not to the client record. It is not keyed to the client id the job carries, nothing in it waits for a person to approve, and the next bot, or the next staff member, does not see it.

Where it runs. In SharePoint lists and Power Automate flows (the Microsoft 365 plan lays them out), a Google Sheet with an approvals tab, or a small dashboard a coding agent builds from this page. All three are held to the same checks; see run a standard anywhere. The review is something you ask the bot for, or put on a schedule.

Facts that can change, and when we checked them

Checked as at 29 October 2026

Office Voice reads the owner’s notes for a caller on every call, and records what was said on a call as a fact with its source, which its get_memory, record_fact and list_facts tools expose. It keeps every correction rather than overwriting. It does not yet hold a fact from a call as a proposal that waits for a person, and its review screen is not built, so a call fact is in use as soon as it is recorded. Until that changes, the approval surface, the versions and the review are a scoped build, and the provider block below says so.

Tradify has no public or partner API, confirmed in writing by their support on 10 April 2026.

Check these against the primary instrument before you rely on them, and store the date you checked beside the value rather than hard-coding it. This standard tells you the shape and where to look. It is not legal advice and it does not tell you that anything complies.

10. What your developer builds, and the step that needs care

The step not to hand-roll is the call: hearing a preference in the middle of a conversation about something else, and proposing it without acting on it. That is Office Voice's. The approval surface, the versions and the review are yours, and they are small.

For your developer. Show the setup for your developer
provider:
  stub:       local.mock_client_memory
  production: none                       # scoped build, not a product

the live step                        # Office Voice
  - the call reads the approved slice for the caller
  - the call proposes what it heard, with the call id

stays local                          # yours, and the standard
  - the memory record and its versions
  - the approvers list and the decisions
  - the read by client id in every other standard
  - the review, and what you do about it

Anyone selling an AI that remembers your customers should be able to answer one question: show me the list of everything it remembers that I have not approved.

The pass test. On the business’s own phone line, approval surface and systems, not a sample. On a real call, ask for invoices to go to a bookkeeper. Check that it arrives as a proposal with the call named, and that the next invoice does not use it. Approve it as the owner, then ring again and raise an invoice: both must follow it. On a third call, change it. The invoice before the change is approved must go to the old address and the one after to the new, the old version must be superseded and unchanged, and a review run on demand must list both versions. No item may have been approved by anything but a person. A stub cannot pass this: on a stub the preference arrives as a tidy field because the runner wrote it, and the approval comes from the same runner. Only a real call and a real person prove it.

11. A checklist to hold any build or supplier to

Hold a DIY build or a vendor to this. If a box is empty, it is not in production.

  • 1. An agent proposes; it never writes an approved item. Whatever an agent hears or infers becomes a proposal with its source: the call or message it came from, and whether the client said it or a model inferred it. Nothing an agent does sets an item to approved, and another model's inference is never recorded as something the client said.
  • 2. Only a decision by an authorised person changes a proposal, and the record says who and when. A proposal becomes approved or rejected only from a decision a person made on the approval surface, and only if that person is on the list the business set. The approved or rejected item carries the decision's time and the person's name. A decision from anyone else, including another agent, is escalated and changes nothing.
  • 3. An approved item is never overwritten: a change is a new version, and the old one holds until it is approved. When a client says something that changes an approved item, the build proposes a new item that names the one it would replace. The approved item keeps its content and stays in force until a person approves the change. On approval the old item is marked superseded, pointing at the new one, and the new one carries the next version number.
  • 4. Every other standard reads the approved slice by the client id on the job, never by name or phone. Quote Out, Invoice Out, Debtor Chasing and the rest read memory with the client id the job system issued, taken from the job the event names. The slice they get holds approved items only: never a proposal, a rejected item or a superseded one.
  • 5. A critical standing instruction is read fresh and followed on every later interaction. Before each step that acts for a client, the build reads that client's approved slice again and follows every standing instruction marked critical. A copy read once and kept is not a read: an approval made since then would never reach it.
  • 6. A review lists every approved standing instruction, flags drift, and changes nothing. On a schedule or on demand, the build publishes a review of every approved standing instruction, with its version and when it was last followed. It flags any instruction that a later interaction did not follow, and any pair that contradict each other. A fix is a new proposal for a person to decide; the review itself writes no approval.
  • 7. It survives the builder. Someone other than the builder can explain what it does, and it runs on an account the business owns.
  • 8. The pass test passes. On the business's own phone line, approval surface and systems: a client states a preference on a real call, it arrives as a proposal, and nothing uses it until the owner approves it. The next call and the next invoice follow it. A change said on a later call is proposed and does not apply until approved. The review lists the instruction and its version.
  1. 1

    Hold the build to the checklist

    The checks in this standard are what a working build looks like. Implement it yourself, hand it to a developer, or hand the page to an AI with the button below.

  2. 2

    Do not hand-roll

    There is no product for this step. Highest option: none. Checklist plus a build.

  3. 3

    If you are stuck

    Exceptions, three systems, a team that will not maintain a Zap, or an owner who wants it done. We implement when it has to survive the business.

Related reading

Want the whole thing by email?

This paper, plus the rest of the library. One click to stop them.

Run these checks yourself

Every check on this page is published as structured data. This prints them with what to inject, what to assert, and which ones can be proved on your own machine rather than against the live thing.

npx @aipathway/conformance show client-memory-build-standard

Free and open source, CC BY 4.0. The checks are fetched from this page rather than bundled, so a correction here reaches you without a release, and you cannot end up conformant against a stale copy. The raw JSON is there if you would rather wire it into your own harness, and the package shows how to drive your build through the ports.

Built it, and one check failed?

Tell us which one. You have already read the standard and tried it, so the answer is a fixed price to finish that step, not a call to work out what you need.