Do It Once, Then Turn It Into a Skill
Most B2B outbound automation fails in one of two ways. Either you spend days wiring together brittle no-code pipelines that break the moment an API response changes, or you run a naive scraper that dumps hundreds of unverified contacts into a spreadsheet and blasts them with generic mail-merge templates.
When setting out to build a lead generation and outreach system for an engineering and AI consulting practice, targeting 50 founders of developer-tools and technical infrastructure startups, a fundamentally different approach was taken using Hermes.
Instead of writing automation scripts upfront, the entire pipeline was worked through conversationally:
-
Hermes was asked to research and verify 50 high-fit startup founders.
-
It was pointed at a self-hosted CRM (Baserow) to structure and enrich the records.
-
It was handed the Hunter.io API documentation to find verified contact emails above a strict confidence threshold.
-
It was tasked with drafting context-aware outreach messages tailored to each startup’s product focus and growth stage.
The paradigm shift is that after each stage worked in conversation, Hermes was told to crystallize what it just did into a reusable Skill. By the end of a single session, the result was not just 50 researched leads and 33 ready-to-send personalized messages in the CRM. It yielded a permanent, modular four-skill toolkit, plus a clear pattern for automated reach out, that can be run for any vertical on demand.
The Architecture: Skills + Database as a State Machine
Traditional workflow tools force you to pass complex JSON payloads from one step to the next. If step three fails on row 27, restarting the run is a headache.
In this Hermes workflow, the CRM table itself acts as the state machine. Each skill reads from the Baserow Leads table, filters for rows in a specific state, performs its work, and updates the state columns so the next skill knows exactly what to pick up.
The Pipeline Data Flow:
-
1. Discovery & Audit (
lead-search): Outputs a verified Markdown list of leads. -
2. Ingestion (
lead-import): Upserts 50 rows into the Baserow CRM with the stateEmail_Searched = false. -
3. Enrichment (
lead-contacts): Pulls rows whereEmail_Searched = false. It updates theEmailcolumn and setsEmail_Searched = true(enforcing a Hunter.io score > 80). -
4. Personalization (
lead-warm-messages): Looks for rows whereEmail!= emptyandWarm_Message = empty, then populates a tailoredWarm_Message. -
5. Human Review & Dispatch (
lead-outreach): Takes approved rows whereContacted = false, sends the email, and setsContacted = true.
Stage 1: Discovery
The process started with a simple, natural-language prompt describing who to reach and why:
Prompt: “We need to find 50 leads: founders of developer-focused startups that could use engineering leadership consulting and technical advisory.”
Hermes immediately launched parallel web searches across multiple angles, including YC-backed developer tools, AI infrastructure startups, CI/CD and observability platforms, and developer productivity tools. It quickly compiled an initial list of 50 candidates.
Stage 2: Using the CRM as a State Machine
A Markdown file is great for reading, but terrible for tracking multi-step outreach state. The goal was to place all 50 leads inside a self-hosted Baserow database (Leads table) to track enrichment and outreach cleanly.
Prompt: “We have a leads table set up in Baserow (
https://crm.example.com/database/201/table/563). Insert the data there. Don’t worry about entering the email yet (we’ll find it later), but ensure we enter the company URL. SetContactedtofalse, and enter all the information we know about the lead inNotes.”
Letting the Agent Solve the Plumbing
The prompt did not specify the internal Baserow field IDs, the exact REST endpoint path, or the authentication header. Hermes inspected the Baserow instance, discovered the schema and authentication format on its own, and inserted all 50 rows with structured notes:
Startup: Revyl (YC)
Role: Co-founder & CEO
Focus: AI-native mobile testing & developer observability platform
Stage: Seed-stage; previously saved $25M+ in engineering triage at scale
Why relevant: High-velocity engineering team building complex test pipelines for developers
Crystallizing the First Two Skills
Once Hermes figured out both the multi-tier discovery/verification loop and the Baserow API plumbing, that knowledge was locked in:
Prompt: “We need to create two skills: one to do the
lead searchand return the kind of list we now have, and twolead importto import the leads into the Baserow database.”
Hermes created two permanent skills in its research library:
-
research/lead-search: Encapsulating the 16-angle search strategy, explicit inclusion/exclusion rules (scripts/lead_search.py). -
research/lead-import: Documenting Baserow schema discovery,Tokenauthentication, field mappings, dry-run validation, and batch upsert modes (scripts/lead_import.py).
What took dozens of conversational tool calls to explore and refine the first time was now a single, deterministic command.
Stage 3: High-Confidence Contact Enrichment
With 50 verified founders and 50 company domains in Baserow, the next step was finding deliverable email addresses without burning API credits or polluting the CRM with guessed, low-confidence addresses that hurt sender reputation. An Email_Searched boolean column was added to the Baserow table and Hermes was given the rules for enrichment:
Prompt: “Now use the Email Finder service from Hunter.io to find missing emails from the Baserow
leadstable:1. Make sure the leads you pull up have the
Email_Searchedcolumn set tofalse.
2. Once the email has been searched, setEmail_Searchedtotrueregardless of whether the email was found or not.
3. Update the
4. The Hunter.io Email Finder API returns ascorein its response; consider the email found only if the score is above80. 5. Email Finder API specs can be found athttps://hunter.io/api-documentation/v2#email-finder.”
Why This State Design Matters
Two details in this prompt make the workflow production-grade:
-
Idempotency via
Email_Searched: By querying only rows whereEmail_Searched = falseand immediately flipping the flag totrueafter querying Hunter.io, the process can be interrupted and resumed at any time, or run on a daily schedule as new leads are imported, without ever paying twice to look up the same person. -
Strict Confidence Threshold (
score > 80): In B2B outbound, sending to a bounced address is worse than not sending at all. When Hermes ran across the 50 leads, Hunter.io returned candidate emails for 33 founders.
Once all 50 rows were processed and verified, a six-word prompt turned the enrichment logic into the third skill.
Prompt: “Now turn this into a skill called
lead contacts.”
Hermes packaged the Baserow state filtering, rate-limited Hunter.io API client, score threshold logic into research/lead-contacts.
Stage 4: Context-Aware Warm Outreach
The biggest trap in outbound automation is treating personalization as Hi {{First_Name}}, love what you're building at {{Company}}!. Founders spot that pattern in milliseconds. Because Stage 1 discovery had stored structured research (Focus, Stage, and Why relevant) inside each lead’s Notes field in Baserow, Hermes had rich context right inside the database to craft a tailored opening observation for every founder.
Hermes was given the following outreach template and instructions:
Prompt: “Now let’s generate warm messages:
1. Go through the leads where
Warm_Messageis empty.
2. Use the data from the lead to populate the messaging template below and updateWarm_Messagewith it:Hey {{First_Name}},
{{Dynamic_Observation_Line based on lead Focus & Stage data}} High velocity often leads to context-switching, operational friction, and engineering burnout.
I’ve spent years as a Principal AI & Systems Architect navigating that exact pressure. Today, I work with engineering organizations to install concrete systems for technical execution, architecture resilience, and sustained delivery velocity.
No generic playbooks. Just actionable frameworks that help teams build better systems and stay sharp under sprint pressure.
Do you have 10 minutes next week to compare notes on what the engineering team at {{Company_Name}} is facing?”
Hermes read the leads from Baserow and parsed each lead’s Notes field to extract their technical domain and funding stage. It then generated a tailored Warm_Message for each founder
The generator was then crystallized into the fourth skill.
Prompt: “Now turn this into a skill
lead warm-messages..”
Closing the Loop: Human-in-the-Loop
Storing the generated copy in a Warm_Message column with Contacted = false instead of sending the emails immediately is critical because the best agentic outbound systems separate generation from dispatch with a human-in-the-loop checkpoint.
In Baserow, reviewing 33 pre-written, personalized messages takes less than five minutes. You can scan the Warm_Message column in a grid view, tweak a phrase for a founder you already know, or delete a row you want to hold back.
Three Takeaways for Building Agentic Workflows in Hermes
Looking back at how this system came together in a single session, three principles stand out:
-
Explore Conversationally, Crystallize Into Skills: Don’t waste time writing rigid specifications before you know what the real-world data and APIs look like. Do the task once interactively with Hermes. Let the agent discover the API auth quirks, schema fields, and edge cases. Once the output looks right, tell Hermes to turn it into a skill.
-
Bake Verification Into Every Stage: An AI agent shouldn’t be a faster way to generate spam. Use the agent’s reasoning to filter and verify by auditing whether a lead is truly a founder in your target niche during discovery, and enforcing strict confidence thresholds (
score > 80) during email enrichment. -
Use Your Database as a Simple State Machine: You don’t need a heavy orchestration framework to chain agent skills together. A simple table with clear state columns (
Email_Searched,Email,Warm_Message,Contacted) makes every skill idempotent, resumable, and easy for a human to inspect at any stage.
What started as a one-off request to find 50 startup leads ended as a permanent, four-command growth engine, ready to run whenever it’s time to fill the top of the funnel next.