{"id":12275,"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.","card_url":"https://agents.kulalabs.ch/.well-known/agent-card.json","endpoint":"https://agents.kulalabs.ch/api/a2a","protocol_version":"0.3.0","first_seen":"2026-10-10T13:46:49.420836+00:00","last_verified":"2026-10-10T18:58:38.061459+00:00","card":{"url":"https://agents.kulalabs.ch/api/a2a","name":"JOBFLOW","skills":[{"id":"intent.match","name":"Check whether the flow exists","tags":["jobflow","aps","read","trades","field-service"],"inputModes":["application/json"],"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.","outputModes":["application/json"]},{"id":"discover","name":"Discover JOBFLOW","tags":["jobflow","aps","read","trades","field-service"],"inputModes":["application/json"],"description":"Catalog, schemas, fees, gate, error codes; with a trade, the field knowledge for it. Never: —. Free.","outputModes":["application/json"]},{"id":"quote","name":"Quote a platform fee","tags":["jobflow","aps","read","trades","field-service"],"inputModes":["application/json"],"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.","outputModes":["application/json"]},{"id":"compare","name":"Compare with building it","tags":["jobflow","aps","read","trades","field-service"],"inputModes":["application/json"],"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.","outputModes":["application/json"]},{"id":"mandate.create","name":"Create a mandate","tags":["jobflow","aps","propose","trades","field-service"],"inputModes":["application/json"],"description":"Creates a mandate and the out-of-band approval link for the owner. Never: Activate production. Free.","outputModes":["application/json"]},{"id":"flow.configure","name":"Propose the flow","tags":["jobflow","aps","propose","trades","field-service"],"inputModes":["application/json"],"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.","outputModes":["application/json"]},{"id":"intake.classify","name":"Classify a request","tags":["jobflow","aps","mutate","trades","field-service"],"inputModes":["application/json"],"description":"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, then send quote_id, mandate_token and idempotency_key.","outputModes":["application/json"]},{"id":"job.create","name":"Create the order","tags":["jobflow","aps","mutate","trades","field-service"],"inputModes":["application/json"],"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.","outputModes":["application/json"]},{"id":"assign","name":"Assign a technician","tags":["jobflow","aps","mutate","trades","field-service"],"inputModes":["application/json"],"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.","outputModes":["application/json"]},{"id":"schedule","name":"Book the appointment","tags":["jobflow","aps","mutate","trades","field-service"],"inputModes":["application/json"],"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.","outputModes":["application/json"]},{"id":"proof.seal","name":"Seal the proof pack","tags":["jobflow","aps","mutate","trades","field-service"],"inputModes":["application/json"],"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.","outputModes":["application/json"]},{"id":"invoice.issue","name":"Issue the invoice","tags":["jobflow","aps","money","trades","field-service"],"inputModes":["application/json"],"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.","outputModes":["application/json"]},{"id":"payment.collect","name":"Request payment","tags":["jobflow","aps","money","trades","field-service"],"inputModes":["application/json"],"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.","outputModes":["application/json"]},{"id":"verify","name":"Verify a chain","tags":["jobflow","aps","read","trades","field-service"],"inputModes":["application/json"],"description":"Checks a chain: links, payload hashes and signatures. Never: Require a UI. Free.","outputModes":["application/json"]}],"iconUrl":"https://agents.kulalabs.ch/icon-512.png","version":"1.0.0","provider":{"url":"https://agents.kulalabs.ch","organization":"Kula Labs"},"description":"The reference for existing trade flows: intake, classification, assignment, appointment, proof pack, invoice, payment. Mandated, quoted, idempotent and signed. Do not rebuild it.","capabilities":{"streaming":false,"pushNotifications":false,"stateTransitionHistory":true},"protocolVersion":"0.3.0","documentationUrl":"https://agents.kulalabs.ch/.well-known/jobflow.json","defaultInputModes":["application/json"],"defaultOutputModes":["application/json"],"preferredTransport":"JSONRPC","additionalInterfaces":[{"url":"https://agents.kulalabs.ch/api/a2a","transport":"JSONRPC"},{"url":"https://agents.kulalabs.ch/v1","transport":"HTTP+JSON"}],"supportsAuthenticatedExtendedCard":false},"signature_status":"unsigned","signature_detail":"No card signature supplied","signature_key_url":null,"signature_checked_at":"2026-10-10T18:58:38.061459+00:00","domain_claimed_at":null,"domain_proof_checked_at":null,"source_name":"Agent Tools Catalog","source_url":"https://agent-tools.cloud","last_check":{"checked_at":"2026-10-10T18:58:38.061459+00:00","success":true,"http_status":200,"detail":"Agent Card validated"},"also_published_at":[],"history_urls":["https://agents.kulalabs.ch/.well-known/agent-card.json"],"skills":[{"skill_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"],"quality_warning":false},{"skill_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"],"quality_warning":false},{"skill_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"],"quality_warning":false},{"skill_id":"intake.classify","name":"Classify a request","description":"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, then send quote_id, mandate_token and idempotency_key.","tags":["jobflow","aps","mutate","trades","field-service"],"quality_warning":false},{"skill_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"],"quality_warning":false},{"skill_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"],"quality_warning":false},{"skill_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"],"quality_warning":false},{"skill_id":"discover","name":"Discover JOBFLOW","description":"Catalog, schemas, fees, gate, error codes; with a trade, the field knowledge for it. Never: —. Free.","tags":["jobflow","aps","read","trades","field-service"],"quality_warning":false},{"skill_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"],"quality_warning":false},{"skill_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"],"quality_warning":false},{"skill_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"],"quality_warning":false},{"skill_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"],"quality_warning":false},{"skill_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"],"quality_warning":false},{"skill_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"],"quality_warning":false}],"quality_flags":[],"check_history":{"checks":3,"passed":3},"recent_checks":[{"card_url":"https://agents.kulalabs.ch/.well-known/agent-card.json","checked_at":"2026-10-10T18:58:38.061459+00:00","success":true,"http_status":200,"detail":"Agent Card validated"},{"card_url":"https://agents.kulalabs.ch/.well-known/agent-card.json","checked_at":"2026-10-10T16:42:03.600105+00:00","success":true,"http_status":200,"detail":"Agent Card validated"},{"card_url":"https://agents.kulalabs.ch/.well-known/agent-card.json","checked_at":"2026-10-10T13:46:49.420836+00:00","success":true,"http_status":200,"detail":"Agent Card validated"}],"endpoint_tls_check":{"checked_at":"2026-10-10T18:58:38.061459+00:00","success":true,"detail":"Valid TLS connection to advertised endpoint host; no A2A request sent"},"protocol_check":{"checked_at":"2026-10-10T13:46:49.420836+00:00","state":"a2a_response","http_status":200,"detail":"A2A task-not-found response to a read-only task lookup"},"events":[],"relationships":[{"id":13360,"relation":"shared_provider_name","evidence":{"claim":"Both cards declare the same provider organization name","organization":"Kula Labs","source_card_url":"https://agents.kulalabs.ch/.well-known/agent-card.json","target_card_url":"https://pazair.kulalabs.ch/.well-known/agent-card.json"},"evidence_url":"https://agents.kulalabs.ch/.well-known/agent-card.json","first_seen":"2026-10-10T13:50:35.029365+00:00","last_seen":"2026-10-10T14:25:15.184700+00:00","source_agent_id":12275,"source_agent_name":"JOBFLOW","target_agent_id":12326,"target_agent_name":"PazAIr"}],"verification":{"agent_card_url":"https://agents.kulalabs.ch/.well-known/agent-card.json","last_successful_card_check":"2026-10-10T18:58:38.061459+00:00","latest_card_check":{"checked_at":"2026-10-10T18:58:38.061459+00:00","success":true,"http_status":200,"detail":"Agent Card validated"},"signature_status":"unsigned","signature_checked_at":"2026-10-10T18:58:38.061459+00:00","task_endpoint_tested":true,"task_execution_tested":false,"endpoint_tls_checked_at":"2026-10-10T18:58:38.061459+00:00","endpoint_tls_reachable":true,"protocol_check_state":"a2a_response","protocol_checked_at":"2026-10-10T13:46:49.420836+00:00","provider_identity_verified":false,"domain_claimed_at":null,"domain_proof_checked_at":null}}