- Sticky threads. Every email to a prospect comes from the identity that sent their first touch, across plays and cadence steps. In-flight conversations never switch From address.
- Warm-up caps, per domain. A new identity ramps 10/day, +10/week, to a 50 ceiling — editable per identity on
/setup. OneShot reputation is per-domain, so every mailbox on a domain shares one ramp and budget. Gmail accounts ramp per account. - Defer, never exceed. When every identity is at cap, cadence steps stay due and queue rows stay approved until midnight. Nothing sends over cap.
- Two products, one founder, one inbox. A workspace (see Workspaces) never first-touches someone another workspace emailed in the last 7 days: the draft is held with a
contacted-elsewhereflag that you can override on a manual send, and auto paths (drain, cadence steps) wait the window out. Touches and the paid lookup caches live in one shared SQLite (~/.oneshot-gtm-shared/), so cached lookups can be reused across products. - Replies follow the pool. The inbox poll merges the OneShot inbox with every authorized Gmail account, so stop-on-reply works whichever identity sent. It walks everything since its last clean poll — a persisted watermark with an hour of overlap, paged newest-first, parking anything beyond one poll’s page budget as a backlog the next ticks drain — so a reply is delayed by an outage, never lost to it. A reply you’ve already read and archived still counts. Answering from
/inboxrecords the reply too, replies from the receiving identity, and threads on both transports — Gmail viaIn-Reply-To/References, OneShot viareply_to_email_id. Sends carry an idempotency key, so a retry after a timeout can’t double-send. - LinkedIn replies stop email too. On
/cadences, Mark LinkedIn reply records the cross-channel reply and stops every active or paused cadence for that prospect. Automation tools can call the authenticated webhook. Connection acceptance alone does nothing, message text is not retained, and an email already handed to a sender cannot be recalled. A LinkedIn reply resets breakup-revive’s cold clock just like an email reply; it does not receive fake email-play attribution.
/setup or identities add — pick a provisioned domain or type a new one to auto-provision on first send. Add a Gmail account with gmail auth (one-time OAuth; needs a Google Cloud Desktop client with the Gmail API on). Add Smartlead mailboxes with smartlead connect (paste the workspace API key, pick from your connected accounts) or from /setup — Smartlead does the warmup and hosts the inboxes; the default ramp ceiling clamps to each mailbox’s own Smartlead limit. Send-only for now: replies to Smartlead-sent mail appear in Smartlead’s inbox, not /inbox, and its bounces aren’t harvested — like OneShot identities, doctor reports them as not bounce-covered. With no pool configured, behavior is the classic single OneShot identity.
Deliverability
- Bounces. Delivery status notifications are harvested from connected Gmail mailboxes on a 30-minute sweep, parsed per RFC 3464, and classified hard / block / soft. A hard bounce stops the cadence and suppresses the address at both draft and send time; a
5.7.xpolicy block never suppresses, being a verdict on the message rather than the mailbox.doctorreports a per-identity rate — warn above 2%, fail above 5%, 20-send minimum. Gmail-only for now. - Inbox placement.
gmail placementsends one real message between two authorized mailboxes and reads back where the receiving account filed it, plus the SPF/DKIM/DMARC verdicts that server recorded — a verdict on the real send path, needing no DNS tooling. It’s never run automatically, since repeated canaries train the seed mailbox’s filter.