AI Agent controlling various systems

I Gave an AI Agent Access to My CRM and Email. Here's What Happened.

When I can’t find a warm connection to a suitable investor, I fall back on cold email - a personalized intro that explains why our company might be a good fit, plus a link to a deck.

To make that process less painful, I vibe coded a simple application (just a set of scripts) called ScrappyDeck. It:

  • Creates a unique tracking URL using a self-hosted instance of Kutt and a unique tracking token for each recipient
  • Logs interactions with the pitch deck in a self-hosted instance of OpenPanel.dev so I can see whether they’ve viewed it and how engaged they are

The name fits - it’s a scrappy combination of tools and scripts that gets the job done without paying DocSend $150/month for features I consider essential.


The Old Process

Here’s what sending a single outreach email actually looked like:

  1. Research the firm and investor - usually done in a sprint, stored in my CRM (Folk). This alone takes hours.
  2. Enrich the data to make sure I have a current email address.
  3. Write a general email explaining our business and the intent of the outreach.
  4. Write a personalized intro explaining why we might be a fit, and attach a browser-only PDF link to the deck.
  5. Send the email.
  6. Log the interaction in Folk.
  7. Move on to the next person.

There’s real decision fatigue baked into this. Should I contact this investor at all? Is it actually a good fit? What’s the best way to connect our business to their thesis? And this is after I’ve already spent significant time vetting the firm based on public information.

It’s tedious AF.

I tried to simplify the process before. It was still a lot of copy-and-paste.

My goal was to get personalized outreach down from a few hours to a few minutes. It turns out I’ve finally pulled it off - using Hermes.


Enter Hermes

Hermes is an open-source, self-hosted AI agent that works with whatever LLM you choose. Think of it as a capable assistant you can give access to your tools and then direct in plain language.

I spun up a Hermes instance in a Proxmox Linux container, running as root so it has full access to the file system and all resources. It’s isolated, so there’s not much it can break - though it does reach out to other systems via API.

Once I got comfortable with it, here’s what I connected:

  • ScrappyDeck — I worked with Claude Code to build a proper API so Hermes could generate tracking URLs and tokens on demand. Surprisingly easy.
  • Folk — I handed Hermes the API endpoint, credentials, and docs. Within minutes it was reading and writing CRM records from plain language instructions.
  • Brevo — Same story. SMTP credentials plus a plain text template, and it was sending email.

The Workflow I Built

Here are the exact instructions I gave Hermes:

I have sometimes gathered multiple contacts from the same firm. It may sound counterintuitive, but we want to reach out to Associates or other people whose job it is to source deals first - they have greater incentive to get something into the pipeline.

Start with anyone holding that title or similar. If there’s no response after two follow-ups, move to the next person with that title. If no one like that exists, start reaching out to more senior people in alphabetical order. Senior titles are typically Partner, Managing Director, and Principal, or similar.

Based on that rule, select the next person from the Investors group in Folk in chronological order.

Research background information for the first line of the email. Write the intro.

Present the first line to me for feedback or approval. DO NOT SEND WITHOUT MY APPROVAL.

Once approved or edited, generate a unique deck link using the ScrappyDeck API.

Merge the firstName field, the intro line, and the deck link into the email template.

Send via Brevo.

Log the email as an Interaction on the person’s record in Folk.

From there, we iterated. The agent asked me to clarify appropriate job titles. It also proposed a three-tiered seniority classification system, which I accepted. When it produced its first few introductory lines, I edited some of them so it could better calibrate to my voice.

After that? It executed flawlessly, one message at a time. It felt like magic.


The One Hiccup

After sending some messages, Hermes asked if I wanted to continue. I said, “Yes, we’ll send a total of 20 today.”

It sent eight more. Without showing them to me first. 😳

A few of them came out a bit wooden, and there was nothing I could do about it. Lesson learned.

I had it log that constraint to long-term memory and added an explicit rule: no batching, ever. One message at a time, every time.


The Verdict

Setup took three hours. On the first day alone, it had already saved me that much time.

And since I have a virtually unlimited developer subscription to Kimi 2.5 Turbo for $7/week, there was zero incremental token cost.

I’ll take it.

Related post