I want to start with the actual problem, because that's really where this whole thing came from.
I was doing outreach for client acquisition, and I just could not do it consistently. Some days I wouldn't find any leads. Some days I'd find leads but wouldn't get around to sending anything. Some days I'd have everything ready and just miss the sending window because something else came up. It wasn't a motivation problem, it was a consistency problem. Outreach only works if you do it every single day, and I was proving to myself every week that I couldn't be trusted to do that manually.
So I thought, why not build something that just does this for me. Consistently. On time. Every day. That's the whole origin story. No bigger vision at first, just me wanting to stop being the reason my own outreach wasn't happening.
That idea became Phantom Protocol.
What I actually built
Phantom Protocol is a multi-agent system where each agent has one clear job and nothing more. A Strategist figures out the campaign approach. A Hunter goes and finds companies that match. A Researcher digs into each one and finds the right contact. An Outreacher writes a personalized email and sends it. A Reply Handler watches the inbox and figures out what a reply means. And a Learning Agent looks back every so often and adjusts the strategy based on what's actually working.
None of these agents talk to each other directly. They all read and write to MongoDB, and BullMQ handles the job queue between them. I made that decision early on and I still think it was right. It means every agent stays focused, the system can survive a restart without losing its place, and I can look at the database at any point and know exactly what stage every lead is in.
The whole thing runs on Qwen3.7 through Alibaba Cloud's DashScope API, with different model tiers depending on how much reasoning a task actually needs.
The parts that didn't go smoothly
I want to be honest about this part because I think it's more useful than pretending everything clicked into place.
My first instinct for lead discovery was to scrape directories directly, the kind of business listing sites you'd expect to have exactly the data I needed. It didn't work well. The data was inconsistent, and I kept getting noise instead of real qualified leads. I ended up moving to a proper data provider, Hunter.io, for contact finding instead of trying to build that part myself from scratch. That was a moment where I had to admit the thing I originally planned wasn't the right approach and just change direction instead of forcing it.
The bigger challenge was deployment, honestly. This was my first time deploying anything on a real VPS. No Vercel, no Render, no Railway, none of the platforms that handle the annoying parts for you. I had to actually SSH into a server, set up Nginx myself, configure everything by hand.
It did not go smoothly at first. I got the client and server both running, but I couldn't log in at all. Fixed that, and then I could log in but got redirected straight back to the login page every time I tried to reach the dashboard. Turned out to be a cookie domain issue combined with a CORS problem, since my client and server were on different subdomains and the cookie wasn't set to work across both of them. Once I added the domain field to the cookie config and fixed the CORS settings, it worked.
This was also the first time I'd used Redis and BullMQ in a real project. Learning that alongside debugging a fresh VPS deployment made for a pretty intense few days, but I came out the other side actually understanding infrastructure I'd only read about before.
The moment it actually worked
The proudest moment for me wasn't finishing a feature or hitting a milestone I'd planned. It was watching the pipeline run for real and seeing Hunter find actual leads, hand them off, and watch Researcher pull in full context on each one, correctly, with real data. Seeing that happen end to end, without me manually doing any of it, was the moment the whole idea stopped being theoretical and became something that actually worked.
Something I believe after building this
Every outreach tool I looked at while building this does one piece of the puzzle really well and leaves the rest for you to do by hand. One tool finds leads. Another one enriches them. Another one sends emails. You're still the one stitching it all together, still the one who has to remember to actually run the process every day.
That's exactly the problem I had in the first place. The tools existed. I just wasn't consistent enough to operate all of them myself, every day, without fail. So building something that closes that entire loop, discovery through reply handling through learning, felt like the only real fix. Not a better tool to operate, but something that removes the need for me to operate it at all.
What's next
Phantom Protocol is open source under AGPL v3 and fully self-hostable right now. From here I'm working on multi-channel outreach beyond email, a proper learning layer that improves campaigns automatically over time, and a managed cloud version for people who want this running without setting up their own infrastructure.
If you want to see the code or run it yourself, it's all here:
Top comments (0)