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
- 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",
…
- 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",
…
- 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
…
- 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,
…
- 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"
},
…
- 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.