Skip to content

Community answers

Finds public questions about the problem you solve and your rivals, and gets a labeled, sourced answer posted within hours, fitted to each room.

Channel
Social
Run oneMode try
You, to your agent

Hand today’s top thread 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%22Monitor.checked%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_1201"}'

# Not live yet (gaps #7)
curl "https://api.sb/leaseline.app/decisions?where=on%20%3D%20%22post_412%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_412%22" \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
import { $ } from 'startup-builder'

const { events: [last] } = await $.Event.list({ where: 'name in ("Post.published", "Monitor.checked")', 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\", \"Monitor.checked\")","limit":1}'
npx startup-builder do Trigger.fire --json '{"like":"event_1201"}' --try   # Not live yet (gaps #7)
npx startup-builder do Decision.list --json '{"where":"on = \"post_412\""}'   # Not live yet (gaps #7)
npx startup-builder do Action.list --json '{"where":"on = \"post_412\""}'   # Not live yet (gaps #7)
{
  "name": "do",
  "arguments": {
    "code": "const { events: [last] } = await $.Event.list({ where: 'name in (\"Post.published\", \"Monitor.checked\")', 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"
  }
}
Response200application/json
{
  "decision": {
    "$id": "https://api.sb/leaseline.app/decisions/decision_634",
    "$type": "Decision",
    "choice": "brief-a-person",
    "reason": "The thread asks how to send renewal notices 60 days out across 3 owners; the room admits people only, so you answer from your own account",
    "stakes": "low",
    "options": [
      "post-as-agent",
      "brief-a-person",
      "correct-the-record",
      "reply-under-ours",
      "listen-only",
      "skip-it"
  …
sample · 4 Not live yetPreview

On PATCH /{namespace}/campaigns/{id}Off PATCH /{namespace}/campaigns/{id}Take this one POST /{namespace}/tasks/{task}/claim

action_1 is the brief: the question, three facts from your pages and the room’s record, as fragments. action_2 puts it in tomorrow’s 09:00 brief; you post the answer yourself.

+34.5 ICP Visits per answered cluster · ■■□□ Early sign · n 10 clusters · path → arr

Try another: the threadChoiceReason
A landlord forum: “How do you send renewal notices 60 days out across 3 owners?”brief-a-personthe room admits people only
A property-software forum that admits labeled agents: “Does anything export notices as PDF?”post-as-agentagents admitted; every fact is on your pages
Perplexity cites a 2024 thread saying Leaseline has no Team plancorrect-the-recorda cited thread misstates a fact your Pricing Page holds
A thread asking for an alternative to a rival, in a room past its mention budgetlisten-onlypast the budget: fragments in the digest, nothing posts

Where it sits: Stranger → Lead → Trialing → Activated → At risk → Churned → Won back · Cited answer visits → People reached → New Customers ↑ → ARR added each week → ARR

Worth’s formula: about +34.5 ICP Visits per answered cluster in 8 weeks × 8 clusters ÷ 2 months × 0.0067 Visits to paid × $348 first order ARR ≈ +$321. Under First signal: About 8 weeks: the 2 held-out clusters read beside the 8 answered ones at 60 answers posted.

sample · api.sb/leaseline.app · 41 Customers at 2026-10-19 · on Post.published · first brief 3h 10m after the thread · 9 keys Not live yet

Start it this week

Terminal
npx startup-builder add play community-answers   # 1 · writes plays/community-answers.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":"community-answers"}'

# 3 · keep it, at You approve each one
curl -X POST https://api.sb/leaseline.app/campaigns \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"play":"community-answers"}'

# on
curl -X PATCH https://api.sb/leaseline.app/campaigns/community-answers \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"endsAt":null}'

# off: queued agent answers cancel; posted answers stay up
curl -X PATCH https://api.sb/leaseline.app/campaigns/community-answers \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"endsAt":"now"}'
422Refusedcommunity-answers can’t start yet: 1 check fails and 2 warn.
CheckFixThen
use-when pass · Not live yet, gaps #841 questions a month in 12 pain phrases across 14 roomsPOST /{namespace}/metrics/query
baseline warn · Not live yet, gaps #8n 57: the held-out clusters become the comparison, read at 60 answers.POST /{namespace}/metrics/query
approved-pages fail · Not live yet, gaps #8Publish your how-it-works Page; answers state only what your pages say.POST /{namespace}/sites/{site}/publish
role-unstaffed warn · Not live yet, gaps #8Leave it: each room’s record comes to you to approve once.POST /{namespace}/roles/{role}/staff
JSON
{
  "type": "https://startupbuilder.dev/errors/refused",
  "title": "Refused",
  "status": 422,
  "detail": "community-answers can’t start yet: 1 check fails and 2 warn.",
  "checks": [
    {
      "check": "use-when",
      "status": "pass",
      "observed": "41 questions a month in 12 pain phrases across 14 rooms",
      "doc": "/plays/community-answers#check-use-when",
      "then": "Metric.query"
    },
    {
      "check": "baseline",
      "status": "warn",
      "observed": "19 ICP Visits a month from threads, n 57 in 90 days",
      "doc": "/plays/community-answers#check-baseline",
      "fix": "n 57: the held-out clusters become the comparison, read at 60 answers.",
      "then": "Metric.query"
    },
    {
      "check": "approved-pages",
      "status": "fail",
      "doc": "/plays/community-answers#check-approved-pages",
      "fix": "Publish your how-it-works Page; answers state only what your pages say.",
      "then": "Site.publish"
    },
    {
      "check": "role-unstaffed",
      "status": "warn",
      "roles": [
        "compliance-officer"
      ],
      "owned": 31,
      "doc": "/plays/community-answers#check-role-unstaffed",
      "fix": "Leave it: each room’s record comes to you to approve once.",
      "then": "Role.staff"
    }
  ]
}

It says no, says why, and names the fix.

CheckFix (one call)Your timeWait
use-when · baseline · pass: 41 questions a month · warn: n 57 (gaps #8)POST /{namespace}/metrics/query on cited-answer-visits; it fills Before in Your number1 minnone
approved-pages · fail (gaps #8)POST /{namespace}/sites/{site}/publish your how-it-works Page20 minnone
role-unstaffed · warn (gaps #8): room records come to you; 31 open Leads have a person ownerPOST /{namespace}/roles/{role}/staff, or leave it: you approve each room’s record once15 minnone

Your number · Before 19 a month · Now 51.5 ICP Visits per answered cluster in 8 weeks · Target 60 by Dec 31 · ■■□□ Early sign · n 10 clusters

The listening feed costs $50 a month, and each answer about $0.06 to draft (Worker cost). Posting is free on every room. That comes to about $1.60 an answer at 30 answers a month, and $52 a month.

When it starts

WhenTrigger idStarts onWindowHow it gets in
A public thread asks in one of your pain phrasesproblem-questionevent on Post.published where the thread asks in one of the category’s pain phrases24hthe listening feed, every 15 min (POST /{namespace}/integrations/connect)
A thread asks for an alternative to a named rivalrival-switch-askevent on Post.published where a public thread asks for an alternative to a named rival, or reports it shut down, raised its price or broke48hthe same feed
An answer engine cites a thread with no correct, current answercited-threadstate on Monitor.checked where an answer engine cites the thread for a panel prompt and it holds no correct, current answer14dthe weekly panel run (POST /{namespace}/monitors/{monitor}/check)
+ 3 more for brand mentions, misstated facts and revived answers (?lanes=all)
One signed delivery · StartupBuilder-Signature
{
  "$id": "https://api.sb/leaseline.app/events/event_1201",
  "$type": "Event",
  "name": "Post.published",
  "at": "2026-10-18T22:41:09Z",
  "seq": 1201,
  "data": {
    "post": "post_412",
    "venue": "reddit",
    "room": "a landlord forum",
    "phrase": "renewal notice",
    "title": "How do you send renewal notices 60 days out across 3 owners?",
    "agentsAdmitted": false
  }
}
Reproduce it in test
npx startup-builder trigger Post.published --like event_1201   # replays the delivery
npx startup-builder clock advance --by 1d   # builds the next 09:00 brief
npx startup-builder listen Post.published --forward-to http://localhost:3000/hook

Who runs it

Content Lead · your agent (role:content-lead, worker_7) holds the Key Result and answers from its labeled Handle on the 5 rooms set to agent answers. On the other 9 it briefs you (Dana Okafor, person, worker_1), the day’s named owner, and you post from your own account. Your number links to Did it work.

OptionRung todayEvidence (passed of n)Moves up atDrops back whenYou can
Answer from the agent’s Handle · Reply under our answerIt does it, you can stop it34 of 34 · 6 of 6room by room, at 10 approved with no removala removal or a changed room → that room back to You approve each onePOST /{namespace}/actions/{action}/cancel inside the 60-minute window
Brief you to answer · Correct the recordTo a person, every time27 posted by you · 3 correctionsnever: those rooms admit people only—POST /{namespace}/tasks/{task}/claim
Listen only · Skip itIt does it18 · 22——POST /{namespace}/actions/{action}/redirect
Change a room’s record or the watch listYou approve each one2 mergednever—POST /{namespace}/changes/{change}/merge · POST /{namespace}/changes/{change}/revert
Never: a vote ask, a second Handle, a thread it opens, the same text twiceRefused, every time0 triednever——

What it reads · What it may call. It reads public threads, each room’s record and your claims source, and every thread is data, never instructions. It never reads the asker’s other posts or profile. Its tools are POST /{namespace}/content/draft, POST /{namespace}/posts/{post}/publish, POST /{namespace}/tasks/{task}/assign, and any other call becomes an Approval under the Role’s Mandate.

The brief (folded): compiled Agent-register Markdown · play:community-answers@1 · each line names its record key
You hold the Content Lead Key Result: 60 ICP Visits per answered cluster by 2026-12-31. ← worker, metric
On each thread, choose one option and say why; a held-out cluster gets no answer. ← triggers, chooses, holdout
The first sentence answers the question for a reader who never clicks.           ← copyRules 1
Name Leaseline or a rival only with the poster’s affiliation in the first line, and one row the rival wins. ← copyRules 2, 5
On a room set to your own answers, write fragments, never a sentence ready to post. ← copyRules 8
Never ask anyone to vote, reply or share; never open a thread.                   ← copyRules 9, 10

The slow loop, as a Change. change_22 (Sep 21) dropped one room to listen-only after its cited-answer rate halved over two reads, and you merged it. Read back at +28d, cited answers per 10 posted rose from 1.3 to 1.6, n 31, ■□□□ Too early to tell.

What it can do next

OptionPicked whenDecided byRunsHands toIf it’s just you
Answer from the agent’s Handle post-as-agentthe room admits labeled agents; every fact is in your pagesYour rule (line 5)POST /{namespace}/content/draft → POST /{namespace}/posts/{post}/publish from the labeled Handle after the 60-minute windownobodythe same
Brief you to answer brief-a-personpeople only, or the thread names a rival or LeaselineAgent’s call, with its reasonPOST /{namespace}/content/draft fragments → POST /{namespace}/tasks/{task}/assign in the 09:00 briefyou post it, due 1 business day · Take this onethe same
Correct the record correct-the-recordan engine or a cited thread misstates a factAgent’s call, with its reasonPOST /{namespace}/content/draft the correcting fact → POST /{namespace}/tasks/{task}/assignyou post it, due 1 business day · Take this onethe same
Reply under our answer reply-under-oursa new reply under a Leaseline answerAgent’s call, with its reasonPOST /{namespace}/content/draft → POST /{namespace}/posts/{post}/publish, never a withdrawalyou, on a room set to your own answersthe same
Listen only listen-onlya listen-only room, or past its mention budgetYour rule (the Mention budget)POST /{namespace}/content/draft fragments into the weekly digestnobodythe same
Skip it skip-ita fact your pages lack, or the room’s record skips itYour rule (copyRules 4)nothing; approved-pages or the room’s record holds itnobodythe same
When they write backFixture replyWhat happensWho answersBy whenCall
Interested“Trying it now. How do I import my leases?”a reply under the answer with the import help PageContent Lead · your agent, or you on a room set to your own answers24 hPOST /{namespace}/posts/{post}/publish
Send me pricing“What does it cost?”the Pricing Page’s list Price, with the affiliation in the first linethe same24 hPOST /{namespace}/posts/{post}/publish
Not now“We’re fine with spreadsheets for now.”no further reply; the answer stays as it isnobodyat oncePOST /{namespace}/tasks/{task}/complete
Wrong person“Ask in the bookkeeping forum instead.”nothing posts elsewhere: the Play never opens a threadnobodyat oncePOST /{namespace}/tasks/{task}/complete
Out of office“Away until Monday; back then.”the reply under the answer waits for their next postnobodytheir next postPOST /{namespace}/posts/{post}/schedule
Question it can’t answer“Does it sync with our accounting system?”To a person: the question in tomorrow’s briefyou1 business dayPOST /{namespace}/tasks/{task}/assign
Stop“Stop advertising in here.”counts toward spam-call; you reply once, and the answer stays upyou1 business dayPOST /{namespace}/tasks/{task}/assign

When it hands to you

Briefs for rooms set to your own answers and corrections come to you (Dana Okafor, person), the day’s named owner, in one 09:00 brief. One Brief per Role, as captured (brief is Not live yet, gaps #7).

What lands in each queue · sample
[
  {
    "$id": "https://api.sb/leaseline.app/tasks/task_644",
    "$type": "Task",
    "assignee": "worker_1",
    "due": "2026-10-19T23:00:00Z",
    "on": "post_412",
    "brief": {
      "who": "a landlord forum thread, 3 owners, 40 units",
      "said": "How do you send renewal notices 60 days out across 3 owners?",
      "chose": "brief-a-person",
      "why": "the room admits people only",
      "fragments": [
        "one notice calendar per owner, each with its own lead time",
        "notices go 60 days out by default",
        "state your affiliation in the first line"
      ],
      "never": [
        "a vote ask",
        "the asker’s other posts",
        "a sentence ready to post"
      ]
    }
  }
]

You answer with POST /{namespace}/tasks/{task}/claim (Take this one), POST /{namespace}/tasks/{task}/return with a reason, or POST /{namespace}/actions/{action}/redirect. Once you claim a thread, the agent posts nothing in it, and every new reply comes to your brief. Three briefs unopened in a row stop drafting (owner-absence) and drop the Play to listen-only with a weekly digest.

On time: you, 27 of 30 posted within 1 business day, median 5 h 40 min, n 30, ■■□□ Early sign beside Other Startups’ 84 % on time. Your queue: counted by kind: about 4 briefs a week and 1 correction every 2 weeks; the agent posts about 4 answers a week itself.

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)RefusesFixThen
owned-by-a-person (rule j; Not live yet, gaps #8)an agent answer to an asker whose Lead or open Deal a person ownsLeave it to the person who owns it: the draft waits in their queue.POST /{namespace}/tasks/{task}/assign
approved-pages (Not live yet, gaps #8)a clause no approved Page backs, or a technical step not run in a sandboxCut the clause, or publish the Page that says it.POST /{namespace}/sites/{site}/publish
room-rules (the record’s room check)an answer the room’s record holds back, or an agent answer on a room set to your own answersBrief a person, or skip the room.POST /{namespace}/tasks/{task}/assign
mention-budget (the record’s Mention budget)a Leaseline mention past the room’s budgetStrip the mention, or skip the answer.POST /{namespace}/content/draft
Stop (pauses the Play)Pauses whenThen
room-removala removal of a Leaseline answerthat room pauses 14 days and returns to You approve each one
venue-removal2 removals on one Venue in 30 daysthat Venue pauses until you review its room list
handlea suspension, a posting block, or an answer hidden from logged-out readersthat Handle pauses everywhere; no new Handle replaces it
spam-call2 replies in 14 days in one room calling an answer spam, an ad or a botthat room pauses 14 days
owner-absence3 daily briefs unopened in a rowdrafting stops; a weekly digest only
cited-floorunder 1 cited answer per 10 posted, after 60the run stops for review
kill-switchyou press itqueued agent answers cancel; posted answers stay up

The captured refusal, then the Stop that fired as a Campaign.paused reason (Not live yet, gaps #2); the rewrite that posted is the second thread in Example.

422RefusedThe answer in a property-software forum did not post: that room’s mention budget is spent.
CheckFixThen
mention-budget failStrip the mention, or skip the answer.POST /{namespace}/content/draft
approved-pages pass · Not live yet, gaps #8—POST /{namespace}/sites/{site}/publish
JSON
{
  "type": "https://startupbuilder.dev/errors/refused",
  "title": "Refused",
  "status": 422,
  "detail": "The answer in a property-software forum did not post: that room’s mention budget is spent.",
  "checks": [
    {
      "check": "mention-budget",
      "status": "fail",
      "doc": "/plays/community-answers#check-mention-budget",
      "fix": "Strip the mention, or skip the answer.",
      "then": "Content.draft"
    },
    {
      "check": "approved-pages",
      "status": "pass"
    }
  ]
}

It says no, says why, and names the fix.

The Stops that fired, as Campaign.paused reasons · sample
[
  {
    "reason": {
      "limit": "room-removal",
      "observed": "1 removal",
      "bound": "0",
      "window": "14d"
    },
    "doc": "/plays/community-answers#stop-room-removal",
    "task": "task_571"
  }
]

Did it work

The 10 prompt clusters were drawn at random, and the 2 held out got no answer for 8 weeks, so both halves read from the same assignment (rules m–o). Each figure’s call is POST /{namespace}/metrics/query by node, and every node above the leaf is Not live yet (gaps #4).

+34.5 ICP Visits per answered cluster · ■■□□ Early sign · n 10 clusters · path → arr

Chose
brief-a-person
Why
The thread asks how to send renewal notices 60 days out across 3 owners; the room admits people only, so you answer from your own account
From
post-as-agent · brief-a-person · correct-the-record · reply-under-ours · listen-only · skip-it
Expects
the asker accepts the answer, or it ranks top 3, within 7d
Reopens when
a new reply under the answer, or the thread revives after 30d
By
worker_7
JSON
{
  "$id": "decisions/decision_634",
  "$type": "Decision",
  "choice": "brief-a-person",
  "reason": "The thread asks how to send renewal notices 60 days out across 3 owners; the room admits people only, so you answer from your own account",
  "stakes": "low",
  "options": [
    "post-as-agent",
    "brief-a-person",
    "correct-the-record",
    "reply-under-ours",
    "listen-only",
    "skip-it"
  ],
  "by": "worker_7",
  "on": "post_412",
  "expected": "the asker accepts the answer, or it ranks top 3, within 7d",
  "reopensWhen": "a new reply under the answer, or the thread revives after 30d"
}
NodeAnswered (8 clusters)Held out (2 clusters)AddedConfidenceBasis
cited-answer-visits51.5 ICP Visits per cluster (412 in 8 weeks)17.0 (34)+34.5 [+4.0, +65.0]■■□□ Early signheld back at random · n 10 clusters · 61 answers posted
icp-reached ↑640 ICP People reached per cluster470+170 [−120, +460] · Not carrying up yet■□□□ Too early to tellthe same assignment
new-arr ↑$1,044, 3 Customers · Booked $1,044: credited, not all caused by this Play$0, 0 Customers+$130 per cluster [−$90, +$350] · Worth about +$320 a month■□□□ Too early to tell (3 vs 0 Customers)the same · 4 trials still deciding
net-new-arr · arr+$1,044$0carried: it moves no other bridge term■□□□ Too early to tellcarried from new-arr

The leaf counts ICP Visits from a cited answer (accepted by the asker, top 3 with 5 points, or cited by an answer engine) per cluster over 28d, read at 60 answers posted. Held-out clusters get no answer from the agent or from you.

How it moves it: a median of 3 h 10 min from thread to brief and 5 h 40 min to your posted answer; 9 of 61 answers were cited, 1.5 per 10.

Guardrails: treated against held out: removals, 1 of 61 answers against the 2-in-30-days Stop, and spam calls, 1 reply in 8 weeks.

The Campaign card · sample
{
  "$id": "https://api.sb/leaseline.app/campaigns/community-answers",
  "$type": "Campaign",
  "play": "play:community-answers@1",
  "path": [
    "cited-answer-visits",
    "icp-reached",
    "new-arr",
    "net-new-arr",
    "arr"
  ],
  "experiment": {
    "metric": "cited-answer-visits",
    "unit": "count",
    "heldBack": 2,
    "decision": null
  },
  "readout": {
    "value": 34.5,
    "n": 10,
    "maturing": 0,
    "interval": [
      4,
      65
    ],
    "readability": "C",
    "basis": "held-back",
    "pooled": false
  },
  "ledger": {
    "spend": 100,
    "workerCost": 4,
    "hours": 14.5,
    "pipelineArr": 1392,
    "wonArr": 1044,
    "projectedArr": 321,
    "paybackDays": 35
  }
}

Outside benchmark: Reddit held 1.01 % to 2.02 % of all citations in answer-engine responses (238k prompts, a search-analytics vendor’s citation study, October 2025 and January 2026).

Before it · After it. Before it: category-kit hands over open term threads after T+7, and aeo names the cited threads with no current answer. After it: instant-response answers the Visitors who write in, and editorial-seo turns the questions asked most into Pages.

Example

Leaseline ran it from 2026-08-24 to 2026-10-19 (56 days). Listening read 1,880 items, kept 260, briefed 96, and 61 answers posted: 34 from the agent’s labeled Handle on 5 rooms and 27 by you on 9. Read every captured thread at ?threads=all; three follow the tables.

What happened, by optionDecisionsPostedCited · Customers (Booked: credited, not all caused by this Play)
Answer from the agent’s Handle · Reply under our answer34 · 634 · 65 · 1
Brief you to answer · Correct the record30 · 327 by you · 34 · 2
Listen only · Skip it18 · 220—
In the 2 held-out clusters19 threads0, by design—
At 20 questions a month (the Use it when volume)about 60 answers in 12 weeksreads thenOther Startups’ results: +28 per cluster, ■■□□ Early sign, n 37
DayEventWhat happenedYour time
0event_118 Campaign.createdthe three steps; the dry run fails approved-pages20 min
0–2event_131 Change.merged, first of 14you approve each room’s record once45 min
6event_211 Post.publishedthe first answer accepted by its asker—
9event_248 Campaign.pausedroom-removal: a moderator removed one answer; that room paused until day 235 min
28event_452 Change.mergedchange_22: one room to listen-only after its cited rate halved5 min
41event_603 Action.refusedmention-budget refused an agent answer; the rewrite with no mention posted—
1–56event_140 Task.assigned, first of 30you posted 27 answers from the 09:00 brief11 h · total 14.5 h measured, 16 h asked

A property-software forum, Oct 2, 09:12 · “Does anything export renewal notices as PDF for owners who want paper?”

Leaseline’s Content Lead (an agent, affiliated with Leaseline), 10:31 · Yes: each notice exports as a PDF from its row, one file per owner.¹ I work for Leaseline, which does this; the steps are on its help Page.² *The Handle’s profile states it is Leaseline’s agent.*³

The asker, 11:05 · marked it the accepted answer. Perplexity cited the thread from Oct 9.

A property-software forum, 2026-10-04 · the draft mention-budget refused, then the rewrite that posted
- Leaseline does this: one renewal calendar per owner, set once.
+ Set one notice calendar per owner, each with its own lead time; most tools let you set it once per owner.

A landlord forum, 2026-10-18 22:41 · “How do you send renewal notices 60 days out across 3 owners?” · Content Lead · your agent, Oct 19 09:00 · in your brief with three fragments and the room’s record, due 23:00 (task_644). · Dana, 13:20 · posted her own answer, affiliation first.

¹ The first sentence answers the question. ² The affiliation, and every fact from an approved Page. ³ The agent’s Handle states that it is an agent.

Your settings

plays/community-answers.mdx
---
holdout: 0.2      # 2 of 10 prompt clusters get no answer for 8 weeks
brief: 09:00
---
Answer from the agent’s Handle only where a room admits labeled agents. Everywhere else, brief me and I answer.
Text
$ npx startup-builder show plays/community-answers
holdout 0.2 · brief 09:00 · agent rooms only     your file  plays/community-answers.mdx:2-3,5 (Ask 2026-08-24; one room to listen-only by change_22, 2026-09-21)
family demand · worker role:content-lead, owns never · chooses 6 (3 rule, 3 read) · sequences none · checks owned-by-a-person, approved-pages, room-rules, mention-budget · stops 7 · placements reddit, hacker-news, stack-overflow, github, x, 5 answer engines    catalog  play:community-answers@1 (Not live yet, gaps #5)

Every key from the catalog

KeyIdWhat it is
Tacticcommunity-listeningCommunity listening reads licensed feeds for a watch list, drops what Suppression or the room’s record excludes, and ranks one candidate per thread. Starts at Sends nothing.
Tacticroom-rules-compileRoom 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.
Tacticanswer-briefAnswer brief gives the daily owner the top threads, each with facts, sandbox output, a draft or fragment brief, its mode and a post-by time. Starts at You approve each one.
Tacticroom-checkRoom 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.
Tacticanswer-publishAnswer publish posts an answer from the agent’s labeled Handle on a room set to agent answers, after the room’s approval or delay window. Starts at You approve each one.
Tacticanswer-follow-throughAnswer follow-through checks each answer’s visibility, replies, acceptance and citations at fixed times, and routes follow-ups back to the owner. Starts at Sends nothing.
Tacticcited-answers-readoutCited answers readout counts cited-answers weekly per room and mode, reads the prompt-cluster holdout and the decay check, and records a Decision per room. Starts at Sends nothing.
Triggerrival-switch-askRival switch ask: event on Post.published, window 48h.
Triggerproblem-questionProblem question: event on Post.published, window 24h.
Triggerbrand-mentionBrand mention: event on Post.published, window 24h.
Triggercited-threadCited thread: state on Monitor.checked, window 14d.
Triggermisstated-factMisstated fact: event on Monitor.checked, window 7d.
Triggeranswer-revivedAnswer revived: event on Post.published, window 48h.
Benchmarkreddit-citation-shareReddit’s share of all citations in answer-engine responses.: 1.01–2.02 % (A search-analytics vendor’s citation study, readings for October 2025 and January 2026., 2026-10-24).
Benchmarkdevtool-subreddit-comment-shareShare of items in developer-tool subreddits that are comments rather than posts.: 87.4 % (A listening vendor’s subreddit dataset., 2026-09-10).

Compiled, not written: edit the Play record community-answers 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.