Applied AI Engineer
Groundwork
Multi-agent AI for B2B cold email — grounded in real research, verified before it sends.
- n8n · 5 agents · 31 nodes
- Built & validated end-to-end
- Public release · July 2026
Skills Demonstrated
Multi-Agent Orchestration
Five purpose-built agents — Research, Synthesis, Generator, Critic, orchestrator — with explicit handoffs and shared state.
Grounding & Anti-Hallucination Design
Every personal fact must carry a traceable source URL; unverifiable claims never reach a draft.
Evaluator–Optimizer Design (LLM-as-Judge)
A Critic from a different reasoning family scores every draft against a six-dimension rubric.
Context Engineering
System prompts as structured contracts — source-priority rules, banned phrases, hard tool-call budgets.
MCP Integration
Apify and Airtable MCP servers wired directly into the Research Agent's toolbelt.
Built With
Self-hosted workflow orchestration — 31 nodes, 5 agents, deterministic control.
The Summary
Between 2019 and 2026, cold email's industry reply rate fell from 8.5% to 3.43% — seven years of adding automation, and replies more than halved. Groundwork is a multi-agent system built against that curve: five specialized AI agents that research a prospect from verifiable sources, condense what survives verification into a brief, draft one email, judge it against that brief, and route anything questionable to a human instead of an inbox. Across a real test batch of 100+ emails it produced a 6.6% reply rate with a 4% spam-flag rate, against a 4.1% / 7.8% baseline for generic AI outreach.
The Operational Friction
A founder or small sales team wants to reach a hundred specific people — their exact ICP, not a purchased list — with an email good enough to get a reply. There are two realistic paths. Hire an SDR, which takes months to do well and prices most small companies out of research-driven outreach entirely. Or use one of the AI tools promising “personalization at scale,” which in practice means a {{first_name}} token and a company-name mail merge with better manners.
The second path has been measured, and the measurement is unflattering. In a 12,000-email controlled test, AI-generated outreach earned a 4.1% reply rate and a 7.8% spam-flag rate; human-written outreach in the same study earned 10.4% and 2.9%. The researchers' own explanation is the part worth sitting with: every AI tool sounded monotonously the same. Technically correct, grammatically clean — and recipients weren't fooled by any of it.
“AI-assisted personalization works — but only when AI handles the research, not the writing.”
That single sentence from the study is the architectural thesis behind everything that follows. And underneath the measured numbers sit the costs nobody itemizes: stale research, generic messaging, bounces, spam complaints, and the slow damage all of it does to a sending domain's reputation.
The System Map
Groundwork implements Samantha McKenna's Show Me You Know Me® method, which has one almost uncomfortably literal requirement: open with a fact so specific to the recipient that it would mean nothing to anyone else — and make every such fact traceable, source URL and all, to something they actually posted, said, or wrote.
The pipeline is 31 n8n nodes in five stages, with deterministic control between every model call. Intake collects the sender's company data and targeting criteria once, then an Apollo-style sourcing step returns leads keyed on LinkedIn URL. A checkpoint stage reads back every lead already finalized in a previous run, so a batch that dies partway through never re-researches or re-writes a finished lead. Then, one lead at a time: a Research Agent works under a hard budget of seven tool calls and a strict source-priority order — personal LinkedIn activity first, company news dead last — and a Synthesis Agent condenses the findings into a single Personalization Brief, discarding anything without a source URL and committing to one primary angle the rest of the pipeline is not permitted to abandon.
The core is a bounded draft-and-critique loop. A Generator (Claude Sonnet) drafts subject and body from the Brief and nothing else; a Critic (Gemini Flash) scores the draft against a six-dimension rubric and checks every claim in it against the verified research. The loop runs at most two rounds. A draft that passes is written to Airtable as ready_to_send; one that fails twice — or includes a fabricated personal fact, an instant knockout — is escalated to needs_manual_review. Never silently either one.

