← Playbooks

Starter pack

Passport JSON

Paste into PUT /v1/agents/:id/passport.

[
  {
    "scope": "finances",
    "level": "observe",
    "resource_type": "all"
  },
  {
    "scope": "forecast",
    "level": "observe",
    "resource_type": "all"
  },
  {
    "scope": "subscriptions",
    "level": "recommend",
    "resource_type": "all"
  },
  {
    "scope": "allocations",
    "level": "recommend",
    "resource_type": "all"
  },
  {
    "scope": "goals",
    "level": "observe",
    "resource_type": "all"
  },
  {
    "scope": "decisions",
    "level": "execute",
    "resource_type": "all"
  }
]

#Pakiet startowy: Solo founder (finance + ops)

Dla kogo: jedna osoba prowadzi 1 do 3 biznesów i chce codziennego briefu, kontroli subskrypcji i prognozy, bez oddawania agentowi prawa do wydawania pieniędzy.

Passport (gotowe do POST /v1/agents/:id/passport/from-template): dwa szablony z 24 połączone w jeden zestaw grantów @all (bez personal, bez wykonywania zapisów kwotowych). Wklej do PUT /v1/agents/:id/passport:

{ "grants": [
  { "scope": "finances", "level": "observe", "resource_type": "all" },
  { "scope": "forecast", "level": "observe", "resource_type": "all" },
  { "scope": "subscriptions", "level": "recommend", "resource_type": "all" },
  { "scope": "allocations", "level": "recommend", "resource_type": "all" },
  { "scope": "goals", "level": "observe", "resource_type": "all" },
  { "scope": "decisions", "level": "execute", "resource_type": "all" }
] }

Alternatywa per biznes: {"template_id": "finance", "business_id": "<id>"} + {"template_id": "ops", "business_id": "<id>", "limits_currency": "PLN"}.

#System prompt (skopiuj)

You are the finance and operations agent of a solo founder using Operlance. You read everything across the owner's businesses but you never spend money: every cost change you want is a recommendation (202) that the owner approves. Start each day with get_daily_brief and get_business_context per business; quote coverage and data_class. Watch subscriptions: free seats, renewals in 7 days, price increases; before any new tool call plan_capacity and prefer a free seat. Compare numbers with goals (get_goals), never with a vague sense of growth. Record significant reasoning with create_decision (expected metric, value, horizon) so results can be reviewed later. When you lack access, use request_permission with a one-sentence reason; when data is missing, use request_data. Report in short lines with amounts, currency and the request_id of the call.

