URL: /capabilities/agents · Id: `page:/capabilities/agents`

# Agents: each task passes a second model, or it is redone or free

> Each agent fills a sales or marketing seat, calls the same Verbs you can, and acts as you within the rules you set.

Each agent fills a sales or marketing seat, calls the same [Verbs](https://startupbuilder.dev/business/nouns/verb) you can, and acts as you within the rules you set.

- **Deepens:** [`noun:role`](https://startupbuilder.dev/business/nouns/role), [`noun:mandate`](https://startupbuilder.dev/business/nouns/mandate), [`noun:agent`](https://startupbuilder.dev/business/nouns/agent)
- **Seats:** [12](#seats)
- **Agent tasks:** [14](#agent-tasks)
- **Approvals:** [By action class](https://startupbuilder.dev/agents/approvals)
- **First call:** [`Mandate.authorize`](/code/integrations/calls/authorize)

```text title="Run it · Ask"
Let my SDR agent send up to 25 cold emails a day from each inbox on tryleaseline.app for 30 days.
```

```ts title="Run it · SDK"
import { $ } from 'startup-builder'

const result = await $.try.Mandate.authorize({ agent: 'agents/sdr', verb: 'Contact.enroll', channels: ['mailboxes/warm-1', 'mailboxes/warm-2'], limit: { count: 50, period: 'day' }, expiresAt: '2026-11-26T00:00:00Z' })
```

```json title="Run it · Response"
{
  "mode": "try",
  "stored": false,
  "mandate": {
    "$id": "mandates/sdr-cold-email",
    "agent": "agents/sdr",
    "verb": "Contact.enroll",
    "channels": [
      "mailboxes/warm-1",
      "mailboxes/warm-2"
    ],
    "limit": {
      "count": 50,
      "period": "day"
    },
    "expiresAt": "2026-11-26T00:00:00Z",
    "status": "active"
  },
  "mailboxes": [
    {
      "$id": "mailboxes/warm-1",
      "address": "dana@tryleaseline.app",
      "pace": {
        "perDay": 25
      },
      "warmedOn": "2026-10-21"
    },
    {
      "$id": "mailboxes/warm-2",
      "address": "dana.okafor@tryleaseline.app",
      "pace": {
        "perDay": 25
      },
      "warmedOn": "2026-10-21"
    }
  ]
}
```

The reference for every call on this page is [Integrations](/code/integrations).

## Seats your agents fill
Each seat is a hub [Role](https://startupbuilder.dev/business/nouns/role) with a written contract: its purpose, results, target, standards, [limits](https://startupbuilder.dev/business/nouns/limit) and channels. An agent [Worker](https://startupbuilder.dev/business/nouns/worker) fills it. Put a person in the seat instead and the contract stays the same.

One seat is never an agent's. [You, as head of sales](/capabilities/agents/founder), set the number, answer every [approval](https://startupbuilder.dev/business/nouns/approval) the other seats raise, and take the first sales calls yourself.

The marketing seats sit beside the sales ones. A [Marketing lead](/capabilities/agents/marketing-lead) picks Plays, a [Content lead](/capabilities/agents/content-lead) writes for search and AI answers, and [Paid media](/capabilities/agents/paid-media) spends only what you authorized: a standing approval (a [`Mandate`](https://startupbuilder.dev/business/nouns/mandate), set with `Mandate.authorize`).

| Seat | Role | Works in | Typical calls | Limits |
| --- | --- | --- | --- | --- |
| [You, as head of sales](/capabilities/agents/founder) | [`role:founder`](https://startupbuilder.dev/agents/founding/founder) | Analytics and experiments, Social | `PlayMix.compile`, `Approval.approve`, `Approval.refuse` | `Limit.raise` up to $5,000 a month across every seat ([the hub Founder’s limit](https://startupbuilder.dev/agents/founding/founder)) |
| [SDR](/capabilities/agents/sdr) | [`role:prospector`](https://startupbuilder.dev/agents/sales/prospector) | CRM, Mailboxes, Prospecting, Scheduling, Sequences | [`Audience.build`](/capabilities/find-customers/build-a-verified-list), [`Prospect.find`](/code/data/people/find), [`Prospect.verify`](/code/data/people/verify) | `Contact.enroll` up to 200 a day ([the hub Prospector’s limit](https://startupbuilder.dev/agents/sales/prospector)), and never above the pace you set per Mailbox: 25 a day on each warmed inbox |
| [AE](/capabilities/agents/ae) | [`role:sales-lead`](https://startupbuilder.dev/agents/sales/sales-lead) | CRM, Forms and waitlists, Scheduling | [`Meeting.book`](/code/apps/scheduling/book), `Deal.advance`, `Deal.propose` | `Deal.propose` up to $25,000 a deal ([the hub Sales lead’s limit](https://startupbuilder.dev/agents/sales/sales-lead)), and every quote at the offer’s list price |
| [SE](/capabilities/agents/se) | [`role:sales-engineer`](https://startupbuilder.dev/agents/sales/sales-engineer) | CRM, Scheduling | [`Lead.qualify`](/code/apps/crm/qualify), `Deal.propose`, `Quote.create` | Up to 2 technical calls per deal before the quote, and scope only: every price it drafts goes to the [AE](/capabilities/agents/ae) to send. The hub Sales Engineer Role sets no numeric limit |
| [Onboarding](/capabilities/agents/onboarding) | [`role:onboarding-specialist`](https://startupbuilder.dev/agents/customer/onboarding-specialist) | Mailboxes, Scheduling | `Tenant.provision`, `Customer.activate`, `Conversation.answer` | One rescue per customer within its first 14 days; a second goes to you. The hub Onboarding Specialist Role sets no numeric limit |
| [CSM](/capabilities/agents/csm) | [`role:success-manager`](https://startupbuilder.dev/agents/customer/success-manager) | CRM, Mailboxes, Sequences | `Subscription.keep`, `Renewal.open`, `Lead.nurture` | One save offer per cancel, only from the cancel Policy, and one ask per customer every 90 days; anything else goes to you. The hub Success Manager Role sets no numeric limit |
| [Head of customers](/capabilities/agents/head-of-customers) | [`role:customer-lead`](https://startupbuilder.dev/agents/customer/customer-lead) | Analytics and experiments, Mailboxes, Scheduling | `Conversation.answer`, `Conversation.assign`, `Conversation.escalate` | `Conversation.answer` up to 500 a day ([the hub customer lead’s limit](https://startupbuilder.dev/agents/customer/customer-lead)); every refund goes to the [Billing](/capabilities/agents/billing) seat |
| [Billing](/capabilities/agents/billing) | [`role:billing-specialist`](https://startupbuilder.dev/agents/finance/billing-specialist) | Mailboxes | `Invoice.bill`, `Invoice.collect`, `Order.refund` | `Order.refund` up to $100 a refund ([the hub Billing Specialist’s limit](https://startupbuilder.dev/agents/finance/billing-specialist)), through Stripe |
| [Partnerships](/capabilities/agents/partnerships) | [`role:partner-manager`](https://startupbuilder.dev/agents/sales/partner-manager) | Mailboxes, Prospecting, Social | [`Prospect.find`](/code/data/people/find), `Partner.create`, `Referral.create` | Up to 10 partner asks a week, and signs nothing itself: every partner Agreement goes to you. The hub Partner Manager Role sets no numeric limit |
| [Marketing lead](/capabilities/agents/marketing-lead) | [`role:marketing-lead`](https://startupbuilder.dev/agents/marketing/marketing-lead) | Ads, Analytics and experiments, Forms and waitlists, Mailboxes, SEO, Sequences, sites and content, Social | `PlayMix.compile`, `Play.apply`, `Experiment.start` | Up to 4 Plays running at once, and spends only inside the Demand Budget your strategy sets. The hub Marketing lead Role sets no numeric limit |
| [Content lead](/capabilities/agents/content-lead) | [`role:content-lead`](https://startupbuilder.dev/agents/marketing/content-lead) | Media, SEO, sites and content, Social | [`Keyword.measure`](/code/data/keywords/measure), [`Keyword.ask`](/code/data/keywords/ask), `Content.draft` | `Page.create` up to 5 a week ([the hub Content lead’s limit](https://startupbuilder.dev/agents/marketing/content-lead)) |
| [Paid media](/capabilities/agents/paid-media) | [`role:paid-media-manager`](https://startupbuilder.dev/agents/marketing/paid-media-manager) | Ads, Media | [`Keyword.forecast`](/code/data/keywords/forecast), [`Audience.create`](/code/apps/ads/create-audience), [`Campaign.create`](/code/apps/ads/create-campaign) | `Mandate.spend` up to $500 a week ([the hub Paid Media Manager’s limit](https://startupbuilder.dev/agents/marketing/paid-media-manager)), and only on spend you authorized |

## Switch seats on as customers arrive
Every seat can run from day one, but each one you switch on adds what it asks to your queue. Switch on the seats that move the number at your stage, and keep the queue to what you answer in one day.

| When | Seats running | Switch on when | Why then |
| --- | --- | --- | --- |
| At 0 customers | [You](/capabilities/agents/founder), [SDR](/capabilities/agents/sdr), [Content lead](/capabilities/agents/content-lead) | The product works end to end and your customer sentence is written | Reach is the only number that moves: about 400 people a month from 2 warmed inboxes, and pages that answer what buyers search. You take every call ([Planning estimate](/strategy/numbers#assumptions)). |
| At 10 customers | Add [Onboarding](/capabilities/agents/onboarding) and [CSM](/capabilities/agents/csm) | 10 paying customers, or activation under 70% within 14 days on 20 signups, whichever comes first | At 10, each silent customer is a tenth of revenue: an activation or a save now moves the number more than one more reply ([Planning estimate](/strategy/numbers#assumptions)). |
| At 50 customers | Add [Billing](/capabilities/agents/billing), [Partnerships](/capabilities/agents/partnerships) and [Head of customers](/capabilities/agents/head-of-customers) | 50 paying customers, or more than 20 customer conversations a week | At $149 a month, 50 customers is $7,450 of revenue a month: failed cards, referrals from a real base and the daily inbox each outgrow a weekly hour of yours ([Planning estimate](/strategy/numbers#assumptions)). |

## Four seats join on their own signal
Some seats follow a signal, not a customer count. The [AE](/capabilities/agents/ae) joins when booked calls pass 5 a week and your next open slot is more than 2 business days out. The [SE](/capabilities/agents/se) joins when the first buyer asks for a security questionnaire or a test on their own data.

The [Marketing lead](/capabilities/agents/marketing-lead) joins when a second Play runs beside cold email, so each one is read against its number every week. [Paid media](/capabilities/agents/paid-media) joins when a term forecasts under your break-even cost per click, $4.29 at $149 a month, and you authorize the spend ([Planning estimate](/strategy/numbers#assumptions)).

## An agent is a Role, a Function and its Tools
An agent Worker fills a Role: its [Permissions](https://startupbuilder.dev/business/nouns/permission), Goals and limits. It runs as an agentic [Function](https://startupbuilder.dev/business/nouns/function) with a pinned model, instructions, [Memory](https://startupbuilder.dev/business/nouns/memory) and [Skills](https://startupbuilder.dev/business/nouns/skill).

Its [Tools](https://startupbuilder.dev/business/nouns/tool) are exactly its Role's Permissions. The calls on [Data](/capabilities/data) and [Headless SaaS](/capabilities/apps) are therefore the whole of what it can do, and each one is logged.

Swap the agent for another, or for a person, and the Permissions, the limits and the record stay as they were.

## Agent tasks you buy
An agent task is the hub's Agent kind from [four kinds](https://startupbuilder.dev/products/four-kinds): one piece of work that passes its [Evaluator](https://startupbuilder.dev/business/nouns/evaluator)'s verdict, or is redone or free. It bills on that verdict, never on effort.

The Evaluator runs on another model and grades the output against what passing means for that task. A reply or a winning ad is the market's choice, so these tasks warrant the work, not the result.

Each is checked by a second model; a miss is redone, or it is free.

| Task | What passes means | Seat | Price |
| --- | --- | --- | --- |
| [Referral ask](/capabilities/keep-and-grow/referral-ask) | The outcome named is theirs and true, the reward matches the Policy, and the note asks for exactly one introduction. | [CSM](/capabilities/agents/csm) | About 2.4¢ per 5 asks |
| [Answer page per question](/capabilities/make-content/answer-pages) | The page passes the adversarial review, goes live on your site, and Index the site reads it indexed or names the engine’s reason. | [Content lead](/capabilities/agents/content-lead) | About 12¢ a page |
| [Answer threads](/capabilities/publish-and-post/answer-threads) | It answers the asker before it mentions anything, every claim holds against your records, and it reads like the thread’s best answers. | [Content lead](/capabilities/agents/content-lead) | About $2.30 per 10 answers |
| [Launch day](/capabilities/earn-first-links/launch-day) | Every post is live at its slot, every Hacker News, Reddit and Product Hunt comment had a fact brief within 10 minutes, and no brief or post states a fact your pages lack. | [Marketing lead](/capabilities/agents/marketing-lead) | About $1.08 a launch |
| [Link pitches](/capabilities/earn-first-links/link-pitches) | The pitch names the exact page and why the asset serves its readers, the asset exists, no claim passes the offer, and it asks for one placement. | [Marketing lead](/capabilities/agents/marketing-lead) | About 46¢ per 40 pitches |
| [Monthly search content](/capabilities/make-content/monthly-search-content) | The month’s pages pass both reviews and go live, and each is indexed or carries the engine’s reason. | [Content lead](/capabilities/agents/content-lead) | About $2.46 per 10 pages |
| [Upgrade note at the limit](/capabilities/keep-and-grow/upgrade-note) | Every number matches their usage, the price matches the offer, and the note makes one proposal in two sentences. | [CSM](/capabilities/agents/csm) | About 0.65¢ a note |
| [Save and win back](/capabilities/keep-and-grow/save-and-win-back) | Each at-risk or cancelling customer gets a note with an offer inside the Policy within 24 hours, and every fact in it matches their record. | [CSM](/capabilities/agents/csm) | About 0.7¢ a customer |
| [Account brief](/capabilities/reach-out/account-brief) | Every line has a source that says it, the why-now is under 90 days old, and the question is one sentence. | [AE](/capabilities/agents/ae) | About 9.3¢ a brief |
| [Answer every inbound](/capabilities/convert-visitors/answer-every-inbound) | Every inbound is answered within 5 minutes from your approved pages, with its Decision recorded. | [AE](/capabilities/agents/ae) | About 1.1¢ an inbound |
| [Ad kit](/capabilities/make-content/ad-kit) | Each asset meets its format’s size and length, matches the brand, carries the angle, and claims only what the offer does. | [Paid media](/capabilities/agents/paid-media) | About 38¢ an angle |
| [Founder posts](/capabilities/publish-and-post/founder-posts) | It reads as you on the voice samples, every number matches its record, and it makes one point. | [Content lead](/capabilities/agents/content-lead) | About 6.2¢ per 3 posts |
| [Message test](/capabilities/run-ads/message-test) | Every angle traces to a buyer phrase, every Variant claims only what the offer does and promises no result, and the readout names the winner the declared rule names, with its count. | [Paid media](/capabilities/agents/paid-media) | About 18¢ per 4 angles |
| [Personal first touch](/capabilities/reach-out/personal-first-touch) | Every person on the list gets a first touch whose opening line quotes their own evidence, and no message states a fact the row lacks; anyone it cannot write to is held with the reason. | [SDR](/capabilities/agents/sdr) | About $1.33 per 100 people |

## It acts as you on every Venue you authorize
Your agent acts as you on every site you authorize, in one of [three ways](/code/integrations#three-ways). Where a site has no API for a step, a browser agent signs in as you and does it.

You connect each account once with [`Integration.connect`](/code/integrations/calls/connect) and [`Handle.connect`](/code/integrations/calls/connect-handle). Every [Action](https://startupbuilder.dev/business/nouns/action) then records whom it acted for, under which standing approval, and how it ran.

| Way | Who it acts as | What the Action records |
| --- | --- | --- |
| Data | Nobody: it reads the market, not an account | The route tried, the cost and the reading’s `method` |
| Your account | You, through the grant you gave once, as on [Gmail](/code/integrations/gmail) or [LinkedIn](/code/integrations/linkedin) | The account, the grant used, and the site’s own id for the post or message |
| Browser agent | You, signed in, on a site with no API for that step, such as [Reddit](/code/integrations/reddit) | Each step with a screenshot, and the read-back that confirms it went live |

## What waits for you
Agents send and post inside their seat's limits. One approval rule on a class, such as `send`, makes every action in it wait for you, and going over a limit always asks.

You see the plan and its price before anything runs. Granting a standing approval is itself your call: when an agent asks for one, it waits for you. Each class and its default amount: the hub's [approvals](https://startupbuilder.dev/agents/approvals) page.

```ts
// 25 cold emails a day from each warmed inbox on tryleaseline.app, for 30 days.
// The Mandate holds 50 a day across both; each Mailbox’s own pace holds it to 25.
await $.Mandate.authorize({ agent: 'agents/sdr', verb: 'Contact.enroll', channels: ['mailboxes/warm-1', 'mailboxes/warm-2'], limit: { count: 50, period: 'day' }, expiresAt: '2026-11-26T00:00:00Z' })
```

```yaml
# The SDR seat’s Role file: one approval rule on send
approvals:
  - { class: send }
```

To see the first 20 before they go, run the enrollment with `try`, and it returns the drafts. To make every send wait for your OK, set one approval rule on `send`.

## Work is checked, not trusted
Every agentic step has a checker that is not its doer: an Evaluator on another model, a rule in code, or a person. The hub's [anatomy of a Service](https://startupbuilder.dev/products/service/anatomy) sets that rule, and the weakest check sets the assurance.

Claims get an adversarial review: every fact in a first line must match the row's evidence, or the line is cut. Quality gets an affirmative review, which asks what would make the draft better and applies it before it counts.

[`Action.evaluate`](https://startupbuilder.dev/business/nouns/action/evaluate) grades any Action against a rubric and records the verdict as an Event, so a Play reads pass rates the way it reads replies.

## Bring your own agent over MCP
Your own agent connects to the [MCP](/code/mcp) server with one key and gets three tools. `search` finds a call by the job you describe, `fetch` reads its page, and `do` runs it.

It works under the same Role, standing approvals and approval rules as the agent it replaces. The hub's [bring your own agent](https://startupbuilder.dev/agents/bring-your-own-agent) covers the swap.