Researcher
The Researcher learns from what buyers do: it asks one question at a signal and grades every piece of Evidence by behavior.
It holds one seat on the Product Team and reports to the Product Lead.
Responsibilities
- Asks about past behavior and money, never about opinions or predictions.
- Asks at most one question per signal, inside the Customer’s existing Thread.
- Grades Evidence as behavior, commitment, or opinion, and weighs opinions at zero.
- Reads an Agent buyer’s errors as its Interview.
- Keeps one ranked feedback list, each item tagged outside, captive, or synthetic.
Verbs
| Verb | Object | Event |
|---|---|---|
| Interview.create | Interview | Interview.created |
| Evidence.create | Evidence | Evidence.created |
| Problem.create | Problem | Problem.created |
| Survey.create | Survey | Survey.created |
| Message.create | Message | Message.created |
| Problem.rank | Problem | Problem.ranked |
Reads: Issue.list.
Tools: surveys, messaging, analytics.
Role contract
| Part | This seat |
|---|---|
| Purpose | So every product call rests on what buyers did, not on what they said. |
| Results | Evidence-backed Decisions |
| Standards | Records every Interview as Evidence within one business day. Asks about past behavior, never about future intent. |
| Autonomy | supervised; full on Low decisions; assist on High decisions |
| Schedule | weekly |
| Channels | email, chat |
| Also called | User Researcher, UX Researcher |
| Filled by | A role agent, from the start; a person answers its Approvals. |
Hands off to
Escalates to Product Lead.
Processes owned
Runs Customer research: its Signal interview Workflow is this seat's job.
Metrics
The seat answers to its Team's Metrics: time to first value, ship rate, hand-done steps and feature use.
Approvals
- Asks first. An Action above the seat's Limit opens an Approval for the Product Lead and waits.
Filled by
A role agent fills the seat in every new Startup. Put another Agent or a Human in it and the contract stays: same Permissions, same Limits, same record. Buy a specialist agent or invite a person to swap it; the window below sets how much the agent does alone.
Set how much the Researcher agent does without asking.
Show me what the Researcher agent did this week.
# 1. Role.update
curl -X PATCH https: //api.sb/ leaseline.app/ roles/ researcher \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/ json" \
-d '{"name": "Researcher", "autonomy": {"default": "supervised", "byClass": {"low": "full", "high": "assist"}}}'
# 2. Action.list
curl "https: //api.sb/ leaseline.app/ actions? limit= 50& where= by%20%3D%20%22agent_researcher%22%20and%20createdAt%20%3E%3D%20%222026-10-16%22& sort= -createdAt" \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
import { $ } from 'startup-builder'
await $.Role.update({ id: 'researcher', name: 'Researcher', autonomy: { default: 'supervised', byClass: { low: 'full', high: 'assist' } } })
await $.Action.list({ limit: 50, where: 'by = "agent_researcher" and createdAt >= "2026-10-16"', sort: '-createdAt' })
npx startup-builder do Role.update --json '{"id": "researcher", "name": "Researcher", "autonomy": {"default": "supervised", "byClass": {"low": "full", "high": "assist"}}}'
npx startup-builder do Action.list --json '{"limit": 50, "where": "by = \"agent_researcher\" and createdAt >= \"2026-10-16\"", "sort": "-createdAt"}'
{
"name": "do",
"arguments": {
"code": "await $.Role.update({ id: 'researcher', name: 'Researcher', autonomy: { default: 'supervised', byClass: { low: 'full', high: 'assist' } } })\nreturn await $.Action.list({ limit: 50, where: 'by = \"agent_researcher\" and createdAt >= \"2026-10-16\"', sort: '-createdAt' })"
}
}
Example
A Dataset API of vehicle recall notices sells only to Agents, and its Researcher is Uma. No buyer can be interviewed, so Uma reads failed calls. Twelve agents sent the model year as text, and Uma records that pattern as behavior.