evexBrowseAgentsLearnDocsLeaderboard
evexthe eve agent registry
LeaderboardDocsLearneve docsllms.txt
Back to Registry

Email Triage Assistant

support

Triages Gmail, Outlook, or IMAP threads and writes tone-matched draft replies you send yourself.

TOby TommyBez42 files

Install

npx shadcn@latest add @evex/email-triage-assistant

Full install guide: Install an Eve agent.

What is Email Triage Assistant?

Email Triage Assistant is an Eve agent that reads the inbox on a schedule or push, sorts threads into buckets, and leaves replies in Drafts only. It is for Eve developers answering product questions. Preview every file on this page, then install with npx shadcn@latest add @evex/email-triage-assistant.

Inbox triage that classifies threads and writes draft replies without sending.

Other package managers

Prefer pnpm, yarn, or bun? Copy the matching install command.

Package manager
$npx shadcn@latest add @evex/email-triage-assistant
Category
support

support agents and workflows

Files
42 files

1 skill file · 8 tools

Requires
3 dependencies

@vercel/connect@^0.2.6, eve@^0.47.5, zod@4.3.6

Updated
Sep 8, 2026

Source-owned registry metadata

What's included

42 files1 skill file8 tools
Dependencies:@vercel/connect@^0.2.6eve@^0.47.5zod@4.3.6

About Email Triage Assistant

Email Triage Assistant is an eve agent that connects to one mailbox you already own. On each cron tick or signed inbox push it lists threads, reads the ones that need a human, and writes replies into the provider Drafts folder. You review those drafts in Gmail, Outlook, or IMAP and hit send yourself.

You interact with it through the inbox-triage schedule, the /inbox/push channel, or an on-demand Eve chat that still reads the mailbox. Set EMAIL_TRIAGE_GOOGLE_CONNECT_UID, EMAIL_TRIAGE_MICROSOFT_CONNECT_UID, or IMAP, plus optional Slack Connect. The agent applies TRIAGE_BUCKETS labels and matches Sent-folder tone before it calls create_draft_reply.

It is useful when you want autonomous sorting without an auto-send. Code refuses SMTP ports and send URLs. create_draft_reply always returns sent false. Newsletter and FYI threads get a bucket and no draft unless a real question is waiting in the thread.

How it works

  1. On the inbox-triage schedule (cron from EMAIL_TRIAGE_CRON, default every two hours UTC) or a signed POST to /inbox/push, the agent loads the inbox-triage skill.
  2. It calls load_inbox_config and stops when Gmail, Microsoft Graph, or IMAP credentials are missing. Push runs also call ingest_push_event.
  3. list_inbox_threads and read_thread pull live mailbox data. sample_sent_style reads the Sent folder and returns a greeting, sign-off, and sentence-length brief.
  4. apply_triage_bucket writes a Gmail triage/ label, an Outlook category, or an IMAP Triage/ folder for one configured TRIAGE_BUCKETS slug.
  5. create_draft_reply writes Gmail drafts.create, Graph createReply, or IMAP APPEND to Drafts and always returns sent false. Optional notify_slack_drafts_ready posts a drafts-ready queue note.
  6. Three evals cover never-send, triage buckets, and the schedule or push path so a paste-to-text skill shape cannot replace the mailbox loop.

Use cases

Refund thread that stays in Drafts

A customer asks about an annual-plan refund. The agent reads the thread, applies needs-reply, writes a Sent-matched draft, and leaves it in Drafts for you to send.

Newsletter bucket, no draft

A weekly changelog lands in the IMAP inbox. apply_triage_bucket files it under newsletter. create_draft_reply is skipped because there is no question waiting in the thread.

Graph push during the day

Outlook posts a change notification to /inbox/push with EMAIL_PUSH_WEBHOOK_SECRET. The channel starts a mailbox run that drafts a reply without calling sendMail.

Slack queue when drafts pile up

After a cron run writes three Drafts, notify_slack_drafts_ready posts to the Eve Slack Connect channel. The note says drafts are ready. Nothing is emailed.

Requirements

