XavierFok
← all posts

I automated my email replies. The AI never touches send

2026-08-15 · by Xavier Fok

# I automated my email replies. The AI never touches send

The most important decision in this project was settled before I wrote any code, and it had nothing to do with which model to use or how to wire it up. I decided what the system would never be allowed to do. It would never send. The AI drafts, I approve, and nothing goes out under my name without my eyes on it first.

That rule sounds like a limitation. By the end of this piece I hope to convince you it is the entire reason the system works.

The problem was never the hard emails

I get a lot of email, stated as a fact rather than a complaint. A meaningful slice of my week went to replies that needed no judgment at all. Someone asking how a thing works. A scheduling chain burning five messages to place one thirty minute meeting. A question I have answered a hundred times before.

I was slow on exactly those emails, and my slowness added nothing. No relationship was being carefully managed, no difficult call weighed. I was typing the same paragraph for the fortieth time, and the fortieth time is where automation belongs. The goal was to reclaim that time while keeping every email that genuinely needs me.

How a draft gets made

A reply-worthy email arrives and the agent reads the entire thread, back to the first message. Then it looks at who is writing, what the earlier exchange settled, and what kind of reply the moment calls for. Next it consults a small library of templates I wrote myself, roughly a dozen, each one a pattern lifted from my real replies: how I open a scheduling exchange, how I answer a product question, how I wind down a conversation that is finishing.

From the thread and the templates it writes a draft reply. Then it stops.

The draft appears in front of me. I can edit it, throw it away, or approve it with a single click. Every send is my decision, made fresh, every time.

Reading the whole thread is what makes drafts usable

A reply that misses context is worse than silence. If someone follows up on a point from two weeks back and the draft ignores that history, the draft is landfill and I write from scratch anyway. So the agent takes in the full conversation before producing a word. It picks up the running tone, notes what has already been agreed, and writes a continuation instead of a cold start.

The difference sounds small. In practice it separates a draft I tweak in ten seconds from a draft I delete on sight.

Templates keep the voice mine

The default writing style of a model reads like a polite corporate assistant, and a reply in that voice would need a full rewrite before I could send it. Rewriting the voice every time erases the saving.

So the drafts are anchored to those dozen patterns of mine. Real openings I use, real phrasings, the actual shape of my usual answers to the common cases. The output lands close enough to how I write that my edit is usually a word here and a detail there.

The three categories it handles well

Routine information requests, where the answer is clear and nothing is sensitive. Scheduling threads, where two people are only trying to find a time. Repeat questions, where the draft amounts to a well worded copy of my standard answer.

Those three cover most of a normal day's inbox, and on them the drafts arrive clean. Small edit, click, done. The saving per email is modest. Across a week it compounds into something I would genuinely miss.

Scheduling is the clearest single win

A meeting that should take one exchange routinely takes five. You offer times, two get declined, you offer more, someone rechecks a calendar, and the chain outlives the meeting it was arranging. Before the system, I lost real minutes staring at my calendar trying to reconstruct what I had already offered.

The agent reads the state of the thread and proposes a reply that moves the exchange forward: the right information, in the right format, aware of what was already declined. The proposed slot sometimes needs adjusting. Even then it hands me a usable draft in seconds.

The question someone asks for the hundredth time

There is a category of email I had started to dread: the question I have answered so often that answering again feels like a tax on my patience, while ignoring it would be rude. Before the system, those messages sat in my queue for days, and never because they were difficult. I was simply tired of writing the same thing.

Now the draft arrives already holding a version of my standard answer. I read it for accuracy and send. Thirty seconds, and the sender gets a same day reply instead of a two day silence. Of everything the system changed, this is the part that most improved how my inbox actually feels.

What never gets a draft

Anything emotionally sensitive goes straight to me, no draft attached. A frustrated customer, a person going through something hard, a relationship where a wrong tone would cost me. The agent can read every word in a thread and still know nothing about the history outside it, what this person means to me, or what is actually at stake. For those messages, speed was never the point.

High stakes email stays human too. Negotiations. Disagreements that need careful framing. Commitments I want to sit with before making. Replies likely to be forwarded. Messages to someone holding a decision over something I care about. A draft there would save minutes of typing and could cost something far larger if I shipped it carelessly. The system never sees these, and I read that as using the tool correctly. AI handles the clear and the repeatable. The delicate and the ambiguous were never its territory.

Honest results, without invented numbers

Your inbox and mine differ, so I will skip the precise percentages. What I can report after living with it: the boring majority of replies now goes out the same day. Replies that used to eat ten or fifteen minutes of composition take under two. The saving is undramatic and constant, a small quiet win every single day.

And one number I will state exactly: zero. That is how many replies have gone out by mistake, because sending is something the system cannot do. Not by policy. By construction.

The drafts still miss

Some drafts misread the tone of a thread. Some grab a template that never fit the situation. Some come out formal where casual was right, or clipped where the person needed warmth. I have discarded drafts wholesale and typed from a blank page.

I count none of that against the system, because deciding was always my half of the deal. A bad draft costs seconds. The failure I actually feared, a bad reply leaving under my name unreviewed, has never happened and cannot happen. The architecture forbids it.

Put the rule in the architecture

A prompt that says never send automatically is a suggestion. It can be overridden, misconfigured, or quietly lost in an update. A system with no send path is a fact. My agent has no send permission to misuse, and that distinction is the whole difference between an automation you test for a week and one you trust in production for years.

Design the forbidden action out of the architecture first. Make the drafts good afterwards. Useful drafts are a low bar. Autonomous sending is where the risk lives, so I removed it from the design space entirely.

Does approval defeat the purpose?

The usual objection: if every draft gets reviewed anyway, where is the saving? In the gap between reviewing and composing. Checking a written draft and adjusting a word takes half a minute. Facing a blank reply field takes several, because going from nothing to a coherent reply is the genuinely expensive step. The agent does the expensive part. I do the cheap part and keep every decision about what leaves my name.

Email remains unsolved, here and everywhere else. The boring majority of it got faster and lighter, and the fraction that matters stayed entirely in my hands. I keep taking that trade.

More breakdowns of automations I actually run are at [xavierfok.com](/).

Get new guides and videos first — join the Telegram channel.