Ghost Setter

Control Live

An AI setter that answers a coach's Instagram DMs in his own voice, qualifies the lead, books the call, and hands him a brief before he picks up the phone.

8 Sep 2026 · 00:11 CDT
engine ghost-setter-production.up.railway.app
coach 01 nick-test · live on Instagram
01

Where it stands tonight

Everything below is measured, not estimated, unless it says otherwise.

Engine
Live
Running on Railway, off the laptop. The Cloudflare tunnel is dead and nothing depends on your Mac being awake.
Test suite
209
All passing. Every guardrail, the booking flow, phone capture and the follow-up ladder are covered.
Voice pack
31k chars
616 real DM messages from 21 lead threads, plus the 41 replies you wrote in practice mode.
Cost per conversation
$0.09–$0.94
A real range, not an average. Depends entirely on prompt-cache hits — see section 06.
02

What is built and working

Each of these has been run end to end against the live system, not just unit tested.

Done
Voice
Trained on your real DM export and your practice replies. No em dashes, lowercase, your actual phrasings — "make the boxes for you to check", "bruh", "homie". Sanitised on the way out so a slip can't reach a lead.
Engine
Done
Triage
Decides whether a DM is even a lead. On a real inbox most are not — friends, existing clients, spam. Catches 18 of 21 real leads with 10 false positives across 135 threads.
Engine
Done
Guardrails
Distress, medical, bot-disclosure and price. They run before the model, because a guardrail that depends on the model behaving is not a guardrail. Validated against 2,317 real lead messages: zero false alarms.
Engine
Done
Booking
One message carrying the day, the time block and a named backup day, all read off your live calendar. Exact times only after they say yes. Honours your Tue/Thu consult windows and the peak-week blackout.
Engine
Done
Phone capture
Asks for a number the moment the call is booked, transcribes it with a regex rather than a model, writes it onto the calendar entry. The lead is never added as an attendee.
Engine
Done
The brief
Who they are, what's actually in the way, their own words, and a read on what will close them. Lands in Discord and on the calendar entry off a single model call.
Engine
Done
Follow-up ladder
8 hours, then 12. Written against the real conversation, never "just following up". Rung two lands inside Instagram's 24-hour window, which is why it is 12 hours and not 24.
ManyChat
Done
Off switches
Three: reply in Instagram yourself, hit Pause in ManyChat, or tag them AI Off. The tag is durable and pings you whenever a tagged person messages.
Both
03

What is left before full launch

Ordered by what bites first. "Full launch" means coach 02 can be onboarded without you or me hand-holding it.

Blocker
Railway billing
The trial is "30 days or $5.00". An always-on service is roughly $5/month, so the trial covers days. When it lapses the service stops and DMs go unanswered silently — exactly the failure we just engineered away.
You · 2 min
Blocker
Google verification
The OAuth consent screen is Internal, which only works for your own Google account. Coach 02 cannot connect a calendar until it is External and verified. This is the longest pole — Google takes weeks, so it should be started before anything else on this list.
You · weeks
Waiting
Your real account goes live
Right now nick is draft_only and has no calendar connected. The agent is live on the test tenant only. Flipping this is one OAuth click and one word — but do it deliberately, not by accident.
You · 5 min
Waiting
Message-loss check
A real lead asked "are you a bot" yesterday and the engine has no record of it. Most likely the tunnel was down at that moment. Railway should have fixed the cause, but it needs a week of clean logs to confirm nothing is being dropped.
Me · 1 week
Waiting
Crash visibility
If Railway restarts at 3am, nothing tells you. A startup ping to Discord closes it. Small, and it is the difference between noticing in minutes and noticing in a day.
Me · tonight
Waiting
More practice reps
Your 41 replies visibly moved the voice. Three scenarios are still thin: shopping_around, evasive, shift_worker — one or two replies each.
You · 20 min
Waiting
Pre-call sequence
Between booking and the call there is nothing. A reminder the morning of, and a nudge an hour before, is the cheapest show-rate improvement available.
Me · half a day
04

How it got here

Two days, start to live.

6 Sep
The corpus
Instagram DM export mined. First pass read the whole inbox; the correction — "not all of those messages are to leads" — produced a classifier that pulled out 21 genuine lead threads and 616 of your messages.
7 Sep · morning
Plumbing
FastAPI engine, Supabase Postgres, Claude Opus 5, Discord briefs. ManyChat wired to Instagram — the block type, the response shape and the contact-data chip each cost hours before they worked.
7 Sep · afternoon
First real conversations
Live on the test account. Guardrails, triage, calendar booking and the disqualify state. Practice mode built so you could correct it directly, which produced the 41 replies now in the voice pack.
7 Sep · night
The sales flow got real
Call ask rewritten to one message with a named backup day. Phone capture after booking. Price policy settled from your own transcript: deflect once, hand over on the second push. Follow-up ladder built in ManyChat.
8 Sep · 00:00
Off the laptop
GitHub, then Railway. The Supabase direct host turned out to be IPv6-only and Railway has no IPv6 egress — the fix was the connection pooler. Three ManyChat nodes repointed, Google callback added, tunnel killed.
Next
Coach 02
Gated on Google verification, not on engineering. The onboarding below is what that coach will actually walk through.
05

Onboarding a coach

The current process, honestly described — including the parts that are still manual. Anything marked Manual is work you or I do by hand today and is a candidate for automation before coach 03.
Open the step-by-step runbook → — same steps, with the exact commands, links and a checklist that remembers where you got to.

Discovery call and voice export

They download their Instagram data export and send it over. This is the single highest-leverage input — a mediocre model with real DMs beats the best model without them. Nothing else substitutes.

