URL: /plays/give-first · Id: `play:give-first`

# 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.

Serves the founder 3 discussions twice a day that lack their stated view, drafts from their sentence, and holds every ask until they act.

```text title="Set it up · Ask"
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.
```

```text title="Run one · Ask"
Hand the latest watched post to the Content Lead agent and show me what it chose and why. Don’t post.
```

```ts title="Run one · SDK"
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 }
```

```json title="Run one · Response · sample"
{
  "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"
    ],
    "by": "worker_6",
    "on": "post_311",
    "expected": "Kim answers within 3 days (rung 2)",
    "reopensWhen": "no Prospect.engaged from Kim Alvarez within 3d"
  },
  "actions": [
    {
      "$id": "https://api.sb/leaseline.app/actions/action_1",
      "$type": "Action",
      "status": "done",
      "mode": "try",
      "by": "worker_6",
      "verb": "Content.draft",
      "checks": [
        {
          "check": "fact-check",
          "status": "pass"
        }
      ]
    },
    {
      "$id": "https://api.sb/leaseline.app/actions/action_2",
      "$type": "Action",
      "status": "pending",
      "reason": "awaitingFounder",
      "mode": "try",
      "by": "worker_6",
      "verb": "Task.assign",
      "checks": [
        {
          "check": "owned-by-a-person",
          "status": "pass"
        },
        {
          "check": "give-ask-guard",
          "status": "pass"
        },
        {
          "check": "engagement-ceiling",
          "status": "pass"
        },
        {
          "check": "no-amplification",
          "status": "pass"
        }
      ]
    }
  ]
}
```

`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, not proof · n 42 · path → arr`

| 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 |

| Worth | Your time | Spend | First signal | Use it when | Instead |
| --- | --- | --- | --- | --- | --- |
| ≈ +$140 ARR a month at 30 | 2.5 h week 1, then 2 h a week | $0.02 per brief, ~$3 a month at 6 a day | Day 3: first watched voice answers | a founder with 2 h a week, 20+ open niche voices | No person founder: `organic-social` · under 20 positions: `founder-voice` |

**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: 0` and reads before-after.

`sample · api.sb/leaseline.app · 41 Customers at 2026-10-19 · on Post.published · first brief 6m 40s · 8 keys Not live yet`

## Start it this week
```bash
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"}'
```


```json title="The dry run’s 422 · 2026-08-24 · sample"
{
  "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"
    }
  ]
}
```

| Check | Fix (one call) | Your time | Wait |
| --- | --- | --- | --- |
| <a id="check-use-when"></a>`use-when` · <a id="check-baseline"></a>`baseline` · pass: a person founder, 40 voices; 3 per 100, n 31 (gaps #8) | <Op verb="Metric.query" /> on `rapport-rung`, which fills Before in Your number | 1 min | none |
| <a id="check-handle-connected"></a>`handle-connected` · fail (gaps #8) | <Op verb="Handle.connect" /> for LinkedIn and Reddit, read only | 5 min | none |
| <a id="check-opinion-bank"></a>`opinion-bank` · fail (gaps #8): 6 of 20 positions | <Op verb="Content.create" />: answer the 20-question grilling | 40 min | none |
| <a id="check-role-unstaffed"></a>`role-unstaffed` · pass: every hand-off is yours | <Op verb="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, not proof · n 42 matured`

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 | <Op verb="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 | <Op verb="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; <Op verb="Event.capture" /> for one seen elsewhere |
| + 3 more for niche asks, replies to your own posts and hidden replies or blocks (`?lanes=all`) | | | | |

```json title="One signed delivery · StartupBuilder-Signature"
{
  "$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
  }
}
```

