When I was in NYC a week ago, a friend pushed back our meeting by 90 minutes. I got a text and the calendar update. Didn’t think anything of it.

When we’re hanging out, I mentioned I’ve been tinkering a bit with AI to get more use out of the largest repo in our lives — our email inbox. My friend pulls out his phone and show me this app Poke. It was poke that pushed our meeting back on his command.

When he wakes up in the morning, Poke which is integrated with his Google suite, sends him a brief. It includes a summary of any emails or action items he received that it judges he would prioritize. It shows his schedule for the day. He had to deal with something pressing that conflicted with our appointment so he simply told Poke to notify me that he’d need to push the meeting back. Poke then emailed and texted me. He just treated his SMS like a personal assistant and it handled the rest.

This isn’t an ad for Poke, but just another thing I saw in the wild that previews how automation creep is about to turn into a flood.

Fun aside: When you onboard with poke you negotiate your monthly price with the app! The friend is well-known in investing circles and very online so the app tried to extract a high price arguing that it knew he was a baller. He got the price down 90% and told me he knows people that have gotten it to $0.

Back to email. I was thinking about marketing-related stuff for moontower. Over the years, readers have emailed me saying my content helped them land trading jobs or their boss told them to subscribe, or my post was forwarded to their desk.

[It’s a peacocky thing to say, but in the past year, the feedback is blunt about this letter being read at every market-making shop. The audience I have in my brain when I do the Thursday posts is an experienced trader who probably has juniors that he or she would rather say “go read this” rather than explain the things themselves. They’re busy trading, and I’ve already invested in the words so they can save their breath.]

I wanted to collect all these emails, but keyword search is far too manual. The ultimate crux of the problem is semantic understanding:

“My PM told the desk to subscribe” and “I got the offer at Citadel” are both results of interest, but there are many variations of these phrases and the words that comprise them share a wide range of contexts (“offer”, “desk”)

I asked the Gemini in Gmail to find them. It returned 4 when I’d expect hundreds, so its method lacks depth.

I turned to Claude to build a pipeline. It took some back and forth, but ultimately it worked beautifully. Which is exciting because it’s a reusable workflow for semantic search on any body of work, of which, Gmail is just one instance.

The pipeline is quite simple. This is how it works:

Step 1: Multiple searches using narrow keyword queries

  • 14 targeted Gmail API keyword searches instead of 1 semantic query
  • Each catches a different flavor: job language + “Moontower”, boss language + “newsletter”, forwarding language + “your post”
  • Result: ~4,200 candidates
  • Snag: First queries were too broad (13K results). Fix: anchor every query to “Moontower”

AI Deliverable: Python script to push through Gmail API

 

Step 2 — Fetch the emails via API

  • Gmail API pulls full email bodies programmatically — no export needed
  • Result: 3,922 emails fetched
  • Snag: Rate-limited at email 2,850. Fix: retry logic + caching to disk

AI Deliverable: I actually used Claude extension in the browser to set up my Gmail API access

 

Step 3 — LLM classifies each one

  • Claude Haiku reads each email: “Is this a finance professional affirming Kris’s work?”
  • Categorizes matches: job placement, boss recommendation, team sharing, praise
  • Result: 585 matches
  • Snags: Wrong model string (3,900 silent 404s), API overload, ran out of credits mid-run, Python exception mismatch. Fix: incremental saving + resume flag

AI Deliverable: This is the main AI magic. Classifying the email as something I’m actually looking for based on the context

Results

  • 44 team/desk sharing
  • 24 job placements
  • 8 boss recommendations
  • ~$3 API cost, ~8 hours runtime, 370 lines of Python

Now if I could only have my Twitter DMs accessible via this pipeline 

Takeaway

Use each tool for what it’s good at. Search engines are good at retrieval, but LLMs are good at judgment.

10 minutes? lmao
editor

Recent Posts

trading as a sudoku puzzle with prices as the given numbers

Trailing 1-year inflation per the CPI index has been ~2.5% Prompt CME gasoline futures (RBOB)…

6 days ago

Moontower #309

In this issue: Investment Beginnings Class #3 and the game we played What if gasoline…

6 days ago

a market-making project you can do today

Friends, I tweeted something the other day that I want to expand on because it’s…

1 week ago

Moontower #308

In this issue: AI scheduled task example A rare, honest trading post-mortem Sorting through the…

2 weeks ago

Fair…I can see how you might think I lied

The math here isn’t the point, although you might like it if that’s your type…

2 weeks ago

subway platform riddle for demographics

My older kid is getting braces in a few weeks. Based on the expected time…

3 weeks ago