Grow Guava

Outreach emails in your voice. Just hit send.

Give it a true fact, your pitch, and how you write. It drafts the email into Gmail. You hit send.

Early and open source. Metrics aren't built yet.

Tap a guava, or shake the tree.

How it fits together

One engine, many packs

The engine never changes. A pack is one YAML file: who you're writing to, your pitch, which angles, when to follow up.

Campaign packcampaigns/*.yaml: audience, pitch, angles, timing
Voice profileprofiles/*.md: how you write, with real samples
Contactname, role, company, notes you know are true
Enginebuilds the prompt, calls Claude, sticks to the facts it was given
Gmail draftsaved in your Gmail, never sent
Touch logwho, when, which angle
Cadencewho's due for a follow-up next

Your packs, voice profile, and contacts stay in git-ignored folders. Public code, private data.

Live demo

Try it

Real engine, fictional sender, fictional contacts. The notes about each contact are the only facts it may use.

What the drafter knows

Nothing is sent. A few drafts per hour per visitor.

Why I built this

AI kept forgetting how I write

AI helped me message people on LinkedIn, but it forgot my tone every time. I wanted one place that keeps my voice, my pitch, and my follow-up rhythm.

Job hunting, hiring, investor outreach. It's early. If you try it, give me your feedback.

Portrait of Louise Eriksson

Who built it?

Louise Eriksson

GTM and partnerships at SACC, the Swedish-American Chamber of Commerce, in San Francisco. COO at Blue Grid Energy. Stockholm School of Economics grad.

Louise on LinkedIn

Install and run

Run it yourself

Needs Python 3 and git.

  1. Clone the repo and make a virtual environment.
  2. Install the dependencies.
  3. Copy .env.example to .env and add your Anthropic key.
  4. Copy a template pack into campaigns/private/ and fill it in.
git clone https://github.com/erikssonlouise/gtm-engine.git
cd gtm-engine
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env

python run.py show-pack job-hunt
python run.py init-db
python run.py import-contacts data/contacts.csv
python run.py draft --pack job-hunt --contact person@example.com --dry-run
python run.py draft --pack job-hunt --contact person@example.com --gmail
python run.py due --pack job-hunt

--dry-run skips the API. --gmail needs a one-time gmail-auth sign-in. A test blocks any send call.

What works today

  • Drafts in your voice
  • Gmail drafts, you send them
  • Follow-up schedule with a due list
  • Contacts and touches in SQLite, opt-out included

Not built yet

  • Reply and meeting metrics
  • A review every two weeks
  • More template packs