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

CRM Hygiene Agent

productivity

On a schedule, scans HubSpot, Salesforce, or Pipedrive via Connect and proposes dedupe, normalize, and enrich work you approve before anything writes.

TOby TommyBez32 files

Install

npx shadcn@latest add @evex/crm-hygiene-agent

Full install guide: Install an Eve agent.

What is CRM Hygiene Agent?

CRM Hygiene Agent is an Eve agent that scans the CRM on a cron, drafts a cleanup batch for Slack or digest review, and writes only after you approve. It is for Eve developers running team operations. Preview every file on this page, then install with npx shadcn@latest add @evex/crm-hygiene-agent.

Scheduled CRM hygiene via Connect that proposes dedupe, normalize, and enrich batches for human approval before any write.

Other package managers

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

Package manager
$npx shadcn@latest add @evex/crm-hygiene-agent
Category
productivity

productivity agents and workflows

Files
32 files

1 skill file · 6 tools

Requires
4 dependencies

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

Updated
Sep 9, 2026

Source-owned registry metadata

What's included

32 files1 skill file6 tools
Dependencies:@vercel/connect@^0.2.6eve@^0.47.5resend@^6.14.0zod@4.3.6

About CRM Hygiene Agent

CRM Hygiene Agent is an eve agent that connects to one HubSpot, Salesforce, or Pipedrive account you already own. On each cron tick it reads contacts through Vercel Connect, drafts a dedupe, normalize, and enrich batch, and waits for you to approve before any CRM write.

You interact with it through environment variables and Slack or email. Set a Connect UID for the CRM you use, pick Slack Connect, Resend, or both, and trigger crm-hygiene-scan. The agent previews every digest and only delivers when confirmSend is true. CRM writes stay behind apply_hygiene_writes.

It is useful when you want scheduled cleanup without silent merges. Duplicate emails become a reviewable dedupe row. Name and phone formatting become normalize rows. Empty company or phone fields become enrich rows that copy from a sibling on the same domain. The append-only audit log records proposed, delivered, approved, written, and refused.

How it works

  1. On the crm-hygiene-scan schedule (cron from CRM_HYGIENE_CRON, default 08:00 UTC), the agent loads the crm-hygiene skill.
  2. It calls load_crm_config and stops when a HubSpot, Salesforce, or Pipedrive Connect UID is missing, or when neither Slack nor email delivery is configured.
  3. scan_crm_records mints a Vercel Connect token and lists contacts. That tool is read-only and never merges or patches a record.
  4. propose_hygiene_batch drafts dedupe, normalize, and enrich work, writes the batch into the append-only audit log, and returns written false.
  5. If the batch has proposals, the agent calls preview_hygiene_digest, then deliver_hygiene_digest with confirmSend true. That tool pauses for Eve approval before the Slack Connect channel or Resend. The cron path does not call apply_hygiene_writes.
  6. Four evals cover the schedule path, digest preview, writes that require approval, and a run that must not apply without confirmWrite.

Use cases

Duplicate emails waiting for a human

Two HubSpot contacts share ava@example.com. propose_hygiene_batch adds a dedupe row. Slack gets the draft batch. apply_hygiene_writes runs only after you approve with confirmWrite true.

Name and phone cleanup

A Salesforce contact has firstName ava and a ten-digit phone. The normalize proposal title-cases the name and prefixes plus on the phone. Nothing is patched until apply_hygiene_writes is approved.

Fill empty company from a sibling

A Pipedrive person on example.com has no company. Another person on that domain lists Acme. The enrich row copies Acme into the empty field and never overwrites a filled company.

Monday cron, Slack review

