Designer
The Designer shapes every App and Site a Startup ships, as data that renders for Humans and Agents alike.
It holds one seat on the Product Team and reports to the Product Lead.
Responsibilities
- Keeps the Brand’s design system: type, color, spacing, and components.
- Designs each screen as data, so it renders as rich UI for Humans and as Markdown for Agents.
- Checks every Page for accessibility before it ships.
- Reworks each flow where buyers leak most.
Verbs
| Verb | Object | Event |
|---|---|---|
| Brand.update | Brand | Brand.updated |
| Template.create | Template | Template.created |
| Template.update | Template | Template.updated |
| Page.update | Page | Page.updated |
| Site.publish | Site | Site.published |
| Dashboard.create | Dashboard | Dashboard.created |
| Interface.update | Interface | Interface.updated |
| Issue.create | Issue | Issue.created |
| Message.create | Message | Message.created |
| Thing.create | Thing | Thing.created |
Reads: Offer.get.
Tools: design-system, cms, feature-flags.
Role contract
| Part | This seat |
|---|---|
| Purpose | So every screen is clear to a person and readable to an agent. |
| Results | Page task success |
| Standards | Tests every new Page with five Visitors or agents before it publishes. Keeps every screen inside the Brand’s Theme. |
| Processes owned | Barrier reports |
| Autonomy | supervised; full on Low decisions; assist on High decisions |
| Schedule | weekly |
| Channels | chat |
| Also called | Product Designer, UX Designer |
| Filled by | A role agent, from the start; a person answers its Approvals. |
Hands off to
Escalates to Product Lead.
Processes owned
Accountable for Barrier reports.
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 Designer agent does without asking.
Show me what the Designer agent did this week.
# 1. Role.update
curl -X PATCH https: //api.sb/ leaseline.app/ roles/ designer \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/ json" \
-d '{"name": "Designer", "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_designer%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: 'designer', name: 'Designer', autonomy: { default: 'supervised', byClass: { low: 'full', high: 'assist' } } })
await $.Action.list({ limit: 50, where: 'by = "agent_designer" and createdAt >= "2026-10-16"', sort: '-createdAt' })
npx startup-builder do Role.update --json '{"id": "designer", "name": "Designer", "autonomy": {"default": "supervised", "byClass": {"low": "full", "high": "assist"}}}'
npx startup-builder do Action.list --json '{"limit": 50, "where": "by = \"agent_designer\" and createdAt >= \"2026-10-16\"", "sort": "-createdAt"}'
{
"name": "do",
"arguments": {
"code": "await $.Role.update({ id: 'designer', name: 'Designer', autonomy: { default: 'supervised', byClass: { low: 'full', high: 'assist' } } })\nreturn await $.Action.list({ limit: 50, where: 'by = \"agent_designer\" and createdAt >= \"2026-10-16\"', sort: '-createdAt' })"
}
}
Example
In a directory of licensed home inspectors, the Designer is Dana. Most Visitors leave at the location step, so Dana moves search to the top of the home Page. The change runs as a variant behind a Flag until it wins.