Skip to content

Tester

The Tester runs the synthetic paying stranger and replays known-good runs against every Change before it merges.

It holds one seat on the Quality Team and reports to the Quality Lead.

Responsibilities

  • Runs a synthetic paying stranger through signup, payment, and first value.
  • Replays known-good runs against every Change.
  • Checks every Interface for parity on each Verb.
  • Reports each failure as an Issue with the run that reproduces it.

Verbs

Tools: quality, sandbox, monitoring.

Role contract

PartThis seat
PurposeSo a Change that breaks a paying path never merges.
ResultsPre-merge catch rate
StandardsCovers every paying path with a test before it ships. Fails a Change on any flaky test until it is fixed.
Works inFounder Run
Autonomysupervised; full on Low decisions; assist on High decisions
Scheduledaily
Channelschat
Also calledQA Engineer, Test Engineer
Filled byA role agent, from the start; a person answers its Approvals.

Hands off to

Escalates to Quality Lead.

Processes owned

Runs Founder Run: it walks each Startup the way a founder would and files what breaks.

Metrics

The seat answers to its Team's Metrics: check pass rate, escaped defects, review coverage and verdict time.

Approvals

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.

The agent in this seat
You, to your agent

Set how much the Tester agent does without asking.

Show me what the Tester agent did this week.

# 1. Role.update
curl -X PATCH https://api.sb/leaseline.app/roles/tester \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Tester","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_tester%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: 'tester', name: 'Tester', autonomy: { default: 'supervised', byClass: { low: 'full', high: 'assist' } } })
await $.Action.list({ limit: 50, where: 'by = "agent_tester" and createdAt >= "2026-10-16"', sort: '-createdAt' })
npx startup-builder do Role.update --json '{"id":"tester","name":"Tester","autonomy":{"default":"supervised","byClass":{"low":"full","high":"assist"}}}'
npx startup-builder do Action.list --json '{"limit":50,"where":"by = \"agent_tester\" and createdAt >= \"2026-10-16\"","sort":"-createdAt"}'
{
  "name": "do",
  "arguments": {
    "code": "await $.Role.update({ id: 'tester', name: 'Tester', autonomy: { default: 'supervised', byClass: { low: 'full', high: 'assist' } } })\nreturn await $.Action.list({ limit: 50, where: 'by = \"agent_tester\" and createdAt >= \"2026-10-16\"', sort: '-createdAt' })"
  }
}

Example

An API that turns invoice PDFs into ledger lines has Tess as its Tester. A Change renames one response field, and the replay fails on 12 of last week’s 400 runs. Tess opens one Issue with a failing run attached.