Skip to content
GuidesTutorials

Building a service business

Build a Service Startup that fixes online store catalogs, with an Outcome Contract, an Evaluator on every delivery, and a fee earned only on acceptance.

You build catalogmend.com, a Service Startup that audits an online store's product catalog and fixes its listing errors. Agents do the work, an Evaluator checks it, and the fee is earned only when the Customer accepts.

What you build

The Startup sells one Offer: a catalog audit for $99, with every listing error fixed or explained within 48 hours. An Outcome Contract states what done means, who accepts, and the remedy for a miss.

You write the Offer, the contract, and the rubric. The Agent-run services firm Startup Template supplies the rest: the delivery Workflow, an agent in each Role the Startup needs, the Site, and the Portal.

Launch reads 12 checks for catalogmend.com, a Agent-run services firm Startup.

CheckIdKindApplies toPasses when
Offers publishedlive-offersregistryEvery StartupAt least one Offer is published with a price and terms; launch refuses a Startup without one.
Work definedlive-workregistryEvery StartupEvery published Offer has a workflow that delivers it, with each step assigned to software, an Agent, or a person.
People assignedlive-peopleregistryEvery StartupEvery role the workflows need is held by an Agent or a person, with instructions and limits.
Site publishedlive-siteuiEvery StartupThe site serves home, pricing, terms, and privacy pages under the Brand, readable by people and agents.
Test run passedlive-test-runtranscriptEvery StartupA sample Customer completes every published Offer end to end in test, with no real charge or message.
Portal readylive-portaluiEvery StartupThe customer portal on the site shows each Customer their orders, deliveries, invoices, and messages.
Agent API openlive-agent-apicontractEvery StartupThe API, MCP server, OpenAPI document, llms.txt, and agents.json serve every published Offer and pass conformance.
Payouts connectedlive-payoutscontractEvery StartupStripe takes payments for the Startup and pays out to its bank account.
Address resolveslive-addresscontractEvery StartupThe canonical Domain serves the Site over HTTPS with a valid certificate and, where it embeds a payment form, Stripe lists it as a payment method domain.
Five slots at Commitmentlive-slotsgradeEvery StartupAll five Founding Hypothesis slots hold Commitment Evidence from outside people. Slots customer, problem, approach, switch, differentiation at Commitment or stronger, outside Evidence only.
Evals passinglive-evalstranscriptAgent as a ServiceThe Agent passes its evaluation suite on every task type its Offers sell.
SLA publishedlive-slaregistryServices-as-Software, E2E managed serviceEvery service Offer states its outcome, its SLA, and the remedy when the SLA is missed.

You need node 20 or later and a terminal. Every command runs in the test environment, so no store is charged or contacted.

Steps

Terminal12 steps
  1. To create the Startup, run create startups with the template:

    npm create startups catalogmend.com -- --template agent-run-servicescd catalogmend
    Created Catalogmend in testStartup      startup_1Template     Agent-run services firmRoles        Founder, Sales Lead, Delivery Manager, Customer Lead, each held by an agentAsleep       33 Roles, each waking on its triggerClaim token  ct_4Rk9mP
  2. To define the work, create the Offer:

    Terminal
    OFFER=$(npx startup-builder do Offer.create --json '{
      "price": { "amount": 99, "currency": "USD" },
      "interval": "once",
      "terms": "Every listing error in your catalog fixed or explained within 48 hours."
    }' | jq -r '.offer["$id"] | split("/") | last')
  3. To grade every delivery before the Customer sees it, create the Evaluator:

    npx startup-builder do Evaluator.create --json '{"kind": "generative","rubric": "Every flagged listing has a title, a price, an image, and a valid category, or a note explaining why not."}'

    The rubric is the promise in testable form. An Evaluator that cannot fail checks nothing.

  4. To warrant the result, write the Offer's Outcome Contract:

    npx startup-builder do OutcomeContract.update --json '{"id": "outcome_contract_1","done": "The Evaluator passes on every flagged listing","accept": "The Customer, within 3 days; silence accepts","remedy": "One free revision within 24 hours, then a full refund"}'

    Done is not accepted. Done is the Startup's claim, checked by the Evaluator; acceptance is the Customer's, and only acceptance earns the fee.

  5. Publish the Offer:

    npx startup-builder do Offer.publish --json '{"offer":"'"$OFFER"'"}'
  6. To provision the Site, the Portal, and every Interface, build the Startup:

    npx startup-builder do Startup.build --json '{"startup":"startup_1"}'
  7. To place a test Order, have a sample store accept the Offer:

    npx startup-builder do Offer.accept --json '{"offer":"'"$OFFER"'","party":"Sample Store"}'

    The delivery Workflow starts on Order.placed. Agents read the sample catalog, fix each listing, and attach the evidence.

  8. To watch delivery, follow the Order's Events:

    npx startup-builder show /orders/order_1/events
    Order.placed      action_7   by customer_1Action.evaluated  action_12  listing-check: fail, 2 listings lack a categoryAction.evaluated  action_15  listing-check: passOrder.delivered   action_16  acceptance window closes in 3 days

    The first pass failed the rubric, so the work went back inside the delivery window. The Customer saw only the passing result.

  9. To close the test run, confirm the delivery as the sample store:

    npx startup-builder do Order.confirm --json '{"order":"order_1"}'

    Order.confirmed fires, the fee is earned, and billing starts. A dispute instead would hold the fee and start the remedy.

  10. To see what remains before Live, preview launch:

    npx startup-builder do Startup.launch --json '{"startup":"startup_1"}' --try
    Refused: 1 of 12 checks failsfail  Payouts connected    Startup not claimed
  11. To connect payouts, claim the Startup with the token from step 1, then finish payouts onboarding at the link it prints:

    npx startup-builder do Startup.claim --json '{"startup":"startup_1","claimToken":"ct_4Rk9mP"}'
  12. Launch:

    npx startup-builder do Startup.launch --json '{"startup":"startup_1"}'

Result

The Startup is Live and passes all twelve launch checks, including SLA published. A store that buys the audit pays $99, and the agents fix its catalog. The Evaluator grades the work, and the fee is earned when the store accepts or lets 3 days pass.

Next steps