Answering support emails with an AI usually means the same loop every time: a product question comes in, you open an AI chat, paste the email, paste in your pricing page, paste in your feature docs, write a prompt, copy the reply back to Gmail, edit, send. The agent doesn’t remember any of it next time. The next email starts the dance over.
This guide walks through building a support-reply agent: a named workflow in Claude Code that reads unread customer emails, pulls your product docs from a Wire container and your voice from your Gmail sent folder, and saves drafts for you to review. Once the agent exists, you stop being the glue between your docs, your voice, and your inbox. The agent does that work. You review and hit send.
What you’re building
A support-reply agent with two sources of truth and one output surface. It reads your unread support emails, pulls product facts from a Wire container, pulls similar past replies from your Gmail sent folder, drafts a response, and saves it to Gmail’s Drafts folder. You review in Gmail and hit send.
Two data sources, one draft:
- Wire holds the stuff that is not in your email. Product docs, pricing, feature descriptions, known issues, policies. Anything you would otherwise paste into an AI chat.
- Gmail (via the claude.ai integration) provides the inbound email, your thread history with the sender, and your past sent replies (voice + canonical answers).
The agent never sends. The claude.ai Gmail integration doesn’t expose a send tool, only create_draft, so auto-send is impossible by design.
How it works
Without grounded context, a generic AI draft for a question like “does your Starter plan support custom domains?” looks like:
Thanks for reaching out about custom domains. Feature availability can vary by plan. Would you be open to a quick call to discuss?
With a Wire container holding your product docs, the same agent produces:
Thanks for reaching out. Custom domains aren’t on Starter, they unlock on Team and above. Team also includes SSO and audit logs, and it’s billed per seat. Happy to walk through whether the move makes sense for your setup.
What changed: the agent had real product facts to reference, pulled from your own docs, plus real past replies to borrow tone from.
Why Wire containers
The product context your agent needs is scattered. Pricing in Notion, features in a README, policies buried in a Slack thread, known issues in GitHub, a founder Loom in Google Docs. A Wire container is the one place all of that becomes queryable by the agent, in a format it can actually reason over.
One surface, many sources. Upload a file, paste a page, let the agent write entries itself. Wire normalizes them into searchable entries that the agent can retrieve by meaning, not just exact keyword match. You don’t have to keep your source material in one format or rewrite it into a perfect doc before it’s useful.
Fresh answers, not stale ones. When you update pricing, add a new entry. Wire surfaces relationships and contradictions between entries so the agent can reason over them, including flagging when something looks out of date. You don’t have to hunt down and delete every old version. The agent works out what to use from what you have.
One container, many agents. When you later build a sales responder, an onboarding helper, or a meeting-prep agent, they all read from the same container. The product docs you write once serve every downstream agent. You don’t maintain three parallel knowledge bases that drift apart.
Setup
A three-step setup. All three link to the canonical docs so you pick the path that fits your stack.
1. Create a Wire container and add your docs
Create a container and add your support material to it. Good things to include: product documentation, release notes, policies, help docs, internal FAQs. You can upload files through the dashboard, or add entries programmatically via the API.
See Creating containers for both paths.
2. Connect Wire to Claude Code
Add the Wire MCP to Claude Code so the agent can search your container.
See Claude Code + Wire MCP for the connection steps.
3. Connect Gmail to Claude Code
Enable the Gmail connector on your Claude account so Claude Code can read inbound threads, search your sent folder, and save drafts.
See Claude’s Google Workspace connectors guide.
Usage
Once the three connections are live, the agent runs from a single prompt in Claude Code. Paste this whenever you want a pass over your inbox:
Use the Gmail connector to review my unanswered customer support emails
from the last 24 hours. An email counts as answered if there's already a
draft reply in the thread, if I've replied to it already, or if the
thread has the `ai-drafted` label (you add that label to threads you've
already drafted a reply for, so skip them on subsequent runs). Also skip
anything that is not a customer asking for support: marketing, automated
notifications, internal email, receipts, threads I've already handled.
For each remaining email:
1. Search my Wire container for product docs, release notes, policies,
known issues, and any other context that would help answer the
customer's specific question. Pull the three or four entries most
relevant to what they're asking. Follow epistemic provenance hints
on returned entries: prefer entries with a clear source, prefer the
newest entry when two disagree, and treat entries marked as
deprecated or superseded as non-authoritative.
2. Search my Gmail sent folder for two or three prior replies I've sent
to similar questions. Use those to understand my tone, sentence
length, sign-off, and any canonical phrasing I use. Do not copy them
verbatim.
3. Draft a reply that:
- Answers the customer's question using only facts traceable to a
Wire entry. If the Wire container doesn't cover the question,
don't draft a reply for this thread. Skip it and add it to the
end-of-run report so I can answer it myself.
- Sounds like my past replies. Match the voice from my sent folder.
- Opens with a brief acknowledgement of what they asked and closes
with my typical sign-off.
- Stays short. Long replies rarely help on support threads.
4. Save the reply as a draft in Gmail, attached to the original thread.
5. Label the thread "ai-drafted" in Gmail so this agent skips it on the
next run.
When the loop finishes, alert me with:
- How many drafts you created.
- Which threads you skipped and why.
- Any threads where the Wire container didn't have enough supporting
material for a confident draft. List the sender and subject for each
so I can answer them myself, and tell me which docs I should add to
Wire to cover them next time.
That’s the whole thing. Paste it into Claude Code once a day, review the drafts it parks in Gmail’s Drafts folder, and hit send on the ones you’re happy with.
We simplified this into a one-command skill. Download it below and run it with /support-reply-drafter instead of pasting the prompt every time.