AGENT

Administrative Assistant

It works the back office all day without being asked. It has never written a row to the ledger, and it never will, because nothing in it can.

0

Rows it can post alone

15

Minutes between sweeps

1

Tap to post or discard

100%

Writes audited

The back office of a small firm is hours, expenses, receipts, invoices, mileage and the bills that arrive whether or not anyone is watching for them. It is a few hours a month of work that nobody wants, done badly under deadline, and it is the first thing that breaks when the billable work gets busy.

This is an agent that does it, with no form to fill in and no dashboard to open. It reads the mail, pulls the structure out of what it finds, matches a photographed receipt to a charge already on file, reconciles a card statement line by line, and knows which recurring bills have not turned up when they should have. It runs all day without being asked.

And it has never written a row to the ledger. Not once. The capability does not exist.

What it does unasked

01

It reads the mail

A bill, a bank alert, a receipt, a statement: forward it and forget it. Every quarter of an hour the assistant sweeps what is waiting, works out what each message is, and turns it into a proposed entry. A note at the top of the forward steers it when the message alone is ambiguous. The mail queue is the work queue, so there is no second place to go and check.

02

It handles the paper

A photo of a receipt taken at the table gets matched against charges already on file, by vendor and amount, within a few days either side. Where the email is the receipt, it is kept as one. Everything attached to a charge is copied out monthly into ordinary folders, named so they can be read by a human or handed to an accountant, because a receipt that only exists inside the system is not a receipt.

03

It ties out the month

Send the card statement and it reconciles the period line by line: each line already on file, matched to something on file, or missing. It counts entries in the books the statement does not list, and checks the totals against each other. What comes back is the exceptions, which is the only part worth a person's attention.

04

It keeps the calendar of money

Recurring bills are modelled properly rather than as a repeating interval, because the bills do not arrive on one: twice a year in uneven months, eight months of twelve, or on no schedule at all until enough have arrived to learn one. It notices a bill that has not come, a renewal about to land, and a variable charge outside its usual range.

The line it cannot cross

Everything above produces a proposal, never an entry. The agent's write tools do exactly one thing each: write a card describing an intended change. There is no tool that reaches the books. The single path from a proposal into the ledger runs through a database function that only fires on a human tap, and the agent has no way to call it.

So the card arrives on a phone and says what it will do in plain words. Two buttons. One tap posts it, one tap throws it away. A correction card shows the old value beside the new one, and refuses to apply if that value moved while the card was sitting there. Anything posted can be undone, because the function stores what undoing it would need before it writes.

The approval step came first and the autonomy was built around it. The agent can be left to work unsupervised precisely because the blast radius of being wrong is one ignored notification. Governance bought the autonomy rather than limiting it, which is the argument we make to clients and the reason this one is worth showing.

Why a chat app

Because the alternative is a tool you have to remember to open. Back office work fails at the point of capture: the receipt still in a pocket, the hour worked on a call that never gets logged. Any system requiring a trip to a separate app loses to the fact that nobody makes the trip.

So it lives where the messages already are. Log hours in a sentence. Photograph a receipt. Forward a bill. Ask what is owed and get an answer from the database rather than from a model, because a readout should be a query and the model should not be in the path of a number. There is a private web page for reviewing and exporting the whole ledger, behind single sign-on, and it is the second place you go rather than the first.

What it is not allowed to do

No shell, no web

The agent holds file tools and one purpose-built interface to the ledger. It cannot run commands and it cannot browse. A tool that does not exist cannot be talked into firing.

Mail is data, never instructions

Forwarded mail reaches the agent fenced off inside delimiters, as material to read. Direction comes from one place only: the person who forwarded it. An invoice telling the assistant to pay itself is an invoice making a claim, which is all it will ever be treated as.

Senders are verified, not trusted

A message is accepted from a short list of known addresses, and only when the receiving server's authentication results show that the domain signed it. Forging the address of someone on the list fails the second test.

The database is sealed

The ledger is not reachable through the public interface at all. Row-level security is on with no policies anywhere, so the default answer to any query is no, and every legitimate read and write goes through a named function with its own grant.

Every write names who did it

A trigger copies every change to an audit table along with the actor that declared itself: the agent, the person, or a named maintenance pass. Nothing changes the books anonymously, including us.

The first thing it sends on our behalf

Everything above stops at the edge of the books. Since November the assistant can also put a meeting in front of other people. Ask for an invite in a sentence and it drafts one, checks whether the time is free, and mails the guests once the tap comes.

Which invites the obvious objection: an agent that cannot write a row to a database but can email people on our behalf has simply relocated the risk. So the invite runs on the same rail as everything else, and the places where it differs are worth naming.

Missing detail produces a question. No address, no named calendar, and it asks instead of choosing for you, because a sensible default sent to the wrong person has still been sent.

Before the card is drawn, the assistant reads free and busy across every calendar on four connected accounts. It sees whether a slot is taken, never what fills it. A calendar it cannot reach is named on the card and counted as busy, since unknown and free are not the same answer. Where there is a clash the card shows it and the button changes to read Send anyway, so the choice to go ahead is made by a person looking at the conflict.

The tap triggers a second check. Anything that landed in the calendar while the card sat waiting redraws the card and asks again. Tapping twice sends once.

A forwarded email can never produce an invite card. The instructions say so and the code enforces it, which is the difference between a request to a model and a wall. Without that, the guardrail above about mail being data would have a sending capability sitting on the other side of it.

One limit worth stating plainly. A sent invite is not a ledger row, so the undo described earlier cannot reach it, and a meeting gets changed or cancelled in the calendar like any other. Reaching outside the system costs you the ability to take it back. That is why nothing else is allowed out.

It is watched like everything else

The assistant is not a special case. It registers with the same monitoring layer as the rest of this firm's systems: a scheduled probe proves its credentials still work, every run of the mail sweep is logged with its outcome, and a run that stops happening is reported rather than discovered weeks later by its absence.

That last point is the one people skip. A quiet agent looks identical whether it is working perfectly or has been dead since Tuesday, and silence is only a success signal if something else is independently checking for the pulse.

Why it is on this site

Because clients ask what the agent may touch, what happens when it is wrong, and who finds out. Whether it can do the work stopped being the interesting question a while ago. We built this one against our money and our records, where being wrong costs us rather than a client. We do not sell it. We run on it.

Cookies and analytics

Status

Checking…

What Google Analytics collects

Two cookies, _ga and _ga_C1QMVN71V1, which last up to two years and let us tell a returning visitor from a new one. It records which pages you looked at, roughly where in the world you are, and which site sent you here. Google Signals and ad personalisation are switched off, so this is a count of reading, not an advertising audience.

If you turn it off

Both cookies are deleted immediately and nothing further is sent to Google. No script from googletagmanager.com is requested on any page you load after that. The site works the same either way. If your browser sends Global Privacy Control or Do Not Track, analytics is already off and we never asked.

What runs either way

Cloudflare, which serves this site, runs its own analytics beacon. It sets no cookies and does not identify you. We also log requests for pages that do not exist, with the page that linked to them, so broken links get found and fixed.

The contact form is separate

What you type into the contact form is emailed to us and used to answer you. It does not go to Google, to analytics, or to a marketing list.