From camunda-skills
Guides selection of Camunda 8 integration patterns (OOTB connectors, custom connectors, job workers) based on requirements, then routes to focused build skills.
How this skill is triggered — by the user, by Claude, or both
Slash command
/camunda-skills:camunda-developmentThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Decide between out-of-the-box connectors, custom connector templates, custom Java connectors via the Connectors SDK, and job workers before writing any integration code for Camunda 8.8+. This skill is a thin orientation layer — every path it identifies has its own focused build skill.
Decide between out-of-the-box connectors, custom connector templates, custom Java connectors via the Connectors SDK, and job workers before writing any integration code for Camunda 8.8+. This skill is a thin orientation layer — every path it identifies has its own focused build skill.
Walk the questions top-down. Stop at the first one whose answer is yes.
Does an out-of-the-box (OOTB) connector cover the integration?
Search the local catalog with c8ctl element-template search "<keyword>" (see camunda-connectors). If a template matches the target system, use it as-is. Stop.
Is the integration a single API call over a common protocol (REST, SOAP, GraphQL, Kafka, RabbitMQ, AWS SQS/SNS, …), and do you want a reusable, modeller-friendly building block? → Path A — JSON-only template on a protocol connector. No Java, no separate runtime. Customise the protocol connector's published template: pre-fill the URL with FEEL, hide method / base URL / auth, expose only the domain-specific properties. See camunda-connectors-development.
Is the logic more than a single API call (proprietary protocol, multi-step orchestration with state, non-HTTP I/O, custom inbound trigger) and is the team on Java? → Path B — Custom Java connector via the Connectors SDK. Annotation-driven, auto-generated element template, built-in secrets / intrinsic functions / Camunda Documents. Works for outbound and inbound. See camunda-connectors-development.
Otherwise — non-Java stack, or the logic already lives in your application, or you need low-level Zeebe APIs (job streaming, custom activation). → Path C — Job worker. Implement the handler in your app using one of the official SDKs (Java, Spring Boot, TypeScript covered here; other SDKs follow the same pattern). If you also want a modeller UI for the worker, hand-author an element template JSON. See camunda-job-workers.
| Aspect | Job worker | Connector (SDK) |
|---|---|---|
| Language | Any official SDK (Java, Spring Boot, TypeScript, …) | Java only |
| Delivery | Tied to the application that runs it | Library, deployable into any Connector Runtime |
| Reusability across environments | Hard — re-wire per project | Easy — same JAR, drop into any runtime |
| Focus | Full Zeebe client (activate, complete, fail, retries) | Pure business logic; runtime handles Zeebe wiring |
| Secrets | Roll your own (env vars, secret manager) | Built-in {{secrets.NAME}} resolution |
| Low-level Zeebe APIs | Yes | No |
| Modeller UI for the task | Optional — hand-authored element template JSON | Standardised — generated from @ElementTemplate |
| Element template auto-generation | None — author JSON by hand | Maven plugin generates it from annotations |
Intrinsic functions (getText, base64, …) | No | Yes |
| Camunda Documents handling | Manual | Built-in |
| Inbound triggers | No (outbound jobs only) | Yes (Webhook / Subscription / Polling) |
The table is the why behind the matrix: connectors trade language reach for reusability and a richer surface; workers trade that surface for language choice and direct Zeebe access.
"Notify Slack when an order is approved. The team is on Node.js."
c8ctl element-template search "slack" returns io.camunda.connectors.Slack.v1. The bot-message operation covers a one-off notification with no custom UI requirement. → Use it. Stop here."Submit a job to our internal HTTP pricing API. The team is on Java. We want a reusable connector with only
customerId,productSku, andquantityexposed in Modeler."
customerId, hide the method / base URL / auth fields, expose only the three domain properties. JSON-only; nothing to deploy as a runtime. See camunda-connectors-development."Periodically pull invoices from an SFTP server and start a process per file. Team is on Java."
"Score a customer record using the team's existing Node.js scoring service."
score-customer job via the TypeScript SDK. See camunda-job-workers.Workers and connectors are a per-task choice, not a per-project one. A single Spring Boot application can host job workers (via the Camunda Spring Boot Starter) and an embedded connector runtime (via spring-boot-starter-camunda-connectors) side by side — the Connectors SDK itself builds on the Spring Boot Starter. Pick the right shape for each integration; you do not need to commit the whole project to one path.
Inbound triggers — events flowing into a process from an external system — are implemented only via the Connectors SDK. There is no job-worker path for inbound: job workers exclusively handle outbound jobs the engine has already activated.
The SDK supports three inbound flavours, and the choice drives which BPMN element types your element template applies to (message-start event, intermediate catch event, boundary event, …):
If the integration is inbound, paths A and B in the decision matrix are the only options; path C does not apply. See camunda-connectors-development.
The decision matrix points at a path; that path needs a working local toolchain. See references/prerequisites.md for the per-workflow overview (which tools each path expects — Node.js, JRE, JDK + Maven, Docker), OS-agnostic verification one-liners, and the cross-cutting gotchas (JAVA_HOME vs PATH, Docker daemon vs CLI, why not to pre-pull camunda/zeebe:latest). Specific minimum versions live in the linked skill for each path — they move with each Camunda release.
npx claudepluginhub camunda/skills --plugin camunda-skillsGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.