```bash title="Reproduce it in test"
# 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:content-lead`, `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:founder`), 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 <Op verb="Action.cancel" /> |
| Open the ask | You approve each one | 6 opened, 6 sent by you | never | — | <Op verb="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 | <Op verb="Action.redirect" /> |
| Change the session rule | You approve each one | 1 merged of 1 | never | — | <Op verb="Change.merge" /> · <Op verb="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 <Op verb="Content.draft" /> and <Op verb="Task.assign" />, and the press is yours. Its tools are <Op verb="Content.draft" />, <Op verb="Task.assign" />, <Op verb="Site.publish" />, <Op verb="Lead.create" />, and any other call becomes an Approval under the Role’s Mandate.

```md title="The brief (folded): compiled Agent-register Markdown · play:give-first@1 · each line names its record key"
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 <Op verb="Change.merge" />. **Replayed on past posts**, <Op verb="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 <Op verb="Role.staff" /> seats it.

```bash
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 | <Op verb="Content.draft" /> from your sentence → <Op verb="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 | <Op verb="Content.draft" /> → <Op verb="Site.publish" /> as an ungated Page → <Op verb="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) | <Op verb="Content.draft" /> naming 3 to 5 People → <Op verb="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) | <Op verb="Content.draft" /> of one direct Message → <Op verb="Lead.create" /> once they answer → <Op verb="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) | <Op verb="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 | <Op verb="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 | <Op verb="Content.draft" /> |
| Not now | “Not looking at tools right now.” | no ask for 90 days; gives continue under the weekly ceiling | nobody | at once | <Op verb="Decision.list" /> |
| 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 | <Op verb="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 | <Op verb="Decision.list" /> |
| 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 | <Op verb="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 | <Op verb="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).

```json title="What lands in each queue · sample"
[
  {
    "$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 <Op verb="Task.return" /> and a reason (skip, crowded, not my view), or <Op verb="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:** <Op verb="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 |
| --- | --- | --- | --- |
| <a id="check-owned-by-a-person"></a>`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. | <Op verb="Task.assign" /> |
| <a id="check-fact-check"></a>`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. | <Op verb="Content.draft" /> |
| <a id="check-give-ask-guard"></a>`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. | <Op verb="Content.draft" /> |
| <a id="check-engagement-ceiling"></a>`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. | <Op verb="Decision.list" /> |
| <a id="check-pester"></a>`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. | <Op verb="Decision.list" /> |
| <a id="check-no-amplification"></a>`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. | <Op verb="Decision.list" /> |

| Stop (pauses the Play) | Pauses when | Then |
| --- | --- | --- |
| <a id="stop-hidden-or-blocked"></a>`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 |
| <a id="stop-callout"></a>`callout` | a public bot or AI callout on your reply | that Venue pauses 7 days |
| <a id="stop-venue-warning"></a>`venue-warning` | a restriction notice, CAPTCHA or reach limit on your Handle | the Mandate pauses on that Venue at once |
| <a id="stop-room-removal"></a>`room-removal` (Reddit and Hacker News) | a moderator removes your reply | the room goes listen-only and is read again |
| <a id="stop-rung-2-floor"></a>`rung-2-floor` | under 5 People at rung 2 across 150 replies on one Venue | briefs stop on that Venue |
| <a id="stop-gift-take-rate"></a>`gift-take-rate` | gifts on a Handle are taken below Other Startups’ rate for 30 days | gifts pause on that Handle |
| <a id="stop-founder-silence"></a>`founder-silence` | 7 days with no tray action | serving stops until you return |
| <a id="stop-kill-switch"></a>`kill-switch` | you press it | <Op verb="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.

```json title="The captured refusal · sample"
{
  "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"
    }
  ]
}
```


