We open sourced the whole backend of a product we also sell hosted.
The reason is not generosity. A sales tool holds your prospect list and every email you sent. If you cannot take that data and leave, you will not trust the tool with it. Self-host is the exit door.
If you run a Claude Code routine in the cloud, read the allowed domain list before you build on an API.
Ours posts to X every day. Text works. Images failed, because media upload uses a different host than the rest of the API. Same product, two domains. Only one was allowed.
932 cold emails from our own product since June. 6 replies from a human.
1 interested, 4 a clear no, 1 unsubscribe. 0 meetings and 0 customers.
The first 62 in July got 1 reply, which is 1.6%. Then it went flat. Bounce rate across the whole set was 10.6%.
We put LeadAce on r/selfhosted today.
The self-host edition runs on your own Cloudflare workers and Supabase, and sends from your own Gmail. Apache 2.0 with two changes. About $5 a month to run.
Questions and criticism are welcome in the thread.
Claude Code 2.1.248 added a restricted mode.
CLAUDE_CODE_RESTRICTED=1 removes the built-in tools that run commands or code, and keeps file tools inside your working directory.
We ship a plugin that sends email from your Gmail. This is the flag people will ask us about.
@svanski_ Agreed. Judgment and continuity are definitely why $500/mo tools are valuable.
We are testing if some teams just want to make the first email better, without paying for a full AI SDR.
We priced LeadAce at $29 / $79 / $199 a month.
Sequencers sit at $29. "AI SDR" tools start at $500. Nobody tested the gap between them with a product that writes one email per company. Maybe there is no market there. That is what we are finding out.
Reply lag in our outbound data: 5 to 12 days from send to reply.
So any deliverability fix takes two weeks to show up. We fixed ours on August 13. The first real read is around now. I will post it either way.
A 2% reply rate on 10,000 sends and a 15% reply rate on 200 sends give the same 200 replies.
The first one used up 9,800 companies' patience to get there. Reply rate is not the metric. Replies per company you can never email again is.
Our product has a detector that estimates "this outbound setup is dead" from the reply rate over 90 days. It warns at 0.99.
Last check: 0.979. So LeadAce is about to tell me that my own outbound is not working. I am going to let it.
I’m thinking about banning Claude code at Shopify until they change their mind and read AGENTS.md and .agents/skills etc.
Insisting on only reading CLAUDE.md sometimes leads to split brain problems when different team members use different tools. Just unnecessary.
We changed the email signature from "Leo's agent @ LeadAce" to "Leo Uno".
I wanted to disclose that an agent wrote it. For now I did not, because I review the strategy and the email is from me. Not sure this is the right call. May go back.
@tobi In our repo AGENTS. md is a symlink to CLAUDE. md. The bigger problem for us was length. A long CLAUDE. md went stale in a week and the agent trusted it over the code. Short rules that do not change held up.
@VibeMarketer_ We do the correction part with sales rejections. Every no gets one reason: budget, timing, wrong buyer, or missing feature. The reason goes to the target list, not to the email. After about 900 emails, the reasons showed the list was wrong, not the copy.
Claude Code tip we learned the hard way: a plugin that can send email needs a "notify the user" path that is not the same tool.
We replaced send_email with notify_user. One destination, set in the dashboard, 100 per day cap. The plugin cannot change where it goes.
16 out of 16 direct sends pass DMARC alignment after the fix.
But 15 of 33 forwarded copies fail on the same day. info@ that forwards to a founder's Gmail breaks the DKIM signature, and the sender cannot do anything about it.
Claude Code plugin tip: put the MCP server in the plugin, not next to it.
Our plugin ships its own MCP server, so /leadace works right after install. No separate config, no env vars. The user runs one command and something useful happens before they read any docs.