State lives in three Airtable tables: a durable identity record, a checkpoint table the dedup logic reads on every run, and a polymorphic audit log where each agent writes its own events — the record that lets any claimed fact be traced back to where it came from. The build is validated end-to-end through this persistence layer; the actual send is deliberately not wired, documented on the canvas itself as the operator's decision to make.
Decisions & Trade-offs
Five specialized agents instead of one.
Research and writing are different problems that fail in different ways, and a single model asked to find something true and write convincingly will reliably do the second at the expense of the first. Splitting the work lets each seat run the model suited to it — agentic tool-use where the job is deciding what to look at next, structured extraction where the job is condensing, prose reserved for the one seat where prose quality is decisive, judgment on a different model entirely. That discipline, not any single clever prompt, is why five model calls produce one coherent, source-traceable email instead of five disconnected opinions.
A deterministic workflow instead of an autonomous orchestrator.
The first architecture draft had a supervisor agent watching the whole sequence — research, synthesize, write, critique, finalize — deciding at each step whether to continue or retry. It would have demoed beautifully. It was also the wrong pattern: orchestrator-workers is for workflows whose subtasks can't be predicted in advance, and this sequence is identical for lead #1 and lead #500. Worse, it puts a language model in charge of counting its own iteration cap — across a fifty-lead run, fifty independent chances to miscount — at roughly fifteen times the token cost of the deterministic version.
The supervisor was removed entirely, not scaled down. Dynamic tool selection survives in exactly one place, the Research Agent's toolbelt, because which platform holds a usable personal signal for a given human genuinely can't be known before looking. The instinct to keep the more impressive-looking layer was real; “will this look good in the case study” is a bad reason to add architecture.
The judge comes from a different reasoning family than the writer.
Frontier models judging their own family rate it favorably 75–84% of the time in pairwise tests, and similarity testing clusters Claude with Mistral, Gemini with GPT. So Claude writes and Gemini judges — a cross-cluster check that behaves like a second opinion rather than a reflection. The two-round revision cap follows the published Self-Refine data: most of the measurable gain lands in the first pass or two, and everything after buys shrinking improvement at real token cost.
One gap, shipped on purpose.
The research behind this build recommended enforcing that two-round cap with a deterministic loop-counter gate — code, not instructions. The live system currently enforces it through the orchestrator's own prompt. Testing so far, including a live run that reached round two, shows the self-counting holding — but “holding so far” and “structurally guaranteed” are different claims, and only one is true today. The simpler version shipped first, observed in the open, with the hardened gate named as the known next step.
What Failed
None of the failures in this build were the headline kind. No runaway agent, no spectacular hallucination. Every one was infrastructure — a gap between what a tool documents and what it does — and every one cost real debugging time precisely because the error message rarely said what was actually wrong.
The most instructive: n8n's Split In Batches node doesn't preserve paired-item lineage across its loop boundary. Several hops downstream, a node threw “Cannot convert undefined or null to object” — which is unhelpful — because the loop had quietly broken the chain that lets later nodes find which lead a piece of data belongs to. The fix was abandoning paired-item tracking altogether in favor of explicit index-based lookups tied to the loop counter. A workaround, not a first-choice pattern, and it's named as one.
The rest of the postmortem reads the same way. A stale database credential failed with an error indistinguishable, from inside the workflow, from broken expression logic. Agent nodes silently replace their input with their output, so upstream fields vanished until they were explicitly re-attached. The test-execution tool turned out to have an undocumented five-minute ceiling — a two-round critique cycle for a single lead comfortably exceeds it, which made the workflow look broken when it wasn't. And an API rejected “UTC” while refusing to mention it wanted “utc”.
The throughline: reliability problems in agent systems mostly don't live in the model. They live in the scaffolding around it — the part that never shows up in an architecture diagram, and the part that took the most hours.
Measurable Outcomes
6.6%
Reply rate
4%
Spam-flag rate
100+
Email test batch
Across a real test batch of just over 100 emails, Groundwork produced a 6.6% reply rate and a 4% spam-flag rate. That sits meaningfully ahead of the 4.1% reply / 7.8% spam baseline documented for AI-alone outreach — the benchmark this build set out to beat — and still short of the 10.4% / 2.9% that human-written outreach earned in the same research. One batch is enough to say the system works, and works better than the generic-AI baseline. It is not enough to claim a stable long-run rate, so this case study doesn't. The numbers here are early-stage validation, reported at the sample size they were measured on.
Reflections
Sales teams with headcount have always done what this system does: read the prospect, find the real hook, write the email that could only have been written to them. What changed isn't the method — it's who can afford to run it. Five agents, three tables, and a couple of model APIs is a cost structure a two-person company can operate, and that's the actual argument for AI in this workflow. Not that it writes better than a person; on the numbers above, it doesn't yet. That it makes the discipline affordable — and the discipline only matters if it survives the automation instead of being flattened by it.
The real challenge was never getting a model to sound like a person. It's building a harness disciplined enough that the model is never allowed to sound convincing about something that isn't true.
Every AI cold-email tool on the market already sounds like a person. This one is built so it can only sound convincing about something it actually verified.
Case Study · PDF
Groundwork: A Multi-Agent Cold Email Case Study