AI_GATEWAY_API_KEY
A model credential for the deployment, either a Vercel AI Gateway API key or AI Gateway OIDC, so the agent can call zai/glm-5.2.
EMAIL_PROVIDER
Optional force of gmail, outlook, or imap. When empty, the first complete credential set wins.
EMAIL_TRIAGE_CRON
5-field cron for inbox-triage. Defaults to 0 */2 * * * (every two hours UTC on Vercel).
TRIAGE_BUCKETS
Comma-separated slugs. Defaults to needs-reply, fyi, waiting, urgent, newsletter, no-reply.
EMAIL_MAX_THREADS
Maximum inbox threads to list per run. Defaults to 20.
EMAIL_SENT_SAMPLE_SIZE
How many Sent-folder messages to sample for tone. Defaults to 8.
EMAIL_PUSH_WEBHOOK_SECRET
Shared secret for POST /inbox/push. Graph validationToken echoes do not require it.
EMAIL_TRIAGE_SLACK_CONNECT_UID
Optional Vercel Connect Slack connector UID for the Eve Slack channel. Leave empty to skip Slack notify.
EMAIL_TRIAGE_SLACK_CHANNEL_ID
Optional Slack channel id for the drafts-ready note. Leave empty to skip Slack notify.
EMAIL_TRIAGE_GOOGLE_CONNECT_UID
Vercel Connect Google connector UID from vercel connect create google. Mints gmail.readonly, gmail.compose, and gmail.modify tokens. The agent never calls messages.send or drafts.send.
GMAIL_USER
Optional From address written onto Gmail drafts.
EMAIL_TRIAGE_MICROSOFT_CONNECT_UID
Vercel Connect Microsoft connector UID from vercel connect create microsoft. Mints Mail.Read and Mail.ReadWrite tokens. The agent never calls sendMail.
IMAP_HOST
IMAP hostname. SMTP hosts and ports 25, 465, 587, and 2525 are refused.
IMAP_PORT
IMAP port. Defaults to 993.
IMAP_USER
IMAP username.
IMAP_PASSWORD
IMAP password. Placeholder only in .env.example.
IMAP_DRAFTS_MAILBOX
Mailbox used for APPEND. Defaults to Drafts. Some hosts use [Gmail]/Drafts.
IMAP_INBOX_MAILBOX
Mailbox to read. Defaults to INBOX.
IMAP_SENT_MAILBOX
Mailbox sampled for tone. Defaults to Sent.

FAQ

How do I install and run a triage pass?

Run npx shadcn@latest add @evex/email-triage-assistant in an Eve app, copy .env.example, set one mailbox provider, then POST /eve/v1/dev/schedules/inbox-triage while iterating.

Does it ever send the email?

No. create_draft_reply always returns sent false. Gmail stops at drafts.create, Graph uses createReply, and IMAP APPENDs to Drafts. SMTP and send URLs are refused in code.

How do Gmail watch and Graph push work?

Point the provider webhook at POST /inbox/push with EMAIL_PUSH_WEBHOOK_SECRET. Graph validationToken on GET or POST is echoed as plain text so the subscription can complete.

Can I just paste a thread into chat?

No. The inbox-triage skill reads the connected mailbox. A paste-and-copy-text flow is not this agent. Use support-reply-draft if you want a docs-cited paste draft.

Is Slack required?

No. EMAIL_TRIAGE_SLACK_CONNECT_UID and EMAIL_TRIAGE_SLACK_CHANNEL_ID are optional. When both are set, notify_slack_drafts_ready posts that drafts are waiting through the Eve Slack channel. That ping is not email delivery.

Files this command writes

42

Core

33

Skills

1

Tools

8

npx shadcn@latest add @evex/email-triage-assistant
evexBrowseAgentsLearnDocsLeaderboard
Sign In
Stars24
6 installs

Related Agents

View all 22 by TommyBez →
support
40

Docs Knowledge Assistant

Answers from your repo docs and cites the file.

TOTommyBezView →
support
30

Support Reply Draft

Drafts a customer reply from product docs and cites the file.

TOTommyBezView →
support
8

Knowledge Base Gardener

Finds stale product docs and drafts updates with file cites.

TOTommyBezView →