Skip to content

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.

Deepens
Role, Mandate, Agent
Seats
12
Agent tasks
14
Mandate.authorize
You, to your agent

Let my SDR agent send up to 25 cold emails a day from each inbox on tryleaseline.app for 30 days.

curl -X POST "https://api.sb/leaseline.app/mandates/authorize?mode=try" \
  -H "Authorization: Bearer $SB_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"agent":"agents/sdr","verb":"Contact.enroll","channels":["mailboxes/warm-1","mailboxes/warm-2"],"limit":{"count":50,"period":"day"},"expiresAt":"2026-11-26T00:00:00Z"}'
npx startup-builder do Mandate.authorize --try --data '{"agent":"agents/sdr","verb":"Contact.enroll","channels":["mailboxes/warm-1","mailboxes/warm-2"],"limit":{"count":50,"period":"day"},"expiresAt":"2026-11-26T00:00:00Z"}'
{
  "name": "do",
  "arguments": {
    "mode": "try",
    "code": "return 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' })"
  }
}
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' })
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"
    }
  ]
}
Try mode reads, stores nothing and spends nothingAPI referenceIts Nouns

The reference for every call on this page is Integrations.

Seats your agents fill

Each seat is a hub Role with a written contract: its purpose, results, target, standards, limits and channels. An agent 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, set the number, answer every approval the other seats raise, and take the first sales calls yourself.

The marketing seats sit beside the sales ones. A Marketing lead picks Plays, a Content lead writes for search and AI answers, and Paid media spends only what you authorized: a standing approval (a Mandate, set with Mandate.authorize).

SeatRoleWorks inTypical callsLimits
You, as head of salesFounderAnalytics and experiments, SocialPlayMix.compile, Approval.approve, Approval.refuseLimit.raise up to $5,000 a month across every seat (the hub Founder’s limit)
SDRProspectorCRM, Mailboxes, Prospecting, Scheduling, SequencesAudience.build, Prospect.find, Prospect.verifyContact.enroll up to 200 a day (the hub Prospector’s limit), and never above the pace you set per Mailbox: 25 a day on each warmed inbox
AESales LeadCRM, Forms and waitlists, SchedulingMeeting.book, Deal.advance, Deal.proposeDeal.propose up to $25,000 a deal (the hub Sales lead’s limit), and every quote at the offer’s list price
SESales EngineerCRM, SchedulingLead.qualify, Deal.propose, Quote.createUp to 2 technical calls per deal before the quote, and scope only: every price it drafts goes to the AE to send. The hub Sales Engineer Role sets no numeric limit
OnboardingOnboarding SpecialistMailboxes, SchedulingTenant.provision, Customer.activate, Conversation.answerOne rescue per customer within its first 14 days; a second goes to you. The hub Onboarding Specialist Role sets no numeric limit
CSMSuccess ManagerCRM, Mailboxes, SequencesSubscription.keep, Renewal.open, Lead.nurtureOne 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 customersCustomer LeadAnalytics and experiments, Mailboxes, SchedulingConversation.answer, Conversation.assign, Conversation.escalateConversation.answer up to 500 a day (the hub customer lead’s limit); every refund goes to the Billing seat
BillingBilling SpecialistMailboxesInvoice.bill, Invoice.collect, Order.refundOrder.refund up to $100 a refund (the hub Billing Specialist’s limit), through Stripe
PartnershipsPartner ManagerMailboxes, Prospecting, SocialProspect.find, Partner.create, Referral.createUp 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 leadMarketing LeadAds, Analytics and experiments, Forms and waitlists, Mailboxes, SEO, Sequences, sites and content, SocialPlayMix.compile, Play.apply, Experiment.startUp 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 leadContent LeadMedia, SEO, sites and content, SocialKeyword.measure, Keyword.ask, Content.draftPage.create up to 5 a week (the hub Content lead’s limit)
Paid mediaPaid Media ManagerAds, MediaKeyword.forecast, Audience.create, Campaign.createMandate.spend up to $500 a week (the hub Paid Media Manager’s limit), 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.

WhenSeats runningSwitch on whenWhy then
At 0 customersYou, SDR, Content leadThe product works end to end and your customer sentence is writtenReach 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).
At 10 customersAdd Onboarding and CSM10 paying customers, or activation under 70% within 14 days on 20 signups, whichever comes firstAt 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).
At 50 customersAdd Billing, Partnerships and Head of customers50 paying customers, or more than 20 customer conversations a weekAt $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).

Four seats join on their own signal

Some seats follow a signal, not a customer count. The AE joins when booked calls pass 5 a week and your next open slot is more than 2 business days out. The SE joins when the first buyer asks for a security questionnaire or a test on their own data.

The Marketing lead joins when a second Play runs beside cold email, so each one is read against its number every week. 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).

An agent is a Role, a Function and its Tools

An agent Worker fills a Role: its Permissions, Goals and limits. It runs as an agentic Function with a pinned model, instructions, Memory and Skills.

Its Tools are exactly its Role's Permissions. The calls on Data and Headless SaaS 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: one piece of work that passes its 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.

TaskWhat passes meansSeatPrice
Referral askThe outcome named is theirs and true, the reward matches the Policy, and the note asks for exactly one introduction.CSMAbout 2.4¢ per 5 asks
Answer page per questionThe page passes the adversarial review, goes live on your site, and Index the site reads it indexed or names the engine’s reason.Content leadAbout 12¢ a page
Answer threadsIt answers the asker before it mentions anything, every claim holds against your records, and it reads like the thread’s best answers.Content leadAbout $2.30 per 10 answers
Launch dayEvery 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 leadAbout $1.08 a launch
Link pitchesThe 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 leadAbout 46¢ per 40 pitches
Monthly search contentThe month’s pages pass both reviews and go live, and each is indexed or carries the engine’s reason.Content leadAbout $2.46 per 10 pages
Upgrade note at the limitEvery number matches their usage, the price matches the offer, and the note makes one proposal in two sentences.CSMAbout 0.65¢ a note
Save and win backEach 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.CSMAbout 0.7¢ a customer
Account briefEvery line has a source that says it, the why-now is under 90 days old, and the question is one sentence.AEAbout 9.3¢ a brief
Answer every inboundEvery inbound is answered within 5 minutes from your approved pages, with its Decision recorded.AEAbout 1.1¢ an inbound
Ad kitEach asset meets its format’s size and length, matches the brand, carries the angle, and claims only what the offer does.Paid mediaAbout 38¢ an angle
Founder postsIt reads as you on the voice samples, every number matches its record, and it makes one point.Content leadAbout 6.2¢ per 3 posts
Message testEvery 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 mediaAbout 18¢ per 4 angles
Personal first touchEvery 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.SDRAbout $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. 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 and Handle.connect. Every Action then records whom it acted for, under which standing approval, and how it ran.

WayWho it acts asWhat the Action records
DataNobody: it reads the market, not an accountThe route tried, the cost and the reading’s method
Your accountYou, through the grant you gave once, as on Gmail or LinkedInThe account, the grant used, and the site’s own id for the post or message
Browser agentYou, signed in, on a site with no API for that step, such as RedditEach 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 page.

TypeScript
// 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 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 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 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 covers the swap.

    Contents