#Pierwszy dzień: kolejność tools

  1. Kto jestem i co mogę.
{
 "data": {
  "about": "Operlance is the shared financial source of truth for the owner's businesses, built for AI agents as first-class users. Every amount is {amount_minor, currency} with provenance and data coverage. The human owner stays the final authority: you act only through explicit, revocable grants, and anything outside them ends as an approval request.",
  "my_passport": {
   "agent": {
    "id": "<id-19>",
    "name": "starter/solo-founder agent",
    "kind": "custom"
   },
   "grants": [
    "allocations:recommend@all",
    "decisions:execute@all",
    "finances:observe@all",
    "forecast:observe@all",
    "goals:observe@all",
    "subscriptions:recommend@all"
   ],
   "expires_at": null,
   "token_expires_at": "2026-12-17T…Z"
  },
  "businesses_accessible": [
   {
    "id": "<business:clothing>",
    "name": "Clothing",
    "currency": "EUR",
    "projects": [
     {
      "id": "<project:Drop 01>",
      "name": "Drop 01"
     },
     {
      "id": "<project:Drop 02>",
      "name": "Drop 02"
     }
    ]
   },
   {
    "id": "<business:klima>",
    "name": "Klima",
    "currency": "PLN",
…
  1. Brief dla całego Ownera (grant all).
{
 "data": {
  "date": "2026-09-18",
  "currency": "USD",
  "highlights": [
   {
    "code": "revenue_24h",
    "message": "Klima: revenue last 24h",
    "amount_minor": 148600,
    "business_id": "<business:klima>"
   },
   {
    "code": "revenue_24h",
    "message": "THARAN: revenue last 24h",
    "amount_minor": 79600,
    "business_id": "<business:tharan>"
   },
   {
    "code": "spend_24h",
    "message": "Klima: spend last 24h",
    "amount_minor": 11329,
    "business_id": "<business:klima>"
   },
   {
    "code": "spend_24h",
    "message": "THARAN: spend last 24h",
    "amount_minor": 35331,
    "business_id": "<business:tharan>"
   }
  ],
  "alerts": [
   {
    "code": "break_even_off_track.net30_negative_flat_revenue",
    "message": "Clothing: 30-day net is negative and revenue is not growing",
    "amount_minor": -178088,
    "business_id": "<business:clothing>"
   },
   {
    "code": "budget_exceeded.actual_over_budget",
    "message": "THARAN: infrastructure: actual exceeds planned amount",
…
  1. Kontekst największego biznesu.
{
 "data": {
  "business": {
   "id": "<business:tharan>",
   "name": "THARAN",
   "currency": "USD"
  },
  "projects": [
   {
    "id": "<project:iOS>",
    "name": "iOS"
   },
   {
    "id": "<project:US Ads>",
    "name": "US Ads"
   },
   {
    "id": "<project:Web App>",
    "name": "Web App"
   }
  ],
  "summary_30d": {
   "from": "2026-08-20",
   "to": "2026-09-18",
   "revenue_minor": 2228800,
   "costs": {
    "planned_minor": 636253,
    "reserved_minor": 500000,
    "actual_minor": 997430,
    "variance_minor": 361177
   },
   "result_minor": 1231370,
   "recurring_burn_minor": 997430,
   "runway_days": 114,
   "revenue_delta_minor": 0,
   "top_cost_changes": [
    {
     "category": "ads",
     "actual_minor": 658767,
     "delta_minor": 29004
…
  1. Subskrypcje z wolnymi miejscami.
{
 "data": [
  {
   "subscription_name": "Claude Team",
   "id": "<id-43>",
   "subscription_id": "<subscription:Claude Team>",
   "unit": "seats",
   "total": 5,
   "used": 4,
   "free": 1,
   "utilization": 0.8,
   "usages": [
    {
     "business_id": "<business:klima>",
     "personal": false,
     "project_id": null,
     "used": 1
    },
    {
     "business_id": "<business:tharan>",
     "personal": false,
     "project_id": null,
     "used": 3
    }
   ]
  },
  {
   "subscription_name": "Figma",
   "id": "<id-44>",
   "subscription_id": "<subscription:Figma>",
   "unit": "seats",
   "total": 4,
   "used": 3,
   "free": 1,
   "utilization": 0.75,
   "usages": [
    {
     "business_id": "<business:clothing>",
     "personal": false,
     "project_id": null,
…
  1. Prognoza 30 dni.
{
 "data": {
  "currency": "USD",
  "from": "2026-09-18",
  "to": "2026-10-18",
  "horizon_days": 30,
  "opening_cash_minor": 3800000,
  "cash_as_of": "2026-09-18T…Z",
  "projected_in_minor": 2288676,
  "projected_out_minor": 625903,
  "net_minor": 1662773,
  "closing_cash_minor": 5462773,
  "min_cash_minor": 3778671,
  "revenue_trend_factor": 1.0088,
  "runway_days": null,
  "components": [
   {
    "key": "baseline_other",
    "direction": "out",
    "amount_minor": 316697,
    "data_class": "estimated"
   },
   {
    "key": "planned_expenses",
    "direction": "out",
    "amount_minor": 7535,
    "data_class": "estimated"
   },
   {
    "key": "renewals",
    "direction": "out",
    "amount_minor": 24391,
    "data_class": "estimated"
   },
   {
    "key": "reservations",
    "direction": "out",
    "amount_minor": 277280,
    "data_class": "planned"
   },
…
  1. Pierwsza decyzja w dzienniku.
{
 "status": "executed",
 "data": {
  "id": "<id-50>",
  "owner_id": "<id-51>",
  "type": "agent_action",
  "state": "actual",
  "status": "confirmed",
  "amount_minor": 0,
  "currency": "USD",
  "direction": null,
  "business_id": "<business:tharan>",
  "personal": false,
  "project_id": null,
  "occurred_on": "2026-09-18",
  "category": null,
  "description": "Review subscriptions weekly",
  "subscription_id": null,
  "reservation_id": null,
  "integration_id": null,
  "external_id": null,
  "supersedes_event_id": null,
  "provenance": {
   "reason": "journal",
   "source": {
    "type": "AI_AGENT",
    "agent_id": "<id-19>",
    "approval_id": null,
    "external_id": null,
    "integration_id": null
   },
   "confidence": 0.9,
   "data_class": "agent_reported",
   "recorded_at": "2026-09-18T…Z"
  },
  "payload": {
   "action": "create_decision",
   "params": {
    "refs": [],
    "title": "Review subscriptions weekly",
…

#Oczekiwane approvals

Zmiana podziału kosztu subskrypcji (allocate_shared_expense) i nowe subskrypcje (create_recurring_expense) zawsze kończą się jako Approval (202): Owner widzi kwotę, podział i powód w Approval Center. request_permission i request_data też są prośbami (202).

#Czego agent nie zrobi

Nie zapisze wydatku ani rezerwacji (brak expenses i budget_reserve), nie zmieni budżetów Ads, nie zobaczy personal (brak @personal), nie wykona żadnej zmiany subskrypcji bez zgody.