Skip to content

Hire an agent for a role

Every seat already has an agent: set how much it does without asking, see what it did, or change who fills the seat.

For developers

Every Role starts with an Agent in it, so your support seat already answers customers. Decide what it does alone and what it brings to you first, then check its work.

For developers

What you get

  • 1support agent in the Customer Lead seat from day one, with its own name and email address at your domainAgent
  • 1setting for what it does alone: routine replies on its own, anything one-way drafted for you firstRole
  • 1list of everything it did this week, newest firstAction
  • 5tools: only what the support seat may usePermission
  • 3seats it hands work to: billing for refunds, privacy for data requests, the Product Lead for bugsRole
  • 1memory of every customer it has talked to, kept in your businessMemory
  • 1request to you for anything over its limitsApproval

Your agent does

Role.update → Action.list
You, to your agent

Hire an agent to answer my customers.

Take support off my plate.

I am done doing support, hand it to an agent.

# 1. Role.update
curl -X PATCH https://api.sb/leaseline.app/roles/customer-lead \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Customer Lead","autonomy":{"default":"supervised","byClass":{"high":"assist"}}}'

# 2. Action.list
curl "https://api.sb/leaseline.app/actions?limit=50&where=by%20%3D%20%22agent_customer_lead%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: 'customer-lead', name: 'Customer Lead', autonomy: { default: 'supervised', byClass: { high: 'assist' } } })
await $.Action.list({ limit: 50, where: 'by = "agent_customer_lead" and createdAt >= "2026-10-16"', sort: '-createdAt' })
npx startup-builder do Role.update --json '{"id":"customer-lead","name":"Customer Lead","autonomy":{"default":"supervised","byClass":{"high":"assist"}}}'
npx startup-builder do Action.list --json '{"limit":50,"where":"by = \"agent_customer_lead\" and createdAt >= \"2026-10-16\"","sort":"-createdAt"}'
{
  "name": "do",
  "arguments": {
    "code": "await $.Role.update({ id: 'customer-lead', name: 'Customer Lead', autonomy: { default: 'supervised', byClass: { high: 'assist' } } })\nreturn await $.Action.list({ limit: 50, where: 'by = \"agent_customer_lead\" and createdAt >= \"2026-10-16\"', sort: '-createdAt' })"
  }
}

Change it

  • It drafts, I send, for the first two weeks.
  • Let it refund up to $50 without asking.
  • Show me what it did yesterday.
  • I will run support myself for now.
  • Swap in a support agent built for property managers.

Under the hood

Systems
Workforce, Mailboxes, Work queue
Nouns
Role, Agent, Worker, Action, Permission, Mailbox
Events
Role.updated