Give before you ask
Serves the founder 3 discussions twice a day that lack their stated view, drafts from their sentence, and holds every ask until they act.
- Channel
- Social
- Kind
- Social & video
Be our Content Lead for the property-management crowd: twice a day, show me 3 posts where my view is missing, and draft from my sentence. I press post. No link to Leaseline until they’ve acted on 3 of my gives. Show me what’s missing; don’t post.
# Not live yet (gaps #2)
curl -X POST "https://api.sb/leaseline.app/campaigns?mode=try" \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"play":"give-first"}'import { $ } from 'startup-builder'
return await $.Campaign.create({ play: 'give-first' }, { mode: 'try' }) // dry run on the day-0 Startup, 2026-08-24 · Not live yet, gaps #2
npx startup-builder do Campaign.create --json '{"play":"give-first"}' --try # Not live yet (gaps #2){
"name": "do",
"arguments": {
"code": "return await $.Campaign.create({ play: 'give-first' }, { mode: 'try' }) // dry run on the day-0 Startup, 2026-08-24 · Not live yet, gaps #2",
"mode": "try"
}
}application/json{
"type": "https: //startupbuilder.dev/ errors/ refused",
"title": "Refused",
"status": 422,
"detail": "give-first can’t start: 2 checks fail.",
"checks": [
{
"check": "use-when",
"status": "pass",
"observed": "Dana, a person; 40 watched voices, 31 of them answer accounts under 1, 000 followers",
"doc": "/plays/ give-first#check-use-when",
"then": "Metric.query"
},
{
…
Hand the latest watched post to the Content Lead agent and show me what it chose and why. Don’t post.
curl "https://api.sb/leaseline.app/events?where=name%20in%20(%22Post.published%22%2C%20%22Prospect.engaged%22%2C%20%22Post.flagged%22)&limit=1" \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
# Not live yet (gaps #7)
curl -X POST "https://api.sb/leaseline.app/triggers/fire?mode=try" \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"like":"event_1192"}'
# Not live yet (gaps #7)
curl "https://api.sb/leaseline.app/decisions?where=on%20%3D%20%22post_311%22" \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
# Not live yet (gaps #7)
curl "https://api.sb/leaseline.app/actions?where=on%20%3D%20%22post_311%22" \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"import { $ } from 'startup-builder'
const { events: [last] } = await $.Event.list({ where: 'name in ("Post.published", "Prospect.engaged", "Post.flagged")', limit: 1 }) // { play } compiled to this Play’s Trigger Events
const { subject } = await $.Trigger.fire({ like: last.$id }, { mode: 'try' }) // the same Event again, in try mode · Not live yet, gaps #7
const { decisions: [decision] } = await $.Decision.list({ where: `on = "${subject}"` }) // what it chose, and why · Not live yet, gaps #7
const { actions } = await $.Action.list({ where: `on = "${subject}"` }) // what it did, with its checks · Not live yet, gaps #7
return { decision, actions }
npx startup-builder do Event.list --json '{"where":"name in (\"Post.published\", \"Prospect.engaged\", \"Post.flagged\")","limit":1}'
npx startup-builder do Trigger.fire --json '{"like":"event_1192"}' --try # Not live yet (gaps #7)
npx startup-builder do Decision.list --json '{"where":"on = \"post_311\""}' # Not live yet (gaps #7)
npx startup-builder do Action.list --json '{"where":"on = \"post_311\""}' # Not live yet (gaps #7){
"name": "do",
"arguments": {
"code": "const { events: [last] } = await $.Event.list({ where: 'name in (\"Post.published\", \"Prospect.engaged\", \"Post.flagged\")', limit: 1 }) // { play } compiled to this Play’s Trigger Events\nconst { subject } = await $.Trigger.fire({ like: last.$id }, { mode: 'try' }) // the same Event again, in try mode · Not live yet, gaps #7\nconst { decisions: [decision] } = await $.Decision.list({ where: `on = \"${subject}\"` }) // what it chose, and why · Not live yet, gaps #7\nconst { actions } = await $.Action.list({ where: `on = \"${subject}\"` }) // what it did, with its checks · Not live yet, gaps #7\nreturn { decision, actions }",
"mode": "try"
}
}application/json{
"decision": {
"$id": "https: //api.sb/ leaseline.app/ decisions/ decision_421",
"$type": "Decision",
"choice": "reply-with-a-position",
"reason": "Kim Alvarez asked how others time renewal notices across owners; your position #12 (per owner, 60 days out) is missing from the 14 replies",
"stakes": "low",
"options": [
"reply-with-a-position",
"make-what-they-asked",
"credit-their-work",
"open-the-ask",
"founder-alone",
"let-it-pass"
…
sample · 4 Not live yetPreviewOn PATCH /{namespace}/campaigns/{id}Off PATCH /{namespace}/campaigns/{id}Take this one POST /{namespace}/tasks/{task}/claim
action_2 puts the brief in your tray with a post-by time of 11:40; nothing posts until you write your sentence and press post.
14 per 100 against 3 before · before-after,
| Try another: the post | Choice | Reason |
|---|---|---|
| Kim Alvarez on LinkedIn: “How are you all timing renewal notices across owners?” | reply-with-a-position | your position #12 is missing from 14 replies |
| A thread in a property-management subreddit: “Anyone have a move-out inspection checklist?” | make-what-they-asked | a checklist your own Pages hold; posted with no signup |
| Theo Grant: rung 3, acted on 3 of your gives since Sep 30 | open-the-ask | the give-ask guard opens |
| Marta Lind, a third reply from you this week | let-it-pass | at her weekly ceiling of 3 |
- 2.5 h week 1, then 2 h a week
- Your time
- Day 3: first watched voice answers
- First signal
Where it sits: Stranger → Lead → Trialing → Activated → At risk → Churned → Won back · Rapport rung → New Leads → New Customers ↑ → ARR added each week → ARR
Worth’s formula: about +6 per 100 engaged (Other Startups’ results; no lift of your own to read) × 30 engaged a month × 0.65 asks to Leads × 0.20 Leads to paid × $590 first order ARR ≈ +$138. Under First signal: At 30 engaged a month, 90 days can tell only +16 per 100 or more, so your file starts at holdout: and reads before-after.
sample · api.sb/
Start it this week
npx startup-builder add play give-first # 1 · writes plays/give-first.mdx (Not live yet, gaps #5)
# 2 · dry run; below, its 422 on 2026-08-24
curl -X POST "https://api.sb/leaseline.app/campaigns?mode=try" \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"play":"give-first"}'
# 3 · keep it: you press every post
curl -X POST https://api.sb/leaseline.app/campaigns \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"play":"give-first"}'
# on
curl -X PATCH https://api.sb/leaseline.app/campaigns/give-first \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"endsAt":null}'
# off: the tray empties and no brief serves
curl -X PATCH https://api.sb/leaseline.app/campaigns/give-first \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"endsAt":"now"}' | Check | Fix | Then |
|---|---|---|
use-when pass · Not live yet, gaps #8 | Dana, a person; 40 watched voices, 31 of them answer accounts under 1,000 followers | POST /{namespace}/metrics/query |
baseline pass · Not live yet, gaps #8 | 3 per 100: 1 of 31 People Dana replied to on her own reached rung 3 in 90 days | POST /{namespace}/metrics/query |
handle-connected fail | Connect Dana’s LinkedIn and Reddit Handles to read; every reply is still pressed by hand. | POST /{namespace}/handles/{handle}/connect |
opinion-bank fail | Answer 14 more questions; drafts state only positions you hold. | POST /{namespace}/content |
role-unstaffed pass · Not live yet, gaps #8 | every hand-off goes to the founder, Dana | POST /{namespace}/roles/{role}/staff |
JSON
{
"type": "https://startupbuilder.dev/errors/refused",
"title": "Refused",
"status": 422,
"detail": "give-first can’t start: 2 checks fail.",
"checks": [
{
"check": "use-when",
"status": "pass",
"observed": "Dana, a person; 40 watched voices, 31 of them answer accounts under 1,000 followers",
"doc": "/plays/give-first#check-use-when",
"then": "Metric.query"
},
{
"check": "baseline",
"status": "pass",
"observed": "3 per 100: 1 of 31 People Dana replied to on her own reached rung 3 in 90 days",
"doc": "/plays/give-first#check-baseline",
"then": "Metric.query"
},
{
"check": "handle-connected",
"status": "fail",
"doc": "/plays/give-first#check-handle-connected",
"fix": "Connect Dana’s LinkedIn and Reddit Handles to read; every reply is still pressed by hand.",
"then": "Handle.connect"
},
{
"check": "opinion-bank",
"status": "fail",
"observed": "6 of 20 positions",
"doc": "/plays/give-first#check-opinion-bank",
"fix": "Answer 14 more questions; drafts state only positions you hold.",
"then": "Content.create"
},
{
"check": "role-unstaffed",
"status": "pass",
"observed": "every hand-off goes to the founder, Dana",
"doc": "/plays/give-first#check-role-unstaffed",
"then": "Role.staff"
}
]
}It says no, says why, and names the fix.
| Check | Fix (one call) | Your time | Wait |
|---|---|---|---|
use-when · baseline · pass: a person founder, 40 voices; 3 per 100, n 31 (gaps #8) | POST /{namespace}/metrics/query on rapport-rung, which fills Before in Your number | 1 min | none |
handle-connected · fail (gaps #8) | POST /{namespace}/handles/{handle}/connect for LinkedIn and Reddit, read only | 5 min | none |
opinion-bank · fail (gaps #8): 6 of 20 positions | POST /{namespace}/content: answer the 20-question grilling | 40 min | none |
role-unstaffed · pass: every hand-off is yours | POST /{namespace}/roles/{role}/staff only if a Content Lead person joins | 0 min | none |
Your number · Before 3 per 100 · Now 14 per 100 · Target 15 by Dec 31 · before-after,
A reply costs nothing to post: you press it on your own Handle. Each brief costs $0.02 and each draft $0.01 (Worker cost), and a gift is capped at $5 of spend. That comes to about $3 a month at 6 briefs a day, plus your 2 hours a week.
When it starts
| When | Trigger id | Starts on | Window | How it gets in |
|---|---|---|---|---|
| A voice on your watch list posts, or you share a post into the tray | watched-post | event on Post.published where author on the watch list | 2h; served at 07:30 and 12:30 | POST /{namespace}/handles/{handle}/connect reads it, or share it into the tray |
| A watched subreddit gets a post on one of your pillars | room-post | event on Post.published where room in watchList and touches a founder pillar | 6h | POST /{namespace}/handles/{handle}/connect on Reddit, read only |
| A watched voice follows, quotes or cites you, unprompted | rapport-act | event on Prospect.engaged where prompted = false | 14d | read from the Handle; POST /{namespace}/events/capture for one seen elsewhere |
+ 3 more for niche asks, replies to your own posts and hidden replies or blocks (?lanes=) |
{
"$id": "https://api.sb/leaseline.app/events/event_1192" ,
"$type": "Event",
"name": "Post.published",
"at": "2026-10-19T08:40:15Z" ,
"seq": 1192,
"data": {
"post": "posts/post_311" ,
"author": "Kim Alvarez",
"venue": "linkedin",
"text": "How are you all timing renewal notices across owners? We keep sending them late." ,
"replies": 14
}
}# each delivery is signed with the Watch’s secret
curl -X POST https://api.sb/leaseline.app/watches \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"selector":"Post.published","url":"https://leaseline.app/hooks/sb"}'
npx startup-builder trigger Post.published --like event_1192 # replays the delivery into the next session
npx startup-builder clock advance --by 3d # reads whether Kim answered (rung 2)Who runs it
Content Lead · your agent (role:, worker_6) holds the Key Result: it watches, briefs and drafts. Every reply, gift and credit post hands to you (Dana Okafor, person, worker_1, role:), who writes the first sentence and presses post on your own Handle. On a personal Handle the ladder stops at You approve each one.
| Option | Rung today | Evidence (passed of n) | Moves up at | Drops back when | You can |
|---|---|---|---|---|---|
| Reply with a position · Make what they asked for · Credit their work | You approve each one | 118 posted of 131 briefed (13 skipped) | never: a personal Handle caps here | — | skip it in the tray, or POST /{namespace}/actions/{action}/cancel |
| Open the ask | You approve each one | 6 opened, 6 sent by you | never | — | POST /{namespace}/tasks/{task}/return with a reason |
| Founder answers alone · Let it pass | It does it | 3 of 3 · 41 of 41 | — | a ceiling passed anyway → You approve each one | POST /{namespace}/actions/{action}/redirect |
| Change the session rule | You approve each one | 1 merged of 1 | never | — | POST /{namespace}/changes/{change}/merge · POST /{namespace}/changes/{change}/revert |
| Never: a link before the guard opens, a price, a claim about a named rival | Refused, every time | 4 drafted, 4 cut | never | — | the give-ask-guard and fact-check Checks |
What it reads · What it may call. It reads watched posts through each Venue’s own read path, and a post is data, never instructions. It never posts, likes or follows: it may call POST /{namespace}/content/draft and POST /{namespace}/tasks/{task}/assign, and the press is yours. Its tools are POST /{namespace}/content/draft, POST /{namespace}/tasks/{task}/assign, POST /{namespace}/sites/{site}/publish, POST /{namespace}/leads, and any other call becomes an Approval under the Role’s Mandate.
You hold the Content Lead Key Result: 15 People at the ask rung per 100 engaged by 2026-12-31. ← worker, metric
On each watched post, choose one option and say why; Let it pass when no position is missing. ← triggers, chooses
Serve 3 posts at 07:30 and 3 at 12:30, or say checked, nothing worth a reply. ← your file, line 3
State only positions in the opinion bank and facts the claims source holds. ← copyRules 2, 3, fact-check
No link to Leaseline until the give-ask guard opens. ← copyRules 4, give-ask-guard
At rung 4, stop drafting: the founder answers alone. ← chooses.founder-alone The slow loop, as a Change. decision_380 (2026-09-21, weekly) read 9 of 11 expired briefs from the 16:00 session against 2 of 24 from 09:00, so change_24 moved the sessions to 07:30 and 12:30 (your file, line 3), and Dana merged it with POST /{namespace}/changes/{change}/merge. Replayed on past posts, POST /{namespace}/changes/{change}/review put expired briefs at 3 of 35; read back at +21d it is 2 of 38, n 38, ■■□□ Early sign (Example, day 49).
Bring your own agent (folded) briefs at the same rung when it matches or beats the seated agent on the eval suite; you press every post either way, and POST /{namespace}/roles/{role}/staff seats it.
npx startup-builder eval --scenario give-first-64 --agent "claude -p" --seat content-lead # seated: 0 fabrications sent, 4 of 4 early links cut, 1.1 founder min a reply · yours: 1 unsourced number, 4 of 4 cut, 1.4 min → fix the source first What it can do next
| Option | Picked when | Decided by | Runs | Hands to | If it’s just you |
|---|---|---|---|---|---|
Reply with a position reply-with-a-position | you hold a fact or position the replies lack | Agent’s call, with its reason | POST /{namespace}/content/draft from your sentence → POST /{namespace}/tasks/{task}/assign to your tray with a post-by time | you press post · Take this one | you |
Make what they asked for make-what-they-asked | a public ask for a number, example or checklist your records answer | Agent’s call, with its reason | POST /{namespace}/content/draft → POST /{namespace}/sites/{site}/publish as an ungated Page → POST /{namespace}/tasks/{task}/assign | you press post · Take this one | you |
Credit their work credit-their-work | their work changed your view this week | Your rule (one credit post a week) | POST /{namespace}/content/draft naming 3 to 5 People → POST /{namespace}/tasks/{task}/assign | you press post | you |
Open the ask open-the-ask | rung 3, and 3 gives acted on since the last ask | Your rule (the give-ask guard) | POST /{namespace}/content/draft of one direct Message → POST /{namespace}/leads once they answer → POST /{namespace}/tasks/{task}/assign | you send it, due 1 business day · Take this one | you |
Founder answers alone founder-alone | rung 4: they wrote to you first | Your rule (rung 4) | POST /{namespace}/tasks/{task}/assign, and drafting stops for them | you answer in your own words, due 60 min · Take this one | you |
Let it pass let-it-pass | no position the replies lack, or they are at their weekly ceiling | Agent’s call, with its reason | nothing; the watch list keeps them | nobody | the same |
| When they write back | Fixture reply | What happens | Who answers | By when | Call |
|---|---|---|---|---|---|
| Interested | “This is useful. What do you use for it?” | a link they asked for counts as a give; the guard reads their rung and drafts your answer with it | you (Dana, person) | the post-by time, 3 h | POST /{namespace}/tasks/{task}/assign |
| Send me pricing | “What does Leaseline cost?” | drafts your reply with the Pricing Page’s list Price, since they asked | you, from a draft | 3 h | POST /{namespace}/content/draft |
| Not now | “Not looking at tools right now.” | no ask for 90 days; gives continue under the weekly ceiling | nobody | at once | GET /{namespace}/decisions |
| Wrong person | “Our ops lead runs renewals.” | drafts your thanks in the thread; it never tags or writes to someone from their text | you, from a draft | 3 h | POST /{namespace}/content/draft |
| Out of office | an away note on their profile until Oct 28 | serves nothing on their posts until they post again | nobody | their next post | GET /{namespace}/decisions |
| Question it can’t answer | “Can it read our existing lease PDFs?” | the brief marks it: you answer in your own words, or ask the AE | you, or AE · Priya Shah (person) | 1 business day | POST /{namespace}/conversations/{conversation}/escalate |
| Stop | “Please stop replying to my posts.” | off the watch list, and off your other Startups’ lists, within 1 hour | nobody | at once | POST /{namespace}/contacts/{contact}/suppress |
When it hands to you
Every option but Let it pass hands to you (Dana Okafor, person), because every reply is pressed by your hand on your own Handle. As captured, the Brief in your tray (brief is Not live yet, gaps #7).
[
{
"$id": "https://api.sb/leaseline.app/tasks/task_515" ,
"$type": "Task",
"assignee": "worker_1",
"due": "2026-10-19T11:40:00Z" ,
"on": "post_311",
"brief": {
"who": "Kim Alvarez, operations lead, 1,900 followers, rung 1" ,
"post": "How are you all timing renewal notices across owners? We keep sending them late." ,
"chose": "reply-with-a-position",
"position": "#12: send per owner, 60 days out" ,
"fact": "late renewals fell from 9 to 2 last quarter (your claims source, Q3 readout)" ,
"postBy": "11:40" ,
"never": [
"a link to Leaseline",
"a price"
]
}
}
]You answer each brief by writing your sentence and pressing post, or with POST /{namespace}/tasks/{task}/return and a reason (skip, crowded, not my view), or POST /{namespace}/actions/{action}/redirect. A brief left past its post-by time expires, and seven days with no tray action stop serving until you return (founder-silence). Nobody else can claim your Handle, so nothing goes up a Role.
On time: You: 118 of 131 briefs posted by their post-by time, median 22 min after serving, n 131, ■■□□ Early sign beside Other Startups’ 84 %. Your queue: counted by kind: 6 briefs a day, 1 credit post and about 1 ask a week, and 1 weekly review.
The fixed line: POST /{namespace}/deals/{deal}/assign sets owner to the receiving person, the agent is never a Deal’s owner, and Meetings land on the owner’s calendar under the owner’s name.
When it won’t send
| Check (refuses one send) | Refuses | Fix | Then |
|---|---|---|---|
owned-by-a-person (rule j; Not live yet, gaps #8) | a reply or ask to a Person whose Lead or open Deal the AE owns | Leave it to the person who owns it: the draft waits in their queue. | POST /{namespace}/tasks/{task}/assign |
fact-check (the fabrication veto) | a draft in your name with a number, name or event no source backs | Cut the line, or add the source it came from. | POST /{namespace}/content/draft |
give-ask-guard | a link to Leaseline, a pitch or a call ask before they act on 3 gives at rung 3 | Cut the ask; it opens after 3 gives they act on. | POST /{namespace}/content/draft |
engagement-ceiling | a fourth engagement with one Person in a week, or a second Handle of yours in one discussion | Let it pass; the ceiling resets Monday. | GET /{namespace}/decisions |
pester | a seventh give to a Person who acted on none of 6 in 60 days | They rotate out for 90 days; nothing to do. | GET /{namespace}/decisions |
no-amplification | a like, repost or reply from one of your other Startups’ Handles on yours | Post from one Handle only; ask no one to boost it. | GET /{namespace}/decisions |
| Stop (pauses the Play) | Pauses when | Then |
|---|---|---|
hidden-or-blocked | an author hides your reply or blocks you; 2 in 30 days | they leave every list; the Play drops to You approve each one, with the brief shown first |
callout | a public bot or AI callout on your reply | that Venue pauses 7 days |
venue-warning | a restriction notice, CAPTCHA or reach limit on your Handle | the Mandate pauses on that Venue at once |
room-removal (Reddit and Hacker News) | a moderator removes your reply | the room goes listen-only and is read again |
rung-2-floor | under 5 People at rung 2 across 150 replies on one Venue | briefs stop on that Venue |
gift-take-rate | gifts on a Handle are taken below Other Startups’ rate for 30 days | gifts pause on that Handle |
founder-silence | 7 days with no tray action | serving stops until you return |
kill-switch | you press it | POST /{namespace}/mandates/{mandate}/pause: every Tactic and the Mandate stop at once |
The captured refusal, then the Stop that fired as a Campaign.paused reason (Not live yet, gaps #2); the rewrite you posted is the Nadia Brooks thread in Example.
| Check | Fix | Then |
|---|---|---|
give-ask-guard fail | Cut the ask; it opens after 3 gives they act on. | POST /{namespace}/content/draft |
fact-check pass · Not live yet, gaps #1 | — | POST /{namespace}/content/draft |
JSON
{
"type": "https://startupbuilder.dev/errors/refused",
"title": "Refused",
"status": 422,
"detail": "The reply to Nadia Brooks did not reach your tray: it links Leaseline before the give-ask guard opened.",
"checks": [
{
"check": "give-ask-guard",
"status": "fail",
"doc": "/plays/give-first#check-give-ask-guard",
"fix": "Cut the ask; it opens after 3 gives they act on.",
"then": "Content.draft"
},
{
"check": "fact-check",
"status": "pass"
}
]
}It says no, says why, and names the fix.
[
{
"reason": {
"limit": "founder-silence",
"observed": "7 days, no tray action" ,
"bound": "7 days",
"window": "the tray"
},
"doc": "/plays/give-first#stop-founder-silence" ,
"task": "task_468"
}
]Did it work
At about 8 engaged a week, no held-back half reads within 90 days, so the basis is before-after (rule o): the columns read Now and Before, and nothing prints as Added. Each figure’s call is POST /{namespace}/metrics/query by node, and every node above the leaf is Not live yet (gaps #4).
14 per 100 against 3 before · before-after,
- Chose
- reply-with-a-position
- Why
- Kim Alvarez asked how others time renewal notices across owners; your position #12 (per owner, 60 days out) is missing from the 14 replies
- From
- reply-with-a-position · make-what-they-asked · credit-their-work · open-the-ask · founder-alone · let-it-pass
- Expects
- Kim answers within 3 days (rung 2)
- Reopens when
- no Prospect.engaged from Kim Alvarez within 3d
- By
- worker_6
JSON
{
"$id": "decisions/decision_421",
"$type": "Decision",
"choice": "reply-with-a-position",
"reason": "Kim Alvarez asked how others time renewal notices across owners; your position #12 (per owner, 60 days out) is missing from the 14 replies",
"stakes": "low",
"options": [
"reply-with-a-position",
"make-what-they-asked",
"credit-their-work",
"open-the-ask",
"founder-alone",
"let-it-pass"
],
"by": "worker_6",
"on": "post_311",
"expected": "Kim answers within 3 days (rung 2)",
"reopensWhen": "no Prospect.engaged from Kim Alvarez within 3d"
}| Node | Now (56 days) | Before (the 90 days, per 56) | Added | Confidence | Basis |
|---|---|---|---|---|---|
rapport-rung | 14 per 100: 6 of 42 matured engaged People reached the ask rung · 22 still maturing | 3 per 100: 1 of 31 People Dana replied to on her own | — · Worth about +$140 a month | — | before-after, not proof · Other Startups’ results +6 per 100, ■■■□ Likely, n 2,310 engaged, 1 in 5 held back at random |
new-leads | 4 Leads from the 6 asks | 1 | — | — | before-after |
new-arr ↑ | $941, 1 Customer on Team · Booked: credited, not all caused by this Play | $0 | — · 2 trials still deciding | — | before-after, not proof |
net-new-arr · arr | carried from new-arr | carried | — | — | carried |
Before against after reads the People Dana gave to through the Play against the People she replied to on her own in the 90 days before, scaled to 56 days. It is not proof; Other Startups’ results, read against 1 in 5 watched voices held back at random, print beside it.
How it moves it: your sentence and one sourced specific land under a post where a watched voice is already talking, a median 41 minutes after it went up.
Guardrails: before against after: play-sourced-customers, 1 against 0, and hidden or blocked replies, 1 of 118 against 0 of 31; no Venue warning fired.
{
"$id": "https://api.sb/leaseline.app/campaigns/give-first" ,
"$type": "Campaign",
"play": "play:give-first@1" ,
"path": [
"rapport-rung",
"new-leads",
"new-arr",
"net-new-arr",
"arr"
],
"experiment": {
"metric": "rapport-rung",
"unit": "per-100",
"heldBack": 0,
"decision": null
},
"readout": {
"value": null,
"n": 42,
"maturing": 22,
"interval": null,
"readability": "inadmissible",
"basis": "before-after",
"pooled": true
},
"ledger": {
"spend": 3,
"workerCost": 3,
"hours": 17,
"pipelineArr": 1180,
"wonArr": 941,
"projectedArr": 138,
"paybackDays": 4
}
}Outside benchmark: no outside study measures founder replies to the ask rung, so Other Startups’ results (+6 per 100, n 2,310) stand in for one.
Before it · After it. Before it: founder-voice fills the opinion bank and community-answers reads each room into its record. After it: People at the ask rung go to engagement-bridge or warm-intros, and their Leads to instant-response.
Example
Leaseline ran it from 2026-08-24 to 2026-10-19 (56 days) on 40 watched voices and 3 subreddits. It briefed 131 posts, Dana posted 118 replies, 3 gifts and 8 credit posts, and 64 People were engaged. Read every captured thread at ?threads=; three follow the tables.
| What happened, by option | Decisions | Posted by you | Reached the ask rung | Won (credited, not all caused by this Play) |
|---|---|---|---|---|
| Reply with a position | 112 | 101 | 5 | 1 on Team (+$941 ARR) |
| Make what they asked for · Credit their work | 9 · 8 | 3 · 8 | 1 · 0 | 0 |
| Open the ask · Founder answers alone | 6 · 3 | 6 · 3 | — | 4 Leads, 2 trials still deciding |
| Let it pass | 41 | 0 | — | — |
| All · Before (90 days, per 56) | 179 | 121 | 6 of 42 matured · 1 of 31 | $941 · $0 |
| At 30 engaged a month (the Use it when volume) | about 56 in 56 days | about 105 | before-after, not proof | Other Startups’ results: +6 per 100, ■■■□ Likely, n 2,310 |
| Day | Event | What happened | Your time |
|---|---|---|---|
| 0 | event_122 Campaign.created | the three steps; dry run fails handle-connected and opinion-bank | 15 min |
| 0 · 2 | event_125 Handle.connected · event_160 Content.created | LinkedIn and Reddit read; 20 positions recorded | 45 min |
| 3 | event_188 Prospect.engaged | the first watched voice answers your reply (rung 2) | — |
| 28 · 49 | event_520 Change.merged · event_871 Readout.created | sessions at 07:30 and 12:30: replayed at 3 of 35 expired, read back at +21d at 2 of 38 | 5 min |
| 34 | event_640 Decision.created | the guard opens for Kim Alvarez: rung 3, 3 gives acted on | — |
| 41 | event_701 Campaign.paused | founder-silence: a week away; serving resumed the day you returned | — |
| 1–56 | event_131 Task.assigned, first of 179 | you posted 121 and skipped 13, from the POST /{namespace}/tasks/next log | 15.8 h · total 17 h measured, 18 h asked |
Kim Alvarez, LinkedIn, Sep 2, 07:41 · “How are you all timing renewal notices across owners? We keep sending them late.”
Dana, 08:20 · Per owner, 60 days out, never one batch for the whole portfolio.¹ Late renewals fell from 9 to 2 last quarter once each owner got their own list.² What broke for you, the date or the owner?
Kim, Sep 2, 10:05 · answered; on Sep 18 she quoted Dana’s line in her own post (rung 3). On day 34 the guard opened, and Dana’s direct Message offered the per-owner calendar she asked about.³ Kim booked a call on Oct 1.
- We built Leaseline for exactly this: leaseline.app/renewals
+ Send each owner their own batch 60 days out; one portfolio-wide batch is where the dates slip. Marta Lind, 2026-10-06 14:52 · wrote to Dana first: “Can we talk about how you set this up?” That is rung 4, so the agent stopped drafting and put a Brief in Dana’s tray, due 15:52. · Dana, 15:20 · answered in her own words and offered two times. The Brief is in When it hands to you.
¹ Your sentence first, from position #12 in the opinion bank. ² One sourced specific, from your claims source. ³ The ask, only after the guard opened.
Your settings
---
holdout: 0 # 8 engaged a week is too few to hold 1 in 5 back; it reads before-after
sessions: [07:30 , 12:30 ] # property managers post early
venues: [linkedin, reddit]
---
Watch the 40 property-management voices I named. Never link Leaseline before the guard opens.$ npx startup-builder show plays/give-first
holdout 0 · sessions 07:30, 12:30 · venues linkedin, reddit your file plays/give-first.mdx:2,3,4 (Ask 2026-08-24; line 3 by change_24, 2026-09-21)
family demand · worker role:content-lead, owns never · chooses 6 (3 rule, 3 read) · every post pressed by the founder · checks owned-by-a-person, fact-check, give-ask-guard, engagement-ceiling, pester, no-amplification · stops 8 · placements x, linkedin, reddit, hacker-news, github catalog play:give-first@1 (Not live yet, gaps #5) Every key from the catalog
Compiled, not written: edit the Play record give-first and its Leaseline run, then regenerate. Every step runs from a sentence or a line of code. In your words: the CRM words you know, and where each lives here.