Coach · 20 min · export takes Instagram up to 48h to produce

Mine the voice pack

Classify threads into leads vs friends vs clients, pull the coach's own messages, build the pack. Their existing clients' names go in so the triage gate never pitches someone who already pays them.

Automated script · Manual review

Profile

One YAML file: timezone, consult windows, blackout dates, quiet hours, price policy, disclosure policy, how many follow-ups. Copying an existing coach and editing it takes about ten minutes.

Manual · 10 min

Connect Google Calendar

One OAuth click from the coach. Their refresh token is encrypted before it is stored. This is the step blocked on Google verification — until the consent screen is External and approved, only your own account can do it.

Coach · 1 min · Blocked

Connect ManyChat and Instagram

They connect their Instagram to ManyChat, then the flow is built: trigger, smart delay, three dynamic blocks pointed at their webhook with their own secret. About twenty minutes of clicking.

Manual · 20 min · automatable via ManyChat templates

Practice mode

They sit with the training page and reply to simulated leads across twelve scenarios. Anything in parentheses is read as a correction. Forty replies is roughly the point where the voice stops sounding generic.

Coach · 30–45 min · the step that decides quality

Draft mode shadowing

The agent runs on their real DMs but sends nothing — every reply is stored as a draft and posted to Discord. They read a week of what it would have said before it says anything to a real person.

1 week · the trust-building step, and the one worth charging for

Go live

Flip send_mode to live. Discord pings on every halt, disqualify and booking. Three ways to switch it off per person on day one.

30 seconds · reversible in 30 seconds

The honest read on onboarding today: roughly two hours of coach time spread over a week, plus about an hour of mine. Three steps are hand-built — the profile, the ManyChat flow and the voice-pack review.

For a $2,000/month product that is acceptable at coach 02 and 03, and becomes the bottleneck at coach 10. The ManyChat flow is the first thing to templatise, because it is the most error-prone and the least interesting.

06

What it costs to run

Measured from 74 real agent replies. Rates are Claude Opus 5, checked against the pricing page today.

LineMeasuredPer replyPer 10-reply conversation
Cached prompt, cache hit14,763 tokens$0.0074$0.09
Cached prompt, cache miss14,763 tokens rewritten$0.0923$0.92
Uncached input128 tokens avg$0.0006$0.01
Output51 tokens avg$0.0013$0.01
Realistic totalmixed hit rate$0.01–$0.09$0.09–$0.94

Where those 14,763 tokens actually go, since the obvious instinct is to trim the prompt:

BlockCharsShare of prompt
Voice pack — mined DMs plus your practice replies30,95173%
Script — how you sell, and the booking tokens6,19615%
Operating rules and corrections4,83511%
Guardrail text5441%

There is no free win in trimming it. The voice pack is three quarters of the prompt, and it is the part that makes the agent sound like you rather than like a chatbot. The only obvious fat is the simulated lead messages inside the practice transcripts — 24% of that file, about 8% of the whole prompt — and cutting them would leave your replies without the questions that provoked them, which teaches phrasing but not judgement.

So the lever is not prompt size. It is cache hits.

The thing worth knowing: the prompt cache lives five minutes. When a lead replies inside that window the reply costs about a cent. When they reply forty minutes later the whole 14,763-token prompt is rewritten and the reply costs about nine cents — ten times more.

Measured hit rate so far is 89%, but that number is not trustworthy: almost all of it came from test conversations where messages arrived seconds apart. Real leads do not reply that fast. Until there is a week of genuine traffic, plan on the pessimistic end.

There is also a trap in it. A cache write costs 1.25× normal input. Below a ~22% hit rate, caching costs more than not caching at all. Worth measuring properly before optimising, and worth knowing that adding your 41 practice replies nearly doubled the cached prompt — 8,026 tokens to 14,763 — which roughly doubled the worst case.

07

The product that justifies $2,000 a month

Everything in this section is unbuilt. It is a direction, with an honest note on what each piece actually costs to build and what it is worth.

Coach console Next

The first thing worth building, because it replaces you reading Discord. Live threads, briefs, drafts awaiting approval, booked calls, and the off switches — in one place a coach can open on a phone.

  • Pipeline: who is warm, who went quiet, who booked
  • Every brief, searchable
  • Approve or edit drafts while in draft mode

Revenue and ROI Needs Stripe

The cards you described — revenue, ad spend, ROI, cost per booked call, cost per close. This is the number that makes $2,000 obviously cheap, so it should be the loudest thing on the page.

  • Stripe for revenue and active subscriptions
  • Meta for spend, joined on the lead
  • Honest attribution: DM-sourced vs ad-sourced

Ads insight Needs Meta API

Which creative actually produces booked calls, not which produces cheap clicks. The engine already knows which leads booked, so joining that back to the ad that sourced them is the differentiator no dashboard in this space has.

  • Spend, CPM, CPC, hook rate per creative
  • Cost per booked call, the metric that matters
  • Flag creatives that fatigue before the coach feels it

Content and script help Later

Ad copy and script suggestions grounded in what actually converted for this coach — their own winning hooks and the objections their real leads raise, not generic copywriting.

  • Objections ranked by how often they kill threads
  • Hooks derived from openers that led to bookings
  • Post ideas from questions leads keep asking

A caution on sequencing. The ads and Stripe integrations are the exciting part and the wrong thing to build first. They need real volume before they say anything true — a ROI card computed from four closes is noise presented as insight.

The console is different: it is useful on day one with a single coach, and it is what removes you from the loop. Build that, get coach 02 and 03 running through it, and let the data accumulate until the ROI numbers mean something.