```json title="The Stops that fired, as Campaign.paused reasons · sample"
[
  {
    "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 <Op verb="Metric.query" /> by node, and every node above the leaf is Not live yet (gaps #4).

`14 per 100 against 3 before · before-after, not proof · n 42 · path → arr`

| 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.

```json title="The Campaign card · sample"
{
  "$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=all`; 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 <Op verb="Task.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.

```diff title="Nadia Brooks, 2026-09-15 · the draft give-ask-guard cut, then the reply you posted"
- 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
```mdx title="plays/give-first.mdx"
---
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.
```

```text
$ 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
| Key | Id | What it is |
| --- | --- | --- |
| Tactic | <a id="tactic-watch-list"></a>`watch-list` | Watch list keeps 20 to 300 niche People who publish to an audience, ranked by reach, openness and follow-back, with a holdout. Starts at Sends nothing. |
| Tactic | <a id="tactic-reply-brief"></a>`reply-brief` | Reply brief serves the founder 3 fresh Posts twice a day, each matched to a stated position the discussion lacks, or serves nothing. Starts at Sends nothing. |
| Tactic | <a id="tactic-seeded-reply"></a>`seeded-reply` | Seeded reply turns the founder’s raw sentence into a short sourced reply, checks it, and leaves the press of post to the founder. Starts at You approve each one. |
| Tactic | <a id="tactic-give-ask-guard"></a>`give-ask-guard` | Give-ask guard holds every ask until the Person, the room and the Handle each have enough giving on record, and logs every refusal. Starts at Sends nothing. |
| Tactic | <a id="tactic-gift-on-ask"></a>`gift-on-ask` | Gift on ask answers a public request with a tested, sourced gift made for that request, which the founder posts with no gate. Starts at You approve each one. |
| Tactic | <a id="tactic-credit-post"></a>`credit-post` | Credit post names 3 to 5 People each week whose work changed the founder’s view, with what each supplied and no link to the Startup. Starts at You approve each one. |
| Tactic | <a id="tactic-rapport-read"></a>`rapport-read` | Rapport read projects each watched Person’s rapport rung from their own acts, and writes People reaching the ask rung per 100 engaged. Starts at Sends nothing. |
| Tactic | <a id="tactic-opinion-bank"></a>`opinion-bank` | Opinion bank turns a weekly 20-Question grilling and the founder’s voice memos into dated positions, the only views a draft may state. Starts at Sends nothing. |
| Tactic | <a id="tactic-fabrication-veto"></a>`fabrication-veto` | Fabrication veto blocks any draft written in a Human’s name that states a number, name, event, quote or feeling no source supports. Starts at Sends nothing. |
| Tactic | <a id="tactic-voice-eval"></a>`voice-eval` | Voice eval passes a draft only when a founder-aligned judge and every rule check agree, and re-runs a held-out set before any prompt change. Starts at Sends nothing. |
| Tactic | <a id="tactic-founder-send-tray"></a>`founder-send-tray` | Founder send tray shows each approved draft with its source trail; the founder presses post by hand or through the Venue’s own posting path. Starts at You approve each one. |
| Tactic | <a id="tactic-room-rules-compile"></a>`room-rules-compile` | Room read reads each community place’s sidebar, pinned posts and top answers weekly into its room record and sets the room’s mode. Starts at You approve each one. |
| Tactic | <a id="tactic-room-check"></a>`room-check` | Room check is the Guard every community answer passes: mode, caps, karma floor, mention budget, links, duplicates and siblings, downgrading what it refuses. Starts at Sends nothing. |
| Tactic | <a id="tactic-engagement-bridge"></a>`engagement-bridge` | Engagement bridge message: A Human sends one direct Message, drafted by the agent, to a Person who wrote to the Human’s Handle first, quoting that Person’s words. Starts at You approve each one. |
| Trigger | <a id="trigger-watched-post"></a>`watched-post` | Watched post: `event` on `Post.published`, window 2h. |
| Trigger | <a id="trigger-room-post"></a>`room-post` | Room post: `event` on `Post.published`, window 6h. |
| Trigger | <a id="trigger-niche-ask"></a>`niche-ask` | Niche ask: `event` on `Post.published`, window 24h. |
| Trigger | <a id="trigger-founder-post-reply"></a>`founder-post-reply` | Founder post reply: `event` on `Post.published`, window 2h. |
| Trigger | <a id="trigger-rapport-act"></a>`rapport-act` | Rapport act: `event` on `Prospect.engaged`, window 14d. |
| Trigger | <a id="trigger-negative-act"></a>`negative-act` | Negative act: `event` on `Post.flagged`, window 1y. |