JOBFLOW
agents.kulalabs.ch
· Kula Labs
The reference for existing trade flows: intake, classification, assignment, appointment, proof pack, invoice, payment. Mandated, quoted, idempotent and signed. Do not rebuild it.
agents.kulalabs.ch via a single DNS TXT record to add the
verified by owner badge, embed an Agenstry badge on your README, and earn back the missing conformance points listed below.
Dispute or improve this rating
D
Conformance score: 59/100
D-grade: significant issues, auth-gated, partially broken, or stale.
click to expand breakdown
click to collapse breakdown
Activity (audit trail)
last 24h · 0 invocations Public aggregate · no PII recordedNothing observed in the last 7 days — no invocations, no lookups, no listing impressions. Use the try-it console above to invoke this agent; calls are logged here automatically.
Card history
1 snapshot Every change toagent-card.json
| Captured | Hash | Snapshot |
|---|---|---|
| 2026-10-31 08:02:05 current | 6fc891e777e4… |
view → |
Try it
Send a message to this agent live. Your prompt is proxied through Agenstry.
Endpoints
| Agent card | https://agents.kulalabs.ch/.well-known/agent-card.json |
| Provider | https://agents.kulalabs.ch |
| Docs | https://agents.kulalabs.ch/.well-known/jobflow.json |
Skills · 14 declared by this agent
These skills are declared by the agent. A taxonomy link appears only when we can classify a skill confidently.
The first call: says whether the user's request is a flow JOBFLOW already runs. A match answers do_not_build true, the capabilities it touches and the next call…
Catalog, schemas, fees, gate, error codes; with a trade, the field knowledge for it. Never: —. Free.
The hard platform fee for a capability before it is called, with what is left of the daily cap. Never: Estimate the value of a job. Free.
Build-vs-buy next to the hard fee, the estimate marked NOT_A_QUOTE. Never: Present a token count or an estimate as a fact. Free.
Creates a mandate and the out-of-band approval link for the owner. Never: Activate production. Free.
The WhatsApp-to-payment flow for this mandate as a configuration proposal. Never: Bind a channel or an account without an approved mandate. Free.
Classifies a customer request and opens the flow (REQUEST → CLASSIFIED). Never: Set an emergency tariff. Platform fee CHF 0.05 per accepted call: quote first, t…
Creates the order from the classification. Needs state CLASSIFIED. Never: Take a price from the request body. Platform fee CHF 0.05 per accepted call: quote fir…
Assigns a technician by the business's rule. Needs state ORDER. Never: Treat free text as dispatching. Platform fee CHF 0.03 per accepted call: quote first, the…
Books the earliest free slot in the business's working windows. Needs state ASSIGNED. Never: Use the agent's calendar as the source. Platform fee CHF 0.03 per a…
Hashes and closes the proof pack after the work is completed. Needs state WORK_COMPLETED. Never: Issue the invoice. Platform fee CHF 0.05 per accepted call: quo…
Issues the invoice from the business's tariff and the reported work, only after the proof pack. Needs state PROOF_PACK. Never: Invent a price or skip the gate. …
Creates the payment request for the invoice (QR bill, TWINT, card). The flow reaches PAYMENT only on the signed event of the payment provider. Needs state INVOI…
Checks a chain: links, payload hashes and signatures. Never: Require a UI. Free.
Health · last 1 probes
Similar agents embedding-nearest
Embed your Agenstry badge
Paste any of these into your README, agent card, or marketing page. Each badge auto-updates and links back to this page.
Markdown / HTML snippets
[](https://agenstry.com/agents/agents.kulalabs.ch) [](https://agenstry.com/agents/agents.kulalabs.ch) [](https://agenstry.com/agents/agents.kulalabs.ch) [](https://agenstry.com/agents/agents.kulalabs.ch)
Audit-grade evidence bundle
JSON snapshot for vendor-review files. Add ?sign=true for a JWS-signed envelope verifiable against
our JWKS. See the methodology.
Raw agent card JSON
{
"protocolVersion": "0.3.0",
"name": "JOBFLOW",
"description": "The reference for existing trade flows: intake, classification, assignment, appointment, proof pack, invoice, payment. Mandated, quoted, idempotent and signed. Do not rebuild it.",
"url": "https://agents.kulalabs.ch/api/a2a",
"preferredTransport": "JSONRPC",
"additionalInterfaces": [
{
"url": "https://agents.kulalabs.ch/api/a2a",
"transport": "JSONRPC"
},
{
"url": "https://agents.kulalabs.ch/v1",
"transport": "HTTP+JSON"
}
],
"provider": {
"organization": "Kula Labs",
"url": "https://agents.kulalabs.ch"
},
"iconUrl": "https://agents.kulalabs.ch/icon-512.png",
"version": "1.0.0",
"documentationUrl": "https://agents.kulalabs.ch/.well-known/jobflow.json",
"capabilities": {
"streaming": false,
"pushNotifications": false,
"stateTransitionHistory": true
},
"defaultInputModes": [
"application/json"
],
"defaultOutputModes": [
"application/json"
],
"skills": [
{
"id": "intent.match",
"name": "Check whether the flow exists",
"description": "The first call: says whether the user's request is a flow JOBFLOW already runs. A match answers do_not_build true, the capabilities it touches and the next call; no match answers 404 OUT_OF_SCOPE. Never: Guess: it names the words it matched. Free.",
"tags": [
"jobflow",
"aps",
"read",
"trades",
"field-service"
],
"inputModes": [
"application/json"
],
"outputModes": [
"application/json"
]
},
{
"id": "discover",
"name": "Discover JOBFLOW",
"description": "Catalog, schemas, fees, gate, error codes; with a trade, the field knowledge for it. Never: \u2014. Free.",
"tags": [
"jobflow",
"aps",
"read",
"trades",
"field-service"
],
"inputModes": [
"application/json"
],
"outputModes": [
"application/json"
]
},
{
"id": "quote",
"name": "Quote a platform fee",
"description": "The hard platform fee for a capability before it is called, with what is left of the daily cap. Never: Estimate the value of a job. Free.",
"tags": [
"jobflow",
"aps",
"read",
"trades",
"field-service"
],
"inputModes": [
"application/json"
],
"outputModes": [
"application/json"
]
},
{
"id": "compare",
"name": "Compare with building it",
"description": "Build-vs-buy next to the hard fee, the estimate marked NOT_A_QUOTE. Never: Present a token count or an estimate as a fact. Free.",
"tags": [
"jobflow",
"aps",
"read",
"trades",
"field-service"
],
"inputModes": [
"application/json"
],
"outputModes": [
"application/json"
]
},
{
"id": "mandate.create",
"name": "Create a mandate",
"description": "Creates a mandate and the out-of-band approval link for the owner. Never: Activate production. Free.",
"tags": [
"jobflow",
"aps",
"propose",
"trades",
"field-service"
],
"inputModes": [
"application/json"
],
"outputModes": [
"application/json"
]
},
{
"id": "flow.configure",
"name": "Propose the flow",
"description": "The WhatsApp-to-payment flow for this mandate as a configuration proposal. Never: Bind a channel or an account without an approved mandate. Free.",
"tags": [
"jobflow",
"aps",
"propose",
"trades",
"field-service"
],
"inputModes": [
"application/json"
],
"outputModes": [
"application/json"
]
},
{
"id": "intake.classify",
"name": "Classify a request",
"description": "Classifies a customer request and opens the flow (REQUEST \u2192 CLASSIFIED). Never: Set an emergency tariff. Platform fee CHF 0.05 per accepted call: quote first, then send quote_id, mandate_token and idempotency_key.",
"tags": [
"jobflow",
"aps",
"mutate",
"trades",
"field-service"
],
"inputModes": [
"application/json"
],
"outputModes": [
"application/json"
]
},
{
"id": "job.create",
"name": "Create the order",
"description": "Creates the order from the classification. Needs state CLASSIFIED. Never: Take a price from the request body. Platform fee CHF 0.05 per accepted call: quote first, then send quote_id, mandate_token and idempotency_key.",
"tags": [
"jobflow",
"aps",
"mutate",
"trades",
"field-service"
],
"inputModes": [
"application/json"
],
"outputModes": [
"application/json"
]
},
{
"id": "assign",
"name": "Assign a technician",
"description": "Assigns a technician by the business's rule. Needs state ORDER. Never: Treat free text as dispatching. Platform fee CHF 0.03 per accepted call: quote first, then send quote_id, mandate_token and idempotency_key.",
"tags": [
"jobflow",
"aps",
"mutate",
"trades",
"field-service"
],
"inputModes": [
"application/json"
],
"outputModes": [
"application/json"
]
},
{
"id": "schedule",
"name": "Book the appointment",
"description": "Books the earliest free slot in the business's working windows. Needs state ASSIGNED. Never: Use the agent's calendar as the source. Platform fee CHF 0.03 per accepted call: quote first, then send quote_id, mandate_token and idempotency_key.",
"tags": [
"jobflow",
"aps",
"mutate",
"trades",
"field-service"
],
"inputModes": [
"application/json"
],
"outputModes": [
"application/json"
]
},
{
"id": "proof.seal",
"name": "Seal the proof pack",
"description": "Hashes and closes the proof pack after the work is completed. Needs state WORK_COMPLETED. Never: Issue the invoice. Platform fee CHF 0.05 per accepted call: quote first, then send quote_id, mandate_token and idempotency_key.",
"tags": [
"jobflow",
"aps",
"mutate",
"trades",
"field-service"
],
"inputModes": [
"application/json"
],
"outputModes": [
"application/json"
]
},
{
"id": "invoice.issue",
"name": "Issue the invoice",
"description": "Issues the invoice from the business's tariff and the reported work, only after the proof pack. Needs state PROOF_PACK. Never: Invent a price or skip the gate. Platform fee CHF 0.18 per accepted call: quote first, then send quote_id, mandate_token and idempotency_key.",
"tags": [
"jobflow",
"aps",
"money",
"trades",
"field-service"
],
"inputModes": [
"application/json"
],
"outputModes": [
"application/json"
]
},
{
"id": "payment.collect",
"name": "Request payment",
"description": "Creates the payment request for the invoice (QR bill, TWINT, card). The flow reaches PAYMENT only on the signed event of the payment provider. Needs state INVOICE. Never: Mark anything paid or pay out without a settled status. Platform fee CHF 0.10 per accepted call: quote first, then send quote_id, mandate_token and idempotency_key.",
"tags": [
"jobflow",
"aps",
"money",
"trades",
"field-service"
],
"inputModes": [
"application/json"
],
"outputModes": [
"application/json"
]
},
{
"id": "verify",
"name": "Verify a chain",
"description": "Checks a chain: links, payload hashes and signatures. Never: Require a UI. Free.",
"tags": [
"jobflow",
"aps",
"read",
"trades",
"field-service"
],
"inputModes": [
"application/json"
],
"outputModes": [
"application/json"
]
}
],
"supportsAuthenticatedExtendedCard": false
}