The offer with the prospect's logo on it.
Our client had a real prospect database and a real offer, and both were dying in a generic email template. Every message looked the same because writing a genuinely personalized offer takes twenty minutes per prospect, and nobody has twenty minutes times four hundred. We built an agent that does the homework: it studies each company, writes the offer around what that company actually does, and generates a PDF proposal carrying the prospect's own logo. Not a mail merge with a first name field. An offer that looks prepared, because it was.
Hermes runtime Enrichment pipeline PDF generation Supabase Suppression rules
The client's sales team sat on a database of prospects collected over years of trade fairs, inquiries, and past contacts. The offer was solid. The conversion was not, and the reason was visible in the first line of every email: it could have been addressed to anyone.
Real personalization was not a knowledge problem, it was a time problem. To write one properly tailored offer, a salesperson had to open the prospect's website, understand what they do, figure out which part of the offer is relevant to them, write the email, and adapt the proposal document. Twenty minutes of honest work per prospect. Multiplied across the database, that is weeks of labor nobody would ever invest, so nobody did, and the template won by default.
The template always wins by default. That was the thing to break.
> load
The agent works exclusively from the client's own prospect database. No scraping, no purchased lists, no harvesting. Suppression rules are loaded first: opt-outs, existing customers, and blocked domains never enter the queue.
> research
For each prospect, the agent visits their public website and builds a short profile: what the company does, what they sell, who they sell to, and where the client's offer plausibly fits.
> compose
The email is written around that profile. It names what the prospect does, connects the offer to it, and skips everything irrelevant. One offer, told differently four hundred times.
> brand
The agent locates the prospect's logo, and generates the PDF proposal with that logo placed on the cover next to the client's own. A small gesture with a disproportionate effect: the document reads as prepared for you, not printed for everyone.
> gate
Before any sending, offers pass a quality gate. Early in production every message was human-reviewed; as precision stabilized, review moved to sampling. The agent earns autonomy, it does not start with it.
> send
Delivery is throttled to human pace, replies land in the sales team's inbox, and every opt-out is written back to the suppression list permanently.
Layer I · Visual Architecture
One diagram: database in, suppression filter, research, compose, brand, gate, send, replies out. The suppression filter is drawn first, before anything creative, because the fastest way to ruin outreach is to send it to someone who asked you not to.
Layer II · Contracts
The offer logic is a written contract: which parts of the client's offer map to which type of prospect, what the email may claim, and what it must never promise. Tone, length, and structure were fixed with the client before the first message existed.
Layer III · Technical Diagrams
The enrichment pipeline, logo retrieval and validation, PDF assembly, throttling, and the quality gate, all specified before implementation. Logo handling got its own diagram: a wrong or distorted logo is worse than no logo, so the pipeline validates format and quality and falls back to a clean logoless cover when in doubt.
Layer IV · Implementation
Hermes runtime on a dedicated isolated instance. Enrichment from public prospect websites, PDF generation via a templated ReportLab pipeline, Supabase for prospect profiles, send history, and the suppression index.
runtime Hermes enrichment public website research per prospect documents ReportLab PDF pipeline, dual-logo cover state Supabase (profiles, send history, suppression index) delivery throttled SMTP, human-pace sending oversight quality gate, review by sampling
Wrong company, right name
Two companies with similar names is a classic enrichment trap. The profile is validated against the domain from the client's own database, not against a search result. When identity is uncertain, the prospect is skipped, not guessed.
Broken or wrong logo
Every retrieved logo is validated for format and resolution. Anything questionable triggers the fallback cover. A distorted logo signals carelessness, which is the exact opposite of the message.
Hallucinated personalization
The compose step may only use facts present in the research profile. Thin profile, shorter email. An invented detail about the prospect's business would burn more trust than a template ever could.
Reputation damage
Throttled sending, clean list hygiene, permanent suppression, and instant opt-out handling. The client's domain reputation is an asset the agent is not allowed to spend.
Duplicate contact
Send history in Supabase guarantees no prospect is contacted twice with the same campaign, even across restarts.
~40
Personalized offers per day, throttled by design
< 90 sec
From prospect record to finished branded PDF
20 min
What the same offer used to cost a salesperson
3.4x
Reply rate against the client's previous template campaign
0
Spam complaints since launch
Figures from the first two months in production, measured against the client's previous campaign in the same database segment.
The logo did the heavy lifting. Of everything in the pipeline, the simplest idea produced the most replies that started with some variation of "we can see you actually looked into us." People do not measure effort in words, they measure it in signals, and a document carrying their own logo is a signal no template can fake.
Restraint reads as quality. The agent is instructed to say less when it knows less. Counterintuitively, the shorter, thinner emails still outperformed the old template, because a modest true sentence beats a confident generic paragraph.
Outreach is a reputation game, not a volume game. Every guardrail that slowed the system down, throttling, gating, suppression, is the reason it still works months later. An agent that can send four thousand emails a day and does not is worth more than one that does.
Your offer is good. Your emails don't show it.
> ../book_a_call.sh