Set CRM_HYGIENE_CRON to weekday mornings and Slack Connect. Operators get one draft batch in the Eve Slack channel. The cron path stops after deliver_hygiene_digest. Writes wait for chat plus approval.

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.
CRM_PROVIDER
Optional force of hubspot, salesforce, or pipedrive. When empty, the first complete Connect UID wins.
CRM_HYGIENE_CRON
5-field cron for crm-hygiene-scan. Defaults to 0 8 * * * (08:00 UTC on Vercel).
CRM_HYGIENE_MAX_RECORDS
Maximum contacts to read per scan. Defaults to 100.
CRM_HYGIENE_AUDIT_PATH
Append-only JSONL audit log. Defaults to .data/crm-hygiene-audit.jsonl. Stores identifiers, proposal kinds, and changed field names only. Use a durable volume if the app filesystem is ephemeral.
CRM_HYGIENE_AUDIT_RETENTION_DAYS
Days to keep audit rows. Defaults to 90. propose_hygiene_batch purges older rows.
CRM_HYGIENE_DEFAULT_PHONE_COUNTRY_CODE
Optional country calling code, digits only, used before adding + to a national phone. Leave empty to leave non-E.164 numbers unchanged.
CRM_HYGIENE_SLACK_CONNECT_UID
Optional Vercel Connect Slack connector UID for the Eve Slack channel. Leave empty to skip Slack delivery.
CRM_HYGIENE_SLACK_CHANNEL_ID
Optional Slack channel id for the draft batch. Leave empty to skip Slack delivery.
CRM_HYGIENE_HUBSPOT_CONNECT_UID
Vercel Connect HubSpot connector UID from vercel connect create hubspot. Mints crm.objects.contacts.read, crm.objects.contacts.write, and crm.objects.companies.read. Writes still require apply_hygiene_writes after Eve approval.
CRM_HYGIENE_SALESFORCE_CONNECT_UID
Vercel Connect Salesforce connector UID from vercel connect create salesforce. Mints api and refresh_token.
CRM_HYGIENE_SALESFORCE_INSTANCE_URL
HTTPS Salesforce instance URL required when the provider is salesforce.
CRM_HYGIENE_PIPEDRIVE_CONNECT_UID
Vercel Connect Pipedrive connector UID from vercel connect create pipedrive. Mints contacts:read and contacts:full.
CRM_HYGIENE_PIPEDRIVE_COMPANY_DOMAIN
Optional Pipedrive company domain. The runtime talks to api.pipedrive.com with the Connect token.
RESEND_API_KEY
Resend API key used by deliver_hygiene_digest when email recipients are configured. The idempotency key is forwarded to Resend.
CRM_HYGIENE_DIGEST_FROM
Verified Resend sender for the HTML digest. Recipients and sender cannot be overridden through tool input.
CRM_HYGIENE_DIGEST_TO
Comma-separated recipient addresses. Optional CRM_HYGIENE_DIGEST_SUBJECT defaults to CRM hygiene batch.

FAQ

How do I install and run a scan?

Install with npx shadcn@latest add @evex/crm-hygiene-agent, copy .env.example, set one CRM Connect UID plus Slack or Resend, then POST to /eve/v1/dev/schedules/crm-hygiene-scan while iterating.

Does the cron path write to the CRM?

No. crm-hygiene-scan reads, proposes, and may deliver a digest after approval. apply_hygiene_writes is the only write path and is not called on cron. confirmWrite must be true after a later Eve approval.

Is Slack required?

No. CRM_HYGIENE_SLACK_CONNECT_UID and CRM_HYGIENE_SLACK_CHANNEL_ID are optional. When both are set, deliver_hygiene_digest posts the draft batch through the Eve Slack channel. That ping is not a CRM write.

How do I approve a cleanup batch?

Review the Slack or email digest, then call apply_hygiene_writes with the proposed batch and confirmWrite true. The tool always pauses for Eve approval. Without that grant the CRM client refuses POST, PATCH, PUT, and DELETE.

What if two contacts share an email?

propose_hygiene_batch adds a dedupe row that keeps the fuller record as primary. The merge stays staged until you approve apply_hygiene_writes. There is no auto-merge and no silent overwrite.

Files this command writes

32

Core

25

Skills

1

Tools

6

npx shadcn@latest add @evex/crm-hygiene-agent
evexBrowseAgentsLearnDocsLeaderboard
Sign In
Stars24

Related Agents

View all 22 by TommyBez →
productivity
208

Linear Operations Agent

An Eve agent for Linear operations across Linear, Slack, and scheduled runs.

TOTommyBezView →
productivity
8

Meeting Action Extractor

Extracts owners and deadlines from a meeting transcript and drafts Linear follow-ups for approval.

TOTommyBezView →
productivity
4

Invoice Chase Drafter

Weekday AR chase via Connect that drafts mailbox reminders from QuickBooks or Xero and posts an idempotent Slack digest after a paid re-check.

TOTommyBezView →
6 installs