Install
$ agentstack add skill-camunda-skills-camunda-bpmn ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ● Shell / process execution Used
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
Camunda BPMN Modeling
Create and edit executable BPMN 2.0 processes for Camunda 8.8+. Generates valid XML with Zeebe extensions and diagram coordinates.
Prerequisites
- Camunda 8.8+ cluster (local via c8run, SaaS, or Self-Managed)
- c8ctl CLI installed and configured (
c8ctl add profile) — providesc8ctl bpmn lint - c8ctl ≥ 3.2.0 for
bpmn format. If the command is unavailable, ask the user to upgrade:npm install -g @camunda8/cli
Cross-References
- camunda-feel: Use for FEEL expressions in gateway conditions, input/output mappings, timer definitions
- camunda-dmn: Use for authoring the DMN decision behind a business rule task — ``
- camunda-forms: Use for creating Camunda Form JSON schemas linked to user tasks
- camunda-connectors: Use for configuring pre-built connectors (REST, Slack, Kafka, etc.) via element templates
- camunda-development: Use to decide whether a service task should be backed by an OOTB connector, a custom connector, or a job worker
- camunda-job-workers: Use to implement the handler code that a service task's
zeebe:taskDefinition typeactivates - camunda-connectors-development: Use to build a custom connector (JSON-only template or Java SDK) that attaches to a service task or event element
- camunda-process-test: Use for testing processes against an embedded Zeebe engine
- camunda-process-mgmt: Use for deploying to a cluster and running instances
- camunda-ai-agents: Use when modeling an AI agent — ad-hoc subprocess hosting tools driven by the AI Agent connector
Instructions
XML Structure
When writing a BPMN file from scratch, follow the canonical bpmn-js style — single-line `, two-space indent, no blank lines between siblings, self-closing form. Otherwise any round-trip through Camunda Modeler, Web Modeler, or c8ctl element-template apply reformats the file, breaking Edit` matches and adding diff noise. Rules and a worked skeleton: [references/canonical-style.md](references/canonical-style.md).
The zeebe namespace, isExecutable="true", and modeler:executionPlatform="Camunda Cloud" are mandatory — without them, Camunda won't recognize the process correctly.
The ` block is also mandatory, not optional polish: c8ctl bpmn lint flags missing DI (no-bpmndi) as an error, and Modeler can't render a process without it. Every flow element needs a matching , every a `. Coordinates, sizes, and waypoint conventions: [references/layout-rules.md](references/layout-rules.md). Note that Zeebe deploys a DI-less BPMN happily — the missing DI surfaces only at lint and in Modeler, so don't rely on a successful deploy as evidence the file is well-formed.
Symbol Encoding
Always encode special characters in XML attribute values:
- `
→>,&→&,"→",'→'`
Core Modeling Rules
Start/End Events:
- Every path starts with a Start Event (no incoming flows) and reaches an End Event (no outgoing flows)
- Use None start event for most processes; Message for external triggers; Timer for scheduled execution
Tasks — one atomic action per task:
- User Task: Human interaction. Use the Camunda user task implementation: include `
and link the form via. Assign with. SettingformId="X"makesX.forma required deliverable — author it via **camunda-forms** in the same step, or flag the gap explicitly in your final message.c8ctl bpmn lintchecks the attribute is present, not that the file resolves. Do NOT write the deprecated job-worker variant (no,formKeyinstead offormId`) — see [references/zeebe-extensions.md](references/zeebe-extensions.md) § Form Definition. - Service Task: Automated work. Requires ``. The type must exactly match worker registration (case-sensitive). When backed by an out-of-the-box connector, apply the template via camunda-connectors — don't hand-write the connector input mappings.
- Script Task: Inline FEEL expression. Uses ``.
- Business Rule Task: DMN evaluation. Uses `
.decisionId="X"makes the correspondingX.dmn` a required deliverable — author it via camunda-dmn. - Name tasks with verb + object pattern: "Review invoice", "Send notification"
Gateways:
- Exclusive (XOR): Exactly one path taken. Set
defaultattribute for the fallback flow. Label condition flows. - Parallel (AND): All paths taken concurrently. Always use a matching join gateway to synchronize.
- Inclusive (OR): One or more paths. Also requires a matching join.
- Fix fake-join warnings from
c8ctl bpmn lint— join gateways must match their fork type.
Sequence Flows:
- Conditions use FEEL expressions with
=prefix:
``xml =amount > 1000 ``
FEEL Expressions in BPMN — all FEEL must be prefixed with =:
- Gateway conditions:
=riskLevel = "HIGH" - Timer durations:
="PT7D"(plainPT7Dis rejected) - Input/output mappings:
=customer.name
Anything beyond a simple variable reference (function calls, operators, context literals, for / every / some) — validate via camunda-feel before committing.
IDs: Use descriptive PascalCase — ReviewInvoice, AmountExceedsLimit, Flow_ToApproval
Input/Output Mappings
Create local variables and control variable propagation:
See [references/zeebe-extensions.md](references/zeebe-extensions.md) for detailed variable scoping, propagation rules, and examples.
Working with Existing BPMN Files
BPMN files can be large. Follow these rules:
- Use Grep to find elements — never read entire files unnecessarily
- Use Edit for modifications — locate the exact section with Grep first, then make precise edits
- Read specific sections only — use offset/limit when needed
Hygiene
- Follow canonical bpmn-js style — see [references/canonical-style.md](references/canonical-style.md)
- Self-close empty elements with `
(single space before/>`) - Keep unique, descriptive IDs
- Include BPMN DI section for visual layout (see [references/layout-rules.md](references/layout-rules.md))
- Include `
and` flow references on elements
Lint loop — structural exit gate
A BPMN edit is not structurally done until c8ctl bpmn lint reports zero errors AND zero warnings. Treat this as the closing structural step of every BPMN task — generation, modification, refactor, or merge.
- Run the linter against the file you touched:
``bash c8ctl bpmn lint path/to/process.bpmn ``
c8ctl bpmn lint auto-detects the Camunda execution platform version from the BPMN file and applies sensible Camunda defaults. If a .bpmnlintrc is present in the project, it is used instead. Stdin also works: cat process.bpmn | c8ctl bpmn lint.
- If output is non-empty, fix every reported issue and run the linter again. Common categories:
- no-overlapping-elements — adjust DI coordinates per [references/layout-rules.md](references/layout-rules.md) spacing rules
- fake-join — make join gateways match their fork type (XOR forks → XOR joins, AND forks → AND joins)
- label-required — name every labeled element
- no-disconnected — ensure every element is on a complete start-to-end path
- no-implicit-split — exclusive gateway outgoing flows need conditions + a default
- superfluous-gateway — drop pass-through gateways with one in, one out
- Loop until the linter is clean. Do not declare the task structurally done while warnings remain — silently-failing BPMN deploys to the cluster and surfaces as runtime incidents.
If a warning is genuinely a false positive, suppress it explicitly in a project-level .bpmnlintrc and flag the suppression in your final message — never silently ignore.
Behavioural validation
Lint catches structure, not runtime behaviour (FEEL errors, missing workers, unreachable end events). After lint is clean, validate by running the process: prefer camunda-process-test for embedded-engine feedback without a cluster, or fall back to camunda-process-mgmt to deploy and run an instance.
References
For detailed reference material, read from references/:
- [element-catalog.md](references/element-catalog.md) — complete BPMN element types with Camunda/Zeebe attributes (events, tasks, gateways, subprocesses)
- [zeebe-extensions.md](references/zeebe-extensions.md) — input/output mappings, variable scoping, task definitions, form definitions, secrets
- [layout-rules.md](references/layout-rules.md) — DI coordinate management, element sizes, spacing rules for diagram layout
- [canonical-style.md](references/canonical-style.md) — canonical bpmn-js XML style: tag layout, attribute order, self-closing form, why hand-formatting drifts
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: camunda
- Source: camunda/skills
- License: Apache-2.0
- Homepage: https://camunda.com
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.