All AEM as a Cloud Service skills: component development, Workflow model design, development, triggering, launchers, debugging, and triaging, Dispatcher config authoring, advisory, incident response, performance tuning, and security hardening, Rapid Development Environment (RDE) deployment, log inspection, snapshots, and troubleshooting via `aio aem rde`, Jackrabbit Oak query/index tuning (property, Lucene index definitions), and extracting/inventorying JCR queries (XPath, SQL2, QueryBuilder) across a codebase.
85%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Low
Low-risk findings worth noting
This skill teaches you how to configure and deploy Workflow Launchers that automatically start workflows in response to JCR content changes on AEM as a Cloud Service.
/libsA Workflow Launcher (cq:WorkflowLauncher) is a JCR node that registers a JCR event listener. When a node event occurs at a path matching the launcher's glob pattern, node type, and conditions, the Granite Workflow Engine enqueues a workflow start.
The listener is managed by WorkflowLauncherListener (an OSGi service). It reads all active launcher configurations at startup and re-evaluates them when configurations change.
JCR Event (NODE_ADDED / NODE_MODIFIED / NODE_REMOVED)
↓
WorkflowLauncherListener (OSGi EventListener)
↓ matches: glob, nodetype, event type, conditions
Workflow Engine: enqueue WorkflowData
↓
Workflow Instance created at /var/workflow/instances/| Property | Type | Description |
|---|---|---|
eventType | Long | 1 = NODE_ADDED, 2 = NODE_MODIFIED, 4 = NODE_REMOVED, 8 = PROPERTY_ADDED, 16 = PROPERTY_CHANGED, 32 = PROPERTY_REMOVED |
glob | String | Glob pattern matched against the event node path (e.g., /content/dam(/.*)?) |
nodetype | String | JCR node type the event node must be (e.g., dam:AssetContent) |
conditions | String[] | Additional JCR property conditions on the event node |
workflow | String | Runtime path of the workflow model /var/workflow/models/<id> |
enabled | Boolean | Whether the launcher is active |
description | String | Human-readable description |
excludeList | String[] | Workflow model IDs to exclude |
runModes | String[] | Restrict to specific run modes (e.g., author) |
On Cloud Service, /libs is immutable. Store launcher configurations at:
/conf/global/settings/workflow/launcher/config/<launcher-name>Maven project location:
ui.content/src/main/content/jcr_root/conf/global/settings/workflow/launcher/config/
my-custom-launcher/
.content.xmlFilter in filter.xml:
<filter root="/conf/global/settings/workflow/launcher/config/my-custom-launcher"/>Node structure (.content.xml):
<?xml version="1.0" encoding="UTF-8"?>
<jcr:root
xmlns:jcr="http://www.jcp.org/jcr/1.0"
xmlns:cq="http://www.day.com/jcr/cq/1.0"
jcr:primaryType="cq:WorkflowLauncher"
eventType="{Long}1"
glob="/content/dam(/.*)?/jcr:content/renditions/original"
nodetype="nt:file"
workflow="/var/workflow/models/dam/update_asset"
enabled="{Boolean}true"
description="Start DAM update workflow on new original rendition upload"
runModes="[author]"/>To disable or modify an OOTB launcher (e.g., dam_update_asset_create):
/libs/settings/workflow/launcher/config/dam_update_asset_create to /conf/global/settings/workflow/launcher/config/dam_update_asset_createenabled="{Boolean}false" to disable it)| Launcher | Trigger | Workflow |
|---|---|---|
dam_update_asset_create | NODE_ADDED on dam:AssetContent under /content/dam | DAM Update Asset |
dam_update_asset_modify | NODE_MODIFIED on asset properties | DAM Update Asset |
dam_xmp_writeback | NODE_MODIFIED on rendition | DAM Writeback |
update_page_version_* | Node events on cq:Page jcr:content | Page Version Create |
To listen for both ADD and MODIFY, combine event types:
eventType="{Long}3" <!-- 1 (ADD) + 2 (MODIFY) = 3 -->The conditions array lets you add JCR property conditions on the triggering node:
conditions="[property=cq:type,value=publicationevent,type=STRING]"Condition format: property=<name>,value=<value>,type=<JCR_TYPE> (type is optional, defaults to STRING).
Use runModes to restrict:
runModes="[author]" <!-- only fires on Author -->
runModes="[publish]" <!-- only fires on Publish -->Omit runModes to fire on all run modes.
/conf/global/settings/workflow/launcher/config/ in CRXDE Lite for your deployed configsWorkflowLauncherListener service propertiescurl -u admin:admin http://localhost:4502/etc/workflow/launcher.json| Reference | What It Covers |
|---|---|
references/workflow-launchers/launcher-config-reference.md | Full property spec and XML templates |
references/workflow-launchers/condition-patterns.md | Common condition patterns, glob syntax, event type codes |
references/workflow-foundation/architecture-overview.md | Granite Workflow Engine overview |
references/workflow-foundation/cloud-service-guardrails.md | Cloud Service constraints for config paths |
references/workflow-foundation/jcr-paths-reference.md | Where launchers live in the JCR |
.tessl-plugin
skills
aem-rde
aem-workflow
code-assessment
content-distribution
create-component
assets
references
dispatcher
incident-response
references
dispatcher-foundation
performance-tuning
references
dispatcher-foundation
security-hardening
references
dispatcher-foundation
technical-advisory
references
dispatcher-foundation
workflow-orchestrator
references
dispatcher-foundation
ensure-agents-md
references
migration
references
dispatcher
legacy-ui
template-modernization
validation
scripts
dispatcher-tool
validate-migration