{
  "instructions": [
    "Offer only guides whose status is `live` or `beta`; say a `planned` one is planned.",
    "Match the founder's words in [/asks.json](/asks.json), then call the guide's Verbs in order, with the founder's own values in place of each input its `examples` names; `find:` reads the record first, `$N` is step N's result.",
    "Ask at most the plan’s one question, and stop at every exit and approval the guide declares.",
    "Read any page as Markdown at its URL plus `.md`, and cite its id."
  ],
  "guides": [
    {
      "id": "find-out-if-anyone-wants-this",
      "title": "Find out if anyone wants this",
      "says": [
        "Find out if anyone wants this",
        "Validate this idea",
        "Test demand before I build anything",
        "Does anyone want this",
        "See if people will pay before I build it",
        "Put up a page that takes deposits and asks a few questions",
        "Will anyone pay for this"
      ],
      "status": "live",
      "shelf": "front",
      "group": "find-out",
      "tab": "start",
      "page": {
        "id": "page:start/guides/find-out-if-anyone-wants-this",
        "md": "/start/guides/find-out-if-anyone-wants-this.md"
      },
      "program": [
        "Hypothesis.create",
        "Offer.create",
        "Offer.publish",
        "Survey.create",
        "Site.publish"
      ],
      "inputs": [
        {
          "statement": "Property managers with up to 200 units put down $29 to stop missing lease renewals.",
          "kind": "switch",
          "threshold": "10 deposits from outside buyers, out of 300 people reached, within 14 days of going live"
        },
        {
          "price": {
            "amount": 29,
            "currency": "USD"
          },
          "interval": "once",
          "terms": "Refundable deposit. Refunded in full on request before Leaseline ships, and to everyone if it misses its ship date. At ship it pays the first month."
        },
        {
          "offer": "$2.$id"
        },
        {
          "fields": [
            {
              "name": "today",
              "label": "What do you use for this today?"
            },
            {
              "name": "hardest",
              "label": "What is the hardest part?"
            },
            {
              "name": "worth",
              "label": "What would fixing it be worth to you each month?"
            }
          ]
        },
        {
          "site": "find:site"
        }
      ],
      "examples": [
        [
          "statement",
          "kind",
          "threshold"
        ],
        [
          "price",
          "interval",
          "terms"
        ],
        [],
        [
          "fields"
        ],
        []
      ],
      "plans": {
        "idea": {
          "calls": [
            "Hypothesis.create",
            "Offer.create",
            "Offer.publish",
            "Survey.create",
            "Site.publish"
          ],
          "question": "How many deposits, from how many people reached, by what date?"
        },
        "building": {
          "calls": [
            "Survey.create",
            "Site.publish"
          ],
          "question": "Ask the people who put down a deposit, or only new ones?"
        },
        "live": {
          "calls": [
            "Waitlist.create",
            "Site.publish"
          ],
          "question": "Which feature is the waitlist for?"
        }
      },
      "needs": [
        "noun:startup"
      ],
      "approval": "ask",
      "leaves": [
        "stripe-onboarding"
      ],
      "change": [
        "Make the deposit $49.",
        "Give it 30 days instead of 14.",
        "Use a waitlist with no deposit instead.",
        "Show me what people are asking for."
      ],
      "later": [],
      "calls": {
        "ask": "Find out if anyone wants this",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/hypotheses \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"statement\":\"Property managers with up to 200 units put down $29 to stop missing lease renewals.\",\"kind\":\"switch\",\"threshold\":\"10 deposits from outside buyers, out of 300 people reached, within 14 days of going live\"}'",
          "OFFER=$(curl -X POST https://api.sb/leaseline.app/offers \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"price\":{\"amount\":29,\"currency\":\"USD\"},\"interval\":\"once\",\"terms\":\"Refundable deposit. Refunded in full on request before Leaseline ships, and to everyone if it misses its ship date. At ship it pays the first month.\"}' | jq -r '.offer[\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/offers/$OFFER/publish \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\"",
          "curl -X POST https://api.sb/leaseline.app/surveys \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"fields\":[{\"name\":\"today\",\"label\":\"What do you use for this today?\"},{\"name\":\"hardest\",\"label\":\"What is the hardest part?\"},{\"name\":\"worth\",\"label\":\"What would fixing it be worth to you each month?\"}]}'",
          "SITE=$(curl \"https://api.sb/leaseline.app/sites?limit=1\" \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" | jq -r '.sites[0][\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/sites/$SITE/publish \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\""
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Hypothesis.create({ statement: 'Property managers with up to 200 units put down $29 to stop missing lease renewals.', kind: 'switch', threshold: '10 deposits from outside buyers, out of 300 people reached, within 14 days of going live' })\nconst offer = await $.Offer.create({ price: { amount: 29, currency: 'USD' }, interval: 'once', terms: 'Refundable deposit. Refunded in full on request before Leaseline ships, and to everyone if it misses its ship date. At ship it pays the first month.' })\nawait $.Offer.publish({ offer: offer.$id })\nawait $.Survey.create({ fields: [{ name: 'today', label: 'What do you use for this today?' }, { name: 'hardest', label: 'What is the hardest part?' }, { name: 'worth', label: 'What would fixing it be worth to you each month?' }] })\nconst [site] = await $.Site.list({ limit: 1 })\nawait $.Site.publish({ site: site.$id })",
        "cli": [
          "npx startup-builder do Hypothesis.create --json '{\"statement\":\"Property managers with up to 200 units put down $29 to stop missing lease renewals.\",\"kind\":\"switch\",\"threshold\":\"10 deposits from outside buyers, out of 300 people reached, within 14 days of going live\"}'",
          "OFFER=$(npx startup-builder do Offer.create --json '{\"price\":{\"amount\":29,\"currency\":\"USD\"},\"interval\":\"once\",\"terms\":\"Refundable deposit. Refunded in full on request before Leaseline ships, and to everyone if it misses its ship date. At ship it pays the first month.\"}' | jq -r '.offer[\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Offer.publish --json '{\"offer\":\"'\"$OFFER\"'\"}'",
          "npx startup-builder do Survey.create --json '{\"fields\":[{\"name\":\"today\",\"label\":\"What do you use for this today?\"},{\"name\":\"hardest\",\"label\":\"What is the hardest part?\"},{\"name\":\"worth\",\"label\":\"What would fixing it be worth to you each month?\"}]}'",
          "SITE=$(npx startup-builder do Site.list --json '{\"limit\":1}' | jq -r '.sites[0][\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Site.publish --json '{\"site\":\"'\"$SITE\"'\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "await $.Hypothesis.create({ statement: 'Property managers with up to 200 units put down $29 to stop missing lease renewals.', kind: 'switch', threshold: '10 deposits from outside buyers, out of 300 people reached, within 14 days of going live' })\nconst offer = await $.Offer.create({ price: { amount: 29, currency: 'USD' }, interval: 'once', terms: 'Refundable deposit. Refunded in full on request before Leaseline ships, and to everyone if it misses its ship date. At ship it pays the first month.' })\nawait $.Offer.publish({ offer: offer.$id })\nawait $.Survey.create({ fields: [{ name: 'today', label: 'What do you use for this today?' }, { name: 'hardest', label: 'What is the hardest part?' }, { name: 'worth', label: 'What would fixing it be worth to you each month?' }] })\nconst [site] = await $.Site.list({ limit: 1 })\nreturn await $.Site.publish({ site: site.$id })"
          }
        }
      }
    },
    {
      "id": "spend-200-to-test-faster",
      "title": "Spend $200 to test faster",
      "says": [
        "Spend $200 to test faster",
        "Run some ads to the listening page",
        "Buy a little traffic to see who signs up",
        "Get more people to the page",
        "Run a small ad test"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "find-out",
      "tab": "start",
      "page": {
        "id": "page:start/guides/spend-200-to-test-faster",
        "md": "/start/guides/spend-200-to-test-faster.md"
      },
      "program": [
        "DemandBudget.create",
        "Hypothesis.create",
        "Experiment.create",
        "Hypothesis.test",
        "Experiment.start"
      ],
      "inputs": [
        {
          "amount": {
            "amount": 200,
            "currency": "USD"
          },
          "tier": "$100",
          "target": "40 waitlist signups at $5 or less each",
          "stopRule": "Stop at $200 spent or after 14 days, whichever comes first."
        },
        {
          "statement": "Ads that name missed lease renewals bring waitlist signups at $5 or less each.",
          "kind": "loop",
          "threshold": "40 waitlist signups at $5 or less each, within 14 days"
        },
        {
          "variants": [
            {
              "name": "renewals",
              "note": "Headline: Never miss a lease renewal again.",
              "measure": "Waitlist signups per dollar spent."
            },
            {
              "name": "hours",
              "note": "Headline: Get back the hours you spend chasing renewals."
            }
          ]
        },
        {
          "hypothesis": "$2.$id",
          "experiment": "$3.$id"
        },
        {
          "experiment": "$3.$id"
        }
      ],
      "examples": [
        [
          "amount",
          "target",
          "stopRule"
        ],
        [
          "statement",
          "kind",
          "threshold"
        ],
        [
          "variants"
        ],
        [],
        []
      ],
      "plans": {
        "idea": {
          "calls": [
            "DemandBudget.create",
            "Hypothesis.create",
            "Experiment.create",
            "Hypothesis.test",
            "Experiment.start"
          ],
          "question": "Send them to the waitlist or to a deposit page?"
        },
        "building": {
          "calls": [
            "DemandBudget.create",
            "Experiment.create",
            "Experiment.start"
          ],
          "question": "Which page should the ads send people to?"
        },
        "live": {
          "calls": [
            "DemandBudget.create",
            "Experiment.create",
            "Experiment.start"
          ],
          "question": "Which Offer should the ads sell?"
        }
      },
      "needs": [
        "guide:find-out-if-anyone-wants-this",
        "verb:Startup.claim"
      ],
      "approval": "ask",
      "leaves": [],
      "change": [
        "Stop the test at $100.",
        "Send the ads to the deposit page instead.",
        "Try LinkedIn instead of Google."
      ],
      "later": [],
      "calls": {
        "ask": "Spend $200 to test faster",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/demand-budgets \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"amount\":{\"amount\":200,\"currency\":\"USD\"},\"tier\":\"$100\",\"target\":\"40 waitlist signups at $5 or less each\",\"stopRule\":\"Stop at $200 spent or after 14 days, whichever comes first.\"}'",
          "HYPOTHESIS=$(curl -X POST https://api.sb/leaseline.app/hypotheses \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"statement\":\"Ads that name missed lease renewals bring waitlist signups at $5 or less each.\",\"kind\":\"loop\",\"threshold\":\"40 waitlist signups at $5 or less each, within 14 days\"}' | jq -r '.hypothesis[\"$id\"] | split(\"/\") | last')",
          "EXPERIMENT=$(curl -X POST https://api.sb/leaseline.app/experiments \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"variants\":[{\"name\":\"renewals\",\"note\":\"Headline: Never miss a lease renewal again.\",\"measure\":\"Waitlist signups per dollar spent.\"},{\"name\":\"hours\",\"note\":\"Headline: Get back the hours you spend chasing renewals.\"}]}' | jq -r '.experiment[\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/hypotheses/$HYPOTHESIS/test \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"experiment\":\"'\"$EXPERIMENT\"'\"}'",
          "curl -X POST https://api.sb/leaseline.app/experiments/$EXPERIMENT/start \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\""
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.DemandBudget.create({ amount: { amount: 200, currency: 'USD' }, tier: '$100', target: '40 waitlist signups at $5 or less each', stopRule: 'Stop at $200 spent or after 14 days, whichever comes first.' })\nconst hypothesis = await $.Hypothesis.create({ statement: 'Ads that name missed lease renewals bring waitlist signups at $5 or less each.', kind: 'loop', threshold: '40 waitlist signups at $5 or less each, within 14 days' })\nconst experiment = await $.Experiment.create({ variants: [{ name: 'renewals', note: 'Headline: Never miss a lease renewal again.', measure: 'Waitlist signups per dollar spent.' }, { name: 'hours', note: 'Headline: Get back the hours you spend chasing renewals.' }] })\nawait $.Hypothesis.test({ hypothesis: hypothesis.$id, experiment: experiment.$id })\nawait $.Experiment.start({ experiment: experiment.$id })",
        "cli": [
          "npx startup-builder do DemandBudget.create --json '{\"amount\":{\"amount\":200,\"currency\":\"USD\"},\"tier\":\"$100\",\"target\":\"40 waitlist signups at $5 or less each\",\"stopRule\":\"Stop at $200 spent or after 14 days, whichever comes first.\"}'",
          "HYPOTHESIS=$(npx startup-builder do Hypothesis.create --json '{\"statement\":\"Ads that name missed lease renewals bring waitlist signups at $5 or less each.\",\"kind\":\"loop\",\"threshold\":\"40 waitlist signups at $5 or less each, within 14 days\"}' | jq -r '.hypothesis[\"$id\"] | split(\"/\") | last')",
          "EXPERIMENT=$(npx startup-builder do Experiment.create --json '{\"variants\":[{\"name\":\"renewals\",\"note\":\"Headline: Never miss a lease renewal again.\",\"measure\":\"Waitlist signups per dollar spent.\"},{\"name\":\"hours\",\"note\":\"Headline: Get back the hours you spend chasing renewals.\"}]}' | jq -r '.experiment[\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Hypothesis.test --json '{\"hypothesis\":\"'\"$HYPOTHESIS\"'\",\"experiment\":\"'\"$EXPERIMENT\"'\"}'",
          "npx startup-builder do Experiment.start --json '{\"experiment\":\"'\"$EXPERIMENT\"'\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "await $.DemandBudget.create({ amount: { amount: 200, currency: 'USD' }, tier: '$100', target: '40 waitlist signups at $5 or less each', stopRule: 'Stop at $200 spent or after 14 days, whichever comes first.' })\nconst hypothesis = await $.Hypothesis.create({ statement: 'Ads that name missed lease renewals bring waitlist signups at $5 or less each.', kind: 'loop', threshold: '40 waitlist signups at $5 or less each, within 14 days' })\nconst experiment = await $.Experiment.create({ variants: [{ name: 'renewals', note: 'Headline: Never miss a lease renewal again.', measure: 'Waitlist signups per dollar spent.' }, { name: 'hours', note: 'Headline: Get back the hours you spend chasing renewals.' }] })\nawait $.Hypothesis.test({ hypothesis: hypothesis.$id, experiment: experiment.$id })\nreturn await $.Experiment.start({ experiment: experiment.$id })"
          }
        }
      }
    },
    {
      "id": "start-a-business",
      "title": "Start a business",
      "says": [
        "Start a business that tracks lease renewals for small property managers, $29 a month",
        "Make me a business for landlords who keep missing renewal dates",
        "Turn my idea into a business: renewal reminders for managers with up to 200 units",
        "Turn my idea into a startup",
        "Create a startup from one sentence"
      ],
      "status": "live",
      "shelf": "front",
      "group": "find-out",
      "tab": "business",
      "page": {
        "id": "page:business/start-a-business",
        "md": "/business/start-a-business.md"
      },
      "program": [
        "Startup.create",
        "Startup.build"
      ],
      "inputs": [
        {
          "name": "Leaseline",
          "idea": "Tracks lease renewals for small property managers, $29 a month."
        },
        {
          "startup": "$1.$id"
        }
      ],
      "examples": [
        [
          "name",
          "idea"
        ],
        []
      ],
      "plans": {
        "idea": {
          "calls": [
            "Startup.create",
            "Startup.build"
          ],
          "question": "Who is it for, and what does it charge?"
        },
        "live": {
          "calls": [
            "Startup.clone"
          ],
          "question": "Start from this business, or from a template?"
        }
      },
      "needs": [],
      "approval": "none",
      "leaves": [],
      "change": [
        "Call it Renewly instead.",
        "Charge $49 a month for up to 500 units.",
        "Sell to agencies as well as landlords.",
        "Use the Solo SaaS template instead."
      ],
      "later": [],
      "calls": {
        "ask": "Start a business that tracks lease renewals for small property managers, $29 a month",
        "api": [
          "STARTUP=$(curl -X POST https://api.sb/leaseline.app/startups \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"name\":\"Leaseline\",\"idea\":\"Tracks lease renewals for small property managers, $29 a month.\"}' | jq -r '.startup[\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/startups/$STARTUP/build \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\""
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nconst startup = await $.Startup.create({ name: 'Leaseline', idea: 'Tracks lease renewals for small property managers, $29 a month.' })\nawait $.Startup.build({ startup: startup.$id })",
        "cli": [
          "STARTUP=$(npx startup-builder do Startup.create --json '{\"name\":\"Leaseline\",\"idea\":\"Tracks lease renewals for small property managers, $29 a month.\"}' | jq -r '.startup[\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Startup.build --json '{\"startup\":\"'\"$STARTUP\"'\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "const startup = await $.Startup.create({ name: 'Leaseline', idea: 'Tracks lease renewals for small property managers, $29 a month.' })\nreturn await $.Startup.build({ startup: startup.$id })"
          }
        }
      }
    },
    {
      "id": "what-are-people-asking-for",
      "title": "What are people asking for",
      "says": [
        "What are people asking for",
        "What did signups say",
        "Which problems come up most in the interviews",
        "Summarize the interviews",
        "What do people want most"
      ],
      "status": "live",
      "shelf": "front",
      "group": "find-out",
      "tab": "start",
      "page": {
        "id": "page:start/guides/what-are-people-asking-for",
        "md": "/start/guides/what-are-people-asking-for.md"
      },
      "program": [
        "Problem.rank"
      ],
      "inputs": [
        null
      ],
      "examples": [
        null
      ],
      "plans": {
        "idea": {
          "calls": [
            "Problem.rank"
          ]
        },
        "live": {
          "calls": [
            "Problem.rank",
            "Issue.schedule"
          ],
          "question": "Put the top one in next week’s work?"
        },
        "repeatable": {
          "calls": [
            "Collection.query",
            "Problem.rank"
          ],
          "question": "Paying customers only, or everyone?"
        }
      },
      "needs": [
        "guide:find-out-if-anyone-wants-this"
      ],
      "approval": "none",
      "leaves": [],
      "change": [
        "Show only people who said they would pay.",
        "Compare this week with last week.",
        "Email the top ten people to book a call."
      ],
      "later": [],
      "calls": {
        "ask": "What are people asking for",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/problems/rank \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"icp\":\"icp_1\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Problem.rank({ icp: 'icp_1' })",
        "cli": [
          "npx startup-builder do Problem.rank --json '{\"icp\":\"icp_1\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "return await $.Problem.rank({ icp: 'icp_1' })"
          }
        }
      }
    },
    {
      "id": "which-integrations-do-people-want",
      "title": "Which integrations do people want",
      "says": [
        "Which integrations do people want",
        "Should Teams come before Slack",
        "How many people asked for Outlook",
        "Which tools should we connect to first"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "find-out",
      "tab": "start",
      "page": {
        "id": "page:start/guides/which-integrations-do-people-want",
        "md": "/start/guides/which-integrations-do-people-want.md"
      },
      "program": [
        "Collection.query"
      ],
      "inputs": [
        {
          "query": "Waitlist signups grouped by the integration they asked for, most requested first."
        }
      ],
      "examples": [
        [
          "query"
        ]
      ],
      "plans": {
        "idea": {
          "calls": [
            "Collection.query"
          ]
        },
        "live": {
          "calls": [
            "Collection.query",
            "Waitlist.create"
          ],
          "question": "Open a waitlist for the top one?"
        }
      },
      "needs": [
        "guide:find-out-if-anyone-wants-this"
      ],
      "approval": "none",
      "leaves": [],
      "change": [
        "Open a waitlist for Outlook.",
        "Tell everyone who asked for Slack that it shipped.",
        "Break it down by company size."
      ],
      "later": [],
      "calls": {
        "ask": "Which integrations do people want",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/collections/query \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"query\":\"Waitlist signups grouped by the integration they asked for, most requested first.\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Collection.query({ query: 'Waitlist signups grouped by the integration they asked for, most requested first.' })",
        "cli": [
          "npx startup-builder do Collection.query --json '{\"query\":\"Waitlist signups grouped by the integration they asked for, most requested first.\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "return await $.Collection.query({ query: 'Waitlist signups grouped by the integration they asked for, most requested first.' })"
          }
        }
      }
    },
    {
      "id": "buy-a-domain",
      "title": "Buy a domain",
      "says": [
        "Buy leaseline.app",
        "Find me a domain for the business under $20 a year",
        "Get the .com too, so no one else takes it",
        "Get me a domain",
        "Register a new domain",
        "Pick a domain name for us",
        "Find a name we can register",
        "Is leaseline.app available"
      ],
      "status": "live",
      "shelf": "front",
      "group": "put-it-up",
      "tab": "products",
      "page": {
        "id": "page:products/site/domains/buy-a-domain",
        "md": "/products/site/domains/buy-a-domain.md"
      },
      "program": [
        "Domain.search",
        "Domain.register",
        "Domain.connect"
      ],
      "inputs": [
        {
          "query": "leaseline"
        },
        {
          "hostname": "leaseline.app",
          "startup": "find:startup"
        },
        {
          "hostname": "leaseline.app",
          "startup": "find:startup"
        }
      ],
      "examples": [
        [
          "query"
        ],
        [
          "hostname"
        ],
        [
          "hostname"
        ]
      ],
      "plans": {
        "idea": {
          "calls": [
            "Domain.search",
            "Domain.register",
            "Domain.connect"
          ],
          "question": "Under $20 a year, or is a premium name worth it?"
        },
        "live": {
          "calls": [
            "Domain.search",
            "Domain.register"
          ],
          "question": "Point it at the site, or hold it so no one else takes it?"
        }
      },
      "needs": [
        "noun:startup"
      ],
      "approval": "ask",
      "leaves": [],
      "change": [
        "Send leaseline.com to leaseline.app.",
        "Give me hello@leaseline.app.",
        "Show me .com and .io options first.",
        "Renew it for five years."
      ],
      "later": [],
      "calls": {
        "ask": "Buy leaseline.app",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/domains/search \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"query\":\"leaseline\"}'",
          "STARTUP=$(curl \"https://api.sb/leaseline.app/startups?limit=1\" \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" | jq -r '.startups[0][\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/domains/register \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"hostname\":\"leaseline.app\",\"startup\":\"'\"$STARTUP\"'\"}'",
          "curl -X POST https://api.sb/leaseline.app/domains/connect \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"hostname\":\"leaseline.app\",\"startup\":\"'\"$STARTUP\"'\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Domain.search({ query: 'leaseline' })\nconst [startup] = await $.Startup.list({ limit: 1 })\nawait $.Domain.register({ hostname: 'leaseline.app', startup: startup.$id })\nawait $.Domain.connect({ hostname: 'leaseline.app', startup: startup.$id })",
        "cli": [
          "npx startup-builder do Domain.search --json '{\"query\":\"leaseline\"}'",
          "STARTUP=$(npx startup-builder do Startup.list --json '{\"limit\":1}' | jq -r '.startups[0][\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Domain.register --json '{\"hostname\":\"leaseline.app\",\"startup\":\"'\"$STARTUP\"'\"}'",
          "npx startup-builder do Domain.connect --json '{\"hostname\":\"leaseline.app\",\"startup\":\"'\"$STARTUP\"'\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "await $.Domain.search({ query: 'leaseline' })\nconst [startup] = await $.Startup.list({ limit: 1 })\nawait $.Domain.register({ hostname: 'leaseline.app', startup: startup.$id })\nreturn await $.Domain.connect({ hostname: 'leaseline.app', startup: startup.$id })"
          }
        }
      }
    },
    {
      "id": "connect-my-domain",
      "title": "Connect my domain",
      "says": [
        "Connect leaseline.com. I bought it somewhere else",
        "Use the domain I already own for my site",
        "Point leaseline.com at the business",
        "Connect my domain",
        "I bought the name somewhere else, point it here"
      ],
      "status": "live",
      "shelf": "front",
      "group": "put-it-up",
      "tab": "products",
      "page": {
        "id": "page:products/site/domains/connect-my-domain",
        "md": "/products/site/domains/connect-my-domain.md"
      },
      "program": [
        "Domain.connect"
      ],
      "inputs": [
        {
          "hostname": "leaseline.com",
          "startup": "find:startup"
        }
      ],
      "examples": [
        [
          "hostname"
        ]
      ],
      "plans": {
        "idea": {
          "calls": [
            "Domain.connect"
          ]
        },
        "live": {
          "calls": [
            "Domain.connect",
            "Domain.transfer"
          ],
          "question": "Move the registration here too, or leave it where it is?"
        }
      },
      "needs": [
        "noun:startup"
      ],
      "approval": "ask",
      "leaves": [
        "registrar"
      ],
      "change": [
        "Send leaseline.app to leaseline.com.",
        "Give me hello@ and support@ at leaseline.com."
      ],
      "later": [],
      "calls": {
        "ask": "Connect leaseline.com. I bought it somewhere else",
        "api": [
          "STARTUP=$(curl \"https://api.sb/leaseline.app/startups?limit=1\" \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" | jq -r '.startups[0][\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/domains/connect \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"hostname\":\"leaseline.com\",\"startup\":\"'\"$STARTUP\"'\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nconst [startup] = await $.Startup.list({ limit: 1 })\nawait $.Domain.connect({ hostname: 'leaseline.com', startup: startup.$id })",
        "cli": [
          "STARTUP=$(npx startup-builder do Startup.list --json '{\"limit\":1}' | jq -r '.startups[0][\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Domain.connect --json '{\"hostname\":\"leaseline.com\",\"startup\":\"'\"$STARTUP\"'\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "const [startup] = await $.Startup.list({ limit: 1 })\nreturn await $.Domain.connect({ hostname: 'leaseline.com', startup: startup.$id })"
          }
        }
      }
    },
    {
      "id": "get-email-at-my-domain",
      "title": "Get email at my domain",
      "says": [
        "Give me dana@leaseline.app",
        "Get email at my domain",
        "Set up support@leaseline.app email for customers",
        "Set up a mailbox for me"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "put-it-up",
      "tab": "products",
      "page": {
        "id": "page:products/site/domains/get-email-at-my-domain",
        "md": "/products/site/domains/get-email-at-my-domain.md"
      },
      "program": [
        "Domain.authenticate",
        "Mailbox.create"
      ],
      "inputs": [
        {
          "domain": "domain_leaseline_app"
        },
        {
          "medium": "email",
          "address": "dana@leaseline.app",
          "stream": "transactional"
        }
      ],
      "examples": [
        [
          "domain"
        ],
        [
          "medium",
          "address",
          "stream"
        ]
      ],
      "plans": {
        "idea": {
          "calls": [
            "Domain.authenticate",
            "Mailbox.create"
          ]
        },
        "live": {
          "calls": [
            "Mailbox.create"
          ],
          "question": "For a person or for an agent?"
        }
      },
      "needs": [
        "guide:buy-a-domain"
      ],
      "approval": "none",
      "leaves": [],
      "change": [
        "Route support@ to the support agent.",
        "Forward billing@ to my bookkeeper.",
        "Retire the old hello@ address."
      ],
      "later": [],
      "calls": {
        "ask": "Give me dana@leaseline.app",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/domains/domain_leaseline_app/authenticate \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\"",
          "curl -X POST https://api.sb/leaseline.app/mailboxes \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"medium\":\"email\",\"address\":\"dana@leaseline.app\",\"stream\":\"transactional\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Domain.authenticate({ domain: 'domain_leaseline_app' })\nawait $.Mailbox.create({ medium: 'email', address: 'dana@leaseline.app', stream: 'transactional' })",
        "cli": [
          "npx startup-builder do Domain.authenticate --json '{\"domain\":\"domain_leaseline_app\"}'",
          "npx startup-builder do Mailbox.create --json '{\"medium\":\"email\",\"address\":\"dana@leaseline.app\",\"stream\":\"transactional\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "await $.Domain.authenticate({ domain: 'domain_leaseline_app' })\nreturn await $.Mailbox.create({ medium: 'email', address: 'dana@leaseline.app', stream: 'transactional' })"
          }
        }
      }
    },
    {
      "id": "launch-my-business",
      "title": "Launch my business",
      "says": [
        "Launch Leaseline",
        "Put the business live and start taking payments",
        "Open leaseline.app to customers today",
        "Go live",
        "Are we ready to launch",
        "Hook up Stripe and take real cards"
      ],
      "status": "live",
      "shelf": "front",
      "group": "put-it-up",
      "tab": "business",
      "page": {
        "id": "page:business/launch-my-business",
        "md": "/business/launch-my-business.md"
      },
      "program": [
        "Startup.launch"
      ],
      "inputs": [
        {
          "startup": "find:startup"
        }
      ],
      "examples": [
        []
      ],
      "plans": {
        "idea": {
          "calls": [
            "Offer.create",
            "Offer.publish",
            "Site.publish"
          ],
          "question": "A refundable deposit, or the full price?"
        },
        "building": {
          "calls": [
            "Startup.launch"
          ]
        }
      },
      "needs": [
        "verb:Startup.claim",
        "noun:offer",
        "guide:put-up-a-page"
      ],
      "approval": "ask",
      "leaves": [],
      "change": [
        "Launch on Monday at 9 am.",
        "Tell my waitlist a day before everyone else.",
        "Pause the business for a week."
      ],
      "later": [
        {
          "guide": "sell-outside-the-us",
          "wakesOn": {
            "event": "Order.placed",
            "where": "the buyer’s address is outside the United States",
            "first": true
          }
        }
      ],
      "calls": {
        "ask": "Launch Leaseline",
        "api": [
          "STARTUP=$(curl \"https://api.sb/leaseline.app/startups?limit=1\" \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" | jq -r '.startups[0][\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/startups/$STARTUP/launch \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\""
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nconst [startup] = await $.Startup.list({ limit: 1 })\nawait $.Startup.launch({ startup: startup.$id })",
        "cli": [
          "STARTUP=$(npx startup-builder do Startup.list --json '{\"limit\":1}' | jq -r '.startups[0][\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Startup.launch --json '{\"startup\":\"'\"$STARTUP\"'\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "const [startup] = await $.Startup.list({ limit: 1 })\nreturn await $.Startup.launch({ startup: startup.$id })"
          }
        }
      }
    },
    {
      "id": "put-up-a-page",
      "title": "Put up a page",
      "says": [
        "Put up a page",
        "Launch a landing page tonight",
        "Make me a landing page on a free address",
        "I need a website",
        "Make a homepage for the business"
      ],
      "status": "live",
      "shelf": "front",
      "group": "put-it-up",
      "tab": "start",
      "page": {
        "id": "page:start/guides/put-up-a-page",
        "md": "/start/guides/put-up-a-page.md"
      },
      "program": [
        "Domain.claim",
        "Site.publish"
      ],
      "inputs": [
        {
          "hostname": "leaseline.headless.ly",
          "startup": "find:startup"
        },
        {
          "site": "find:site"
        }
      ],
      "examples": [
        [
          "hostname"
        ],
        []
      ],
      "plans": {
        "idea": {
          "calls": [
            "Domain.claim",
            "Site.publish"
          ],
          "question": "Who is it for, and what does it fix, in one line?"
        },
        "building": {
          "calls": [
            "Domain.connect",
            "Site.publish"
          ],
          "question": "Move it to your own domain now?"
        },
        "live": {
          "calls": [
            "Content.draft",
            "Content.publish"
          ],
          "question": "A new page, or a change to the home page?"
        }
      },
      "needs": [
        "noun:startup"
      ],
      "approval": "ask",
      "leaves": [],
      "change": [
        "Make the headline shorter.",
        "Add a pricing section.",
        "Put it on leaseline.app.",
        "Add a waitlist to it."
      ],
      "later": [],
      "calls": {
        "ask": "Put up a page",
        "api": [
          "STARTUP=$(curl \"https://api.sb/leaseline.app/startups?limit=1\" \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" | jq -r '.startups[0][\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/domains/claim \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"hostname\":\"leaseline.headless.ly\",\"startup\":\"'\"$STARTUP\"'\"}'",
          "SITE=$(curl \"https://api.sb/leaseline.app/sites?limit=1\" \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" | jq -r '.sites[0][\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/sites/$SITE/publish \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\""
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nconst [startup] = await $.Startup.list({ limit: 1 })\nawait $.Domain.claim({ hostname: 'leaseline.headless.ly', startup: startup.$id })\nconst [site] = await $.Site.list({ limit: 1 })\nawait $.Site.publish({ site: site.$id })",
        "cli": [
          "STARTUP=$(npx startup-builder do Startup.list --json '{\"limit\":1}' | jq -r '.startups[0][\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Domain.claim --json '{\"hostname\":\"leaseline.headless.ly\",\"startup\":\"'\"$STARTUP\"'\"}'",
          "SITE=$(npx startup-builder do Site.list --json '{\"limit\":1}' | jq -r '.sites[0][\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Site.publish --json '{\"site\":\"'\"$SITE\"'\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "const [startup] = await $.Startup.list({ limit: 1 })\nawait $.Domain.claim({ hostname: 'leaseline.headless.ly', startup: startup.$id })\nconst [site] = await $.Site.list({ limit: 1 })\nreturn await $.Site.publish({ site: site.$id })"
          }
        }
      }
    },
    {
      "id": "sell-a-service",
      "title": "Sell a service",
      "says": [
        "Sell renewal outreach as a service at $199 a month",
        "Do the work for my customers and charge monthly",
        "Turn this into a done-for-you service",
        "Sell a service my agents deliver"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "put-it-up",
      "tab": "products",
      "page": {
        "id": "page:products/service/sell-a-service",
        "md": "/products/service/sell-a-service.md"
      },
      "program": [
        "Service.create",
        "Offer.create",
        "Offer.publish"
      ],
      "inputs": [
        {
          "name": "Renewal outreach",
          "promise": "Every tenant hears about their renewal 90 days ahead, or that month is free."
        },
        {
          "price": {
            "amount": 199,
            "currency": "USD"
          },
          "interval": "month",
          "terms": "Monthly, billed in advance. A missed notice makes that month free."
        },
        {
          "offer": "$2.$id"
        }
      ],
      "examples": [
        [
          "name",
          "promise"
        ],
        [
          "price",
          "interval",
          "terms"
        ],
        []
      ],
      "plans": {},
      "needs": [
        "noun:startup"
      ],
      "approval": "ask",
      "leaves": [
        "stripe-onboarding"
      ],
      "change": [
        "Have a person check every notice before it goes out.",
        "Add a $499 tier for 500 units.",
        "Charge per renewal signed instead."
      ],
      "later": [],
      "calls": {
        "ask": "Sell renewal outreach as a service at $199 a month",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/services \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"name\":\"Renewal outreach\",\"promise\":\"Every tenant hears about their renewal 90 days ahead, or that month is free.\"}'",
          "OFFER=$(curl -X POST https://api.sb/leaseline.app/offers \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"price\":{\"amount\":199,\"currency\":\"USD\"},\"interval\":\"month\",\"terms\":\"Monthly, billed in advance. A missed notice makes that month free.\"}' | jq -r '.offer[\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/offers/$OFFER/publish \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\""
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Service.create({ name: 'Renewal outreach', promise: 'Every tenant hears about their renewal 90 days ahead, or that month is free.' })\nconst offer = await $.Offer.create({ price: { amount: 199, currency: 'USD' }, interval: 'month', terms: 'Monthly, billed in advance. A missed notice makes that month free.' })\nawait $.Offer.publish({ offer: offer.$id })",
        "cli": [
          "npx startup-builder do Service.create --json '{\"name\":\"Renewal outreach\",\"promise\":\"Every tenant hears about their renewal 90 days ahead, or that month is free.\"}'",
          "OFFER=$(npx startup-builder do Offer.create --json '{\"price\":{\"amount\":199,\"currency\":\"USD\"},\"interval\":\"month\",\"terms\":\"Monthly, billed in advance. A missed notice makes that month free.\"}' | jq -r '.offer[\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Offer.publish --json '{\"offer\":\"'\"$OFFER\"'\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "await $.Service.create({ name: 'Renewal outreach', promise: 'Every tenant hears about their renewal 90 days ahead, or that month is free.' })\nconst offer = await $.Offer.create({ price: { amount: 199, currency: 'USD' }, interval: 'month', terms: 'Monthly, billed in advance. A missed notice makes that month free.' })\nreturn await $.Offer.publish({ offer: offer.$id })"
          }
        }
      }
    },
    {
      "id": "sell-my-data",
      "title": "Sell my data",
      "says": [
        "Sell renewal dates by county as data",
        "Charge a cent per record looked up",
        "Turn our records into a data product",
        "Let developers buy our dataset",
        "Sell paid access to our records"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "put-it-up",
      "tab": "products",
      "page": {
        "id": "page:products/data/sell-my-data",
        "md": "/products/data/sell-my-data.md"
      },
      "program": [
        "Dataset.create",
        "Offer.create",
        "Offer.publish"
      ],
      "inputs": [
        {
          "name": "Renewal dates by county",
          "promise": "Every lease end date traces to its public filing, refreshed weekly."
        },
        {
          "price": {
            "amount": 0.01,
            "currency": "USD"
          },
          "interval": "month",
          "terms": "Billed monthly for the lookups made. Records may be used inside your own product, not resold as a list."
        },
        {
          "offer": "$2.$id"
        }
      ],
      "examples": [
        [
          "name",
          "promise"
        ],
        [
          "price",
          "interval",
          "terms"
        ],
        []
      ],
      "plans": {},
      "needs": [
        "noun:startup"
      ],
      "approval": "ask",
      "leaves": [
        "stripe-onboarding"
      ],
      "change": [
        "Add a $99 monthly plan with 25,000 lookups.",
        "Let people try 50 lookups free.",
        "Export the whole dataset to a customer’s warehouse weekly."
      ],
      "later": [],
      "calls": {
        "ask": "Sell renewal dates by county as data",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/datasets \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"name\":\"Renewal dates by county\",\"promise\":\"Every lease end date traces to its public filing, refreshed weekly.\"}'",
          "OFFER=$(curl -X POST https://api.sb/leaseline.app/offers \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"price\":{\"amount\":0.01,\"currency\":\"USD\"},\"interval\":\"month\",\"terms\":\"Billed monthly for the lookups made. Records may be used inside your own product, not resold as a list.\"}' | jq -r '.offer[\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/offers/$OFFER/publish \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\""
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Dataset.create({ name: 'Renewal dates by county', promise: 'Every lease end date traces to its public filing, refreshed weekly.' })\nconst offer = await $.Offer.create({ price: { amount: 0.01, currency: 'USD' }, interval: 'month', terms: 'Billed monthly for the lookups made. Records may be used inside your own product, not resold as a list.' })\nawait $.Offer.publish({ offer: offer.$id })",
        "cli": [
          "npx startup-builder do Dataset.create --json '{\"name\":\"Renewal dates by county\",\"promise\":\"Every lease end date traces to its public filing, refreshed weekly.\"}'",
          "OFFER=$(npx startup-builder do Offer.create --json '{\"price\":{\"amount\":0.01,\"currency\":\"USD\"},\"interval\":\"month\",\"terms\":\"Billed monthly for the lookups made. Records may be used inside your own product, not resold as a list.\"}' | jq -r '.offer[\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Offer.publish --json '{\"offer\":\"'\"$OFFER\"'\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "await $.Dataset.create({ name: 'Renewal dates by county', promise: 'Every lease end date traces to its public filing, refreshed weekly.' })\nconst offer = await $.Offer.create({ price: { amount: 0.01, currency: 'USD' }, interval: 'month', terms: 'Billed monthly for the lookups made. Records may be used inside your own product, not resold as a list.' })\nreturn await $.Offer.publish({ offer: offer.$id })"
          }
        }
      }
    },
    {
      "id": "start-a-waitlist",
      "title": "Start a waitlist",
      "says": [
        "Start a waitlist",
        "Collect emails from people who want in",
        "Let people in from the waitlist in batches",
        "Let the next 20 people in",
        "Add a waitlist to the page",
        "Make a landing page with a waitlist",
        "Put up a waitlist page"
      ],
      "status": "live",
      "shelf": "front",
      "group": "put-it-up",
      "tab": "start",
      "page": {
        "id": "page:start/guides/start-a-waitlist",
        "md": "/start/guides/start-a-waitlist.md"
      },
      "program": [
        "Waitlist.create",
        "Waitlist.admit"
      ],
      "inputs": [
        {
          "rank": "signup"
        },
        {
          "waitlist": "$1.$id",
          "count": 20
        }
      ],
      "examples": [
        [
          "rank"
        ],
        [
          "count"
        ]
      ],
      "plans": {
        "idea": {
          "calls": [
            "Waitlist.create"
          ],
          "question": "Let people in by signup order, or by best fit first?"
        },
        "building": {
          "calls": [
            "Waitlist.admit"
          ],
          "question": "How many people this time?"
        },
        "live": {
          "calls": [
            "Waitlist.admit"
          ],
          "question": "How many people this time?"
        }
      },
      "needs": [
        "noun:startup"
      ],
      "approval": "none",
      "leaves": [],
      "change": [
        "Let in only managers with more than 50 units.",
        "Email everyone still waiting a short update.",
        "Close the waitlist and open sign-up to all."
      ],
      "later": [],
      "calls": {
        "ask": "Start a waitlist",
        "api": [
          "WAITLIST=$(curl -X POST https://api.sb/leaseline.app/waitlists \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"invited\":1,\"rank\":\"signup\"}' | jq -r '.waitlist[\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/waitlists/$WAITLIST/admit \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"count\":20}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nconst waitlist = await $.Waitlist.create({ invited: 1, rank: 'signup' })\nawait $.Waitlist.admit({ waitlist: waitlist.$id, count: 20 })",
        "cli": [
          "WAITLIST=$(npx startup-builder do Waitlist.create --json '{\"invited\":1,\"rank\":\"signup\"}' | jq -r '.waitlist[\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Waitlist.admit --json '{\"waitlist\":\"'\"$WAITLIST\"'\",\"count\":20}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "const waitlist = await $.Waitlist.create({ invited: 1, rank: 'signup' })\nreturn await $.Waitlist.admit({ waitlist: waitlist.$id, count: 20 })"
          }
        }
      }
    },
    {
      "id": "turn-my-app-into-a-business",
      "title": "Turn my app into a business",
      "says": [
        "Turn my app into a business",
        "I already built the app. Make it a real business",
        "Put a company around leaseline.app so it can sell",
        "Wrap a business around the app I built with another tool",
        "Add payments, terms and support around my existing app",
        "My app is live but has no checkout"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "put-it-up",
      "tab": "start",
      "page": {
        "id": "page:start/guides/turn-my-app-into-a-business",
        "md": "/start/guides/turn-my-app-into-a-business.md"
      },
      "program": [
        "Startup.import",
        "Startup.build"
      ],
      "inputs": [
        {
          "source": "https://leaseline.app",
          "template": "solo-saas"
        },
        {
          "startup": "$1.$id"
        }
      ],
      "examples": [
        [
          "source",
          "template"
        ],
        []
      ],
      "plans": {
        "idea": {
          "calls": [
            "Startup.import",
            "Startup.build"
          ],
          "question": "Who pays for it, and how much?"
        }
      },
      "needs": [],
      "approval": "none",
      "leaves": [],
      "change": [
        "Charge $49 a month instead.",
        "Call it Renewly.",
        "Connect leaseline.com.",
        "Hire an agent to answer my customers."
      ],
      "later": [],
      "calls": {
        "ask": "Turn my app into a business",
        "api": [
          "STARTUP=$(curl -X POST https://api.sb/leaseline.app/startups/import \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"source\":\"https://leaseline.app\",\"template\":\"solo-saas\"}' | jq -r '.startup[\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/startups/$STARTUP/build \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\""
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nconst startup = await $.Startup.import({ source: 'https://leaseline.app', template: 'solo-saas' })\nawait $.Startup.build({ startup: startup.$id })",
        "cli": [
          "STARTUP=$(npx startup-builder do Startup.import --json '{\"source\":\"https://leaseline.app\",\"template\":\"solo-saas\"}' | jq -r '.startup[\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Startup.build --json '{\"startup\":\"'\"$STARTUP\"'\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "const startup = await $.Startup.import({ source: 'https://leaseline.app', template: 'solo-saas' })\nreturn await $.Startup.build({ startup: startup.$id })"
          }
        }
      }
    },
    {
      "id": "add-a-free-trial-to-a-plan",
      "title": "Add a free trial to a plan",
      "says": [
        "Give every new Pro customer 14 days free",
        "Add a free trial to Pro",
        "Let people try it before they pay",
        "Start everyone on a trial, card up front"
      ],
      "status": "live",
      "shelf": "front",
      "group": "get-paid",
      "tab": "products",
      "page": {
        "id": "page:products/offers/add-a-free-trial-to-a-plan",
        "md": "/products/offers/add-a-free-trial-to-a-plan.md"
      },
      "program": [
        "Offer.update"
      ],
      "inputs": [
        {
          "id": "offer_pro_monthly",
          "trial": {
            "days": 14,
            "card": true
          }
        }
      ],
      "examples": [
        [
          "id",
          "trial"
        ]
      ],
      "plans": {},
      "needs": [
        "guide:charge-monthly",
        "verb:Startup.claim"
      ],
      "approval": "none",
      "leaves": [],
      "change": [
        "Drop the card requirement.",
        "Make it 30 days for annual plans.",
        "How many trials turned into paying customers last month?"
      ],
      "later": [],
      "calls": {
        "ask": "Give every new Pro customer 14 days free",
        "api": [
          "curl -X PATCH https://api.sb/leaseline.app/offers/offer_pro_monthly \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"price\":{\"amount\":29,\"currency\":\"USD\"},\"trial\":{\"days\":14,\"card\":true}}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Offer.update({ id: 'offer_pro_monthly', price: { amount: 29, currency: 'USD' }, trial: { days: 14, card: true } })",
        "cli": [
          "npx startup-builder do Offer.update --json '{\"id\":\"offer_pro_monthly\",\"price\":{\"amount\":29,\"currency\":\"USD\"},\"trial\":{\"days\":14,\"card\":true}}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "return await $.Offer.update({ id: 'offer_pro_monthly', price: { amount: 29, currency: 'USD' }, trial: { days: 14, card: true } })"
          }
        }
      }
    },
    {
      "id": "add-a-yearly-plan",
      "title": "Add a yearly plan",
      "says": [
        "Add a yearly plan at $290",
        "Let customers pay once a year",
        "Offer an annual plan with two months free",
        "Add annual billing"
      ],
      "status": "live",
      "shelf": "front",
      "group": "get-paid",
      "tab": "products",
      "page": {
        "id": "page:products/offers/add-a-yearly-plan",
        "md": "/products/offers/add-a-yearly-plan.md"
      },
      "program": [
        "Offer.create",
        "Offer.publish"
      ],
      "inputs": [
        {
          "price": {
            "amount": 290,
            "currency": "USD"
          },
          "interval": "year",
          "terms": "Yearly, billed in advance. Cancel any time; access runs to the end of the year paid for."
        },
        {
          "offer": "$1.$id"
        }
      ],
      "examples": [
        [
          "price",
          "interval",
          "terms"
        ],
        []
      ],
      "plans": {},
      "needs": [
        "guide:charge-monthly",
        "verb:Startup.claim"
      ],
      "approval": "ask",
      "leaves": [],
      "change": [
        "Show yearly first on the pricing page.",
        "Give yearly customers priority support.",
        "Move a monthly customer to yearly."
      ],
      "later": [],
      "calls": {
        "ask": "Add a yearly plan at $290",
        "api": [
          "OFFER=$(curl -X POST https://api.sb/leaseline.app/offers \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"price\":{\"amount\":290,\"currency\":\"USD\"},\"interval\":\"year\",\"terms\":\"Yearly, billed in advance. Cancel any time; access runs to the end of the year paid for.\"}' | jq -r '.offer[\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/offers/$OFFER/publish \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\""
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nconst offer = await $.Offer.create({ price: { amount: 290, currency: 'USD' }, interval: 'year', terms: 'Yearly, billed in advance. Cancel any time; access runs to the end of the year paid for.' })\nawait $.Offer.publish({ offer: offer.$id })",
        "cli": [
          "OFFER=$(npx startup-builder do Offer.create --json '{\"price\":{\"amount\":290,\"currency\":\"USD\"},\"interval\":\"year\",\"terms\":\"Yearly, billed in advance. Cancel any time; access runs to the end of the year paid for.\"}' | jq -r '.offer[\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Offer.publish --json '{\"offer\":\"'\"$OFFER\"'\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "const offer = await $.Offer.create({ price: { amount: 290, currency: 'USD' }, interval: 'year', terms: 'Yearly, billed in advance. Cancel any time; access runs to the end of the year paid for.' })\nreturn await $.Offer.publish({ offer: offer.$id })"
          }
        }
      }
    },
    {
      "id": "ask-me-before-big-refunds",
      "title": "Ask me before big refunds",
      "says": [
        "Ask me before big refunds",
        "Refund up to $250 without asking me",
        "Hold any refund over $250 for my yes",
        "Let the billing agent handle small refunds",
        "Never refund more than $250 without me",
        "Let me approve refunds over $250"
      ],
      "status": "live",
      "shelf": "front",
      "group": "get-paid",
      "tab": "workflows",
      "page": {
        "id": "page:workflows/guides/ask-me-before-big-refunds",
        "md": "/workflows/guides/ask-me-before-big-refunds.md"
      },
      "program": [
        "Process.enable",
        "Setting.update"
      ],
      "inputs": [
        {
          "process": "process_billing"
        },
        {
          "key": "refunds.limit",
          "value": 250
        }
      ],
      "examples": [
        [
          "process"
        ],
        [
          "key",
          "value"
        ]
      ],
      "plans": {},
      "needs": [
        "guide:take-a-payment"
      ],
      "approval": "none",
      "leaves": [],
      "change": [
        "Raise the line to $500.",
        "Ask me before every refund this month.",
        "Show me every refund from last month."
      ],
      "later": [],
      "calls": {
        "ask": "Ask me before big refunds",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/processes/process_billing/enable \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\"",
          "curl -X PATCH https://api.sb/leaseline.app/settings/setting_1 \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"value\":250,\"key\":\"refunds.limit\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Process.enable({ process: 'process_billing' })\nawait $.Setting.update({ id: 'setting_1', value: 250, key: 'refunds.limit' })",
        "cli": [
          "npx startup-builder do Process.enable --json '{\"process\":\"process_billing\"}'",
          "npx startup-builder do Setting.update --json '{\"id\":\"setting_1\",\"value\":250,\"key\":\"refunds.limit\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "await $.Process.enable({ process: 'process_billing' })\nreturn await $.Setting.update({ id: 'setting_1', value: 250, key: 'refunds.limit' })"
          }
        }
      }
    },
    {
      "id": "cap-usage-on-a-plan",
      "title": "Cap usage on a plan",
      "says": [
        "Give Starter 10 exports a day, then ask them to upgrade",
        "Cap the free plan at 100 calls a month",
        "Limit how much each plan can use",
        "Charge for usage past the plan limit"
      ],
      "status": "live",
      "shelf": "front",
      "group": "get-paid",
      "tab": "products",
      "page": {
        "id": "page:products/offers/cap-usage-on-a-plan",
        "md": "/products/offers/cap-usage-on-a-plan.md"
      },
      "program": [
        "Limit.create",
        "Offer.grant",
        "Offer.update"
      ],
      "inputs": [
        {
          "count": 10,
          "period": "day",
          "resets": "rolling"
        },
        {
          "offer": "offer_starter_monthly",
          "verb": "Collection.export",
          "limit": "$1.$id"
        },
        {
          "id": "offer_starter_monthly",
          "atBound": "upgrade"
        }
      ],
      "examples": [
        [
          "count",
          "period",
          "resets"
        ],
        [
          "offer",
          "verb"
        ],
        [
          "id",
          "atBound"
        ]
      ],
      "plans": {},
      "needs": [
        "guide:charge-monthly",
        "verb:Startup.claim"
      ],
      "approval": "none",
      "leaves": [],
      "change": [
        "Bill a cent per export past the cap instead.",
        "Reset the cap on the first of the month.",
        "Raise the cap for Riverside Property only."
      ],
      "later": [],
      "calls": {
        "ask": "Give Starter 10 exports a day, then ask them to upgrade",
        "api": [
          "LIMIT=$(curl -X POST https://api.sb/leaseline.app/limits \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"amount\":{\"amount\":29,\"currency\":\"USD\"},\"count\":10,\"period\":\"day\",\"resets\":\"rolling\"}' | jq -r '.limit[\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/offers/offer_starter_monthly/grant \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"verb\":\"Collection.export\",\"limit\":\"'\"$LIMIT\"'\"}'",
          "curl -X PATCH https://api.sb/leaseline.app/offers/offer_starter_monthly \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"price\":{\"amount\":29,\"currency\":\"USD\"},\"atBound\":\"upgrade\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nconst limit = await $.Limit.create({ amount: { amount: 29, currency: 'USD' }, count: 10, period: 'day', resets: 'rolling' })\nawait $.Offer.grant({ offer: 'offer_starter_monthly', verb: 'Collection.export', limit: limit.$id })\nawait $.Offer.update({ id: 'offer_starter_monthly', price: { amount: 29, currency: 'USD' }, atBound: 'upgrade' })",
        "cli": [
          "LIMIT=$(npx startup-builder do Limit.create --json '{\"amount\":{\"amount\":29,\"currency\":\"USD\"},\"count\":10,\"period\":\"day\",\"resets\":\"rolling\"}' | jq -r '.limit[\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Offer.grant --json '{\"offer\":\"offer_starter_monthly\",\"verb\":\"Collection.export\",\"limit\":\"'\"$LIMIT\"'\"}'",
          "npx startup-builder do Offer.update --json '{\"id\":\"offer_starter_monthly\",\"price\":{\"amount\":29,\"currency\":\"USD\"},\"atBound\":\"upgrade\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "const limit = await $.Limit.create({ amount: { amount: 29, currency: 'USD' }, count: 10, period: 'day', resets: 'rolling' })\nawait $.Offer.grant({ offer: 'offer_starter_monthly', verb: 'Collection.export', limit: limit.$id })\nreturn await $.Offer.update({ id: 'offer_starter_monthly', price: { amount: 29, currency: 'USD' }, atBound: 'upgrade' })"
          }
        }
      }
    },
    {
      "id": "charge-monthly",
      "title": "Charge monthly",
      "says": [
        "Charge $29 a month",
        "Make Leaseline Pro a $29 monthly subscription",
        "Bill customers every month and let them cancel on their own",
        "Start a subscription",
        "Take payments monthly",
        "Get people to pay me $20 a month",
        "Charge $49 a month for my app"
      ],
      "status": "live",
      "shelf": "front",
      "group": "get-paid",
      "tab": "systems",
      "page": {
        "id": "page:systems/finance/charge-monthly",
        "md": "/systems/finance/charge-monthly.md"
      },
      "program": [
        "Offer.create",
        "Offer.publish"
      ],
      "inputs": [
        {
          "price": {
            "amount": 29,
            "currency": "USD"
          },
          "interval": "month",
          "terms": "Monthly, billed in advance. Cancel any time from the billing portal."
        },
        {
          "offer": "$1.$id"
        }
      ],
      "examples": [
        [
          "price",
          "interval",
          "terms"
        ],
        []
      ],
      "plans": {
        "idea": {
          "calls": [
            "Offer.create",
            "Offer.publish"
          ],
          "question": "Take the first month as a refundable deposit until it ships?"
        },
        "live": {
          "calls": [
            "Offer.create",
            "Offer.publish"
          ],
          "question": "A new plan beside the current one, or a new price for it?"
        },
        "repeatable": {
          "calls": [
            "Offer.create",
            "Offer.publish",
            "Subscription.switch"
          ],
          "question": "Move current customers to the new price at renewal?"
        }
      },
      "needs": [
        "noun:startup"
      ],
      "approval": "ask",
      "leaves": [
        "stripe-onboarding"
      ],
      "change": [
        "Add a $290 annual plan.",
        "Give a 14-day free trial.",
        "Raise the price for new customers only."
      ],
      "later": [
        {
          "guide": "retry-failed-payments",
          "wakesOn": {
            "event": "Invoice.overdue",
            "where": "a renewal payment failed",
            "first": true
          }
        }
      ],
      "calls": {
        "ask": "Charge $29 a month",
        "api": [
          "OFFER=$(curl -X POST https://api.sb/leaseline.app/offers \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"price\":{\"amount\":29,\"currency\":\"USD\"},\"interval\":\"month\",\"terms\":\"Monthly, billed in advance. Cancel any time from the billing portal.\"}' | jq -r '.offer[\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/offers/$OFFER/publish \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\""
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nconst offer = await $.Offer.create({ price: { amount: 29, currency: 'USD' }, interval: 'month', terms: 'Monthly, billed in advance. Cancel any time from the billing portal.' })\nawait $.Offer.publish({ offer: offer.$id })",
        "cli": [
          "OFFER=$(npx startup-builder do Offer.create --json '{\"price\":{\"amount\":29,\"currency\":\"USD\"},\"interval\":\"month\",\"terms\":\"Monthly, billed in advance. Cancel any time from the billing portal.\"}' | jq -r '.offer[\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Offer.publish --json '{\"offer\":\"'\"$OFFER\"'\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "const offer = await $.Offer.create({ price: { amount: 29, currency: 'USD' }, interval: 'month', terms: 'Monthly, billed in advance. Cancel any time from the billing portal.' })\nreturn await $.Offer.publish({ offer: offer.$id })"
          }
        }
      }
    },
    {
      "id": "charge-per-seat",
      "title": "Charge per seat",
      "says": [
        "Charge $15 a month for each person on the team",
        "Charge per seat",
        "Bill for every user they add",
        "Price it per user, counted automatically"
      ],
      "status": "live",
      "shelf": "front",
      "group": "get-paid",
      "tab": "products",
      "page": {
        "id": "page:products/app/charge-per-seat",
        "md": "/products/app/charge-per-seat.md"
      },
      "program": [
        "Offer.create",
        "Offer.publish"
      ],
      "inputs": [
        {
          "price": {
            "amount": 15,
            "currency": "USD"
          },
          "interval": "month",
          "seats": "members",
          "terms": "Monthly, per person on the account. Added people bill from the day they join."
        },
        {
          "offer": "$1.$id"
        }
      ],
      "examples": [
        [
          "price",
          "interval",
          "seats",
          "terms"
        ],
        []
      ],
      "plans": {},
      "needs": [
        "guide:let-customers-sign-in"
      ],
      "approval": "ask",
      "leaves": [
        "stripe-onboarding"
      ],
      "change": [
        "Include the first three people free.",
        "Bill a seat only once someone signs in.",
        "Let admins cap how many seats they pay for."
      ],
      "later": [],
      "calls": {
        "ask": "Charge $15 a month for each person on the team",
        "api": [
          "OFFER=$(curl -X POST https://api.sb/leaseline.app/offers \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"price\":{\"amount\":15,\"currency\":\"USD\"},\"interval\":\"month\",\"seats\":\"members\",\"terms\":\"Monthly, per person on the account. Added people bill from the day they join.\"}' | jq -r '.offer[\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/offers/$OFFER/publish \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\""
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nconst offer = await $.Offer.create({ price: { amount: 15, currency: 'USD' }, interval: 'month', seats: 'members', terms: 'Monthly, per person on the account. Added people bill from the day they join.' })\nawait $.Offer.publish({ offer: offer.$id })",
        "cli": [
          "OFFER=$(npx startup-builder do Offer.create --json '{\"price\":{\"amount\":15,\"currency\":\"USD\"},\"interval\":\"month\",\"seats\":\"members\",\"terms\":\"Monthly, per person on the account. Added people bill from the day they join.\"}' | jq -r '.offer[\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Offer.publish --json '{\"offer\":\"'\"$OFFER\"'\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "const offer = await $.Offer.create({ price: { amount: 15, currency: 'USD' }, interval: 'month', seats: 'members', terms: 'Monthly, per person on the account. Added people bill from the day they join.' })\nreturn await $.Offer.publish({ offer: offer.$id })"
          }
        }
      }
    },
    {
      "id": "charge-per-use",
      "title": "Charge per use",
      "says": [
        "Charge per use",
        "Bill by usage",
        "Charge a cent per API call",
        "Charge for what they use each month",
        "Set up usage-based pricing"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "get-paid",
      "tab": "start",
      "page": {
        "id": "page:start/guides/charge-per-use",
        "md": "/start/guides/charge-per-use.md"
      },
      "program": [
        "Meter.create",
        "Offer.create",
        "Offer.publish"
      ],
      "inputs": [
        {
          "unit": "lookups",
          "of": "Lease.read",
          "aggregation": "count",
          "window": "month"
        },
        {
          "price": {
            "amount": 0.01,
            "currency": "USD"
          },
          "terms": "One cent per renewal lookup, billed monthly for the month before.",
          "interval": "month"
        },
        {
          "offer": "$2.$id"
        }
      ],
      "examples": [
        [
          "unit",
          "of",
          "aggregation",
          "window"
        ],
        [
          "price",
          "terms",
          "interval"
        ],
        []
      ],
      "plans": {
        "idea": {
          "calls": [
            "Offer.create",
            "Offer.publish"
          ],
          "question": "Sell a prepaid pack of 1,000 lookups first?"
        },
        "live": {
          "calls": [
            "Meter.create",
            "Offer.create",
            "Offer.publish"
          ]
        },
        "repeatable": {
          "calls": [
            "Meter.create",
            "Offer.create",
            "Offer.publish",
            "Subscription.switch"
          ],
          "question": "Move current customers to it at their next renewal?"
        }
      },
      "needs": [
        "noun:startup"
      ],
      "approval": "ask",
      "leaves": [
        "stripe-onboarding"
      ],
      "change": [
        "Give every customer 1,000 free lookups a month.",
        "Add a $49 plan with 10,000 lookups included.",
        "Email me when a customer passes $500 in a month."
      ],
      "later": [],
      "calls": {
        "ask": "Charge per use",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/meters \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"unit\":\"lookups\",\"of\":\"Lease.read\",\"aggregation\":\"count\",\"window\":\"month\"}'",
          "OFFER=$(curl -X POST https://api.sb/leaseline.app/offers \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"price\":{\"amount\":0.01,\"currency\":\"USD\"},\"terms\":\"One cent per renewal lookup, billed monthly for the month before.\",\"interval\":\"month\"}' | jq -r '.offer[\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/offers/$OFFER/publish \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\""
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Meter.create({ unit: 'lookups', of: 'Lease.read', aggregation: 'count', window: 'month' })\nconst offer = await $.Offer.create({ price: { amount: 0.01, currency: 'USD' }, terms: 'One cent per renewal lookup, billed monthly for the month before.', interval: 'month' })\nawait $.Offer.publish({ offer: offer.$id })",
        "cli": [
          "npx startup-builder do Meter.create --json '{\"unit\":\"lookups\",\"of\":\"Lease.read\",\"aggregation\":\"count\",\"window\":\"month\"}'",
          "OFFER=$(npx startup-builder do Offer.create --json '{\"price\":{\"amount\":0.01,\"currency\":\"USD\"},\"terms\":\"One cent per renewal lookup, billed monthly for the month before.\",\"interval\":\"month\"}' | jq -r '.offer[\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Offer.publish --json '{\"offer\":\"'\"$OFFER\"'\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "await $.Meter.create({ unit: 'lookups', of: 'Lease.read', aggregation: 'count', window: 'month' })\nconst offer = await $.Offer.create({ price: { amount: 0.01, currency: 'USD' }, terms: 'One cent per renewal lookup, billed monthly for the month before.', interval: 'month' })\nreturn await $.Offer.publish({ offer: offer.$id })"
          }
        }
      }
    },
    {
      "id": "give-a-free-trial",
      "title": "Give a customer a free trial",
      "says": [
        "Give Riverside Property a 14-day free trial",
        "Let this customer try Pro free for two weeks",
        "Start a trial without a card",
        "Extend their trial"
      ],
      "status": "live",
      "shelf": "front",
      "group": "get-paid",
      "tab": "products",
      "page": {
        "id": "page:products/offers/give-a-free-trial",
        "md": "/products/offers/give-a-free-trial.md"
      },
      "program": [
        "Offer.trial"
      ],
      "inputs": [
        {
          "offer": "offer_pro_monthly",
          "customer": "customer_riverside",
          "days": 14,
          "card": false
        }
      ],
      "examples": [
        [
          "offer",
          "customer",
          "days",
          "card"
        ]
      ],
      "plans": {},
      "needs": [
        "guide:charge-monthly",
        "verb:Startup.claim"
      ],
      "approval": "none",
      "leaves": [],
      "change": [
        "Ask for a card up front next time.",
        "Send a reminder three days before it ends.",
        "Who is on a trial right now?"
      ],
      "later": [],
      "calls": {
        "ask": "Give Riverside Property a 14-day free trial",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/offers/offer_pro_monthly/trial \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"customer\":\"customer_riverside\",\"days\":14,\"card\":false}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Offer.trial({ offer: 'offer_pro_monthly', customer: 'customer_riverside', days: 14, card: false })",
        "cli": [
          "npx startup-builder do Offer.trial --json '{\"offer\":\"offer_pro_monthly\",\"customer\":\"customer_riverside\",\"days\":14,\"card\":false}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "return await $.Offer.trial({ offer: 'offer_pro_monthly', customer: 'customer_riverside', days: 14, card: false })"
          }
        }
      }
    },
    {
      "id": "give-a-launch-discount",
      "title": "Give a launch discount",
      "says": [
        "Give the first 100 customers 20% off for three months",
        "Make a LAUNCH20 code",
        "Create a promo code for launch week",
        "Offer a discount to early customers",
        "Make a coupon for 50% off"
      ],
      "status": "live",
      "shelf": "front",
      "group": "get-paid",
      "tab": "products",
      "page": {
        "id": "page:products/offers/give-a-launch-discount",
        "md": "/products/offers/give-a-launch-discount.md"
      },
      "program": [
        "Coupon.create"
      ],
      "inputs": [
        {
          "percentOff": 20,
          "duration": "repeating",
          "months": 3,
          "code": "LAUNCH20",
          "maxRedemptions": 100,
          "redeemBy": "2026-12-31T23:59:59Z"
        }
      ],
      "examples": [
        [
          "percentOff",
          "duration",
          "months",
          "code",
          "maxRedemptions",
          "redeemBy"
        ]
      ],
      "plans": {},
      "needs": [
        "guide:charge-monthly"
      ],
      "approval": "none",
      "leaves": [],
      "change": [
        "Make it 50% off the first month instead.",
        "Stop the code today.",
        "How many people used LAUNCH20?"
      ],
      "later": [],
      "calls": {
        "ask": "Give the first 100 customers 20% off for three months",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/coupons \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"duration\":\"repeating\",\"percentOff\":20,\"months\":3,\"code\":\"LAUNCH20\",\"maxRedemptions\":100,\"redeemBy\":\"2026-12-31T23:59:59Z\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Coupon.create({ duration: 'repeating', percentOff: 20, months: 3, code: 'LAUNCH20', maxRedemptions: 100, redeemBy: '2026-12-31T23:59:59Z' })",
        "cli": [
          "npx startup-builder do Coupon.create --json '{\"duration\":\"repeating\",\"percentOff\":20,\"months\":3,\"code\":\"LAUNCH20\",\"maxRedemptions\":100,\"redeemBy\":\"2026-12-31T23:59:59Z\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "return await $.Coupon.create({ duration: 'repeating', percentOff: 20, months: 3, code: 'LAUNCH20', maxRedemptions: 100, redeemBy: '2026-12-31T23:59:59Z' })"
          }
        }
      }
    },
    {
      "id": "handle-sales-tax",
      "title": "Handle sales tax",
      "says": [
        "Take care of sales tax",
        "Handle sales tax for me",
        "Register for sales tax in Texas and file the returns",
        "Do we need to charge VAT",
        "Register us for sales tax where we owe it"
      ],
      "not": [
        "income tax",
        "personal tax return"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "get-paid",
      "tab": "systems",
      "page": {
        "id": "page:systems/finance/handle-sales-tax",
        "md": "/systems/finance/handle-sales-tax.md"
      },
      "program": [
        "Company.register",
        "Company.submit"
      ],
      "inputs": [
        {
          "jurisdiction": "US-TX",
          "kind": "salesTax"
        },
        {
          "jurisdiction": "US-TX",
          "kind": "salesTax",
          "periods": [
            "period_2026_10"
          ]
        }
      ],
      "examples": [
        [
          "jurisdiction",
          "kind"
        ],
        [
          "jurisdiction",
          "kind",
          "periods"
        ]
      ],
      "plans": {
        "idea": {
          "calls": [
            "Metric.watch"
          ],
          "question": "Tell you when a state is close to its threshold?"
        },
        "live": {
          "calls": [
            "Company.register",
            "Company.submit"
          ],
          "question": "Register only where you owe, or everywhere you sell?"
        }
      },
      "needs": [
        "verb:Startup.claim"
      ],
      "approval": "ask",
      "leaves": [],
      "change": [
        "Register in every state where I cross the threshold.",
        "Mark Harbor Properties tax-exempt.",
        "File quarterly instead of monthly."
      ],
      "later": [],
      "calls": {
        "ask": "Take care of sales tax",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/companies/register \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"jurisdiction\":\"US-TX\",\"kind\":\"salesTax\"}'",
          "curl -X POST https://api.sb/leaseline.app/companies/submit \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"jurisdiction\":\"US-TX\",\"kind\":\"salesTax\",\"periods\":[\"period_2026_10\"]}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Company.register({ jurisdiction: 'US-TX', kind: 'salesTax' })\nawait $.Company.submit({ jurisdiction: 'US-TX', kind: 'salesTax', periods: ['period_2026_10'] })",
        "cli": [
          "npx startup-builder do Company.register --json '{\"jurisdiction\":\"US-TX\",\"kind\":\"salesTax\"}'",
          "npx startup-builder do Company.submit --json '{\"jurisdiction\":\"US-TX\",\"kind\":\"salesTax\",\"periods\":[\"period_2026_10\"]}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "await $.Company.register({ jurisdiction: 'US-TX', kind: 'salesTax' })\nreturn await $.Company.submit({ jurisdiction: 'US-TX', kind: 'salesTax', periods: ['period_2026_10'] })"
          }
        }
      }
    },
    {
      "id": "lock-a-feature-to-a-plan",
      "title": "Lock a feature to a plan",
      "says": [
        "Lock export to Pro",
        "Only Pro customers can export",
        "Make CSV export a paid feature",
        "Put this feature behind the paid plan"
      ],
      "status": "live",
      "shelf": "front",
      "group": "get-paid",
      "tab": "products",
      "page": {
        "id": "page:products/offers/lock-a-feature-to-a-plan",
        "md": "/products/offers/lock-a-feature-to-a-plan.md"
      },
      "program": [
        "Offer.grant"
      ],
      "inputs": [
        {
          "offer": "offer_pro_monthly",
          "verb": "Collection.export"
        }
      ],
      "examples": [
        [
          "offer",
          "verb"
        ]
      ],
      "plans": {},
      "needs": [
        "guide:charge-monthly",
        "verb:Startup.claim"
      ],
      "approval": "none",
      "leaves": [],
      "change": [
        "Give Starter export too, ten a day.",
        "Let trial customers export once.",
        "Show the upgrade button where export is locked."
      ],
      "later": [],
      "calls": {
        "ask": "Lock export to Pro",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/offers/offer_pro_monthly/grant \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"verb\":\"Collection.export\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Offer.grant({ offer: 'offer_pro_monthly', verb: 'Collection.export' })",
        "cli": [
          "npx startup-builder do Offer.grant --json '{\"offer\":\"offer_pro_monthly\",\"verb\":\"Collection.export\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "return await $.Offer.grant({ offer: 'offer_pro_monthly', verb: 'Collection.export' })"
          }
        }
      }
    },
    {
      "id": "take-a-deposit",
      "title": "Take a deposit",
      "says": [
        "Take a deposit",
        "Take a refundable deposit",
        "Take a $50 deposit",
        "Take a $29 deposit before it ships",
        "Collect deposits before it ships",
        "Let people pre-order",
        "Let people reserve a spot with a deposit",
        "We can't charge yet, but take something up front",
        "Take a deposit for a custom build"
      ],
      "status": "live",
      "shelf": "front",
      "group": "get-paid",
      "tab": "start",
      "page": {
        "id": "page:start/guides/take-a-deposit",
        "md": "/start/guides/take-a-deposit.md"
      },
      "program": [
        "Offer.create",
        "Offer.publish"
      ],
      "inputs": [
        {
          "price": {
            "amount": 29,
            "currency": "USD"
          },
          "interval": "once",
          "terms": "Refundable deposit. Refunded in full on request before Leaseline ships, and to everyone if it misses its ship date. At ship it pays the first month."
        },
        {
          "offer": "$1.$id"
        }
      ],
      "examples": [
        [
          "price",
          "interval",
          "terms"
        ],
        []
      ],
      "plans": {
        "idea": {
          "calls": [
            "Offer.create",
            "Offer.publish"
          ],
          "question": "How many deposits, from how many people reached, by what date?"
        },
        "building": {
          "calls": [
            "Offer.create",
            "Offer.publish"
          ],
          "question": "Should the deposit pay the first month, or the whole first order?"
        }
      },
      "needs": [
        "noun:startup"
      ],
      "approval": "ask",
      "leaves": [
        "stripe-onboarding"
      ],
      "change": [
        "Make it $49.",
        "Make the deposit the whole first year.",
        "Refund everyone and close it.",
        "Find out if anyone wants this."
      ],
      "later": [],
      "calls": {
        "ask": "Take a deposit",
        "api": [
          "OFFER=$(curl -X POST https://api.sb/leaseline.app/offers \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"price\":{\"amount\":29,\"currency\":\"USD\"},\"interval\":\"once\",\"terms\":\"Refundable deposit. Refunded in full on request before Leaseline ships, and to everyone if it misses its ship date. At ship it pays the first month.\"}' | jq -r '.offer[\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/offers/$OFFER/publish \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\""
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nconst offer = await $.Offer.create({ price: { amount: 29, currency: 'USD' }, interval: 'once', terms: 'Refundable deposit. Refunded in full on request before Leaseline ships, and to everyone if it misses its ship date. At ship it pays the first month.' })\nawait $.Offer.publish({ offer: offer.$id })",
        "cli": [
          "OFFER=$(npx startup-builder do Offer.create --json '{\"price\":{\"amount\":29,\"currency\":\"USD\"},\"interval\":\"once\",\"terms\":\"Refundable deposit. Refunded in full on request before Leaseline ships, and to everyone if it misses its ship date. At ship it pays the first month.\"}' | jq -r '.offer[\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Offer.publish --json '{\"offer\":\"'\"$OFFER\"'\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "const offer = await $.Offer.create({ price: { amount: 29, currency: 'USD' }, interval: 'once', terms: 'Refundable deposit. Refunded in full on request before Leaseline ships, and to everyone if it misses its ship date. At ship it pays the first month.' })\nreturn await $.Offer.publish({ offer: offer.$id })"
          }
        }
      }
    },
    {
      "id": "take-a-payment",
      "title": "Take a payment",
      "says": [
        "Take a $29 payment for setup",
        "Send me a link a customer can pay $29 with",
        "Charge $29 once for onboarding",
        "Send her a payment link",
        "Sell a one-time setup fee"
      ],
      "status": "live",
      "shelf": "front",
      "group": "get-paid",
      "tab": "systems",
      "page": {
        "id": "page:systems/finance/take-a-payment",
        "md": "/systems/finance/take-a-payment.md"
      },
      "program": [
        "Offer.create",
        "Offer.publish"
      ],
      "inputs": [
        {
          "price": {
            "amount": 29,
            "currency": "USD"
          },
          "interval": "once",
          "terms": "One-time setup fee, refundable within 14 days."
        },
        {
          "offer": "$1.$id"
        }
      ],
      "examples": [
        [
          "price",
          "interval",
          "terms"
        ],
        []
      ],
      "plans": {
        "idea": {
          "calls": [
            "Offer.create",
            "Offer.publish"
          ],
          "question": "The full price now, or a refundable deposit until it ships?"
        },
        "live": {
          "calls": [
            "Offer.create",
            "Offer.publish"
          ],
          "question": "One price for everyone, or one per plan?"
        }
      },
      "needs": [
        "noun:startup"
      ],
      "approval": "ask",
      "leaves": [
        "stripe-onboarding"
      ],
      "change": [
        "Make it $49 for new buyers.",
        "Refund the last payment.",
        "Ask buyers for a company name at checkout.",
        "Make it a refundable deposit instead."
      ],
      "later": [
        {
          "guide": "answer-a-dispute",
          "wakesOn": {
            "event": "Dispute.opened",
            "first": true
          }
        }
      ],
      "calls": {
        "ask": "Take a $29 payment for setup",
        "api": [
          "OFFER=$(curl -X POST https://api.sb/leaseline.app/offers \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"price\":{\"amount\":29,\"currency\":\"USD\"},\"interval\":\"once\",\"terms\":\"One-time setup fee, refundable within 14 days.\"}' | jq -r '.offer[\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/offers/$OFFER/publish \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\""
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nconst offer = await $.Offer.create({ price: { amount: 29, currency: 'USD' }, interval: 'once', terms: 'One-time setup fee, refundable within 14 days.' })\nawait $.Offer.publish({ offer: offer.$id })",
        "cli": [
          "OFFER=$(npx startup-builder do Offer.create --json '{\"price\":{\"amount\":29,\"currency\":\"USD\"},\"interval\":\"once\",\"terms\":\"One-time setup fee, refundable within 14 days.\"}' | jq -r '.offer[\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Offer.publish --json '{\"offer\":\"'\"$OFFER\"'\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "const offer = await $.Offer.create({ price: { amount: 29, currency: 'USD' }, interval: 'once', terms: 'One-time setup fee, refundable within 14 days.' })\nreturn await $.Offer.publish({ offer: offer.$id })"
          }
        }
      }
    },
    {
      "id": "build-my-app",
      "title": "Build my app",
      "says": [
        "Build the app my property managers sign in to",
        "Give each customer a dashboard of their leases and renewal dates",
        "Make an app where a manager sees which renewals are due this month",
        "Build the app my customers sign in to",
        "Build my app",
        "Make a web app for this"
      ],
      "not": [
        "iPhone app",
        "Android app",
        "mobile app",
        "App Store app",
        "subdomain"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "ship",
      "tab": "products",
      "page": {
        "id": "page:products/app/build-my-app",
        "md": "/products/app/build-my-app.md"
      },
      "program": [
        "Software.create",
        "App.publish"
      ],
      "inputs": [
        {
          "name": "Leaseline",
          "promise": "Every lease renewal date in one place, with a reminder 90 days out."
        },
        {
          "app": "find:interface where kind = app"
        }
      ],
      "examples": [
        [
          "name",
          "promise"
        ],
        []
      ],
      "plans": {
        "idea": {
          "calls": [
            "Software.create",
            "App.publish"
          ],
          "question": "Who signs in, and what is the first thing they do?"
        },
        "live": {
          "calls": [
            "Change.review",
            "Version.deploy"
          ],
          "question": "Preview it with one customer first?"
        }
      },
      "needs": [
        "noun:startup"
      ],
      "approval": "ask",
      "leaves": [],
      "change": [
        "Add an owner view that shows every property at once.",
        "Hide rent amounts from the maintenance Persona.",
        "Add a renewal calendar to the home screen."
      ],
      "later": [],
      "calls": {
        "ask": "Build the app my property managers sign in to",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/software \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"name\":\"Leaseline\",\"promise\":\"Every lease renewal date in one place, with a reminder 90 days out.\"}'",
          "APP=$(curl \"https://api.sb/leaseline.app/interfaces?where=kind%20%3D%20app&limit=1\" \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" | jq -r '.interfaces[0][\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/apps/$APP/publish \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\""
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Software.create({ name: 'Leaseline', promise: 'Every lease renewal date in one place, with a reminder 90 days out.' })\nconst [app] = await $.Interface.list({ where: 'kind = app', limit: 1 })\nawait $.App.publish({ app: app.$id })",
        "cli": [
          "npx startup-builder do Software.create --json '{\"name\":\"Leaseline\",\"promise\":\"Every lease renewal date in one place, with a reminder 90 days out.\"}'",
          "APP=$(npx startup-builder do Interface.list --json '{\"where\":\"kind = app\",\"limit\":1}' | jq -r '.interfaces[0][\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do App.publish --json '{\"app\":\"'\"$APP\"'\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "await $.Software.create({ name: 'Leaseline', promise: 'Every lease renewal date in one place, with a reminder 90 days out.' })\nconst [app] = await $.Interface.list({ where: 'kind = app', limit: 1 })\nreturn await $.App.publish({ app: app.$id })"
          }
        }
      }
    },
    {
      "id": "let-customers-sign-in",
      "title": "Let customers sign in",
      "says": [
        "Let my customers sign in",
        "Let a property manager invite their team",
        "Turn on single sign-on for customers who need it",
        "Let customers log in",
        "Add sign-in",
        "Add Google login",
        "Invite a customer to their account"
      ],
      "status": "live",
      "shelf": "front",
      "group": "ship",
      "tab": "products",
      "page": {
        "id": "page:products/app/let-customers-sign-in",
        "md": "/products/app/let-customers-sign-in.md"
      },
      "program": [
        "Tenant.provision",
        "Tenant.invite"
      ],
      "inputs": [
        {
          "customer": "customer_harbor"
        },
        {
          "tenant": "$1.$id",
          "email": "maria@harborlets.com"
        }
      ],
      "examples": [
        [
          "customer"
        ],
        [
          "email"
        ]
      ],
      "plans": {
        "idea": {
          "calls": [
            "Tenant.provision"
          ]
        },
        "live": {
          "calls": [
            "Tenant.provision",
            "Tenant.invite"
          ],
          "question": "Who at the customer gets the first invite?"
        }
      },
      "needs": [
        "noun:customer"
      ],
      "approval": "none",
      "leaves": [],
      "change": [
        "Require single sign-on for every customer above 50 seats.",
        "Let a customer admin remove members.",
        "Sign people out after 12 hours."
      ],
      "later": [
        {
          "guide": "set-up-sso-for-a-customer",
          "wakesOn": {
            "event": "Deal.advanced",
            "where": "the buyer’s IT team asks for single sign-on before it signs",
            "first": true
          }
        }
      ],
      "calls": {
        "ask": "Let my customers sign in",
        "api": [
          "TENANT=$(curl -X POST https://api.sb/leaseline.app/tenants/provision \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"customer\":\"customer_harbor\"}' | jq -r '.tenant[\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/tenants/$TENANT/invite \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"email\":\"maria@harborlets.com\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nconst tenant = await $.Tenant.provision({ customer: 'customer_harbor' })\nawait $.Tenant.invite({ tenant: tenant.$id, email: 'maria@harborlets.com' })",
        "cli": [
          "TENANT=$(npx startup-builder do Tenant.provision --json '{\"customer\":\"customer_harbor\"}' | jq -r '.tenant[\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Tenant.invite --json '{\"tenant\":\"'\"$TENANT\"'\",\"email\":\"maria@harborlets.com\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "const tenant = await $.Tenant.provision({ customer: 'customer_harbor' })\nreturn await $.Tenant.invite({ tenant: tenant.$id, email: 'maria@harborlets.com' })"
          }
        }
      }
    },
    {
      "id": "send-email-from-my-domain",
      "title": "Send email from my domain",
      "says": [
        "Send email from our domain",
        "Why did this email bounce",
        "Make our receipts land in the inbox",
        "Stop our emails going to spam",
        "Send receipts from leaseline.app"
      ],
      "status": "live",
      "shelf": "front",
      "group": "ship",
      "tab": "start",
      "page": {
        "id": "page:start/guides/send-email-from-my-domain",
        "md": "/start/guides/send-email-from-my-domain.md"
      },
      "program": [
        "Domain.authenticate"
      ],
      "inputs": [
        {
          "domain": "domain_leaseline_app",
          "dmarc": "quarantine"
        }
      ],
      "examples": [
        [
          "domain",
          "dmarc"
        ]
      ],
      "plans": {
        "idea": {
          "calls": [
            "Domain.authenticate"
          ]
        },
        "live": {
          "calls": [
            "Domain.authenticate",
            "Mailbox.warm"
          ],
          "question": "Receipts only, or outreach too?"
        }
      },
      "needs": [
        "guide:buy-a-domain"
      ],
      "approval": "none",
      "leaves": [],
      "change": [
        "Send receipts from billing@leaseline.app.",
        "Show me every bounce this week.",
        "Set DMARC to reject."
      ],
      "later": [],
      "calls": {
        "ask": "Send email from our domain",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/domains/domain_leaseline_app/authenticate \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"dmarc\":\"quarantine\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Domain.authenticate({ domain: 'domain_leaseline_app', dmarc: 'quarantine' })",
        "cli": [
          "npx startup-builder do Domain.authenticate --json '{\"domain\":\"domain_leaseline_app\",\"dmarc\":\"quarantine\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "return await $.Domain.authenticate({ domain: 'domain_leaseline_app', dmarc: 'quarantine' })"
          }
        }
      }
    },
    {
      "id": "ship-an-api",
      "title": "Ship an API",
      "says": [
        "Sell renewal dates as an API, a cent per call",
        "Give developers keys to read their leases",
        "Let agents call my product",
        "Ship an API",
        "Give developers an API key and docs"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "ship",
      "tab": "products",
      "page": {
        "id": "page:products/api/ship-an-api",
        "md": "/products/api/ship-an-api.md"
      },
      "program": [
        "Interface.create",
        "Offer.publish"
      ],
      "inputs": [
        {
          "kind": "api",
          "path": "/v1"
        },
        {
          "offer": "offer_api_per_call"
        }
      ],
      "examples": [
        [
          "kind",
          "path"
        ],
        [
          "offer"
        ]
      ],
      "plans": {
        "idea": {
          "calls": [
            "Interface.create"
          ],
          "question": "Free keys first, or a price from the first call?"
        },
        "live": {
          "calls": [
            "Interface.create",
            "Offer.publish"
          ]
        }
      },
      "needs": [
        "noun:offer"
      ],
      "approval": "ask",
      "leaves": [
        "stripe-onboarding"
      ],
      "change": [
        "Give every key 1,000 free calls a month.",
        "Add a $49 plan with 10,000 calls included.",
        "Rate-limit the free plan to 10 calls a second."
      ],
      "later": [],
      "calls": {
        "ask": "Sell renewal dates as an API, a cent per call",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/interfaces \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"kind\":\"api\",\"path\":\"/v1\"}'",
          "curl -X POST https://api.sb/leaseline.app/offers/offer_api_per_call/publish \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\""
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Interface.create({ kind: 'api', path: '/v1' })\nawait $.Offer.publish({ offer: 'offer_api_per_call' })",
        "cli": [
          "npx startup-builder do Interface.create --json '{\"kind\":\"api\",\"path\":\"/v1\"}'",
          "npx startup-builder do Offer.publish --json '{\"offer\":\"offer_api_per_call\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "await $.Interface.create({ kind: 'api', path: '/v1' })\nreturn await $.Offer.publish({ offer: 'offer_api_per_call' })"
          }
        }
      }
    },
    {
      "id": "ship-my-changes",
      "title": "Ship my changes",
      "says": [
        "Ship my changes",
        "Put my edits to the lease fields live",
        "Deploy the branch once its checks pass",
        "Ship it",
        "Deploy this",
        "Send me a preview link",
        "Merge and deploy my changes"
      ],
      "status": "live",
      "shelf": "front",
      "group": "ship",
      "tab": "code",
      "page": {
        "id": "page:code/ship-my-changes",
        "md": "/code/ship-my-changes.md"
      },
      "program": [
        "Change.review",
        "Change.merge",
        "Version.deploy"
      ],
      "inputs": [
        {
          "change": "change_42"
        },
        {
          "change": "change_42"
        },
        {
          "version": "$2.$id"
        }
      ],
      "examples": [
        [
          "change"
        ],
        [
          "change"
        ],
        []
      ],
      "plans": {
        "idea": {
          "calls": [
            "Change.merge",
            "Version.deploy"
          ]
        },
        "live": {
          "calls": [
            "Change.review",
            "Change.merge",
            "Version.deploy"
          ],
          "question": "Ship to everyone, or to 10 percent first?"
        }
      },
      "needs": [
        "noun:change"
      ],
      "approval": "ask",
      "leaves": [],
      "change": [
        "Ship it to 10% of customers first.",
        "Undo the last change.",
        "Ask me before shipping anything that removes a field."
      ],
      "later": [],
      "calls": {
        "ask": "Ship my changes",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/changes/change_42/review \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\"",
          "CHANGE=$(curl -X POST https://api.sb/leaseline.app/changes/change_42/merge \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" | jq -r '.change[\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/versions/$CHANGE/deploy \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\""
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Change.review({ change: 'change_42' })\nconst { change } = await $.Change.merge({ change: 'change_42' })\nawait $.Version.deploy({ version: change.$id })",
        "cli": [
          "npx startup-builder do Change.review --json '{\"change\":\"change_42\"}'",
          "CHANGE=$(npx startup-builder do Change.merge --json '{\"change\":\"change_42\"}' | jq -r '.change[\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Version.deploy --json '{\"version\":\"'\"$CHANGE\"'\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "await $.Change.review({ change: 'change_42' })\nconst { change } = await $.Change.merge({ change: 'change_42' })\nreturn await $.Version.deploy({ version: change.$id })"
          }
        }
      }
    },
    {
      "id": "store-my-customers-data",
      "title": "Store my customers' data",
      "says": [
        "Keep each customer's leases, units and tenants",
        "Store renewal dates per customer, kept apart from every other customer",
        "Store my customers' data",
        "Keep each customer's projects separate",
        "Give every customer their own database"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "ship",
      "tab": "products",
      "page": {
        "id": "page:products/app/store-my-customers-data",
        "md": "/products/app/store-my-customers-data.md"
      },
      "program": [
        "Collection.create",
        "Tenant.provision"
      ],
      "inputs": [
        {
          "id": "leases",
          "type": [
            "lease"
          ]
        },
        {
          "customer": "customer_harbor"
        }
      ],
      "examples": [
        [
          "id",
          "type"
        ],
        [
          "customer"
        ]
      ],
      "plans": {
        "idea": {
          "calls": [
            "Collection.create"
          ]
        },
        "live": {
          "calls": [
            "Collection.create",
            "Tenant.provision"
          ]
        }
      },
      "needs": [
        "noun:customer"
      ],
      "approval": "none",
      "leaves": [],
      "change": [
        "Add a deposit amount to every Lease.",
        "Export every Lease to a spreadsheet each Monday.",
        "Link each Lease to the Unit it covers."
      ],
      "later": [],
      "calls": {
        "ask": "Keep each customer's leases, units and tenants",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/collections \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"id\":\"leases\",\"type\":[\"lease\"]}'",
          "curl -X POST https://api.sb/leaseline.app/tenants/provision \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"customer\":\"customer_harbor\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Collection.create({ id: 'leases', type: ['lease'] })\nawait $.Tenant.provision({ customer: 'customer_harbor' })",
        "cli": [
          "npx startup-builder do Collection.create --json '{\"id\":\"leases\",\"type\":[\"lease\"]}'",
          "npx startup-builder do Tenant.provision --json '{\"customer\":\"customer_harbor\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "await $.Collection.create({ id: 'leases', type: ['lease'] })\nreturn await $.Tenant.provision({ customer: 'customer_harbor' })"
          }
        }
      }
    },
    {
      "id": "how-is-it-going",
      "title": "How is it going",
      "says": [
        "How is it going",
        "How are we doing",
        "How are we doing this week",
        "Show me my numbers",
        "Send me a weekly business summary",
        "Every Monday, tell me how last week went",
        "What happened last week, and what needs me",
        "How many deposits do we have",
        "How many people signed up this week",
        "How much did we make this month, and how long does the cash last",
        "Send me revenue, burn and runway every Monday",
        "What is our growth rate",
        "How long is our runway",
        "One email a week instead of checking everything"
      ],
      "status": "live",
      "shelf": "front",
      "group": "how-its-going",
      "tab": "start",
      "page": {
        "id": "page:start/guides/how-is-it-going",
        "md": "/start/guides/how-is-it-going.md"
      },
      "program": [
        "Dashboard.create",
        "Dashboard.ask",
        "Dashboard.schedule"
      ],
      "inputs": [
        {
          "scope": "startup"
        },
        {
          "question": "This week against last week: visits to the reserve page, signups, deposits against the bar we set, and every Approval waiting on me.",
          "dashboard": "$1.$id"
        },
        {
          "dashboard": "$1.$id",
          "cadence": "weekly",
          "to": "dana@leaseline.app"
        }
      ],
      "examples": [
        [
          "scope"
        ],
        [
          "question"
        ],
        [
          "cadence",
          "to"
        ]
      ],
      "plans": {
        "idea": {
          "calls": [
            "Dashboard.create",
            "Dashboard.ask",
            "Dashboard.schedule"
          ],
          "question": "Visits, signups and deposits against your bar, every Monday?"
        },
        "building": {
          "calls": [
            "Dashboard.ask",
            "Dashboard.schedule"
          ],
          "question": "Add how many reservers used the preview this week?"
        },
        "live": {
          "calls": [
            "Dashboard.ask",
            "Dashboard.schedule"
          ],
          "question": "Revenue, new and lost customers, and support load, against last week?"
        },
        "repeatable": {
          "calls": [
            "Dashboard.ask",
            "Dashboard.schedule"
          ],
          "question": "Add month-3 retention, burn, cash and runway?"
        }
      },
      "needs": [
        "noun:startup"
      ],
      "approval": "none",
      "leaves": [],
      "change": [
        "Send it to my cofounder too.",
        "Post it in the team Slack channel instead.",
        "Add revenue, burn and runway now.",
        "Send it daily until the deposit deadline."
      ],
      "later": [],
      "calls": {
        "ask": "How is it going",
        "api": [
          "DASHBOARD=$(curl -X POST https://api.sb/leaseline.app/dashboards \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"scope\":\"startup\"}' | jq -r '.dashboard[\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/dashboards/ask \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"question\":\"This week against last week: visits to the reserve page, signups, deposits against the bar we set, and every Approval waiting on me.\",\"dashboard\":\"'\"$DASHBOARD\"'\"}'",
          "curl -X POST https://api.sb/leaseline.app/dashboards/$DASHBOARD/schedule \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"cadence\":\"weekly\",\"to\":\"dana@leaseline.app\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nconst dashboard = await $.Dashboard.create({ scope: 'startup' })\nawait $.Dashboard.ask({ question: 'This week against last week: visits to the reserve page, signups, deposits against the bar we set, and every Approval waiting on me.', dashboard: dashboard.$id })\nawait $.Dashboard.schedule({ dashboard: dashboard.$id, cadence: 'weekly', to: 'dana@leaseline.app' })",
        "cli": [
          "DASHBOARD=$(npx startup-builder do Dashboard.create --json '{\"scope\":\"startup\"}' | jq -r '.dashboard[\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Dashboard.ask --json '{\"question\":\"This week against last week: visits to the reserve page, signups, deposits against the bar we set, and every Approval waiting on me.\",\"dashboard\":\"'\"$DASHBOARD\"'\"}'",
          "npx startup-builder do Dashboard.schedule --json '{\"dashboard\":\"'\"$DASHBOARD\"'\",\"cadence\":\"weekly\",\"to\":\"dana@leaseline.app\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "const dashboard = await $.Dashboard.create({ scope: 'startup' })\nawait $.Dashboard.ask({ question: 'This week against last week: visits to the reserve page, signups, deposits against the bar we set, and every Approval waiting on me.', dashboard: dashboard.$id })\nreturn await $.Dashboard.schedule({ dashboard: dashboard.$id, cadence: 'weekly', to: 'dana@leaseline.app' })"
          }
        }
      }
    },
    {
      "id": "see-what-an-agent-did",
      "title": "See what the support agent did yesterday",
      "says": [
        "Show me everything the support agent did yesterday",
        "What did the agents do overnight",
        "List every refund the support agent made this week",
        "Who did what yesterday",
        "Show me the agent activity log"
      ],
      "status": "live",
      "shelf": "front",
      "group": "how-its-going",
      "tab": "agents",
      "page": {
        "id": "page:agents/see-what-an-agent-did",
        "md": "/agents/see-what-an-agent-did.md"
      },
      "program": [
        "Action.list"
      ],
      "inputs": [
        {
          "where": "by = \"agent_customer_lead\" and createdAt >= \"2026-10-22\" and createdAt < \"2026-10-23\"",
          "sort": "-createdAt",
          "limit": 100
        }
      ],
      "examples": [
        [
          "where",
          "sort",
          "limit"
        ]
      ],
      "plans": {},
      "needs": [],
      "approval": "none",
      "leaves": [],
      "change": [
        "Only the Actions that waited for my Approval.",
        "Send me this every morning at 8.",
        "Undo the refund it made to Unit 4B."
      ],
      "later": [],
      "calls": {
        "ask": "Show me everything the support agent did yesterday",
        "api": [
          "curl \"https://api.sb/leaseline.app/actions?limit=100&where=by%20%3D%20%22agent_customer_lead%22%20and%20createdAt%20%3E%3D%20%222026-10-22%22%20and%20createdAt%20%3C%20%222026-10-23%22&sort=-createdAt\" \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\""
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Action.list({ limit: 100, where: 'by = \"agent_customer_lead\" and createdAt >= \"2026-10-22\" and createdAt < \"2026-10-23\"', sort: '-createdAt' })",
        "cli": [
          "npx startup-builder do Action.list --json '{\"limit\":100,\"where\":\"by = \\\"agent_customer_lead\\\" and createdAt >= \\\"2026-10-22\\\" and createdAt < \\\"2026-10-23\\\"\",\"sort\":\"-createdAt\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "return await $.Action.list({ limit: 100, where: 'by = \"agent_customer_lead\" and createdAt >= \"2026-10-22\" and createdAt < \"2026-10-23\"', sort: '-createdAt' })"
          }
        }
      }
    },
    {
      "id": "answer-an-approval",
      "title": "Answer an approval",
      "says": [
        "What is waiting on me",
        "Show me my approvals",
        "Approve the $740 ad spend",
        "Yes, go ahead with the renewal",
        "Refuse that request and tell the agent why"
      ],
      "status": "live",
      "shelf": "front",
      "group": "work-with-your-agent",
      "tab": "agents",
      "page": {
        "id": "page:agents/answer-an-approval",
        "md": "/agents/answer-an-approval.md"
      },
      "program": [
        "Approval.approve"
      ],
      "inputs": [
        {
          "approval": "approval_ads_740",
          "note": "Yes, for the March campaign only."
        }
      ],
      "examples": [
        [
          "approval",
          "note"
        ]
      ],
      "plans": {},
      "needs": [],
      "approval": "none",
      "leaves": [],
      "change": [
        "Refuse it: the March budget is spent.",
        "Ask the agent for a cheaper option before I decide.",
        "Send my approvals to Slack too."
      ],
      "later": [],
      "calls": {
        "ask": "What is waiting on me",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/approvals/approval_ads_740/approve \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"note\":\"Yes, for the March campaign only.\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Approval.approve({ approval: 'approval_ads_740', note: 'Yes, for the March campaign only.' })",
        "cli": [
          "npx startup-builder do Approval.approve --json '{\"approval\":\"approval_ads_740\",\"note\":\"Yes, for the March campaign only.\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "return await $.Approval.approve({ approval: 'approval_ads_740', note: 'Yes, for the March campaign only.' })"
          }
        }
      }
    },
    {
      "id": "approve-what-agents-spend",
      "title": "Approve what agents spend",
      "says": [
        "Ask me before any agent spends more than $500 a month",
        "Nothing over $500 goes out without my yes",
        "Show me what the agents want to spend, and let me approve it",
        "Ask me before you spend money",
        "Post approvals in Slack and wait for my yes"
      ],
      "status": "live",
      "shelf": "front",
      "group": "work-with-your-agent",
      "tab": "agents",
      "page": {
        "id": "page:agents/approve-what-agents-spend",
        "md": "/agents/approve-what-agents-spend.md"
      },
      "program": [
        "Limit.create",
        "Approval.approve"
      ],
      "inputs": [
        {
          "amount": {
            "amount": 500,
            "currency": "USD"
          },
          "period": "month"
        },
        {
          "approval": "approval_1",
          "note": "Yes: the annual renewal for the listing site."
        }
      ],
      "examples": [
        [
          "amount",
          "period"
        ],
        [
          "approval",
          "note"
        ]
      ],
      "plans": {
        "idea": {
          "calls": [
            "Limit.create"
          ],
          "question": "What amount needs your yes: $100, or every dollar?"
        },
        "live": {
          "calls": [
            "Limit.create",
            "Approval.approve"
          ]
        }
      },
      "needs": [
        "noun:agent"
      ],
      "approval": "none",
      "leaves": [],
      "change": [
        "Raise it to $1,000 for ad spend only.",
        "Refuse the $740 request and tell the agent why.",
        "Stop all agent spending until I say so."
      ],
      "later": [],
      "calls": {
        "ask": "Ask me before any agent spends more than $500 a month",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/limits \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"amount\":{\"amount\":500,\"currency\":\"USD\"},\"period\":\"month\"}'",
          "curl -X POST https://api.sb/leaseline.app/approvals/approval_1/approve \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"note\":\"Yes: the annual renewal for the listing site.\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Limit.create({ amount: { amount: 500, currency: 'USD' }, period: 'month' })\nawait $.Approval.approve({ approval: 'approval_1', note: 'Yes: the annual renewal for the listing site.' })",
        "cli": [
          "npx startup-builder do Limit.create --json '{\"amount\":{\"amount\":500,\"currency\":\"USD\"},\"period\":\"month\"}'",
          "npx startup-builder do Approval.approve --json '{\"approval\":\"approval_1\",\"note\":\"Yes: the annual renewal for the listing site.\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "await $.Limit.create({ amount: { amount: 500, currency: 'USD' }, period: 'month' })\nreturn await $.Approval.approve({ approval: 'approval_1', note: 'Yes: the annual renewal for the listing site.' })"
          }
        }
      }
    },
    {
      "id": "automate-a-workflow",
      "title": "Automate a workflow",
      "says": [
        "When a customer reaches one year with us, email them a thank-you from me and give them a free month",
        "Thank every customer on their first anniversary and take a month off their next bill",
        "Reward one-year customers with a note from me and a free month",
        "Automate a workflow",
        "Every time this happens, do that for me"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "work-with-your-agent",
      "tab": "workflows",
      "page": {
        "id": "page:workflows/automate-a-workflow",
        "md": "/workflows/automate-a-workflow.md"
      },
      "program": [
        "Process.create",
        "Coupon.create",
        "Workflow.create",
        "Trigger.create"
      ],
      "inputs": [
        {
          "name": "First-year thanks"
        },
        {
          "percentOff": 100,
          "duration": "once"
        },
        {
          "steps": {
            "check": "Stop unless this renewal starts the second year.",
            "thank": "Email the Customer a thank-you from dana@leaseline.app.",
            "credit": "Apply the free-month Coupon to the next Invoice."
          },
          "retries": 3
        },
        {
          "event": "Subscription.renewed"
        }
      ],
      "examples": [
        [
          "name"
        ],
        [
          "percentOff",
          "duration"
        ],
        [
          "steps",
          "retries"
        ],
        [
          "event"
        ]
      ],
      "plans": {
        "idea": {
          "calls": [
            "Workflow.create",
            "Trigger.create"
          ]
        },
        "live": {
          "calls": [
            "Process.create",
            "Coupon.create",
            "Workflow.create",
            "Trigger.create"
          ],
          "question": "Ask you first for any customer above $100 a month?"
        }
      },
      "needs": [
        "noun:startup"
      ],
      "approval": "none",
      "leaves": [],
      "change": [
        "Ask me first for anyone paying more than $100 a month.",
        "Send it at two years too, with two free months.",
        "Wait a day after the renewal before sending the email."
      ],
      "later": [],
      "calls": {
        "ask": "When a customer reaches one year with us, email them a thank-you from me and give them a free month",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/processes \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"name\":\"First-year thanks\"}'",
          "curl -X POST https://api.sb/leaseline.app/coupons \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"duration\":\"once\",\"percentOff\":100}'",
          "curl -X POST https://api.sb/leaseline.app/workflows \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"steps\":{\"check\":\"Stop unless this renewal starts the second year.\",\"thank\":\"Email the Customer a thank-you from dana@leaseline.app.\",\"credit\":\"Apply the free-month Coupon to the next Invoice.\"},\"retries\":3}'",
          "curl -X POST https://api.sb/leaseline.app/triggers \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"event\":\"Subscription.renewed\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Process.create({ name: 'First-year thanks' })\nawait $.Coupon.create({ duration: 'once', percentOff: 100 })\nawait $.Workflow.create({ steps: { check: 'Stop unless this renewal starts the second year.', thank: 'Email the Customer a thank-you from dana@leaseline.app.', credit: 'Apply the free-month Coupon to the next Invoice.' }, retries: 3 })\nawait $.Trigger.create({ event: 'Subscription.renewed' })",
        "cli": [
          "npx startup-builder do Process.create --json '{\"name\":\"First-year thanks\"}'",
          "npx startup-builder do Coupon.create --json '{\"duration\":\"once\",\"percentOff\":100}'",
          "npx startup-builder do Workflow.create --json '{\"steps\":{\"check\":\"Stop unless this renewal starts the second year.\",\"thank\":\"Email the Customer a thank-you from dana@leaseline.app.\",\"credit\":\"Apply the free-month Coupon to the next Invoice.\"},\"retries\":3}'",
          "npx startup-builder do Trigger.create --json '{\"event\":\"Subscription.renewed\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "await $.Process.create({ name: 'First-year thanks' })\nawait $.Coupon.create({ duration: 'once', percentOff: 100 })\nawait $.Workflow.create({ steps: { check: 'Stop unless this renewal starts the second year.', thank: 'Email the Customer a thank-you from dana@leaseline.app.', credit: 'Apply the free-month Coupon to the next Invoice.' }, retries: 3 })\nreturn await $.Trigger.create({ event: 'Subscription.renewed' })"
          }
        }
      }
    },
    {
      "id": "give-a-teammate-access",
      "title": "Give a teammate access",
      "says": [
        "Give my cofounder access",
        "Give Sam admin access",
        "Let my cofounder in",
        "Add a teammate to the business",
        "Give my contractor access to support only",
        "Who can see and change what"
      ],
      "status": "live",
      "shelf": "front",
      "group": "work-with-your-agent",
      "tab": "agents",
      "page": {
        "id": "page:agents/give-a-teammate-access",
        "md": "/agents/give-a-teammate-access.md"
      },
      "program": [
        "Human.invite"
      ],
      "inputs": [
        {
          "email": "sam@leaseline.app",
          "role": "engineering-lead",
          "access": "admin"
        }
      ],
      "examples": [
        [
          "email",
          "role",
          "access"
        ]
      ],
      "plans": {},
      "needs": [
        "noun:role"
      ],
      "approval": "ask",
      "leaves": [],
      "change": [
        "Invite Sam to the Product Lead seat instead.",
        "Invite my contractor to the Customer Lead seat as a member.",
        "Let Sam approve deploys instead of me."
      ],
      "later": [],
      "calls": {
        "ask": "Give my cofounder access",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/humans/invite \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"email\":\"sam@leaseline.app\",\"role\":\"engineering-lead\",\"access\":\"admin\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Human.invite({ email: 'sam@leaseline.app', role: 'engineering-lead', access: 'admin' })",
        "cli": [
          "npx startup-builder do Human.invite --json '{\"email\":\"sam@leaseline.app\",\"role\":\"engineering-lead\",\"access\":\"admin\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "return await $.Human.invite({ email: 'sam@leaseline.app', role: 'engineering-lead', access: 'admin' })"
          }
        }
      }
    },
    {
      "id": "hire-an-agent-for-a-role",
      "title": "Hire an agent for a role",
      "says": [
        "Hire an agent to answer my customers",
        "Take support off my plate",
        "I am done doing support, hand it to an agent",
        "Who answers support, and what does it do without asking",
        "Let the support agent answer on its own, and ask me before refunds",
        "Put an agent in the Customer Lead seat"
      ],
      "status": "live",
      "shelf": "front",
      "group": "work-with-your-agent",
      "tab": "agents",
      "page": {
        "id": "page:agents/hire-an-agent-for-a-role",
        "md": "/agents/hire-an-agent-for-a-role.md"
      },
      "program": [
        "Role.update",
        "Action.list"
      ],
      "inputs": [
        {
          "id": "customer-lead",
          "name": "Customer Lead",
          "autonomy": {
            "default": "supervised",
            "byClass": {
              "high": "assist"
            }
          }
        },
        {
          "where": "by = \"agent_customer_lead\" and createdAt >= \"2026-10-16\"",
          "sort": "-createdAt",
          "limit": 50
        }
      ],
      "examples": [
        [
          "id",
          "name",
          "autonomy"
        ],
        [
          "where",
          "sort",
          "limit"
        ]
      ],
      "plans": {
        "idea": {
          "calls": [
            "Role.update",
            "Action.list"
          ],
          "question": "Should it draft and wait for you, or answer on its own and ask before refunds?"
        },
        "live": {
          "calls": [
            "Role.review",
            "Role.update"
          ],
          "question": "Review last week before you change what it does alone?"
        }
      },
      "needs": [],
      "approval": "none",
      "leaves": [],
      "change": [
        "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."
      ],
      "later": [],
      "calls": {
        "ask": "Hire an agent to answer my customers",
        "api": [
          "curl -X PATCH https://api.sb/leaseline.app/roles/customer-lead \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"name\":\"Customer Lead\",\"autonomy\":{\"default\":\"supervised\",\"byClass\":{\"high\":\"assist\"}}}'",
          "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\" \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\""
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Role.update({ id: 'customer-lead', name: 'Customer Lead', autonomy: { default: 'supervised', byClass: { high: 'assist' } } })\nawait $.Action.list({ limit: 50, where: 'by = \"agent_customer_lead\" and createdAt >= \"2026-10-16\"', sort: '-createdAt' })",
        "cli": [
          "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\"}'"
        ],
        "mcp": {
          "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' })"
          }
        }
      }
    },
    {
      "id": "invite-a-person-to-a-role",
      "title": "Invite my cofounder as CTO",
      "says": [
        "Invite my cofounder as CTO",
        "Add Sam to the Engineering Lead seat",
        "Bring a person onto the team",
        "Give my contractor the support seat"
      ],
      "status": "live",
      "shelf": "front",
      "group": "work-with-your-agent",
      "tab": "agents",
      "page": {
        "id": "page:agents/invite-a-person-to-a-role",
        "md": "/agents/invite-a-person-to-a-role.md"
      },
      "program": [
        "Human.invite"
      ],
      "inputs": [
        {
          "email": "sam@leaseline.app",
          "role": "engineering-lead"
        }
      ],
      "examples": [
        [
          "email",
          "role"
        ]
      ],
      "plans": {},
      "needs": [
        "noun:role"
      ],
      "approval": "none",
      "leaves": [],
      "change": [
        "Let Sam approve deploys instead of me.",
        "Give Sam viewer access to the books.",
        "Hand the seat back to the agent."
      ],
      "later": [],
      "calls": {
        "ask": "Invite my cofounder as CTO",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/humans/invite \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"email\":\"sam@leaseline.app\",\"role\":\"engineering-lead\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Human.invite({ email: 'sam@leaseline.app', role: 'engineering-lead' })",
        "cli": [
          "npx startup-builder do Human.invite --json '{\"email\":\"sam@leaseline.app\",\"role\":\"engineering-lead\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "return await $.Human.invite({ email: 'sam@leaseline.app', role: 'engineering-lead' })"
          }
        }
      }
    },
    {
      "id": "issue-a-card-with-a-limit",
      "title": "Issue a card with a limit",
      "says": [
        "Give my ads agent a card with a $500 monthly limit",
        "Get me a virtual card for software, $200 a month at most",
        "Let the growth agent spend up to $500 a month on ads",
        "Issue a card with a limit",
        "Let the agent pay for tools on its own card"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "work-with-your-agent",
      "tab": "systems",
      "page": {
        "id": "page:systems/finance/issue-a-card-with-a-limit",
        "md": "/systems/finance/issue-a-card-with-a-limit.md"
      },
      "program": [
        "Mandate.authorize",
        "Card.issue"
      ],
      "inputs": [
        {
          "agent": "agent_ads",
          "verb": "Mandate.spend",
          "limit": "limit_ads_500_monthly"
        },
        {
          "mandate": "$1.$id",
          "form": "merchant",
          "merchant": "Google Ads"
        }
      ],
      "examples": [
        [
          "agent",
          "verb",
          "limit"
        ],
        [
          "form",
          "merchant"
        ]
      ],
      "plans": {
        "idea": {
          "calls": [
            "Mandate.authorize",
            "Card.issue"
          ],
          "question": "Which merchant may it pay?"
        },
        "live": {
          "calls": [
            "Mandate.authorize",
            "Card.issue"
          ]
        }
      },
      "needs": [
        "verb:Startup.claim",
        "noun:agent"
      ],
      "approval": "ask",
      "leaves": [],
      "change": [
        "Raise the limit to $800 for March.",
        "Freeze the card.",
        "Add a second card for Meta ads."
      ],
      "later": [],
      "calls": {
        "ask": "Give my ads agent a card with a $500 monthly limit",
        "api": [
          "MANDATE=$(curl -X POST https://api.sb/leaseline.app/mandates/authorize \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"agent\":\"agent_ads\",\"verb\":\"Mandate.spend\",\"limit\":\"limit_ads_500_monthly\"}' | jq -r '.mandate[\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/cards/issue \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"mandate\":\"'\"$MANDATE\"'\",\"form\":\"merchant\",\"merchant\":\"Google Ads\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nconst mandate = await $.Mandate.authorize({ agent: 'agent_ads', verb: 'Mandate.spend', limit: 'limit_ads_500_monthly' })\nawait $.Card.issue({ mandate: mandate.$id, form: 'merchant', merchant: 'Google Ads' })",
        "cli": [
          "MANDATE=$(npx startup-builder do Mandate.authorize --json '{\"agent\":\"agent_ads\",\"verb\":\"Mandate.spend\",\"limit\":\"limit_ads_500_monthly\"}' | jq -r '.mandate[\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Card.issue --json '{\"mandate\":\"'\"$MANDATE\"'\",\"form\":\"merchant\",\"merchant\":\"Google Ads\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "const mandate = await $.Mandate.authorize({ agent: 'agent_ads', verb: 'Mandate.spend', limit: 'limit_ads_500_monthly' })\nreturn await $.Card.issue({ mandate: mandate.$id, form: 'merchant', merchant: 'Google Ads' })"
          }
        }
      }
    },
    {
      "id": "let-an-agent-refund",
      "title": "Let the support agent refund up to $50",
      "says": [
        "Let the support agent refund up to $50 without asking",
        "Stop asking me about small refunds",
        "Refunds under $50 are fine, do them without me",
        "Give support a refund limit"
      ],
      "status": "live",
      "shelf": "front",
      "group": "work-with-your-agent",
      "tab": "agents",
      "page": {
        "id": "page:agents/let-an-agent-refund",
        "md": "/agents/let-an-agent-refund.md"
      },
      "program": [
        "Limit.create",
        "Mandate.authorize"
      ],
      "inputs": [
        {
          "amount": {
            "amount": 50,
            "currency": "USD"
          }
        },
        {
          "agent": "agent_customer_lead",
          "verb": "Order.refund",
          "limit": "$1.$id",
          "topics": [
            "refund"
          ]
        }
      ],
      "examples": [
        [
          "amount"
        ],
        [
          "agent",
          "verb",
          "topics"
        ]
      ],
      "plans": {},
      "needs": [],
      "approval": "ask",
      "leaves": [],
      "change": [
        "Cap it at $500 of refunds a week.",
        "Ask me for any refund on an annual plan.",
        "Take the refund Mandate away."
      ],
      "later": [],
      "calls": {
        "ask": "Let the support agent refund up to $50 without asking",
        "api": [
          "LIMIT=$(curl -X POST https://api.sb/leaseline.app/limits \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"amount\":{\"amount\":50,\"currency\":\"USD\"}}' | jq -r '.limit[\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/mandates/authorize \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"agent\":\"agent_customer_lead\",\"verb\":\"Order.refund\",\"limit\":\"'\"$LIMIT\"'\",\"topics\":[\"refund\"]}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nconst limit = await $.Limit.create({ amount: { amount: 50, currency: 'USD' } })\nawait $.Mandate.authorize({ agent: 'agent_customer_lead', verb: 'Order.refund', limit: limit.$id, topics: ['refund'] })",
        "cli": [
          "LIMIT=$(npx startup-builder do Limit.create --json '{\"amount\":{\"amount\":50,\"currency\":\"USD\"}}' | jq -r '.limit[\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Mandate.authorize --json '{\"agent\":\"agent_customer_lead\",\"verb\":\"Order.refund\",\"limit\":\"'\"$LIMIT\"'\",\"topics\":[\"refund\"]}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "const limit = await $.Limit.create({ amount: { amount: 50, currency: 'USD' } })\nreturn await $.Mandate.authorize({ agent: 'agent_customer_lead', verb: 'Order.refund', limit: limit.$id, topics: ['refund'] })"
          }
        }
      }
    },
    {
      "id": "pause-customer-facing-agents",
      "title": "Pause every agent that talks to customers",
      "says": [
        "Pause every agent that talks to customers",
        "Stop all customer-facing agents now",
        "Something is wrong, stop the agents replying to customers",
        "Turn off the support and sales agents",
        "Kill switch for the agents"
      ],
      "status": "live",
      "shelf": "front",
      "group": "work-with-your-agent",
      "tab": "agents",
      "page": {
        "id": "page:agents/pause-customer-facing-agents",
        "md": "/agents/pause-customer-facing-agents.md"
      },
      "program": [
        "Agent.pause"
      ],
      "inputs": [
        {
          "customerFacing": true,
          "reason": "Wrong refund policy in replies since 9:40."
        }
      ],
      "examples": [
        [
          "customerFacing",
          "reason"
        ]
      ],
      "plans": {},
      "needs": [
        "noun:agent"
      ],
      "approval": "none",
      "leaves": [],
      "change": [
        "Pause only the Customer Team.",
        "Resume Susan once the policy is fixed.",
        "Retire this agent and put another in the seat."
      ],
      "later": [],
      "calls": {
        "ask": "Pause every agent that talks to customers",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/agents/pause \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"reason\":\"Wrong refund policy in replies since 9:40.\",\"customerFacing\":true}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Agent.pause({ reason: 'Wrong refund policy in replies since 9:40.', customerFacing: true })",
        "cli": [
          "npx startup-builder do Agent.pause --json '{\"reason\":\"Wrong refund policy in replies since 9:40.\",\"customerFacing\":true}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "return await $.Agent.pause({ reason: 'Wrong refund policy in replies since 9:40.', customerFacing: true })"
          }
        }
      }
    },
    {
      "id": "review-a-role",
      "title": "Review the support agent",
      "says": [
        "Review the support agent",
        "Review the Customer Lead for last week",
        "Is the sales agent meeting its contract",
        "Grade each seat against its contract",
        "Which agents missed their standards"
      ],
      "status": "live",
      "shelf": "front",
      "group": "work-with-your-agent",
      "tab": "agents",
      "page": {
        "id": "page:agents/review-a-role",
        "md": "/agents/review-a-role.md"
      },
      "program": [
        "Role.review"
      ],
      "inputs": [
        {
          "role": "customer-lead",
          "period": "2026-W43"
        }
      ],
      "examples": [
        [
          "role",
          "period"
        ]
      ],
      "plans": {},
      "needs": [],
      "approval": "none",
      "leaves": [],
      "change": [
        "Review every seat each Monday and send me the misses.",
        "Compare this week with the four before it.",
        "Let it answer weekend chats on its own."
      ],
      "later": [],
      "calls": {
        "ask": "Review the support agent",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/roles/customer-lead/review \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"period\":\"2026-W43\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Role.review({ role: 'customer-lead', period: '2026-W43' })",
        "cli": [
          "npx startup-builder do Role.review --json '{\"role\":\"customer-lead\",\"period\":\"2026-W43\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "return await $.Role.review({ role: 'customer-lead', period: '2026-W43' })"
          }
        }
      }
    },
    {
      "id": "run-a-seat-yourself",
      "title": "Run sales myself",
      "says": [
        "Let me run sales myself",
        "I want to sell to the first ten customers myself",
        "Put me in the Sales Lead seat",
        "Take the sales agent off deals, I will handle them",
        "I will answer support myself for now"
      ],
      "status": "live",
      "shelf": "front",
      "group": "work-with-your-agent",
      "tab": "agents",
      "page": {
        "id": "page:agents/run-a-seat-yourself",
        "md": "/agents/run-a-seat-yourself.md"
      },
      "program": [
        "Role.staff"
      ],
      "inputs": [
        {
          "role": "sales-lead",
          "worker": "human_dana"
        }
      ],
      "examples": [
        [
          "role",
          "worker"
        ]
      ],
      "plans": {},
      "needs": [],
      "approval": "none",
      "leaves": [],
      "change": [
        "Let the agent draft my follow-ups, and I send them.",
        "Give the sales seat back to the agent.",
        "Put Sam in the seat instead of me."
      ],
      "later": [],
      "calls": {
        "ask": "Let me run sales myself",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/roles/sales-lead/staff \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"worker\":\"human_dana\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Role.staff({ role: 'sales-lead', worker: 'human_dana' })",
        "cli": [
          "npx startup-builder do Role.staff --json '{\"role\":\"sales-lead\",\"worker\":\"human_dana\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "return await $.Role.staff({ role: 'sales-lead', worker: 'human_dana' })"
          }
        }
      }
    },
    {
      "id": "announce-every-release",
      "title": "Announce every release",
      "says": [
        "Announce every release",
        "Post what shipped each time we deploy",
        "Tell customers when the feature they asked for ships",
        "Write release notes for every deploy",
        "Post release notes to the changelog after each deploy"
      ],
      "status": "live",
      "shelf": "wakes",
      "tab": "workflows",
      "page": {
        "id": "page:workflows/guides/announce-every-release",
        "md": "/workflows/guides/announce-every-release.md"
      },
      "program": [
        "Workflow.create",
        "Trigger.create"
      ],
      "inputs": [
        {
          "steps": {
            "notes": "Write release notes from the Changes in the Version.",
            "post": "Publish them to the changelog.",
            "tell": "Email each Customer and Lead who asked for a shipped feature."
          },
          "retries": 3
        },
        {
          "event": "Version.deployed"
        }
      ],
      "examples": [
        [
          "steps",
          "retries"
        ],
        [
          "event"
        ]
      ],
      "plans": {},
      "needs": [
        "guide:ship-my-changes"
      ],
      "approval": "none",
      "leaves": [],
      "wakesOn": {
        "event": "Startup.launched",
        "where": "the Startup goes live",
        "first": true
      },
      "change": [
        "Skip releases that only fix bugs.",
        "Post to our social accounts too.",
        "Batch it into one email a week."
      ],
      "later": [],
      "calls": {
        "ask": "Announce every release",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/workflows \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"steps\":{\"notes\":\"Write release notes from the Changes in the Version.\",\"post\":\"Publish them to the changelog.\",\"tell\":\"Email each Customer and Lead who asked for a shipped feature.\"},\"retries\":3}'",
          "curl -X POST https://api.sb/leaseline.app/triggers \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"event\":\"Version.deployed\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Workflow.create({ steps: { notes: 'Write release notes from the Changes in the Version.', post: 'Publish them to the changelog.', tell: 'Email each Customer and Lead who asked for a shipped feature.' }, retries: 3 })\nawait $.Trigger.create({ event: 'Version.deployed' })",
        "cli": [
          "npx startup-builder do Workflow.create --json '{\"steps\":{\"notes\":\"Write release notes from the Changes in the Version.\",\"post\":\"Publish them to the changelog.\",\"tell\":\"Email each Customer and Lead who asked for a shipped feature.\"},\"retries\":3}'",
          "npx startup-builder do Trigger.create --json '{\"event\":\"Version.deployed\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "await $.Workflow.create({ steps: { notes: 'Write release notes from the Changes in the Version.', post: 'Publish them to the changelog.', tell: 'Email each Customer and Lead who asked for a shipped feature.' }, retries: 3 })\nreturn await $.Trigger.create({ event: 'Version.deployed' })"
          }
        }
      }
    },
    {
      "id": "answer-a-dispute",
      "title": "Answer a dispute",
      "says": [
        "Answer this chargeback",
        "A customer disputed a charge",
        "Fight the chargeback with our records",
        "Send our evidence for the dispute"
      ],
      "status": "beta",
      "shelf": "wakes",
      "tab": "systems",
      "page": {
        "id": "page:systems/finance/answer-a-dispute",
        "md": "/systems/finance/answer-a-dispute.md"
      },
      "program": [
        "Dispute.answer"
      ],
      "inputs": [
        {
          "dispute": "dispute_harbor_1",
          "evidence": [
            "evidence_order_harbor",
            "evidence_delivery_harbor"
          ]
        }
      ],
      "examples": [
        [
          "dispute",
          "evidence"
        ]
      ],
      "plans": {},
      "needs": [
        "verb:Startup.claim"
      ],
      "approval": "ask",
      "leaves": [],
      "wakesOn": {
        "event": "Dispute.opened",
        "where": "a Customer’s bank opens a chargeback",
        "first": true
      },
      "change": [
        "Accept it and refund instead.",
        "Answer every dispute under $50 without asking me."
      ],
      "later": [],
      "calls": {
        "ask": "Answer this chargeback",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/disputes/dispute_harbor_1/answer \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"evidence\":[\"evidence_order_harbor\",\"evidence_delivery_harbor\"]}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Dispute.answer({ dispute: 'dispute_harbor_1', evidence: ['evidence_order_harbor', 'evidence_delivery_harbor'] })",
        "cli": [
          "npx startup-builder do Dispute.answer --json '{\"dispute\":\"dispute_harbor_1\",\"evidence\":[\"evidence_order_harbor\",\"evidence_delivery_harbor\"]}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "return await $.Dispute.answer({ dispute: 'dispute_harbor_1', evidence: ['evidence_order_harbor', 'evidence_delivery_harbor'] })"
          }
        }
      }
    },
    {
      "id": "answer-privacy-requests",
      "title": "Answer privacy requests",
      "says": [
        "Answer privacy requests",
        "Someone asked us to delete their data",
        "Export everything we hold about this person",
        "Which privacy requests are due",
        "Answer data requests within the legal deadline"
      ],
      "status": "live",
      "shelf": "wakes",
      "tab": "workflows",
      "page": {
        "id": "page:workflows/guides/answer-privacy-requests",
        "md": "/workflows/guides/answer-privacy-requests.md"
      },
      "program": [
        "Process.enable",
        "Setting.update"
      ],
      "inputs": [
        {
          "process": "process_privacy"
        },
        {
          "key": "privacy.deadlineDays",
          "value": 30
        }
      ],
      "examples": [
        [
          "process"
        ],
        [
          "key",
          "value"
        ]
      ],
      "plans": {},
      "needs": [
        "noun:person"
      ],
      "approval": "none",
      "leaves": [],
      "wakesOn": {
        "event": "Thread.created",
        "where": "the first privacy request arrives",
        "first": true
      },
      "change": [
        "Answer within 15 days for requests from the EU.",
        "Copy my lawyer on every deletion.",
        "Show me every request answered this year."
      ],
      "later": [],
      "calls": {
        "ask": "Answer privacy requests",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/processes/process_privacy/enable \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\"",
          "curl -X PATCH https://api.sb/leaseline.app/settings/setting_1 \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"value\":30,\"key\":\"privacy.deadlineDays\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Process.enable({ process: 'process_privacy' })\nawait $.Setting.update({ id: 'setting_1', value: 30, key: 'privacy.deadlineDays' })",
        "cli": [
          "npx startup-builder do Process.enable --json '{\"process\":\"process_privacy\"}'",
          "npx startup-builder do Setting.update --json '{\"id\":\"setting_1\",\"value\":30,\"key\":\"privacy.deadlineDays\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "await $.Process.enable({ process: 'process_privacy' })\nreturn await $.Setting.update({ id: 'setting_1', value: 30, key: 'privacy.deadlineDays' })"
          }
        }
      }
    },
    {
      "id": "approve-card-charges-over-500",
      "title": "Approve card charges over $500",
      "says": [
        "Card charges under $500 are fine without me",
        "Chase missing receipts after a week",
        "Code every card charge to an account",
        "Hold card charges over $500 for my yes",
        "Which card charges are waiting on me"
      ],
      "status": "live",
      "shelf": "wakes",
      "tab": "workflows",
      "page": {
        "id": "page:workflows/guides/approve-card-charges-over-500",
        "md": "/workflows/guides/approve-card-charges-over-500.md"
      },
      "program": [
        "Process.enable",
        "Setting.update"
      ],
      "inputs": [
        {
          "process": "process_expense_approval"
        },
        {
          "key": "spend.askAbove",
          "value": {
            "amount": 500,
            "currency": "USD"
          }
        }
      ],
      "examples": [
        [
          "process"
        ],
        [
          "key",
          "value"
        ]
      ],
      "plans": {},
      "needs": [
        "guide:issue-a-card-with-a-limit"
      ],
      "approval": "none",
      "leaves": [],
      "wakesOn": {
        "event": "Card.issued",
        "where": "the Startup issues its first Card",
        "first": true
      },
      "change": [
        "Lower it to $200 for software subscriptions.",
        "Freeze the card for this vendor.",
        "Show me what we spent on cards this month."
      ],
      "later": [],
      "calls": {
        "ask": "Card charges under $500 are fine without me",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/processes/process_expense_approval/enable \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\"",
          "curl -X PATCH https://api.sb/leaseline.app/settings/setting_1 \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"value\":{\"amount\":500,\"currency\":\"USD\"},\"key\":\"spend.askAbove\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Process.enable({ process: 'process_expense_approval' })\nawait $.Setting.update({ id: 'setting_1', value: { amount: 500, currency: 'USD' }, key: 'spend.askAbove' })",
        "cli": [
          "npx startup-builder do Process.enable --json '{\"process\":\"process_expense_approval\"}'",
          "npx startup-builder do Setting.update --json '{\"id\":\"setting_1\",\"value\":{\"amount\":500,\"currency\":\"USD\"},\"key\":\"spend.askAbove\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "await $.Process.enable({ process: 'process_expense_approval' })\nreturn await $.Setting.update({ id: 'setting_1', value: { amount: 500, currency: 'USD' }, key: 'spend.askAbove' })"
          }
        }
      }
    },
    {
      "id": "chase-unpaid-invoices",
      "title": "Chase unpaid invoices",
      "says": [
        "Chase unpaid invoices",
        "Remind customers who have not paid",
        "Follow up on overdue invoices",
        "Who owes us money",
        "Remind late payers with their pay link"
      ],
      "status": "live",
      "shelf": "wakes",
      "tab": "workflows",
      "page": {
        "id": "page:workflows/guides/chase-unpaid-invoices",
        "md": "/workflows/guides/chase-unpaid-invoices.md"
      },
      "program": [
        "Process.enable",
        "Setting.update"
      ],
      "inputs": [
        {
          "process": "process_billing"
        },
        {
          "key": "dunning.pauseService",
          "value": true
        }
      ],
      "examples": [
        [
          "process"
        ],
        [
          "key",
          "value"
        ]
      ],
      "plans": {},
      "needs": [
        "guide:send-an-invoice"
      ],
      "approval": "none",
      "leaves": [],
      "wakesOn": {
        "event": "Invoice.overdue",
        "where": "the first Invoice passes its due date unpaid",
        "first": true
      },
      "change": [
        "Never remind Riverside Property; I call them myself.",
        "Hand anything over $5,000 to me at 14 days.",
        "Write off anything under $20 after 90 days."
      ],
      "later": [],
      "calls": {
        "ask": "Chase unpaid invoices",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/processes/process_billing/enable \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\"",
          "curl -X PATCH https://api.sb/leaseline.app/settings/setting_1 \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"value\":true,\"key\":\"dunning.pauseService\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Process.enable({ process: 'process_billing' })\nawait $.Setting.update({ id: 'setting_1', value: true, key: 'dunning.pauseService' })",
        "cli": [
          "npx startup-builder do Process.enable --json '{\"process\":\"process_billing\"}'",
          "npx startup-builder do Setting.update --json '{\"id\":\"setting_1\",\"value\":true,\"key\":\"dunning.pauseService\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "await $.Process.enable({ process: 'process_billing' })\nreturn await $.Setting.update({ id: 'setting_1', value: true, key: 'dunning.pauseService' })"
          }
        }
      }
    },
    {
      "id": "close-the-books-every-month",
      "title": "Close the books every month",
      "says": [
        "Close the books every month",
        "Close last month",
        "Are the books reconciled",
        "Show me the profit and loss",
        "Close by the third business day"
      ],
      "status": "live",
      "shelf": "wakes",
      "tab": "workflows",
      "page": {
        "id": "page:workflows/guides/close-the-books-every-month",
        "md": "/workflows/guides/close-the-books-every-month.md"
      },
      "program": [
        "Process.enable",
        "Setting.update"
      ],
      "inputs": [
        {
          "process": "process_books"
        },
        {
          "key": "close.businessDay",
          "value": 3
        }
      ],
      "examples": [
        [
          "process"
        ],
        [
          "key",
          "value"
        ]
      ],
      "plans": {},
      "needs": [
        "guide:take-a-payment"
      ],
      "approval": "none",
      "leaves": [],
      "wakesOn": {
        "event": "Order.paid",
        "where": "the Startup takes its first outside payment",
        "first": true
      },
      "change": [
        "Send the profit and loss to my accountant too.",
        "Do not lock a month until I approve it.",
        "Show me cash, not accrual."
      ],
      "later": [],
      "calls": {
        "ask": "Close the books every month",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/processes/process_books/enable \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\"",
          "curl -X PATCH https://api.sb/leaseline.app/settings/setting_1 \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"value\":3,\"key\":\"close.businessDay\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Process.enable({ process: 'process_books' })\nawait $.Setting.update({ id: 'setting_1', value: 3, key: 'close.businessDay' })",
        "cli": [
          "npx startup-builder do Process.enable --json '{\"process\":\"process_books\"}'",
          "npx startup-builder do Setting.update --json '{\"id\":\"setting_1\",\"value\":3,\"key\":\"close.businessDay\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "await $.Process.enable({ process: 'process_books' })\nreturn await $.Setting.update({ id: 'setting_1', value: 3, key: 'close.businessDay' })"
          }
        }
      }
    },
    {
      "id": "escalate-hard-support-questions-to-me",
      "title": "Escalate hard support questions to me",
      "says": [
        "Escalate hard support questions to me",
        "Send me the support questions the agent cannot answer",
        "Answer support within an hour",
        "Review agent replies before they go out",
        "Which conversations are waiting on me"
      ],
      "status": "live",
      "shelf": "wakes",
      "tab": "workflows",
      "page": {
        "id": "page:workflows/guides/escalate-hard-support-questions-to-me",
        "md": "/workflows/guides/escalate-hard-support-questions-to-me.md"
      },
      "program": [
        "Process.enable",
        "Setting.update"
      ],
      "inputs": [
        {
          "process": "process_support"
        },
        {
          "key": "support.firstResponse",
          "value": "1h"
        }
      ],
      "examples": [
        [
          "process"
        ],
        [
          "key",
          "value"
        ]
      ],
      "plans": {},
      "needs": [
        "noun:customer"
      ],
      "approval": "none",
      "leaves": [],
      "wakesOn": {
        "event": "Conversation.created",
        "where": "the first Customer writes in",
        "first": true
      },
      "change": [
        "Let me approve every reply for the first two weeks.",
        "Answer within 15 minutes during business hours.",
        "Send billing questions straight to me."
      ],
      "later": [],
      "calls": {
        "ask": "Escalate hard support questions to me",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/processes/process_support/enable \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\"",
          "curl -X PATCH https://api.sb/leaseline.app/settings/setting_1 \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"value\":\"1h\",\"key\":\"support.firstResponse\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Process.enable({ process: 'process_support' })\nawait $.Setting.update({ id: 'setting_1', value: '1h', key: 'support.firstResponse' })",
        "cli": [
          "npx startup-builder do Process.enable --json '{\"process\":\"process_support\"}'",
          "npx startup-builder do Setting.update --json '{\"id\":\"setting_1\",\"value\":\"1h\",\"key\":\"support.firstResponse\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "await $.Process.enable({ process: 'process_support' })\nreturn await $.Setting.update({ id: 'setting_1', value: '1h', key: 'support.firstResponse' })"
          }
        }
      }
    },
    {
      "id": "make-a-custom-plan",
      "title": "Make a custom plan for one customer",
      "says": [
        "Make Harbor Residential a custom plan at $24,000 a year",
        "Quote an enterprise deal",
        "Give one buyer its own private price",
        "Send a quote billed yearly by invoice"
      ],
      "status": "live",
      "shelf": "wakes",
      "tab": "products",
      "page": {
        "id": "page:products/offers/make-a-custom-plan",
        "md": "/products/offers/make-a-custom-plan.md"
      },
      "program": [
        "Offer.create",
        "Quote.create",
        "Quote.send"
      ],
      "inputs": [
        {
          "price": {
            "amount": 24000,
            "currency": "USD"
          },
          "interval": "year",
          "privateTo": "organization_harbor",
          "terms": "Yearly, invoiced net 30. Up to 4,000 units, single sign-on and 99.9% monthly uptime."
        },
        {
          "total": {
            "amount": 24000,
            "currency": "USD"
          },
          "lines": [
            {
              "offer": "$1.$id",
              "quantity": 1
            }
          ],
          "validUntil": "2026-11-30",
          "paymentTerms": {
            "collection": "send",
            "terms": 30,
            "purchaseOrder": "PO-2291"
          }
        },
        {
          "quote": "$2.$id"
        }
      ],
      "examples": [
        [
          "price",
          "interval",
          "privateTo",
          "terms"
        ],
        [
          "total",
          "lines",
          "validUntil",
          "paymentTerms"
        ],
        []
      ],
      "plans": {},
      "needs": [
        "guide:charge-monthly",
        "verb:Startup.claim"
      ],
      "approval": "ask",
      "leaves": [],
      "wakesOn": {
        "event": "Quote.requested",
        "where": "a buyer asks for a quote",
        "first": true
      },
      "change": [
        "Give them 10% off if they sign by Friday.",
        "Split it into two years at $22,000 and $26,000.",
        "Let them pay by card instead."
      ],
      "later": [],
      "calls": {
        "ask": "Make Harbor Residential a custom plan at $24,000 a year",
        "api": [
          "OFFER=$(curl -X POST https://api.sb/leaseline.app/offers \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"price\":{\"amount\":24000,\"currency\":\"USD\"},\"interval\":\"year\",\"privateTo\":\"organization_harbor\",\"terms\":\"Yearly, invoiced net 30. Up to 4,000 units, single sign-on and 99.9% monthly uptime.\"}' | jq -r '.offer[\"$id\"] | split(\"/\") | last')",
          "QUOTE=$(curl -X POST https://api.sb/leaseline.app/quotes \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"total\":{\"amount\":24000,\"currency\":\"USD\"},\"validUntil\":\"2026-11-30\",\"lines\":[{\"offer\":\"'\"$OFFER\"'\",\"quantity\":1}],\"paymentTerms\":{\"collection\":\"send\",\"terms\":30,\"purchaseOrder\":\"PO-2291\"}}' | jq -r '.quote[\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/quotes/$QUOTE/send \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\""
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nconst offer = await $.Offer.create({ price: { amount: 24000, currency: 'USD' }, interval: 'year', privateTo: 'organization_harbor', terms: 'Yearly, invoiced net 30. Up to 4,000 units, single sign-on and 99.9% monthly uptime.' })\nconst quote = await $.Quote.create({ total: { amount: 24000, currency: 'USD' }, validUntil: '2026-11-30', lines: [{ offer: offer.$id, quantity: 1 }], paymentTerms: { collection: 'send', terms: 30, purchaseOrder: 'PO-2291' } })\nawait $.Quote.send({ quote: quote.$id })",
        "cli": [
          "OFFER=$(npx startup-builder do Offer.create --json '{\"price\":{\"amount\":24000,\"currency\":\"USD\"},\"interval\":\"year\",\"privateTo\":\"organization_harbor\",\"terms\":\"Yearly, invoiced net 30. Up to 4,000 units, single sign-on and 99.9% monthly uptime.\"}' | jq -r '.offer[\"$id\"] | split(\"/\") | last')",
          "QUOTE=$(npx startup-builder do Quote.create --json '{\"total\":{\"amount\":24000,\"currency\":\"USD\"},\"validUntil\":\"2026-11-30\",\"lines\":[{\"offer\":\"'\"$OFFER\"'\",\"quantity\":1}],\"paymentTerms\":{\"collection\":\"send\",\"terms\":30,\"purchaseOrder\":\"PO-2291\"}}' | jq -r '.quote[\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Quote.send --json '{\"quote\":\"'\"$QUOTE\"'\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "const offer = await $.Offer.create({ price: { amount: 24000, currency: 'USD' }, interval: 'year', privateTo: 'organization_harbor', terms: 'Yearly, invoiced net 30. Up to 4,000 units, single sign-on and 99.9% monthly uptime.' })\nconst quote = await $.Quote.create({ total: { amount: 24000, currency: 'USD' }, validUntil: '2026-11-30', lines: [{ offer: offer.$id, quantity: 1 }], paymentTerms: { collection: 'send', terms: 30, purchaseOrder: 'PO-2291' } })\nreturn await $.Quote.send({ quote: quote.$id })"
          }
        }
      }
    },
    {
      "id": "pay-a-supplier",
      "title": "Pay a supplier",
      "says": [
        "Pay a supplier’s bill on its due date",
        "Pay Northwind’s $29 invoice for hosting",
        "Approve and pay the supplier bills due this week",
        "Pay our contractor",
        "Approve and pay this bill"
      ],
      "status": "beta",
      "shelf": "wakes",
      "tab": "systems",
      "page": {
        "id": "page:systems/finance/pay-a-supplier",
        "md": "/systems/finance/pay-a-supplier.md"
      },
      "program": [
        "Bill.create",
        "Bill.approve",
        "Bill.pay"
      ],
      "inputs": [
        {
          "organization": "organization_northwind",
          "amount": {
            "amount": 29,
            "currency": "USD"
          },
          "dueOn": "2026-11-15",
          "account": "expense.hosting"
        },
        {
          "bill": "$1.$id"
        },
        {
          "bill": "$1.$id"
        }
      ],
      "examples": [
        [
          "organization",
          "amount",
          "dueOn",
          "account"
        ],
        [],
        []
      ],
      "plans": {},
      "needs": [
        "verb:Startup.claim"
      ],
      "approval": "ask",
      "leaves": [],
      "wakesOn": {
        "event": "Bill.created",
        "where": "the first bill from a contractor or supplier arrives",
        "first": true
      },
      "change": [
        "Pay it today.",
        "Pay every Northwind bill under $500 without asking me.",
        "Pay half now and half next month."
      ],
      "later": [],
      "calls": {
        "ask": "Pay a supplier’s bill on its due date",
        "api": [
          "BILL=$(curl -X POST https://api.sb/leaseline.app/bills \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"organization\":\"organization_northwind\",\"amount\":{\"amount\":29,\"currency\":\"USD\"},\"dueOn\":\"2026-11-15\",\"account\":\"expense.hosting\"}' | jq -r '.bill[\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/bills/$BILL/approve \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\"",
          "curl -X POST https://api.sb/leaseline.app/bills/$BILL/pay \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\""
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nconst bill = await $.Bill.create({ organization: 'organization_northwind', amount: { amount: 29, currency: 'USD' }, dueOn: '2026-11-15', account: 'expense.hosting' })\nawait $.Bill.approve({ bill: bill.$id })\nawait $.Bill.pay({ bill: bill.$id })",
        "cli": [
          "BILL=$(npx startup-builder do Bill.create --json '{\"organization\":\"organization_northwind\",\"amount\":{\"amount\":29,\"currency\":\"USD\"},\"dueOn\":\"2026-11-15\",\"account\":\"expense.hosting\"}' | jq -r '.bill[\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Bill.approve --json '{\"bill\":\"'\"$BILL\"'\"}'",
          "npx startup-builder do Bill.pay --json '{\"bill\":\"'\"$BILL\"'\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "const bill = await $.Bill.create({ organization: 'organization_northwind', amount: { amount: 29, currency: 'USD' }, dueOn: '2026-11-15', account: 'expense.hosting' })\nawait $.Bill.approve({ bill: bill.$id })\nreturn await $.Bill.pay({ bill: bill.$id })"
          }
        }
      }
    },
    {
      "id": "pay-suppliers-every-week",
      "title": "Pay suppliers every week",
      "says": [
        "Pay suppliers every Friday",
        "Pay contractors for finished jobs",
        "Hold payouts on disputed orders",
        "What do we owe suppliers this week",
        "Wait three days after a job before paying"
      ],
      "status": "live",
      "shelf": "wakes",
      "tab": "workflows",
      "page": {
        "id": "page:workflows/guides/pay-suppliers-every-week",
        "md": "/workflows/guides/pay-suppliers-every-week.md"
      },
      "program": [
        "Process.enable",
        "Setting.update"
      ],
      "inputs": [
        {
          "process": "process_supplier_payouts"
        },
        {
          "key": "payouts.clearanceDays",
          "value": 3
        }
      ],
      "examples": [
        [
          "process"
        ],
        [
          "key",
          "value"
        ]
      ],
      "plans": {},
      "needs": [
        "noun:supplier"
      ],
      "approval": "none",
      "leaves": [],
      "wakesOn": {
        "event": "Order.confirmed",
        "where": "a Customer confirms a Supplier’s first job",
        "first": true
      },
      "change": [
        "Pay on Mondays instead.",
        "Ask me before any payout over $2,000.",
        "Hold everything for this Supplier until I say."
      ],
      "later": [],
      "calls": {
        "ask": "Pay suppliers every Friday",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/processes/process_supplier_payouts/enable \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\"",
          "curl -X PATCH https://api.sb/leaseline.app/settings/setting_1 \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"value\":3,\"key\":\"payouts.clearanceDays\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Process.enable({ process: 'process_supplier_payouts' })\nawait $.Setting.update({ id: 'setting_1', value: 3, key: 'payouts.clearanceDays' })",
        "cli": [
          "npx startup-builder do Process.enable --json '{\"process\":\"process_supplier_payouts\"}'",
          "npx startup-builder do Setting.update --json '{\"id\":\"setting_1\",\"value\":3,\"key\":\"payouts.clearanceDays\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "await $.Process.enable({ process: 'process_supplier_payouts' })\nreturn await $.Setting.update({ id: 'setting_1', value: 3, key: 'payouts.clearanceDays' })"
          }
        }
      }
    },
    {
      "id": "qualify-leads-and-book-demos",
      "title": "Qualify leads and book demos",
      "says": [
        "Qualify leads and book demos",
        "Answer every new lead within five minutes",
        "Book a demo with anyone who fits",
        "Which leads are worth a call",
        "How many demos are booked this week"
      ],
      "status": "live",
      "shelf": "wakes",
      "tab": "workflows",
      "page": {
        "id": "page:workflows/guides/qualify-leads-and-book-demos",
        "md": "/workflows/guides/qualify-leads-and-book-demos.md"
      },
      "program": [
        "Lead.qualify",
        "Meeting.book"
      ],
      "inputs": [
        {
          "lead": "find:lead where status = new",
          "offer": "find:offer"
        },
        {
          "contact": "find:lead where status = new",
          "at": "2026-11-04T16:00:00Z"
        }
      ],
      "examples": [
        [],
        [
          "at"
        ]
      ],
      "plans": {},
      "needs": [
        "guide:take-a-payment"
      ],
      "approval": "none",
      "leaves": [],
      "wakesOn": {
        "event": "Lead.created",
        "where": "the first Lead asks to talk",
        "first": true
      },
      "change": [
        "Only book demos for firms with more than 200 units.",
        "Put demos on my calendar Tuesdays and Thursdays only.",
        "Send everyone else the self-serve signup."
      ],
      "later": [],
      "calls": {
        "ask": "Qualify leads and book demos",
        "api": [
          "LEAD=$(curl \"https://api.sb/leaseline.app/leads?where=status%20%3D%20new&limit=1\" \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" | jq -r '.leads[0][\"$id\"] | split(\"/\") | last')",
          "OFFER=$(curl \"https://api.sb/leaseline.app/offers?limit=1\" \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" | jq -r '.offers[0][\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/leads/$LEAD/qualify \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"offer\":\"'\"$OFFER\"'\"}'",
          "curl -X POST https://api.sb/leaseline.app/meetings/book \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"contact\":\"'\"$LEAD\"'\",\"at\":\"2026-11-04T16:00:00Z\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nconst [lead] = await $.Lead.list({ where: 'status = new', limit: 1 })\nconst [offer] = await $.Offer.list({ limit: 1 })\nawait $.Lead.qualify({ lead: lead.$id, offer: offer.$id })\nawait $.Meeting.book({ contact: lead.$id, at: '2026-11-04T16:00:00Z' })",
        "cli": [
          "LEAD=$(npx startup-builder do Lead.list --json '{\"where\":\"status = new\",\"limit\":1}' | jq -r '.leads[0][\"$id\"] | split(\"/\") | last')",
          "OFFER=$(npx startup-builder do Offer.list --json '{\"limit\":1}' | jq -r '.offers[0][\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Lead.qualify --json '{\"lead\":\"'\"$LEAD\"'\",\"offer\":\"'\"$OFFER\"'\"}'",
          "npx startup-builder do Meeting.book --json '{\"contact\":\"'\"$LEAD\"'\",\"at\":\"2026-11-04T16:00:00Z\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "const [lead] = await $.Lead.list({ where: 'status = new', limit: 1 })\nconst [offer] = await $.Offer.list({ limit: 1 })\nawait $.Lead.qualify({ lead: lead.$id, offer: offer.$id })\nreturn await $.Meeting.book({ contact: lead.$id, at: '2026-11-04T16:00:00Z' })"
          }
        }
      }
    },
    {
      "id": "remind-me-before-the-annual-report-is-due",
      "title": "Remind me before the annual report is due",
      "says": [
        "Remind me before the annual report is due",
        "File our annual report",
        "Pay the Delaware franchise tax",
        "Are we in good standing",
        "What company filings are due this year"
      ],
      "status": "live",
      "shelf": "wakes",
      "tab": "workflows",
      "page": {
        "id": "page:workflows/guides/remind-me-before-the-annual-report-is-due",
        "md": "/workflows/guides/remind-me-before-the-annual-report-is-due.md"
      },
      "program": [
        "Process.enable",
        "Setting.update"
      ],
      "inputs": [
        {
          "process": "process_company_filings"
        },
        {
          "key": "filings.remindDays",
          "value": 45
        }
      ],
      "examples": [
        [
          "process"
        ],
        [
          "key",
          "value"
        ]
      ],
      "plans": {},
      "needs": [
        "noun:company"
      ],
      "approval": "none",
      "leaves": [],
      "wakesOn": {
        "event": "Company.incorporated",
        "where": "the Startup forms its own Company",
        "first": true
      },
      "change": [
        "File it without asking when nothing changed.",
        "Remind my lawyer too.",
        "Add the California statement of information."
      ],
      "later": [],
      "calls": {
        "ask": "Remind me before the annual report is due",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/processes/process_company_filings/enable \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\"",
          "curl -X PATCH https://api.sb/leaseline.app/settings/setting_1 \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"value\":45,\"key\":\"filings.remindDays\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Process.enable({ process: 'process_company_filings' })\nawait $.Setting.update({ id: 'setting_1', value: 45, key: 'filings.remindDays' })",
        "cli": [
          "npx startup-builder do Process.enable --json '{\"process\":\"process_company_filings\"}'",
          "npx startup-builder do Setting.update --json '{\"id\":\"setting_1\",\"value\":45,\"key\":\"filings.remindDays\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "await $.Process.enable({ process: 'process_company_filings' })\nreturn await $.Setting.update({ id: 'setting_1', value: 45, key: 'filings.remindDays' })"
          }
        }
      }
    },
    {
      "id": "retry-failed-payments",
      "title": "Retry the payments that failed",
      "says": [
        "Retry the payments that failed",
        "A customer’s card was declined, charge it again",
        "Chase the renewals that did not go through",
        "Collect the overdue invoices on the dunning schedule",
        "Why did this renewal fail"
      ],
      "not": [
        "workflow failed",
        "failed workflow"
      ],
      "status": "live",
      "shelf": "wakes",
      "tab": "systems",
      "page": {
        "id": "page:systems/finance/retry-failed-payments",
        "md": "/systems/finance/retry-failed-payments.md"
      },
      "program": [
        "Invoice.collect"
      ],
      "inputs": [
        {
          "invoice": "invoice_harbor_0002"
        }
      ],
      "examples": [
        [
          "invoice"
        ]
      ],
      "plans": {},
      "needs": [
        "verb:Startup.claim",
        "guide:charge-monthly"
      ],
      "approval": "mandate",
      "leaves": [],
      "wakesOn": {
        "event": "Invoice.overdue",
        "where": "a renewal payment failed",
        "first": true
      },
      "change": [
        "Retry six times instead of four.",
        "Keep service on until the last retry fails.",
        "Email me the list of past-due customers every Monday."
      ],
      "later": [],
      "calls": {
        "ask": "Retry the payments that failed",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/invoices/invoice_harbor_0002/collect \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\""
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Invoice.collect({ invoice: 'invoice_harbor_0002' })",
        "cli": [
          "npx startup-builder do Invoice.collect --json '{\"invoice\":\"invoice_harbor_0002\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "return await $.Invoice.collect({ invoice: 'invoice_harbor_0002' })"
          }
        }
      }
    },
    {
      "id": "run-payroll",
      "title": "Run payroll",
      "says": [
        "Run payroll this Friday",
        "Run payroll for the first half of November",
        "Run an off-cycle payroll for Maya’s bonus",
        "What will this payroll cost us?",
        "Approve this payroll"
      ],
      "status": "beta",
      "shelf": "wakes",
      "tab": "systems",
      "page": {
        "id": "page:systems/people/run-payroll",
        "md": "/systems/people/run-payroll.md"
      },
      "program": [
        "PayRun.prepare",
        "PayRun.approve"
      ],
      "inputs": [
        {
          "company": "company_leaseline",
          "periodStart": "2026-11-01",
          "periodEnd": "2026-11-15",
          "payDate": "2026-11-15"
        },
        {
          "payRun": "$1.$id"
        }
      ],
      "examples": [
        [
          "company",
          "periodStart",
          "periodEnd",
          "payDate"
        ],
        []
      ],
      "plans": {},
      "needs": [
        "capability:payroll",
        "capability:tax-ids"
      ],
      "approval": "ask",
      "leaves": [],
      "wakesOn": {
        "event": "Agreement.signed",
        "where": "you sign your first employee",
        "first": true
      },
      "change": [
        "Pay us twice a month instead of every two weeks.",
        "Add Maya’s $2,000 bonus to the next run.",
        "Approve every run under $40,000 without asking me.",
        "Void this run and prepare it again."
      ],
      "later": [],
      "calls": {
        "ask": "Run payroll this Friday",
        "api": [
          "PAY_RUN=$(curl -X POST https://api.sb/leaseline.app/pay-runs/prepare \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"company\":\"company_leaseline\",\"periodStart\":\"2026-11-01\",\"periodEnd\":\"2026-11-15\",\"payDate\":\"2026-11-15\"}' | jq -r '.payRun[\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/pay-runs/$PAY_RUN/approve \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\""
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nconst payRun = await $.PayRun.prepare({ company: 'company_leaseline', periodStart: '2026-11-01', periodEnd: '2026-11-15', payDate: '2026-11-15' })\nawait $.PayRun.approve({ payRun: payRun.$id })",
        "cli": [
          "PAY_RUN=$(npx startup-builder do PayRun.prepare --json '{\"company\":\"company_leaseline\",\"periodStart\":\"2026-11-01\",\"periodEnd\":\"2026-11-15\",\"payDate\":\"2026-11-15\"}' | jq -r '.payRun[\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do PayRun.approve --json '{\"payRun\":\"'\"$PAY_RUN\"'\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "const payRun = await $.PayRun.prepare({ company: 'company_leaseline', periodStart: '2026-11-01', periodEnd: '2026-11-15', payDate: '2026-11-15' })\nreturn await $.PayRun.approve({ payRun: payRun.$id })"
          }
        }
      }
    },
    {
      "id": "sell-outside-the-us",
      "title": "Sell outside the US",
      "says": [
        "Sell in the UK",
        "A customer in Germany wants to buy",
        "Charge German customers in euros",
        "Start selling in Canada"
      ],
      "status": "beta",
      "shelf": "wakes",
      "tab": "products",
      "page": {
        "id": "page:products/offers/sell-outside-the-us",
        "md": "/products/offers/sell-outside-the-us.md"
      },
      "program": [
        "Market.enter"
      ],
      "inputs": [
        {
          "startup": "find:startup",
          "market": "market_uk"
        }
      ],
      "examples": [
        [
          "market"
        ]
      ],
      "plans": {},
      "needs": [
        "verb:Startup.claim"
      ],
      "approval": "ask",
      "leaves": [],
      "wakesOn": {
        "event": "Order.placed",
        "where": "the buyer’s address is outside the United States",
        "first": true
      },
      "change": [
        "Show prices in pounds.",
        "Add the EU as well."
      ],
      "later": [],
      "calls": {
        "ask": "Sell in the UK",
        "api": [
          "STARTUP=$(curl \"https://api.sb/leaseline.app/startups?limit=1\" \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" | jq -r '.startups[0][\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/markets/market_uk/enter \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"startup\":\"'\"$STARTUP\"'\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nconst [startup] = await $.Startup.list({ limit: 1 })\nawait $.Market.enter({ startup: startup.$id, market: 'market_uk' })",
        "cli": [
          "STARTUP=$(npx startup-builder do Startup.list --json '{\"limit\":1}' | jq -r '.startups[0][\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Market.enter --json '{\"startup\":\"'\"$STARTUP\"'\",\"market\":\"market_uk\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "const [startup] = await $.Startup.list({ limit: 1 })\nreturn await $.Market.enter({ startup: startup.$id, market: 'market_uk' })"
          }
        }
      }
    },
    {
      "id": "set-a-budget",
      "title": "Set a budget",
      "says": [
        "Set a budget for marketing",
        "Cap what we spend on software at $300 a month",
        "Are we on budget?",
        "Tell me when we go over budget",
        "Plan next month’s spending"
      ],
      "status": "beta",
      "shelf": "wakes",
      "tab": "systems",
      "page": {
        "id": "page:systems/finance/set-a-budget",
        "md": "/systems/finance/set-a-budget.md"
      },
      "program": [
        "Budget.create"
      ],
      "inputs": [
        {
          "account": "expense.ads",
          "period": "period_2026_11",
          "amount": {
            "amount": 500,
            "currency": "USD"
          }
        }
      ],
      "examples": [
        [
          "account",
          "period",
          "amount"
        ]
      ],
      "plans": {},
      "needs": [
        "verb:Startup.claim"
      ],
      "approval": "none",
      "leaves": [],
      "wakesOn": {
        "event": "Order.paid",
        "where": "the Startup takes its first outside payment",
        "first": true
      },
      "change": [
        "Make it $800 from next month.",
        "Tell me when any budget runs 10% over.",
        "Hold the ads card when the ads budget runs out.",
        "Show spend against budget every Monday."
      ],
      "later": [],
      "calls": {
        "ask": "Set a budget for marketing",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/budgets \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"account\":\"expense.ads\",\"period\":\"period_2026_11\",\"amount\":{\"amount\":500,\"currency\":\"USD\"}}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Budget.create({ account: 'expense.ads', period: 'period_2026_11', amount: { amount: 500, currency: 'USD' } })",
        "cli": [
          "npx startup-builder do Budget.create --json '{\"account\":\"expense.ads\",\"period\":\"period_2026_11\",\"amount\":{\"amount\":500,\"currency\":\"USD\"}}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "return await $.Budget.create({ account: 'expense.ads', period: 'period_2026_11', amount: { amount: 500, currency: 'USD' } })"
          }
        }
      }
    },
    {
      "id": "set-up-sso-for-a-customer",
      "title": "Set up SSO for a customer",
      "says": [
        "Set up SSO with Okta for Harbor Properties",
        "Their IT team wants single sign-on through Okta",
        "Set up SAML for a customer",
        "Connect a customer’s identity provider",
        "Turn on SSO for a customer",
        "Single sign-on through Okta or Entra"
      ],
      "status": "beta",
      "shelf": "wakes",
      "tab": "products",
      "page": {
        "id": "page:products/app/set-up-sso-for-a-customer",
        "md": "/products/app/set-up-sso-for-a-customer.md"
      },
      "program": [
        "Tenant.requestSetup",
        "SSOConnection.activate"
      ],
      "inputs": [
        {
          "tenant": "tenant_harbor",
          "admin": "person_maria",
          "intent": "sso"
        },
        {
          "connection": "sso_harbor"
        }
      ],
      "examples": [
        [
          "tenant",
          "admin",
          "intent"
        ],
        [
          "connection"
        ]
      ],
      "plans": {},
      "needs": [
        "guide:let-customers-sign-in"
      ],
      "approval": "none",
      "leaves": [],
      "wakesOn": {
        "event": "Deal.advanced",
        "where": "the buyer’s IT team asks for single sign-on before it signs",
        "first": true
      },
      "change": [
        "Sync their directory too.",
        "Require it for every Harbor member."
      ],
      "later": [],
      "calls": {
        "ask": "Set up SSO with Okta for Harbor Properties",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/tenants/tenant_harbor/requestSetup \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"admin\":\"person_maria\",\"intent\":\"sso\"}'",
          "curl -X POST https://api.sb/leaseline.app/sso-connections/sso_harbor/activate \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\""
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Tenant.requestSetup({ tenant: 'tenant_harbor', admin: 'person_maria', intent: 'sso' })\nawait $.SSOConnection.activate({ connection: 'sso_harbor' })",
        "cli": [
          "npx startup-builder do Tenant.requestSetup --json '{\"tenant\":\"tenant_harbor\",\"admin\":\"person_maria\",\"intent\":\"sso\"}'",
          "npx startup-builder do SSOConnection.activate --json '{\"connection\":\"sso_harbor\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "await $.Tenant.requestSetup({ tenant: 'tenant_harbor', admin: 'person_maria', intent: 'sso' })\nreturn await $.SSOConnection.activate({ connection: 'sso_harbor' })"
          }
        }
      }
    },
    {
      "id": "test-new-support-instructions",
      "title": "Test a new way of answering customers",
      "says": [
        "Test a different support prompt against the current one",
        "Try offering the refund first on half the chats",
        "Do shorter replies resolve more chats",
        "Test other instructions for the support agent",
        "Which way of answering customers works better"
      ],
      "status": "live",
      "shelf": "wakes",
      "tab": "agents",
      "page": {
        "id": "page:agents/test-new-support-instructions",
        "md": "/agents/test-new-support-instructions.md"
      },
      "program": [
        "Experiment.create",
        "Experiment.start"
      ],
      "inputs": [
        {
          "variants": [
            {
              "name": "control",
              "note": "The Customer Lead’s current contract.",
              "measure": "Conversations resolved with no hand-off that stay resolved for 7 days."
            },
            {
              "name": "refund-first",
              "note": "Offer the refund before asking why, on Orders under $50."
            }
          ]
        },
        {
          "experiment": "$1.$id"
        }
      ],
      "examples": [
        [
          "variants"
        ],
        []
      ],
      "plans": {},
      "needs": [],
      "approval": "none",
      "leaves": [],
      "wakesOn": {
        "event": "Conversation.created",
        "where": "the Startup passes 300 Conversations in a month, enough to read a test",
        "first": true
      },
      "change": [
        "Stop the test if refunds double in either arm.",
        "Roll the winner out to the support seat.",
        "Test the reply length only."
      ],
      "later": [],
      "calls": {
        "ask": "Test a different support prompt against the current one",
        "api": [
          "EXPERIMENT=$(curl -X POST https://api.sb/leaseline.app/experiments \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"variants\":[{\"name\":\"control\",\"note\":\"The Customer Lead’s current contract.\",\"measure\":\"Conversations resolved with no hand-off that stay resolved for 7 days.\"},{\"name\":\"refund-first\",\"note\":\"Offer the refund before asking why, on Orders under $50.\"}]}' | jq -r '.experiment[\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/experiments/$EXPERIMENT/start \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\""
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nconst experiment = await $.Experiment.create({ variants: [{ name: 'control', note: 'The Customer Lead’s current contract.', measure: 'Conversations resolved with no hand-off that stay resolved for 7 days.' }, { name: 'refund-first', note: 'Offer the refund before asking why, on Orders under $50.' }] })\nawait $.Experiment.start({ experiment: experiment.$id })",
        "cli": [
          "EXPERIMENT=$(npx startup-builder do Experiment.create --json '{\"variants\":[{\"name\":\"control\",\"note\":\"The Customer Lead’s current contract.\",\"measure\":\"Conversations resolved with no hand-off that stay resolved for 7 days.\"},{\"name\":\"refund-first\",\"note\":\"Offer the refund before asking why, on Orders under $50.\"}]}' | jq -r '.experiment[\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Experiment.start --json '{\"experiment\":\"'\"$EXPERIMENT\"'\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "const experiment = await $.Experiment.create({ variants: [{ name: 'control', note: 'The Customer Lead’s current contract.', measure: 'Conversations resolved with no hand-off that stay resolved for 7 days.' }, { name: 'refund-first', note: 'Offer the refund before asking why, on Orders under $50.' }] })\nreturn await $.Experiment.start({ experiment: experiment.$id })"
          }
        }
      }
    },
    {
      "id": "test-two-onboarding-emails",
      "title": "Test two onboarding emails",
      "says": [
        "Test two onboarding emails",
        "Which welcome email works better",
        "Try a shorter welcome email on half the signups",
        "Did the onboarding test win",
        "Send two welcome emails and keep the better one"
      ],
      "status": "live",
      "shelf": "wakes",
      "tab": "workflows",
      "page": {
        "id": "page:workflows/guides/test-two-onboarding-emails",
        "md": "/workflows/guides/test-two-onboarding-emails.md"
      },
      "program": [
        "Experiment.create",
        "Experiment.start"
      ],
      "inputs": [
        {
          "variants": [
            {
              "name": "control",
              "note": "The current welcome email.",
              "measure": "Signups who import a lease within 7 days."
            },
            {
              "name": "short",
              "note": "Three lines and one button: import your first lease."
            }
          ]
        },
        {
          "experiment": "$1.$id"
        }
      ],
      "examples": [
        [
          "variants"
        ],
        []
      ],
      "plans": {},
      "needs": [
        "process:onboarding"
      ],
      "approval": "none",
      "leaves": [],
      "wakesOn": {
        "event": "Customer.created",
        "where": "the Startup passes 400 signups in a month, enough to read a test",
        "first": true
      },
      "change": [
        "Stop the test early if either arm halves activation.",
        "Test the subject line only.",
        "Roll the winner out to everyone."
      ],
      "later": [],
      "calls": {
        "ask": "Test two onboarding emails",
        "api": [
          "EXPERIMENT=$(curl -X POST https://api.sb/leaseline.app/experiments \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"variants\":[{\"name\":\"control\",\"note\":\"The current welcome email.\",\"measure\":\"Signups who import a lease within 7 days.\"},{\"name\":\"short\",\"note\":\"Three lines and one button: import your first lease.\"}]}' | jq -r '.experiment[\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/experiments/$EXPERIMENT/start \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\""
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nconst experiment = await $.Experiment.create({ variants: [{ name: 'control', note: 'The current welcome email.', measure: 'Signups who import a lease within 7 days.' }, { name: 'short', note: 'Three lines and one button: import your first lease.' }] })\nawait $.Experiment.start({ experiment: experiment.$id })",
        "cli": [
          "EXPERIMENT=$(npx startup-builder do Experiment.create --json '{\"variants\":[{\"name\":\"control\",\"note\":\"The current welcome email.\",\"measure\":\"Signups who import a lease within 7 days.\"},{\"name\":\"short\",\"note\":\"Three lines and one button: import your first lease.\"}]}' | jq -r '.experiment[\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Experiment.start --json '{\"experiment\":\"'\"$EXPERIMENT\"'\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "const experiment = await $.Experiment.create({ variants: [{ name: 'control', note: 'The current welcome email.', measure: 'Signups who import a lease within 7 days.' }, { name: 'short', note: 'Three lines and one button: import your first lease.' }] })\nreturn await $.Experiment.start({ experiment: experiment.$id })"
          }
        }
      }
    },
    {
      "id": "welcome-every-new-customer",
      "title": "Welcome every new customer",
      "says": [
        "Welcome every new customer",
        "Do the onboarding setup for every new customer",
        "Who has not activated yet",
        "Help new customers reach first value",
        "Rescue customers stuck in their first week",
        "Send every new signup a welcome email"
      ],
      "status": "live",
      "shelf": "wakes",
      "tab": "workflows",
      "page": {
        "id": "page:workflows/guides/welcome-every-new-customer",
        "md": "/workflows/guides/welcome-every-new-customer.md"
      },
      "program": [
        "Process.enable",
        "Setting.update"
      ],
      "inputs": [
        {
          "process": "process_onboarding"
        },
        {
          "key": "onboarding.doneForYou",
          "value": true
        }
      ],
      "examples": [
        [
          "process"
        ],
        [
          "key",
          "value"
        ]
      ],
      "plans": {},
      "needs": [
        "noun:customer"
      ],
      "approval": "none",
      "leaves": [],
      "wakesOn": {
        "event": "Customer.created",
        "where": "the first Customer signs up",
        "first": true
      },
      "change": [
        "Let customers set themselves up; just send the guide.",
        "Call anyone who has not activated after three days.",
        "Count the first import as activation."
      ],
      "later": [],
      "calls": {
        "ask": "Welcome every new customer",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/processes/process_onboarding/enable \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\"",
          "curl -X PATCH https://api.sb/leaseline.app/settings/setting_1 \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"value\":true,\"key\":\"onboarding.doneForYou\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Process.enable({ process: 'process_onboarding' })\nawait $.Setting.update({ id: 'setting_1', value: true, key: 'onboarding.doneForYou' })",
        "cli": [
          "npx startup-builder do Process.enable --json '{\"process\":\"process_onboarding\"}'",
          "npx startup-builder do Setting.update --json '{\"id\":\"setting_1\",\"value\":true,\"key\":\"onboarding.doneForYou\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "await $.Process.enable({ process: 'process_onboarding' })\nreturn await $.Setting.update({ id: 'setting_1', value: true, key: 'onboarding.doneForYou' })"
          }
        }
      }
    },
    {
      "id": "add-a-role",
      "title": "Add a role to the team",
      "says": [
        "Add a maintenance coordinator to the team",
        "I need someone to book repair vendors",
        "Create a new role for leasing",
        "Create a seat the chart does not have",
        "Make a custom role for repair bookings"
      ],
      "status": "live",
      "shelf": "reference",
      "tab": "agents",
      "page": {
        "id": "page:agents/add-a-role",
        "md": "/agents/add-a-role.md"
      },
      "program": [
        "Role.create",
        "Role.staff"
      ],
      "inputs": [
        {
          "name": "Maintenance Coordinator",
          "responsibilities": "Books a vendor for every repair request within one business day. Tells the resident the visit time."
        },
        {
          "role": "$1.$id",
          "worker": "agent_maintenance_coordinator"
        }
      ],
      "examples": [
        [
          "name",
          "responsibilities"
        ],
        [
          "worker"
        ]
      ],
      "plans": {},
      "needs": [],
      "approval": "none",
      "leaves": [],
      "change": [
        "Put it on the Operations Team.",
        "Let it book repairs up to $300 without asking.",
        "Have it escalate to the Operations Lead, not me."
      ],
      "later": [],
      "calls": {
        "ask": "Add a maintenance coordinator to the team",
        "api": [
          "ROLE=$(curl -X POST https://api.sb/leaseline.app/roles \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"name\":\"Maintenance Coordinator\",\"responsibilities\":\"Books a vendor for every repair request within one business day. Tells the resident the visit time.\"}' | jq -r '.role[\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/roles/$ROLE/staff \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"worker\":\"agent_maintenance_coordinator\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nconst role = await $.Role.create({ name: 'Maintenance Coordinator', responsibilities: 'Books a vendor for every repair request within one business day. Tells the resident the visit time.' })\nawait $.Role.staff({ role: role.$id, worker: 'agent_maintenance_coordinator' })",
        "cli": [
          "ROLE=$(npx startup-builder do Role.create --json '{\"name\":\"Maintenance Coordinator\",\"responsibilities\":\"Books a vendor for every repair request within one business day. Tells the resident the visit time.\"}' | jq -r '.role[\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Role.staff --json '{\"role\":\"'\"$ROLE\"'\",\"worker\":\"agent_maintenance_coordinator\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "const role = await $.Role.create({ name: 'Maintenance Coordinator', responsibilities: 'Books a vendor for every repair request within one business day. Tells the resident the visit time.' })\nreturn await $.Role.staff({ role: role.$id, worker: 'agent_maintenance_coordinator' })"
          }
        }
      }
    },
    {
      "id": "add-a-team",
      "title": "Add a team",
      "says": [
        "Add a team",
        "Start a field team for property inspections",
        "Create a new department",
        "Give inspections their own team and lead",
        "Make a team for work no department owns"
      ],
      "not": [
        "add a role to the team",
        "invite a person to the team"
      ],
      "status": "live",
      "shelf": "reference",
      "tab": "agents",
      "page": {
        "id": "page:agents/add-a-team",
        "md": "/agents/add-a-team.md"
      },
      "program": [
        "Team.create",
        "Role.create",
        "Role.staff"
      ],
      "inputs": [
        {
          "mission": "Inspects every managed unit once a year and books the repairs it finds."
        },
        {
          "name": "Field Lead",
          "responsibilities": "Schedules each unit’s yearly inspection and files the repairs it finds.",
          "team": "$1.$id"
        },
        {
          "role": "$2.$id",
          "worker": "agent_field_lead"
        }
      ],
      "examples": [
        [
          "mission"
        ],
        [
          "name",
          "responsibilities"
        ],
        [
          "worker"
        ]
      ],
      "plans": {},
      "needs": [],
      "approval": "none",
      "leaves": [],
      "change": [
        "Put the Maintenance Coordinator on it too.",
        "Have the Operations Lead approve its spend.",
        "Keep it asleep until we pass 500 units."
      ],
      "later": [],
      "calls": {
        "ask": "Add a team",
        "api": [
          "TEAM=$(curl -X POST https://api.sb/leaseline.app/teams \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"mission\":\"Inspects every managed unit once a year and books the repairs it finds.\"}' | jq -r '.team[\"$id\"] | split(\"/\") | last')",
          "ROLE=$(curl -X POST https://api.sb/leaseline.app/roles \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"name\":\"Field Lead\",\"responsibilities\":\"Schedules each unit’s yearly inspection and files the repairs it finds.\",\"team\":\"'\"$TEAM\"'\"}' | jq -r '.role[\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/roles/$ROLE/staff \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"worker\":\"agent_field_lead\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nconst team = await $.Team.create({ mission: 'Inspects every managed unit once a year and books the repairs it finds.' })\nconst role = await $.Role.create({ name: 'Field Lead', responsibilities: 'Schedules each unit’s yearly inspection and files the repairs it finds.', team: team.$id })\nawait $.Role.staff({ role: role.$id, worker: 'agent_field_lead' })",
        "cli": [
          "TEAM=$(npx startup-builder do Team.create --json '{\"mission\":\"Inspects every managed unit once a year and books the repairs it finds.\"}' | jq -r '.team[\"$id\"] | split(\"/\") | last')",
          "ROLE=$(npx startup-builder do Role.create --json '{\"name\":\"Field Lead\",\"responsibilities\":\"Schedules each unit’s yearly inspection and files the repairs it finds.\",\"team\":\"'\"$TEAM\"'\"}' | jq -r '.role[\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Role.staff --json '{\"role\":\"'\"$ROLE\"'\",\"worker\":\"agent_field_lead\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "const team = await $.Team.create({ mission: 'Inspects every managed unit once a year and books the repairs it finds.' })\nconst role = await $.Role.create({ name: 'Field Lead', responsibilities: 'Schedules each unit’s yearly inspection and files the repairs it finds.', team: team.$id })\nreturn await $.Role.staff({ role: role.$id, worker: 'agent_field_lead' })"
          }
        }
      }
    },
    {
      "id": "buy-a-specialist-agent-for-a-seat",
      "title": "Buy a specialist agent for a seat",
      "says": [
        "Buy a support agent trained on property management",
        "Find a specialist agent for the Customer Lead seat",
        "Replace the default support agent with a specialist",
        "Is there an agent built for this seat",
        "Swap in a specialist agent another business sells"
      ],
      "status": "live",
      "shelf": "reference",
      "tab": "agents",
      "page": {
        "id": "page:agents/buy-a-specialist-agent-for-a-seat",
        "md": "/agents/buy-a-specialist-agent-for-a-seat.md"
      },
      "program": [
        "Offer.subscribe",
        "Role.staff"
      ],
      "inputs": [
        {
          "offer": "offer_pm_support"
        },
        {
          "role": "customer-lead",
          "worker": "agent_pm_support"
        }
      ],
      "examples": [
        [
          "offer"
        ],
        [
          "role",
          "worker"
        ]
      ],
      "plans": {},
      "needs": [
        "verb:Startup.claim"
      ],
      "approval": "none",
      "leaves": [],
      "change": [
        "For the first week, it drafts and I send.",
        "Put the default agent back in the seat.",
        "Cancel the subscription at the end of the month."
      ],
      "later": [],
      "calls": {
        "ask": "Buy a support agent trained on property management",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/offers/offer_pm_support/subscribe \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\"",
          "curl -X POST https://api.sb/leaseline.app/roles/customer-lead/staff \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"worker\":\"agent_pm_support\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Offer.subscribe({ offer: 'offer_pm_support' })\nawait $.Role.staff({ role: 'customer-lead', worker: 'agent_pm_support' })",
        "cli": [
          "npx startup-builder do Offer.subscribe --json '{\"offer\":\"offer_pm_support\"}'",
          "npx startup-builder do Role.staff --json '{\"role\":\"customer-lead\",\"worker\":\"agent_pm_support\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "await $.Offer.subscribe({ offer: 'offer_pm_support' })\nreturn await $.Role.staff({ role: 'customer-lead', worker: 'agent_pm_support' })"
          }
        }
      }
    },
    {
      "id": "cancel-a-subscription",
      "title": "Cancel a customer’s subscription",
      "says": [
        "Cancel a customer’s subscription",
        "Cancel Riverside’s plan",
        "Stop billing this customer",
        "End their subscription at the end of the month",
        "Unsubscribe this customer"
      ],
      "status": "live",
      "shelf": "reference",
      "tab": "products",
      "page": {
        "id": "page:products/offers/cancel-a-subscription",
        "md": "/products/offers/cancel-a-subscription.md"
      },
      "program": [
        "Subscription.unsubscribe"
      ],
      "inputs": [
        {
          "subscription": "subscription_riverside",
          "reason": "Moving to a property manager with its own software."
        }
      ],
      "examples": [
        [
          "subscription",
          "reason"
        ]
      ],
      "plans": {},
      "needs": [
        "guide:charge-monthly",
        "verb:Startup.claim"
      ],
      "approval": "none",
      "leaves": [],
      "change": [
        "Pause it for a month instead.",
        "Refund their last invoice too.",
        "Ask why they are leaving before it ends."
      ],
      "later": [],
      "calls": {
        "ask": "Cancel a customer’s subscription",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/subscriptions/subscription_riverside/unsubscribe \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"reason\":\"Moving to a property manager with its own software.\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Subscription.unsubscribe({ subscription: 'subscription_riverside', reason: 'Moving to a property manager with its own software.' })",
        "cli": [
          "npx startup-builder do Subscription.unsubscribe --json '{\"subscription\":\"subscription_riverside\",\"reason\":\"Moving to a property manager with its own software.\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "return await $.Subscription.unsubscribe({ subscription: 'subscription_riverside', reason: 'Moving to a property manager with its own software.' })"
          }
        }
      }
    },
    {
      "id": "change-what-a-role-does",
      "title": "Change what a role does",
      "says": [
        "Have the billing agent call anyone whose payment fails twice",
        "Give the billing seat one more duty",
        "Change what the Billing Specialist does",
        "The support agent should also send the renewal survey",
        "Remove cold calling from the Sales Lead duties"
      ],
      "status": "live",
      "shelf": "reference",
      "tab": "agents",
      "page": {
        "id": "page:agents/change-what-a-role-does",
        "md": "/agents/change-what-a-role-does.md"
      },
      "program": [
        "Role.update"
      ],
      "inputs": [
        {
          "id": "billing-specialist",
          "name": "Billing Specialist",
          "responsibilities": "Retries failed payments on the dunning schedule. Calls every Customer whose payment fails twice."
        }
      ],
      "examples": [
        [
          "id",
          "name",
          "responsibilities"
        ]
      ],
      "plans": {},
      "needs": [],
      "approval": "none",
      "leaves": [],
      "change": [
        "Show me the change before it goes live.",
        "Undo that change.",
        "Give the calls to a person instead."
      ],
      "later": [],
      "calls": {
        "ask": "Have the billing agent call anyone whose payment fails twice",
        "api": [
          "curl -X PATCH https://api.sb/leaseline.app/roles/billing-specialist \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"name\":\"Billing Specialist\",\"responsibilities\":\"Retries failed payments on the dunning schedule. Calls every Customer whose payment fails twice.\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Role.update({ id: 'billing-specialist', name: 'Billing Specialist', responsibilities: 'Retries failed payments on the dunning schedule. Calls every Customer whose payment fails twice.' })",
        "cli": [
          "npx startup-builder do Role.update --json '{\"id\":\"billing-specialist\",\"name\":\"Billing Specialist\",\"responsibilities\":\"Retries failed payments on the dunning schedule. Calls every Customer whose payment fails twice.\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "return await $.Role.update({ id: 'billing-specialist', name: 'Billing Specialist', responsibilities: 'Retries failed payments on the dunning schedule. Calls every Customer whose payment fails twice.' })"
          }
        }
      }
    },
    {
      "id": "check-what-a-customer-can-do",
      "title": "Check what a customer can do",
      "says": [
        "Can Riverside Property export right now",
        "How many exports does this customer have left today",
        "Check this customer’s plan before the call"
      ],
      "status": "live",
      "shelf": "reference",
      "tab": "products",
      "page": {
        "id": "page:products/offers/check-what-a-customer-can-do",
        "md": "/products/offers/check-what-a-customer-can-do.md"
      },
      "program": [
        "Entitlement.check"
      ],
      "inputs": [
        {
          "customer": "customer_riverside",
          "verb": "Collection.export"
        }
      ],
      "examples": [
        [
          "customer",
          "verb"
        ]
      ],
      "plans": {},
      "needs": [
        "guide:lock-a-feature-to-a-plan"
      ],
      "approval": "none",
      "leaves": [],
      "change": [
        "Show the reset time next to the export button.",
        "Warn me when a customer hits the cap three days running."
      ],
      "later": [],
      "calls": {
        "ask": "Can Riverside Property export right now",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/entitlements/check \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"customer\":\"customer_riverside\",\"verb\":\"Collection.export\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Entitlement.check({ customer: 'customer_riverside', verb: 'Collection.export' })",
        "cli": [
          "npx startup-builder do Entitlement.check --json '{\"customer\":\"customer_riverside\",\"verb\":\"Collection.export\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "return await $.Entitlement.check({ customer: 'customer_riverside', verb: 'Collection.export' })"
          }
        }
      }
    },
    {
      "id": "choose-the-models-agents-use",
      "title": "Choose the models agents use",
      "says": [
        "Choose the models agents use",
        "Use a stronger model for reviews",
        "Switch drafting to a faster model",
        "Which model writes the replies",
        "Set a fallback model for when one fails"
      ],
      "status": "live",
      "shelf": "reference",
      "tab": "agents",
      "page": {
        "id": "page:agents/choose-the-models-agents-use",
        "md": "/agents/choose-the-models-agents-use.md"
      },
      "program": [
        "Policy.update"
      ],
      "inputs": [
        {
          "id": "policy_models",
          "rule": "draft: fast. review: strong, then fast."
        }
      ],
      "examples": [
        [
          "id",
          "rule"
        ]
      ],
      "plans": {},
      "needs": [],
      "approval": "none",
      "leaves": [],
      "change": [
        "Use the strong model for every refund reply.",
        "Show me how often the first choice fails.",
        "Cap model spend at $200 a month."
      ],
      "later": [],
      "calls": {
        "ask": "Choose the models agents use",
        "api": [
          "curl -X PATCH https://api.sb/leaseline.app/policies/policy_models \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"rule\":\"draft: fast. review: strong, then fast.\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Policy.update({ id: 'policy_models', rule: 'draft: fast. review: strong, then fast.' })",
        "cli": [
          "npx startup-builder do Policy.update --json '{\"id\":\"policy_models\",\"rule\":\"draft: fast. review: strong, then fast.\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "return await $.Policy.update({ id: 'policy_models', rule: 'draft: fast. review: strong, then fast.' })"
          }
        }
      }
    },
    {
      "id": "export-my-data",
      "title": "Export my customers to CSV",
      "says": [
        "Export all my customers to CSV",
        "Download my customer list as a spreadsheet",
        "Give me a CSV of every customer",
        "Export my customers every week",
        "Send me my customer data as a file"
      ],
      "status": "live",
      "shelf": "reference",
      "tab": "systems",
      "page": {
        "id": "page:systems/data-and-insights/export-my-data",
        "md": "/systems/data-and-insights/export-my-data.md"
      },
      "program": [
        "Collection.export"
      ],
      "inputs": [
        {
          "collection": "find:collection where type = customer",
          "to": "csv"
        }
      ],
      "examples": [
        [
          "to"
        ]
      ],
      "plans": {},
      "needs": [
        "noun:customer"
      ],
      "approval": "none",
      "leaves": [],
      "change": [
        "Export every order too.",
        "Send it to the warehouse every night.",
        "Leave out email addresses."
      ],
      "later": [],
      "calls": {
        "ask": "Export all my customers to CSV",
        "api": [
          "COLLECTION=$(curl \"https://api.sb/leaseline.app/collections?where=type%20%3D%20customer&limit=1\" \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" | jq -r '.collections[0][\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/collections/$COLLECTION/export \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"to\":\"csv\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nconst [collection] = await $.Collection.list({ where: 'type = customer', limit: 1 })\nawait $.Collection.export({ collection: collection.$id, to: 'csv' })",
        "cli": [
          "COLLECTION=$(npx startup-builder do Collection.list --json '{\"where\":\"type = customer\",\"limit\":1}' | jq -r '.collections[0][\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Collection.export --json '{\"collection\":\"'\"$COLLECTION\"'\",\"to\":\"csv\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "const [collection] = await $.Collection.list({ where: 'type = customer', limit: 1 })\nreturn await $.Collection.export({ collection: collection.$id, to: 'csv' })"
          }
        }
      }
    },
    {
      "id": "fix-my-domain",
      "title": "Fix my domain",
      "says": [
        "My domain is not working",
        "Why does leaseline.com not load",
        "Check my DNS",
        "The certificate on my site is broken",
        "My site shows an SSL error",
        "Fix my domain"
      ],
      "status": "live",
      "shelf": "reference",
      "tab": "products",
      "page": {
        "id": "page:products/site/domains/fix-my-domain",
        "md": "/products/site/domains/fix-my-domain.md"
      },
      "program": [
        "Domain.verify"
      ],
      "inputs": [
        {
          "domain": "domain_leaseline_com"
        }
      ],
      "examples": [
        [
          "domain"
        ]
      ],
      "plans": {},
      "needs": [
        "guide:connect-my-domain"
      ],
      "approval": "none",
      "leaves": [],
      "change": [
        "Fix it for me.",
        "Tell me when it is live.",
        "Send www to the bare domain."
      ],
      "later": [],
      "calls": {
        "ask": "My domain is not working",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/domains/domain_leaseline_com/verify \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\""
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Domain.verify({ domain: 'domain_leaseline_com' })",
        "cli": [
          "npx startup-builder do Domain.verify --json '{\"domain\":\"domain_leaseline_com\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "return await $.Domain.verify({ domain: 'domain_leaseline_com' })"
          }
        }
      }
    },
    {
      "id": "form-my-company",
      "title": "Form my company",
      "says": [
        "Form my company",
        "Incorporate Leaseline in Delaware",
        "Make Leaseline a real company",
        "Set up a corporation for the business",
        "Form an LLC for Leaseline"
      ],
      "status": "beta",
      "shelf": "reference",
      "tab": "systems",
      "page": {
        "id": "page:systems/legal-and-corporate/form-my-company",
        "md": "/systems/legal-and-corporate/form-my-company.md"
      },
      "program": [
        "Company.incorporate"
      ],
      "inputs": [
        {
          "legalName": "Leaseline Inc.",
          "jurisdiction": "US-DE"
        }
      ],
      "examples": [
        [
          "legalName",
          "jurisdiction"
        ]
      ],
      "plans": {},
      "needs": [
        "noun:startup"
      ],
      "approval": "ask",
      "leaves": [],
      "change": [
        "Make it an LLC, and record why.",
        "Add my cofounder as a director.",
        "Register it in another state where I hire."
      ],
      "later": [],
      "calls": {
        "ask": "Form my company",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/companies/incorporate \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"legalName\":\"Leaseline Inc.\",\"jurisdiction\":\"US-DE\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Company.incorporate({ legalName: 'Leaseline Inc.', jurisdiction: 'US-DE' })",
        "cli": [
          "npx startup-builder do Company.incorporate --json '{\"legalName\":\"Leaseline Inc.\",\"jurisdiction\":\"US-DE\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "return await $.Company.incorporate({ legalName: 'Leaseline Inc.', jurisdiction: 'US-DE' })"
          }
        }
      }
    },
    {
      "id": "get-a-phone-number",
      "title": "Get a phone number",
      "says": [
        "Get a phone number for the business",
        "Get me a local number in the 512 area code",
        "Set up a line customers can call and text",
        "Give the support agent a phone number"
      ],
      "status": "beta",
      "shelf": "reference",
      "tab": "systems",
      "page": {
        "id": "page:systems/communications/get-a-phone-number",
        "md": "/systems/communications/get-a-phone-number.md"
      },
      "program": [
        "Channel.create"
      ],
      "inputs": [
        {
          "medium": "sms",
          "areaCode": "512"
        }
      ],
      "examples": [
        [
          "medium",
          "areaCode"
        ]
      ],
      "plans": {},
      "needs": [
        "noun:startup"
      ],
      "approval": "none",
      "leaves": [],
      "change": [
        "Forward calls to my cell after hours.",
        "Have the agent answer and book appointments.",
        "Text customers when their order ships.",
        "Port the number we already have."
      ],
      "later": [],
      "calls": {
        "ask": "Get a phone number for the business",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/channels \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"medium\":\"sms\",\"areaCode\":\"512\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Channel.create({ medium: 'sms', areaCode: '512' })",
        "cli": [
          "npx startup-builder do Channel.create --json '{\"medium\":\"sms\",\"areaCode\":\"512\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "return await $.Channel.create({ medium: 'sms', areaCode: '512' })"
          }
        }
      }
    },
    {
      "id": "let-an-agent-sign-ndas",
      "title": "Let the contracts agent sign NDAs",
      "says": [
        "Let the contracts agent sign NDAs for me",
        "Sign mutual NDAs without asking me",
        "Our contracts manager can sign standard NDAs",
        "Ask me before any contract over $10,000"
      ],
      "status": "live",
      "shelf": "reference",
      "tab": "agents",
      "page": {
        "id": "page:agents/let-an-agent-sign-ndas",
        "md": "/agents/let-an-agent-sign-ndas.md"
      },
      "program": [
        "Mandate.authorize"
      ],
      "inputs": [
        {
          "agent": "agent_contracts_manager",
          "verb": "Agreement.sign",
          "limit": "limit_contract_10000",
          "topics": [
            "mutual NDA on the Startup’s Template"
          ]
        }
      ],
      "examples": [
        [
          "agent",
          "verb",
          "limit",
          "topics"
        ]
      ],
      "plans": {},
      "needs": [
        "noun:agreement"
      ],
      "approval": "ask",
      "leaves": [],
      "change": [
        "Let it sign order forms under $5,000 too.",
        "Show me every NDA it signs in a weekly digest.",
        "Revoke the signing Mandate."
      ],
      "later": [],
      "calls": {
        "ask": "Let the contracts agent sign NDAs for me",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/mandates/authorize \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"agent\":\"agent_contracts_manager\",\"verb\":\"Agreement.sign\",\"limit\":\"limit_contract_10000\",\"topics\":[\"mutual NDA on the Startup’s Template\"]}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Mandate.authorize({ agent: 'agent_contracts_manager', verb: 'Agreement.sign', limit: 'limit_contract_10000', topics: ['mutual NDA on the Startup’s Template'] })",
        "cli": [
          "npx startup-builder do Mandate.authorize --json '{\"agent\":\"agent_contracts_manager\",\"verb\":\"Agreement.sign\",\"limit\":\"limit_contract_10000\",\"topics\":[\"mutual NDA on the Startup’s Template\"]}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "return await $.Mandate.authorize({ agent: 'agent_contracts_manager', verb: 'Agreement.sign', limit: 'limit_contract_10000', topics: ['mutual NDA on the Startup’s Template'] })"
          }
        }
      }
    },
    {
      "id": "license-my-data",
      "title": "License my data",
      "says": [
        "License the full renewal dataset for $12,000 a year",
        "Let a buyer resell our records",
        "Sell a redistribution license",
        "Sell the whole dataset with attribution"
      ],
      "status": "beta",
      "shelf": "reference",
      "tab": "products",
      "page": {
        "id": "page:products/data/license-my-data",
        "md": "/products/data/license-my-data.md"
      },
      "program": [
        "Offer.create",
        "Offer.publish"
      ],
      "inputs": [
        {
          "price": {
            "amount": 12000,
            "currency": "USD"
          },
          "interval": "year",
          "license": "redistribute",
          "attribution": "Renewal data from Leaseline",
          "terms": "Yearly, billed in advance. Weekly bulk delivery. Records may be resold inside your own product, with the attribution line."
        },
        {
          "offer": "$1.$id"
        }
      ],
      "examples": [
        [
          "price",
          "interval",
          "license",
          "attribution",
          "terms"
        ],
        []
      ],
      "plans": {},
      "needs": [
        "guide:sell-my-data",
        "verb:Startup.claim"
      ],
      "approval": "ask",
      "leaves": [],
      "change": [
        "Make it private to one buyer.",
        "Add a display license at $3,000 a year.",
        "Deliver to their warehouse every Monday."
      ],
      "later": [],
      "calls": {
        "ask": "License the full renewal dataset for $12,000 a year",
        "api": [
          "OFFER=$(curl -X POST https://api.sb/leaseline.app/offers \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"price\":{\"amount\":12000,\"currency\":\"USD\"},\"interval\":\"year\",\"license\":\"redistribute\",\"attribution\":\"Renewal data from Leaseline\",\"terms\":\"Yearly, billed in advance. Weekly bulk delivery. Records may be resold inside your own product, with the attribution line.\"}' | jq -r '.offer[\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/offers/$OFFER/publish \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\""
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nconst offer = await $.Offer.create({ price: { amount: 12000, currency: 'USD' }, interval: 'year', license: 'redistribute', attribution: 'Renewal data from Leaseline', terms: 'Yearly, billed in advance. Weekly bulk delivery. Records may be resold inside your own product, with the attribution line.' })\nawait $.Offer.publish({ offer: offer.$id })",
        "cli": [
          "OFFER=$(npx startup-builder do Offer.create --json '{\"price\":{\"amount\":12000,\"currency\":\"USD\"},\"interval\":\"year\",\"license\":\"redistribute\",\"attribution\":\"Renewal data from Leaseline\",\"terms\":\"Yearly, billed in advance. Weekly bulk delivery. Records may be resold inside your own product, with the attribution line.\"}' | jq -r '.offer[\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Offer.publish --json '{\"offer\":\"'\"$OFFER\"'\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "const offer = await $.Offer.create({ price: { amount: 12000, currency: 'USD' }, interval: 'year', license: 'redistribute', attribution: 'Renewal data from Leaseline', terms: 'Yearly, billed in advance. Weekly bulk delivery. Records may be resold inside your own product, with the attribution line.' })\nreturn await $.Offer.publish({ offer: offer.$id })"
          }
        }
      }
    },
    {
      "id": "move-money",
      "title": "Move money between accounts",
      "says": [
        "Move $5,000 to the card balance",
        "Keep two weeks of card spend in the card balance",
        "Sweep everything over $20,000 to reserve every Friday",
        "Move money from reserve to operating"
      ],
      "not": [
        "Pay out to my bank"
      ],
      "status": "beta",
      "shelf": "reference",
      "tab": "systems",
      "page": {
        "id": "page:systems/finance/move-money",
        "md": "/systems/finance/move-money.md"
      },
      "program": [
        "Account.sweep"
      ],
      "inputs": [
        {
          "from": "find:account where heldAt = payments",
          "to": "find:account where heldAt = cards",
          "amount": {
            "amount": 5000,
            "currency": "USD"
          }
        }
      ],
      "examples": [
        [
          "amount"
        ]
      ],
      "plans": {},
      "needs": [
        "verb:Startup.claim",
        "guide:open-a-bank-account"
      ],
      "approval": "none",
      "leaves": [],
      "change": [
        "Do this every Monday.",
        "Keep $10,000 in operating and sweep the rest to reserve."
      ],
      "later": [],
      "calls": {
        "ask": "Move $5,000 to the card balance",
        "api": [
          "FROM=$(curl \"https://api.sb/leaseline.app/accounts?where=heldAt%20%3D%20payments&limit=1\" \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" | jq -r '.accounts[0][\"$id\"] | split(\"/\") | last')",
          "TO=$(curl \"https://api.sb/leaseline.app/accounts?where=heldAt%20%3D%20cards&limit=1\" \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" | jq -r '.accounts[0][\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/accounts/$FROM/sweep \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"to\":\"'\"$TO\"'\",\"amount\":{\"amount\":5000,\"currency\":\"USD\"}}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nconst [from] = await $.Account.list({ where: 'heldAt = payments', limit: 1 })\nconst [to] = await $.Account.list({ where: 'heldAt = cards', limit: 1 })\nawait $.Account.sweep({ from: from.$id, to: to.$id, amount: { amount: 5000, currency: 'USD' } })",
        "cli": [
          "FROM=$(npx startup-builder do Account.list --json '{\"where\":\"heldAt = payments\",\"limit\":1}' | jq -r '.accounts[0][\"$id\"] | split(\"/\") | last')",
          "TO=$(npx startup-builder do Account.list --json '{\"where\":\"heldAt = cards\",\"limit\":1}' | jq -r '.accounts[0][\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Account.sweep --json '{\"from\":\"'\"$FROM\"'\",\"to\":\"'\"$TO\"'\",\"amount\":{\"amount\":5000,\"currency\":\"USD\"}}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "const [from] = await $.Account.list({ where: 'heldAt = payments', limit: 1 })\nconst [to] = await $.Account.list({ where: 'heldAt = cards', limit: 1 })\nreturn await $.Account.sweep({ from: from.$id, to: to.$id, amount: { amount: 5000, currency: 'USD' } })"
          }
        }
      }
    },
    {
      "id": "open-a-bank-account",
      "title": "Open a bank account",
      "says": [
        "Open a bank account for the business",
        "Give Leaseline an account to hold the money",
        "Set up an operating account and a reserve account",
        "Where does our money go",
        "Claim the startup and verify who we are"
      ],
      "status": "beta",
      "shelf": "reference",
      "tab": "systems",
      "page": {
        "id": "page:systems/finance/open-a-bank-account",
        "md": "/systems/finance/open-a-bank-account.md"
      },
      "program": [
        "Startup.claim"
      ],
      "inputs": [
        {
          "startup": "find:startup",
          "claimToken": "claim_7hq2x"
        }
      ],
      "examples": [
        [
          "claimToken"
        ]
      ],
      "plans": {},
      "needs": [
        "noun:startup"
      ],
      "approval": "none",
      "leaves": [
        "stripe-onboarding"
      ],
      "change": [
        "Keep three months of spend in operating and sweep the rest to reserve.",
        "Pay out weekly instead of daily.",
        "Connect the bank account we already have."
      ],
      "later": [],
      "calls": {
        "ask": "Open a bank account for the business",
        "api": [
          "STARTUP=$(curl \"https://api.sb/leaseline.app/startups?limit=1\" \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" | jq -r '.startups[0][\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/startups/$STARTUP/claim \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"claimToken\":\"claim_7hq2x\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nconst [startup] = await $.Startup.list({ limit: 1 })\nawait $.Startup.claim({ startup: startup.$id, claimToken: 'claim_7hq2x' })",
        "cli": [
          "STARTUP=$(npx startup-builder do Startup.list --json '{\"limit\":1}' | jq -r '.startups[0][\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Startup.claim --json '{\"startup\":\"'\"$STARTUP\"'\",\"claimToken\":\"claim_7hq2x\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "const [startup] = await $.Startup.list({ limit: 1 })\nreturn await $.Startup.claim({ startup: startup.$id, claimToken: 'claim_7hq2x' })"
          }
        }
      }
    },
    {
      "id": "pay-out-to-my-bank",
      "title": "Pay out to my bank",
      "says": [
        "Send everything available to the bank now",
        "Pay out to my bank",
        "Move my Stripe balance to the bank",
        "Pay me out weekly instead of daily",
        "Get the money into my bank today"
      ],
      "status": "beta",
      "shelf": "reference",
      "tab": "systems",
      "page": {
        "id": "page:systems/finance/pay-out-to-my-bank",
        "md": "/systems/finance/pay-out-to-my-bank.md"
      },
      "program": [
        "Account.payout"
      ],
      "inputs": [
        {
          "account": "find:account where heldAt = payments"
        }
      ],
      "examples": [
        []
      ],
      "plans": {},
      "needs": [
        "verb:Startup.claim"
      ],
      "approval": "ask",
      "leaves": [],
      "change": [
        "Pay out weekly instead of daily.",
        "Send $2,000 now and keep the rest.",
        "Send it within minutes instead."
      ],
      "later": [],
      "calls": {
        "ask": "Send everything available to the bank now",
        "api": [
          "ACCOUNT=$(curl \"https://api.sb/leaseline.app/accounts?where=heldAt%20%3D%20payments&limit=1\" \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" | jq -r '.accounts[0][\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/accounts/$ACCOUNT/payout \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\""
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nconst [account] = await $.Account.list({ where: 'heldAt = payments', limit: 1 })\nawait $.Account.payout({ account: account.$id })",
        "cli": [
          "ACCOUNT=$(npx startup-builder do Account.list --json '{\"where\":\"heldAt = payments\",\"limit\":1}' | jq -r '.accounts[0][\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Account.payout --json '{\"account\":\"'\"$ACCOUNT\"'\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "const [account] = await $.Account.list({ where: 'heldAt = payments', limit: 1 })\nreturn await $.Account.payout({ account: account.$id })"
          }
        }
      }
    },
    {
      "id": "promise-uptime",
      "title": "Promise uptime on a plan",
      "says": [
        "Promise 99.9% uptime on Scale",
        "Add an SLA to the Scale plan",
        "Credit customers when the API is down",
        "Offer an uptime commitment to bigger customers"
      ],
      "status": "live",
      "shelf": "reference",
      "tab": "products",
      "page": {
        "id": "page:products/api/promise-uptime",
        "md": "/products/api/promise-uptime.md"
      },
      "program": [
        "Offer.update"
      ],
      "inputs": [
        {
          "id": "offer_scale_monthly",
          "uptime": {
            "target": 99.9,
            "credits": [
              {
                "below": 99.9,
                "percent": 10
              },
              {
                "below": 99,
                "percent": 25
              }
            ]
          }
        }
      ],
      "examples": [
        [
          "id",
          "uptime"
        ]
      ],
      "plans": {},
      "needs": [
        "guide:ship-an-api",
        "verb:Startup.claim"
      ],
      "approval": "none",
      "leaves": [],
      "change": [
        "Make it 99.95% for the enterprise plan only.",
        "Show uptime for the last 90 days on the status page.",
        "Did anyone earn a credit last month?"
      ],
      "later": [],
      "calls": {
        "ask": "Promise 99.9% uptime on Scale",
        "api": [
          "curl -X PATCH https://api.sb/leaseline.app/offers/offer_scale_monthly \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"price\":{\"amount\":29,\"currency\":\"USD\"},\"uptime\":{\"target\":99.9,\"credits\":[{\"below\":99.9,\"percent\":10},{\"below\":99,\"percent\":25}]}}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Offer.update({ id: 'offer_scale_monthly', price: { amount: 29, currency: 'USD' }, uptime: { target: 99.9, credits: [{ below: 99.9, percent: 10 }, { below: 99, percent: 25 }] } })",
        "cli": [
          "npx startup-builder do Offer.update --json '{\"id\":\"offer_scale_monthly\",\"price\":{\"amount\":29,\"currency\":\"USD\"},\"uptime\":{\"target\":99.9,\"credits\":[{\"below\":99.9,\"percent\":10},{\"below\":99,\"percent\":25}]}}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "return await $.Offer.update({ id: 'offer_scale_monthly', price: { amount: 29, currency: 'USD' }, uptime: { target: 99.9, credits: [{ below: 99.9, percent: 10 }, { below: 99, percent: 25 }] } })"
          }
        }
      }
    },
    {
      "id": "raise-my-price",
      "title": "Raise my price",
      "says": [
        "Raise Pro to $39 for new customers",
        "Change my price",
        "Put the price up but keep current customers where they are",
        "Charge new signups more"
      ],
      "status": "live",
      "shelf": "reference",
      "tab": "products",
      "page": {
        "id": "page:products/offers/raise-my-price",
        "md": "/products/offers/raise-my-price.md"
      },
      "program": [
        "Offer.create",
        "Offer.publish",
        "Offer.withdraw"
      ],
      "inputs": [
        {
          "price": {
            "amount": 39,
            "currency": "USD"
          },
          "interval": "month",
          "terms": "Monthly, billed in advance. Cancel any time from the billing portal."
        },
        {
          "offer": "$1.$id"
        },
        {
          "offer": "offer_pro_monthly"
        }
      ],
      "examples": [
        [
          "price",
          "interval",
          "terms"
        ],
        [],
        [
          "offer"
        ]
      ],
      "plans": {},
      "needs": [
        "guide:charge-monthly",
        "verb:Startup.claim"
      ],
      "approval": "ask",
      "leaves": [],
      "change": [
        "Move existing customers too, after 30 days of notice.",
        "Keep the old price for customers who signed up before June.",
        "Test $39 in Canada first."
      ],
      "later": [],
      "calls": {
        "ask": "Raise Pro to $39 for new customers",
        "api": [
          "OFFER=$(curl -X POST https://api.sb/leaseline.app/offers \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"price\":{\"amount\":39,\"currency\":\"USD\"},\"interval\":\"month\",\"terms\":\"Monthly, billed in advance. Cancel any time from the billing portal.\"}' | jq -r '.offer[\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/offers/$OFFER/publish \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\"",
          "curl -X POST https://api.sb/leaseline.app/offers/offer_pro_monthly/withdraw \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\""
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nconst offer = await $.Offer.create({ price: { amount: 39, currency: 'USD' }, interval: 'month', terms: 'Monthly, billed in advance. Cancel any time from the billing portal.' })\nawait $.Offer.publish({ offer: offer.$id })\nawait $.Offer.withdraw({ offer: 'offer_pro_monthly' })",
        "cli": [
          "OFFER=$(npx startup-builder do Offer.create --json '{\"price\":{\"amount\":39,\"currency\":\"USD\"},\"interval\":\"month\",\"terms\":\"Monthly, billed in advance. Cancel any time from the billing portal.\"}' | jq -r '.offer[\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Offer.publish --json '{\"offer\":\"'\"$OFFER\"'\"}'",
          "npx startup-builder do Offer.withdraw --json '{\"offer\":\"offer_pro_monthly\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "const offer = await $.Offer.create({ price: { amount: 39, currency: 'USD' }, interval: 'month', terms: 'Monthly, billed in advance. Cancel any time from the billing portal.' })\nawait $.Offer.publish({ offer: offer.$id })\nreturn await $.Offer.withdraw({ offer: 'offer_pro_monthly' })"
          }
        }
      }
    },
    {
      "id": "refund-a-customer",
      "title": "Refund a customer",
      "says": [
        "Refund a customer",
        "Refund this order",
        "Give Harbor their money back",
        "Refund half of what they paid",
        "Send back the $49 they paid for the setup",
        "Refund the customer who emailed me"
      ],
      "status": "live",
      "shelf": "reference",
      "tab": "systems",
      "page": {
        "id": "page:systems/finance/refund-a-customer",
        "md": "/systems/finance/refund-a-customer.md"
      },
      "program": [
        "Order.refund"
      ],
      "inputs": [
        {
          "order": "find:order where customer = Harbor",
          "amount": {
            "amount": 49,
            "currency": "USD"
          },
          "reason": "Setup call did not happen."
        }
      ],
      "examples": [
        [
          "amount",
          "reason"
        ]
      ],
      "plans": {},
      "needs": [
        "guide:take-a-payment"
      ],
      "approval": "mandate",
      "leaves": [],
      "change": [
        "Refund their last invoice instead.",
        "Ask me before any refund over $250.",
        "Refund the whole order."
      ],
      "later": [],
      "calls": {
        "ask": "Refund a customer",
        "api": [
          "ORDER=$(curl \"https://api.sb/leaseline.app/orders?where=customer%20%3D%20Harbor&limit=1\" \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" | jq -r '.orders[0][\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/orders/$ORDER/refund \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"reason\":\"Setup call did not happen.\",\"amount\":{\"amount\":49,\"currency\":\"USD\"}}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nconst [order] = await $.Order.list({ where: 'customer = Harbor', limit: 1 })\nawait $.Order.refund({ order: order.$id, reason: 'Setup call did not happen.', amount: { amount: 49, currency: 'USD' } })",
        "cli": [
          "ORDER=$(npx startup-builder do Order.list --json '{\"where\":\"customer = Harbor\",\"limit\":1}' | jq -r '.orders[0][\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Order.refund --json '{\"order\":\"'\"$ORDER\"'\",\"reason\":\"Setup call did not happen.\",\"amount\":{\"amount\":49,\"currency\":\"USD\"}}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "const [order] = await $.Order.list({ where: 'customer = Harbor', limit: 1 })\nreturn await $.Order.refund({ order: order.$id, reason: 'Setup call did not happen.', amount: { amount: 49, currency: 'USD' } })"
          }
        }
      }
    },
    {
      "id": "remove-a-teammate",
      "title": "Remove a teammate",
      "says": [
        "Remove a teammate",
        "Sam left, turn off their access",
        "Take my contractor off the business",
        "Revoke a teammate’s access",
        "Offboard someone who left"
      ],
      "status": "live",
      "shelf": "reference",
      "tab": "agents",
      "page": {
        "id": "page:agents/remove-a-teammate",
        "md": "/agents/remove-a-teammate.md"
      },
      "program": [
        "Role.vacate",
        "Worker.delete"
      ],
      "inputs": [
        {
          "role": "engineering-lead",
          "reason": "Sam left the business."
        },
        {
          "id": "find:worker where name = Sam"
        }
      ],
      "examples": [
        [
          "role",
          "reason"
        ],
        []
      ],
      "plans": {},
      "needs": [
        "guide:give-a-teammate-access"
      ],
      "approval": "none",
      "leaves": [],
      "change": [
        "Hand the seat back to its agent.",
        "Invite someone else to the seat."
      ],
      "later": [],
      "calls": {
        "ask": "Remove a teammate",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/roles/engineering-lead/vacate \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"reason\":\"Sam left the business.\"}'",
          "ID=$(curl \"https://api.sb/leaseline.app/workers?where=name%20%3D%20Sam&limit=1\" \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" | jq -r '.workers[0][\"$id\"] | split(\"/\") | last')",
          "curl -X DELETE https://api.sb/leaseline.app/workers/$ID \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\""
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Role.vacate({ role: 'engineering-lead', reason: 'Sam left the business.' })\nconst [id] = await $.Worker.list({ where: 'name = Sam', limit: 1 })\nawait $.Worker.delete({ id: id.$id })",
        "cli": [
          "npx startup-builder do Role.vacate --json '{\"role\":\"engineering-lead\",\"reason\":\"Sam left the business.\"}'",
          "ID=$(npx startup-builder do Worker.list --json '{\"where\":\"name = Sam\",\"limit\":1}' | jq -r '.workers[0][\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Worker.delete --json '{\"id\":\"'\"$ID\"'\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "await $.Role.vacate({ role: 'engineering-lead', reason: 'Sam left the business.' })\nconst [id] = await $.Worker.list({ where: 'name = Sam', limit: 1 })\nreturn await $.Worker.delete({ id: id.$id })"
          }
        }
      }
    },
    {
      "id": "replace-a-leaked-key",
      "title": "Replace a leaked key",
      "says": [
        "A customer posted their API key in public, replace it",
        "Roll a leaked key",
        "Kill that key and give them a new one",
        "Revoke the key that leaked",
        "Our API key leaked on GitHub"
      ],
      "status": "live",
      "shelf": "reference",
      "tab": "products",
      "page": {
        "id": "page:products/api/replace-a-leaked-key",
        "md": "/products/api/replace-a-leaked-key.md"
      },
      "program": [
        "APIKey.roll"
      ],
      "inputs": [
        {
          "apiKey": "api_key_nightly_sync",
          "expireIn": "1h"
        }
      ],
      "examples": [
        [
          "apiKey",
          "expireIn"
        ]
      ],
      "plans": {},
      "needs": [
        "guide:ship-an-api"
      ],
      "approval": "none",
      "leaves": [],
      "change": [
        "Stop the old key now, not in an hour.",
        "Show me every key this customer has.",
        "Let the new key read only."
      ],
      "later": [],
      "calls": {
        "ask": "A customer posted their API key in public, replace it",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/api-keys/api_key_nightly_sync/roll \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"expireIn\":\"1h\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.APIKey.roll({ apiKey: 'api_key_nightly_sync', expireIn: '1h' })",
        "cli": [
          "npx startup-builder do APIKey.roll --json '{\"apiKey\":\"api_key_nightly_sync\",\"expireIn\":\"1h\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "return await $.APIKey.roll({ apiKey: 'api_key_nightly_sync', expireIn: '1h' })"
          }
        }
      }
    },
    {
      "id": "sell-on-aws-marketplace",
      "title": "Sell on AWS Marketplace",
      "says": [
        "List renewal dates on AWS Marketplace",
        "Sell through AWS Marketplace",
        "Let buyers put us on their cloud bill",
        "List us in the cloud marketplaces"
      ],
      "not": [
        "buyers and sellers"
      ],
      "status": "beta",
      "shelf": "reference",
      "tab": "products",
      "page": {
        "id": "page:products/offers/sell-on-aws-marketplace",
        "md": "/products/offers/sell-on-aws-marketplace.md"
      },
      "program": [
        "Integration.connect",
        "Integration.sync"
      ],
      "inputs": [
        {
          "system": "billing",
          "scope": "startup",
          "grants": [
            "listings",
            "orders",
            "payouts"
          ],
          "venue": "aws-marketplace"
        },
        {
          "integration": "$1.$id"
        }
      ],
      "examples": [
        [
          "system",
          "scope",
          "grants",
          "venue"
        ],
        []
      ],
      "plans": {},
      "needs": [
        "guide:ship-an-api"
      ],
      "approval": "ask",
      "leaves": [
        "oauth"
      ],
      "change": [
        "Make a private offer for Harbor Residential there.",
        "List the data product too.",
        "How much did the marketplace pay us last month?"
      ],
      "later": [],
      "calls": {
        "ask": "List renewal dates on AWS Marketplace",
        "api": [
          "INTEGRATION=$(curl -X POST https://api.sb/leaseline.app/integrations/connect \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"system\":\"billing\",\"scope\":\"startup\",\"grants\":[\"listings\",\"orders\",\"payouts\"],\"venue\":\"aws-marketplace\"}' | jq -r '.integration[\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/integrations/$INTEGRATION/sync \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\""
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nconst { integration } = await $.Integration.connect({ system: 'billing', scope: 'startup', grants: ['listings', 'orders', 'payouts'], venue: 'aws-marketplace' })\nawait $.Integration.sync({ integration: integration.$id })",
        "cli": [
          "INTEGRATION=$(npx startup-builder do Integration.connect --json '{\"system\":\"billing\",\"scope\":\"startup\",\"grants\":[\"listings\",\"orders\",\"payouts\"],\"venue\":\"aws-marketplace\"}' | jq -r '.integration[\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Integration.sync --json '{\"integration\":\"'\"$INTEGRATION\"'\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "const { integration } = await $.Integration.connect({ system: 'billing', scope: 'startup', grants: ['listings', 'orders', 'payouts'], venue: 'aws-marketplace' })\nreturn await $.Integration.sync({ integration: integration.$id })"
          }
        }
      }
    },
    {
      "id": "send-an-invoice",
      "title": "Send an invoice",
      "says": [
        "Send a customer a $29 invoice, due in 30 days",
        "Bill Harbor Properties for this month’s setup work",
        "Send the invoice and chase it if they pay late",
        "Bill this client for the setup work"
      ],
      "status": "live",
      "shelf": "reference",
      "tab": "systems",
      "page": {
        "id": "page:systems/finance/send-an-invoice",
        "md": "/systems/finance/send-an-invoice.md"
      },
      "program": [
        "Invoice.create",
        "Invoice.bill"
      ],
      "inputs": [
        {
          "total": {
            "amount": 29,
            "currency": "USD"
          },
          "due": "2026-11-22",
          "collection": "send"
        },
        {
          "invoice": "$1.$id"
        }
      ],
      "examples": [
        [
          "total",
          "due",
          "collection"
        ],
        []
      ],
      "plans": {},
      "needs": [
        "verb:Startup.claim",
        "noun:customer"
      ],
      "approval": "ask",
      "leaves": [],
      "change": [
        "Make it net 15.",
        "Charge their saved card on the due date.",
        "Void it and send a corrected one."
      ],
      "later": [],
      "calls": {
        "ask": "Send a customer a $29 invoice, due in 30 days",
        "api": [
          "INVOICE=$(curl -X POST https://api.sb/leaseline.app/invoices \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"total\":{\"amount\":29,\"currency\":\"USD\"},\"due\":\"2026-11-22\",\"collection\":\"send\"}' | jq -r '.invoice[\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/invoices/$INVOICE/bill \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\""
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nconst invoice = await $.Invoice.create({ total: { amount: 29, currency: 'USD' }, due: '2026-11-22', collection: 'send' })\nawait $.Invoice.bill({ invoice: invoice.$id })",
        "cli": [
          "INVOICE=$(npx startup-builder do Invoice.create --json '{\"total\":{\"amount\":29,\"currency\":\"USD\"},\"due\":\"2026-11-22\",\"collection\":\"send\"}' | jq -r '.invoice[\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Invoice.bill --json '{\"invoice\":\"'\"$INVOICE\"'\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "const invoice = await $.Invoice.create({ total: { amount: 29, currency: 'USD' }, due: '2026-11-22', collection: 'send' })\nreturn await $.Invoice.bill({ invoice: invoice.$id })"
          }
        }
      }
    },
    {
      "id": "turn-a-process-on-or-off",
      "title": "Turn a process on or off",
      "says": [
        "Turn on the Monday Role review",
        "Which processes are running",
        "Pause the weekly Role review until we launch",
        "Send the Role review on Friday afternoons",
        "Turn a process on"
      ],
      "status": "live",
      "shelf": "reference",
      "tab": "workflows",
      "page": {
        "id": "page:workflows/guides/turn-a-process-on-or-off",
        "md": "/workflows/guides/turn-a-process-on-or-off.md"
      },
      "program": [
        "Process.enable",
        "Setting.update"
      ],
      "inputs": [
        {
          "process": "process_role_review"
        },
        {
          "key": "roleReview.at",
          "value": "fri 16:00"
        }
      ],
      "examples": [
        [
          "process"
        ],
        [
          "key",
          "value"
        ]
      ],
      "plans": {},
      "needs": [
        "noun:startup"
      ],
      "approval": "none",
      "leaves": [],
      "change": [
        "Pause it until we launch.",
        "Send it to my cofounder too.",
        "Show me every Process that is off."
      ],
      "later": [],
      "calls": {
        "ask": "Turn on the Monday Role review",
        "api": [
          "curl -X POST https://api.sb/leaseline.app/processes/process_role_review/enable \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\"",
          "curl -X PATCH https://api.sb/leaseline.app/settings/setting_1 \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"value\":\"fri 16:00\",\"key\":\"roleReview.at\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nawait $.Process.enable({ process: 'process_role_review' })\nawait $.Setting.update({ id: 'setting_1', value: 'fri 16:00', key: 'roleReview.at' })",
        "cli": [
          "npx startup-builder do Process.enable --json '{\"process\":\"process_role_review\"}'",
          "npx startup-builder do Setting.update --json '{\"id\":\"setting_1\",\"value\":\"fri 16:00\",\"key\":\"roleReview.at\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "await $.Process.enable({ process: 'process_role_review' })\nreturn await $.Setting.update({ id: 'setting_1', value: 'fri 16:00', key: 'roleReview.at' })"
          }
        }
      }
    },
    {
      "id": "wind-down-my-startup",
      "title": "Wind down my startup",
      "says": [
        "Wind down Leaseline",
        "Shut down my startup",
        "Close the business",
        "Stop everything, I am done with this one",
        "Dissolve the company",
        "Close the company down"
      ],
      "not": [
        "pause one agent",
        "cancel a customer subscription"
      ],
      "status": "beta",
      "shelf": "reference",
      "tab": "business",
      "page": {
        "id": "page:business/wind-down-my-startup",
        "md": "/business/wind-down-my-startup.md"
      },
      "program": [
        "Startup.pause",
        "Company.dissolve"
      ],
      "inputs": [
        {
          "startup": "find:startup",
          "reason": "No paying customers after six months."
        },
        {
          "company": "find:company",
          "reason": "Leaseline has stopped trading."
        }
      ],
      "examples": [
        [
          "reason"
        ],
        [
          "reason"
        ]
      ],
      "plans": {},
      "needs": [
        "noun:startup"
      ],
      "approval": "ask",
      "leaves": [],
      "change": [
        "Only pause the business, and keep the company.",
        "Resume Leaseline.",
        "Sell Leaseline instead."
      ],
      "later": [],
      "calls": {
        "ask": "Wind down Leaseline",
        "api": [
          "STARTUP=$(curl \"https://api.sb/leaseline.app/startups?limit=1\" \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" | jq -r '.startups[0][\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/startups/$STARTUP/pause \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"reason\":\"No paying customers after six months.\"}'",
          "COMPANY=$(curl \"https://api.sb/leaseline.app/companies?limit=1\" \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" | jq -r '.companies[0][\"$id\"] | split(\"/\") | last')",
          "curl -X POST https://api.sb/leaseline.app/companies/$COMPANY/dissolve \\\n  -H \"Authorization: Bearer $STARTUP_BUILDER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"reason\":\"Leaseline has stopped trading.\"}'"
        ],
        "sdk": "import { $ } from 'startup-builder'\n\nconst [startup] = await $.Startup.list({ limit: 1 })\nawait $.Startup.pause({ startup: startup.$id, reason: 'No paying customers after six months.' })\nconst [company] = await $.Company.list({ limit: 1 })\nawait $.Company.dissolve({ company: company.$id, reason: 'Leaseline has stopped trading.' })",
        "cli": [
          "STARTUP=$(npx startup-builder do Startup.list --json '{\"limit\":1}' | jq -r '.startups[0][\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Startup.pause --json '{\"startup\":\"'\"$STARTUP\"'\",\"reason\":\"No paying customers after six months.\"}'",
          "COMPANY=$(npx startup-builder do Company.list --json '{\"limit\":1}' | jq -r '.companies[0][\"$id\"] | split(\"/\") | last')",
          "npx startup-builder do Company.dissolve --json '{\"company\":\"'\"$COMPANY\"'\",\"reason\":\"Leaseline has stopped trading.\"}'"
        ],
        "mcp": {
          "name": "do",
          "arguments": {
            "code": "const [startup] = await $.Startup.list({ limit: 1 })\nawait $.Startup.pause({ startup: startup.$id, reason: 'No paying customers after six months.' })\nconst [company] = await $.Company.list({ limit: 1 })\nreturn await $.Company.dissolve({ company: company.$id, reason: 'Leaseline has stopped trading.' })"
          }
        }
      }
    }
  ],
  "systems": [
    {
      "id": "sites",
      "name": "Sites",
      "says": [
        "Put up a landing page",
        "Change the headline on the home page",
        "Roll back the last change to the site",
        "Add a pricing page"
      ],
      "status": "live",
      "shelf": "front",
      "group": "products",
      "page": {
        "id": "system:sites",
        "md": "/products/site/sites.md"
      }
    },
    {
      "id": "data-editor",
      "name": "Data editor",
      "says": [
        "Show me every customer in a table",
        "Import these contacts from a spreadsheet",
        "Export all orders to CSV"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "code",
      "page": {
        "id": "system:data-editor",
        "md": "/code/systems/data-editor.md"
      }
    },
    {
      "id": "customer-access",
      "name": "Customer access",
      "says": [
        "Let a customer invite their team",
        "Turn on SSO for this customer",
        "Give their IT admin a setup link",
        "Remove this person’s access"
      ],
      "status": "live",
      "shelf": "front",
      "group": "customers-and-identity",
      "page": {
        "id": "system:customer-access",
        "md": "/systems/customer-access.md"
      }
    },
    {
      "id": "goals",
      "name": "Goals",
      "says": [
        "Set a goal of 10 paying customers by June",
        "Are we on track for this quarter?",
        "Why did we decide to drop the free plan?"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "business",
      "page": {
        "id": "system:goals",
        "md": "/business/goals.md"
      }
    },
    {
      "id": "discovery",
      "name": "Discovery",
      "says": [
        "What are people asking for?",
        "Log this customer interview",
        "Who is my ideal customer?",
        "What problems came up most?"
      ],
      "status": "live",
      "shelf": "front",
      "group": "business",
      "page": {
        "id": "system:discovery",
        "md": "/business/discovery.md"
      }
    },
    {
      "id": "crm",
      "name": "CRM",
      "says": [
        "Who are my best leads?",
        "Add this person as a lead",
        "Move the Harbor deal to proposal",
        "Merge these two contacts",
        "Which deals are stuck?"
      ],
      "status": "live",
      "shelf": "front",
      "group": "sales",
      "page": {
        "id": "system:crm",
        "md": "/systems/crm.md"
      }
    },
    {
      "id": "prospecting",
      "name": "Prospecting",
      "says": [
        "Find 200 property managers in Ohio",
        "How many companies fit my ICP?",
        "Find a warm intro to this company",
        "Verify these emails before we send"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "sales",
      "page": {
        "id": "system:prospecting",
        "md": "/systems/prospecting.md"
      }
    },
    {
      "id": "quotes",
      "name": "Quotes",
      "says": [
        "Send this customer a quote",
        "Quote them the annual plan with a 10% discount",
        "Which quotes are about to expire?",
        "Turn the signed quote into an order"
      ],
      "status": "beta",
      "shelf": "reference",
      "group": "sales",
      "page": {
        "id": "system:quotes",
        "md": "/systems/quotes.md"
      }
    },
    {
      "id": "billing",
      "name": "Billing",
      "says": [
        "Charge customers monthly",
        "Send this customer an invoice",
        "Retry the payments that failed",
        "Refund this order",
        "Show me who is past due"
      ],
      "status": "live",
      "shelf": "front",
      "group": "finance",
      "page": {
        "id": "system:billing",
        "md": "/systems/billing.md"
      }
    },
    {
      "id": "commerce",
      "name": "Commerce",
      "says": [
        "Sell physical products",
        "Ship this order",
        "Which orders still need to ship?"
      ],
      "status": "beta",
      "shelf": "reference",
      "group": "commerce-and-fulfillment",
      "page": {
        "id": "system:commerce",
        "md": "/systems/commerce.md"
      }
    },
    {
      "id": "waitlists",
      "name": "Waitlists",
      "says": [
        "Start a waitlist for the launch",
        "Let the next 50 people in",
        "Who referred the most people?",
        "How long is the waitlist?"
      ],
      "status": "live",
      "shelf": "front",
      "group": "marketing",
      "page": {
        "id": "system:waitlists",
        "md": "/systems/waitlists.md"
      }
    },
    {
      "id": "referrals",
      "name": "Referrals",
      "says": [
        "Pay partners 20% of what they bring in",
        "Who sent us customers this month?",
        "Pay the commissions that are due",
        "Give this customer a referral link"
      ],
      "status": "beta",
      "shelf": "wakes",
      "group": "marketing",
      "page": {
        "id": "system:referrals",
        "md": "/systems/referrals.md"
      }
    },
    {
      "id": "product-analytics",
      "name": "Product analytics",
      "says": [
        "Where do visitors drop off?",
        "How many people signed up this week?",
        "Do users come back after the first week?",
        "Watch a recording of this session"
      ],
      "status": "live",
      "shelf": "silent",
      "group": "data-and-insights",
      "page": {
        "id": "system:product-analytics",
        "md": "/systems/product-analytics.md"
      }
    },
    {
      "id": "experiments",
      "name": "Experiments",
      "says": [
        "Test a $39 price against $29",
        "Try a new headline on half the visitors",
        "Which version won?",
        "Stop the test"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "data-and-insights",
      "page": {
        "id": "system:experiments",
        "md": "/systems/experiments.md"
      }
    },
    {
      "id": "cms",
      "name": "CMS",
      "says": [
        "Publish this post on the blog",
        "Draft a post from these notes",
        "Schedule the post for Monday at 9",
        "Update the pricing page copy"
      ],
      "status": "live",
      "shelf": "front",
      "group": "marketing",
      "page": {
        "id": "system:cms",
        "md": "/systems/cms.md"
      }
    },
    {
      "id": "forms",
      "name": "Forms",
      "says": [
        "Add a contact form to the site",
        "Ask every signup what they do",
        "Send form answers to the CRM",
        "Add a question to the signup form"
      ],
      "status": "live",
      "shelf": "front",
      "group": "marketing",
      "page": {
        "id": "system:forms",
        "md": "/systems/forms.md"
      }
    },
    {
      "id": "sequences",
      "name": "Sequences",
      "says": [
        "Email every new signup a welcome series",
        "Send the launch announcement to everyone",
        "Follow up with leads who went quiet",
        "Stop emailing anyone who unsubscribed"
      ],
      "status": "beta",
      "shelf": "wakes",
      "group": "marketing",
      "page": {
        "id": "system:sequences",
        "md": "/systems/sequences.md"
      }
    },
    {
      "id": "ads",
      "name": "Ads",
      "says": [
        "Spend $200 on ads this week",
        "Show ads to people who visited pricing",
        "Which ad brought in customers?",
        "Pause the ads that are not converting"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "marketing",
      "page": {
        "id": "system:ads",
        "md": "/systems/ads.md"
      }
    },
    {
      "id": "social",
      "name": "Social",
      "says": [
        "Post this on LinkedIn and X",
        "Plan next week’s posts",
        "Take that post down",
        "Connect our LinkedIn page"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "marketing",
      "page": {
        "id": "system:social",
        "md": "/systems/social.md"
      }
    },
    {
      "id": "seo",
      "name": "SEO",
      "says": [
        "What should we rank for?",
        "Where do we rank for property management software?",
        "Does ChatGPT mention us?",
        "How do we compare with our competitors?"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "marketing",
      "page": {
        "id": "system:seo",
        "md": "/systems/seo.md"
      }
    },
    {
      "id": "webinars",
      "name": "Webinars",
      "says": [
        "Host a webinar next Thursday",
        "Invite our customers to the meetup",
        "Who registered but did not show up?",
        "Follow up with everyone who attended"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "marketing",
      "page": {
        "id": "system:webinars",
        "md": "/systems/webinars.md"
      }
    },
    {
      "id": "reviews",
      "name": "Reviews",
      "says": [
        "Ask happy customers for a review",
        "Show reviews on the pricing page",
        "Hide this review until we check it"
      ],
      "status": "beta",
      "shelf": "reference",
      "group": "marketing",
      "page": {
        "id": "system:reviews",
        "md": "/systems/reviews.md"
      }
    },
    {
      "id": "support",
      "name": "Support",
      "says": [
        "Answer my customers within an hour",
        "Hand this conversation to me",
        "What are customers asking about most?",
        "Turn this complaint into a bug"
      ],
      "status": "live",
      "shelf": "front",
      "group": "support",
      "page": {
        "id": "system:support",
        "md": "/systems/support.md"
      }
    },
    {
      "id": "knowledge-base",
      "name": "Knowledge base",
      "says": [
        "Write a help article on resetting a password",
        "Publish the help center",
        "Which questions have no article?"
      ],
      "status": "beta",
      "shelf": "wakes",
      "group": "support",
      "page": {
        "id": "system:knowledge-base",
        "md": "/systems/knowledge-base.md"
      }
    },
    {
      "id": "surveys",
      "name": "Surveys",
      "says": [
        "Ask customers how disappointed they would be without us",
        "Send an NPS survey",
        "What did people say in the last survey?"
      ],
      "status": "live",
      "shelf": "front",
      "group": "data-and-insights",
      "page": {
        "id": "system:surveys",
        "md": "/systems/surveys.md"
      }
    },
    {
      "id": "success",
      "name": "Success",
      "says": [
        "Which customers might cancel?",
        "Who renews this month?",
        "Save this customer before they cancel",
        "Get new customers to their first win"
      ],
      "status": "beta",
      "shelf": "wakes",
      "group": "support",
      "page": {
        "id": "system:success",
        "md": "/systems/success.md"
      }
    },
    {
      "id": "scheduling",
      "name": "Scheduling",
      "says": [
        "Book a call with this lead",
        "Send them my booking link",
        "Move tomorrow’s call to Friday",
        "What did we agree on the last call?"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "sales",
      "page": {
        "id": "system:scheduling",
        "md": "/systems/scheduling.md"
      }
    },
    {
      "id": "projects",
      "name": "Projects",
      "says": [
        "What is the team working on this week?",
        "File this bug",
        "Plan the next two weeks of work"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "code",
      "page": {
        "id": "system:projects",
        "md": "/code/systems/projects.md"
      }
    },
    {
      "id": "product-planning",
      "name": "Product planning",
      "says": [
        "What should we build next?",
        "Which feature requests come up most?",
        "Show the public roadmap"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "code",
      "page": {
        "id": "system:product-planning",
        "md": "/code/systems/product-planning.md"
      }
    },
    {
      "id": "changelog",
      "name": "Changelog",
      "says": [
        "Publish what shipped this week",
        "Write release notes for this version",
        "Email customers about the new feature"
      ],
      "status": "live",
      "shelf": "front",
      "group": "code",
      "page": {
        "id": "system:changelog",
        "md": "/code/systems/changelog.md"
      }
    },
    {
      "id": "repositories",
      "name": "Repositories",
      "says": [
        "Ship my changes",
        "Undo the last deploy",
        "Review this change before it merges"
      ],
      "status": "live",
      "shelf": "front",
      "group": "code",
      "page": {
        "id": "system:repositories",
        "md": "/code/systems/repositories.md"
      }
    },
    {
      "id": "flags",
      "name": "Flags",
      "says": [
        "Turn this feature on for 10% of users",
        "Turn the new checkout off now",
        "Give beta customers the new editor"
      ],
      "status": "beta",
      "shelf": "reference",
      "group": "data-and-insights",
      "page": {
        "id": "system:flags",
        "md": "/systems/flags.md"
      }
    },
    {
      "id": "monitoring",
      "name": "Monitoring",
      "says": [
        "Is the site up?",
        "Page me when checkout breaks",
        "Which release broke this?"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "code",
      "page": {
        "id": "system:monitoring",
        "md": "/code/systems/monitoring.md"
      }
    },
    {
      "id": "evals",
      "name": "Evals",
      "says": [
        "How good are the support agent’s answers?",
        "Grade this agent’s last 50 replies",
        "Block changes that make answers worse"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "agents",
      "page": {
        "id": "system:evals",
        "md": "/agents/evals-system.md"
      }
    },
    {
      "id": "mailboxes",
      "name": "Mailboxes",
      "says": [
        "Give me dana@leaseline.app",
        "Set up support@ for the business",
        "Why are my emails going to spam?",
        "Give the sales agent its own inbox"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "communications",
      "page": {
        "id": "system:mailboxes",
        "md": "/systems/mailboxes.md"
      }
    },
    {
      "id": "discussions",
      "name": "Discussions",
      "says": [
        "Send approvals to our Slack",
        "Post agent updates in a channel",
        "Let me approve from my phone"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "agents",
      "page": {
        "id": "system:discussions",
        "md": "/agents/discussions.md"
      }
    },
    {
      "id": "notices",
      "name": "Notices",
      "says": [
        "Text customers when their order ships",
        "Send me a daily digest instead of every alert",
        "Do not notify anyone at night",
        "Let customers choose how we reach them"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "communications",
      "page": {
        "id": "system:notices",
        "md": "/systems/notices.md"
      }
    },
    {
      "id": "phone",
      "name": "Phone",
      "says": [
        "Get a phone number for support",
        "Get me a local number in Austin",
        "Have an agent answer the phone",
        "Text this customer that we are on the way",
        "Forward calls to my cell after hours"
      ],
      "status": "beta",
      "shelf": "reference",
      "group": "communications",
      "page": {
        "id": "system:phone",
        "md": "/systems/phone.md"
      }
    },
    {
      "id": "status-pages",
      "name": "Status pages",
      "says": [
        "Put up a status page",
        "Tell customers the API is down",
        "Mark the incident resolved"
      ],
      "status": "beta",
      "shelf": "wakes",
      "group": "support",
      "page": {
        "id": "system:status-pages",
        "md": "/systems/status-pages.md"
      }
    },
    {
      "id": "reports",
      "name": "Reports",
      "says": [
        "Show me my numbers",
        "Send me a weekly report every Monday",
        "Export this to a spreadsheet"
      ],
      "status": "live",
      "shelf": "front",
      "group": "finance",
      "page": {
        "id": "system:reports",
        "md": "/systems/reports.md"
      }
    },
    {
      "id": "files",
      "name": "Files",
      "says": [
        "Store this contract",
        "Share this file with the customer",
        "Find the latest version of the deck"
      ],
      "status": "live",
      "shelf": "silent",
      "group": "code",
      "page": {
        "id": "system:files",
        "md": "/code/systems/files.md"
      }
    },
    {
      "id": "documents",
      "name": "Documents",
      "says": [
        "Make an investor update from this month’s numbers",
        "Turn this into a PDF",
        "Generate a proposal from the quote"
      ],
      "status": "beta",
      "shelf": "silent",
      "group": "code",
      "page": {
        "id": "system:documents",
        "md": "/code/systems/documents.md"
      }
    },
    {
      "id": "trust-safety",
      "name": "Trust and safety",
      "says": [
        "Block fraudulent orders",
        "Review the orders on hold",
        "Check this account against sanctions lists",
        "Fight this chargeback"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "trust-and-governance",
      "page": {
        "id": "system:trust-safety",
        "md": "/systems/trust-safety.md"
      }
    },
    {
      "id": "media",
      "name": "Media production",
      "says": [
        "Make a product demo video",
        "Generate images for this post",
        "Turn the launch post into a short video"
      ],
      "status": "beta",
      "shelf": "reference",
      "group": "marketing",
      "page": {
        "id": "system:media",
        "md": "/systems/media.md"
      }
    },
    {
      "id": "ledger",
      "name": "Ledger",
      "says": [
        "Close the books for last month",
        "Categorize these transactions",
        "Show me the profit and loss",
        "Are we on budget?"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "finance",
      "page": {
        "id": "system:ledger",
        "md": "/systems/ledger.md"
      }
    },
    {
      "id": "spend",
      "name": "Spend management",
      "says": [
        "Pay this bill",
        "Issue a card with a monthly limit",
        "Approve the bills waiting on me",
        "What did we spend on software this month?"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "finance",
      "page": {
        "id": "system:spend",
        "md": "/systems/spend.md"
      }
    },
    {
      "id": "treasury",
      "name": "Treasury",
      "says": [
        "How much cash do we have?",
        "Show this month’s transactions",
        "Forecast our cash for the next quarter"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "finance",
      "page": {
        "id": "system:treasury",
        "md": "/systems/treasury.md"
      }
    },
    {
      "id": "tax",
      "name": "Tax",
      "says": [
        "Handle sales tax",
        "Register for sales tax in a new state",
        "Mark this customer tax-exempt"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "finance",
      "page": {
        "id": "system:tax",
        "md": "/systems/tax.md"
      }
    },
    {
      "id": "equity",
      "name": "Equity",
      "says": [
        "Show me the cap table",
        "Grant this hire 10,000 options over four years",
        "Convert the SAFEs",
        "Who owns what after this round?"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "legal-and-corporate",
      "page": {
        "id": "system:equity",
        "md": "/systems/equity.md"
      }
    },
    {
      "id": "agreements",
      "name": "Agreements",
      "says": [
        "Send the customer contract for signature",
        "Draft an NDA for this partner",
        "Who still has not signed?",
        "End the agreement with this supplier"
      ],
      "status": "beta",
      "shelf": "reference",
      "group": "legal-and-corporate",
      "page": {
        "id": "system:agreements",
        "md": "/systems/agreements.md"
      }
    },
    {
      "id": "privacy",
      "name": "Privacy",
      "says": [
        "Delete everything we hold about this person",
        "What data do we keep on this customer?",
        "Add a cookie banner",
        "Stop using this person’s data for marketing"
      ],
      "status": "beta",
      "shelf": "wakes",
      "group": "customers-and-identity",
      "page": {
        "id": "system:privacy",
        "md": "/systems/privacy.md"
      }
    },
    {
      "id": "compliance",
      "name": "Compliance",
      "says": [
        "Show me our SOC 2 status",
        "Answer this security questionnaire",
        "What risks are open?",
        "Publish a trust page"
      ],
      "status": "beta",
      "shelf": "wakes",
      "group": "trust-and-governance",
      "page": {
        "id": "system:compliance",
        "md": "/systems/compliance.md"
      }
    },
    {
      "id": "intellectual-property",
      "name": "Intellectual property",
      "says": [
        "Register my trademark",
        "Is this name already taken?",
        "When do our domains renew?",
        "Claim our handle on Instagram"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "legal-and-corporate",
      "page": {
        "id": "system:intellectual-property",
        "md": "/systems/intellectual-property.md"
      }
    },
    {
      "id": "corporate-records",
      "name": "Corporate records",
      "says": [
        "Record the board’s approval",
        "Is the company in good standing?",
        "File the annual report",
        "Incorporate the company in Delaware",
        "Close the company down"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "legal-and-corporate",
      "page": {
        "id": "system:corporate-records",
        "md": "/systems/corporate-records.md"
      }
    },
    {
      "id": "workforce",
      "name": "Workforce",
      "says": [
        "Who fills each role?",
        "Add Maya to the support team",
        "Offboard this contractor today",
        "What skills is the team missing?"
      ],
      "status": "live",
      "shelf": "wakes",
      "group": "people",
      "page": {
        "id": "system:workforce",
        "md": "/systems/workforce.md"
      }
    },
    {
      "id": "hiring",
      "name": "Hiring",
      "says": [
        "Hire a part-time bookkeeper",
        "Post a job for a support lead",
        "Screen these candidates",
        "Make an offer to Sam"
      ],
      "status": "beta",
      "shelf": "reference",
      "group": "people",
      "page": {
        "id": "system:hiring",
        "md": "/systems/hiring.md"
      }
    },
    {
      "id": "payroll",
      "name": "Pay runs",
      "says": [
        "Run payroll this Friday",
        "Pay our contractor for March",
        "What does payroll cost each month?",
        "Send the year-end tax forms"
      ],
      "status": "beta",
      "shelf": "wakes",
      "group": "people",
      "page": {
        "id": "system:payroll",
        "md": "/systems/payroll.md"
      }
    },
    {
      "id": "work-queue",
      "name": "Work queue",
      "says": [
        "What needs my approval?",
        "Approve the refunds waiting on me",
        "Give this task to the billing agent"
      ],
      "status": "live",
      "shelf": "front",
      "group": "agents",
      "page": {
        "id": "system:work-queue",
        "md": "/agents/work-queue.md"
      }
    },
    {
      "id": "supplier-onboarding",
      "name": "Supplier onboarding",
      "says": [
        "Onboard a new supplier",
        "Run a background check on this supplier",
        "Suspend this supplier",
        "Which suppliers are still waiting on paperwork?"
      ],
      "status": "beta",
      "shelf": "wakes",
      "group": "commerce-and-fulfillment",
      "page": {
        "id": "system:supplier-onboarding",
        "md": "/systems/supplier-onboarding.md"
      }
    },
    {
      "id": "credentialing",
      "name": "Credentialing",
      "says": [
        "Check this nurse’s license",
        "Whose license expires this month?",
        "Who may sign off on this work?"
      ],
      "status": "beta",
      "shelf": "wakes",
      "group": "commerce-and-fulfillment",
      "page": {
        "id": "system:credentialing",
        "md": "/systems/credentialing.md"
      }
    },
    {
      "id": "dispatch",
      "name": "Dispatch",
      "says": [
        "Send each job to an available supplier",
        "Who can take this shift?",
        "Offer the job to someone else"
      ],
      "status": "beta",
      "shelf": "reference",
      "group": "commerce-and-fulfillment",
      "page": {
        "id": "system:dispatch",
        "md": "/systems/dispatch.md"
      }
    },
    {
      "id": "payouts",
      "name": "Earnings",
      "says": [
        "Pay my suppliers",
        "Hold this payout",
        "Release the held payout",
        "When do my suppliers get paid?"
      ],
      "status": "beta",
      "shelf": "front",
      "group": "finance",
      "page": {
        "id": "system:payouts",
        "md": "/systems/payouts.md"
      }
    },
    {
      "id": "datasets",
      "name": "Datasets",
      "says": [
        "Sell this data as an API",
        "Refresh the dataset every night",
        "Deliver the dataset to the buyer’s warehouse"
      ],
      "status": "beta",
      "shelf": "reference",
      "group": "data-and-insights",
      "page": {
        "id": "system:datasets",
        "md": "/systems/datasets.md"
      }
    },
    {
      "id": "listings",
      "name": "Listings",
      "says": [
        "List every bookkeeper in Denver",
        "Let businesses claim their profile",
        "Charge for a featured listing",
        "Verify this listed business"
      ],
      "status": "beta",
      "shelf": "reference",
      "group": "commerce-and-fulfillment",
      "page": {
        "id": "system:listings",
        "md": "/systems/listings.md"
      }
    },
    {
      "id": "matching",
      "name": "Matchmaking",
      "says": [
        "Match this buyer with a supplier",
        "Take a 15% cut of every sale",
        "Settle this dispute between a buyer and a supplier"
      ],
      "status": "beta",
      "shelf": "reference",
      "group": "commerce-and-fulfillment",
      "page": {
        "id": "system:matching",
        "md": "/systems/matching.md"
      }
    },
    {
      "id": "service-delivery",
      "name": "Service delivery",
      "says": [
        "Deliver this job to the contract",
        "Which jobs are late?",
        "Redo this delivery",
        "Show the customer proof of each step"
      ],
      "status": "beta",
      "shelf": "reference",
      "group": "commerce-and-fulfillment",
      "page": {
        "id": "system:service-delivery",
        "md": "/systems/service-delivery.md"
      }
    }
  ]
}
