Workflow Orchestrator — AEM as a Cloud Service
Purpose
This is the master entry point for all AEM Workflow tasks on Cloud Service — spanning both development (building workflows) and production support (debugging and triaging workflow issues). Read this skill first. It classifies the user's request and routes to the right sub-skill.
How to Use This Skill
- Read the user's request carefully
- Classify it using the Task Classifier table below
- Load the identified sub-skill's
SKILL.md and its references
- For development tasks, always load the
workflow-foundation references alongside the sub-skill references
- For production-support tasks, the debugging and triaging skills are self-contained
Task Classifier
Development Skills
| User Says / Asks |
Sub-Skill to Load |
| "Create a workflow model", "Add steps to a workflow", "Design an OR split", "I need a parallel review" |
workflow-model-design |
| "Implement a custom process step", "Write a WorkflowProcess", "Create a ParticipantStepChooser", "Dynamic participant" |
workflow-development |
| "Start a workflow from code", "Trigger a workflow via API", "Use Manage Publication with a workflow", "HTTP REST API to start a workflow" |
workflow-triggering |
| "Configure a launcher", "Auto-start on asset upload", "Launcher not firing", "cq:WorkflowLauncher", "Overlay an OOTB launcher" |
workflow-launchers |
| "How do workflows work?", "Explain workflow architecture" |
Load workflow-foundation references only |
Production Support Skills
| User Says / Asks |
Sub-Skill to Load |
| "Workflow is stuck", "Why isn't my workflow advancing?", "No work item", "Workflow failed", "Step shows error" |
workflow-debugging |
| "Task not in Inbox", "User can't see work item", "Permissions error on workflow" |
workflow-debugging |
| "Thread pool exhausted", "Auto-advancement not working", "Queue backlog", "Sling Jobs stuck" |
workflow-debugging |
| "Repository bloat", "Too many workflow instances", "Purge not working", "Stale workflows" |
workflow-debugging |
| "What workflow errors on host X?", "Workflow activity for the past N hours", "What should I collect?" |
workflow-triaging |
| "Classify this workflow ticket", "What Splunk query should I use?", "What logs do I need?" |
workflow-triaging |
| "Why did workflow X fail? Show me the error.", "Failure details for model Y" |
workflow-triaging |
Routing heuristic:
- Building/implementing workflows → development skills (
workflow-model-design, workflow-development, workflow-triggering, workflow-launchers)
- Deep troubleshooting (decision trees, config checks, thread analysis, remediation) →
workflow-debugging
- Incident classification (symptom → runbook, log patterns, Splunk, data gathering) →
workflow-triaging
- When both debugging and triaging apply, start with
workflow-triaging to classify, then workflow-debugging for resolution
Reference Loading Order
For every workflow task on Cloud Service, load in this order:
Step 1: Always load these foundation references
workflow-orchestrator/references/workflow-foundation/architecture-overview.md
workflow-orchestrator/references/workflow-foundation/api-reference.md
workflow-orchestrator/references/workflow-foundation/jcr-paths-reference.md
workflow-orchestrator/references/workflow-foundation/cloud-service-guardrails.md
workflow-orchestrator/references/workflow-foundation/quick-start-guide.md
Step 2: Load the sub-skill's SKILL.md
workflow-model-design/SKILL.md ← for model design tasks
workflow-development/SKILL.md ← for Java implementation tasks
workflow-triggering/SKILL.md ← for start/trigger tasks
workflow-launchers/SKILL.md ← for launcher config tasks
workflow-debugging/SKILL.md ← for production debugging tasks
workflow-triaging/SKILL.md ← for incident triage tasks
Step 3: Load the sub-skill's topic references
workflow-model-design:
workflow-model-design/references/workflow-model-design/step-types-catalog.md
workflow-model-design/references/workflow-model-design/model-xml-reference.md
workflow-model-design/references/workflow-model-design/model-design-patterns.md
workflow-development:
workflow-development/references/workflow-development/process-step-patterns.md
workflow-development/references/workflow-development/participant-step-patterns.md
workflow-development/references/workflow-development/variables-and-metadata.md
workflow-triggering:
workflow-triggering/references/workflow-triggering/triggering-mechanisms.md
workflow-triggering/references/workflow-triggering/programmatic-api.md
workflow-launchers:
workflow-launchers/references/workflow-launchers/launcher-config-reference.md
workflow-launchers/references/workflow-launchers/condition-patterns.md
workflow-debugging:
workflow-debugging/SKILL.md
workflow-debugging/reference.md
workflow-triaging:
workflow-triaging/SKILL.md
Cloud Service Production Support Constraints
| Constraint |
Detail |
| No JMX |
No retryFailedWorkItems, countStaleWorkflows, restartStaleWorkflows, purgeCompleted via JMX |
| Retry failed items |
Inbox Retry only |
| Stale detection |
Custom API/script only |
| Purge |
Purge Scheduler (OSGi config in Git) |
| Log access |
Cloud Manager → Environments → Logs (download / streaming) |
| Thread dumps |
Developer Console or support request |
| Config changes |
Code in Git + Cloud Manager pipeline deploy |
AEM Cloud Service Guardrails Summary
Before doing anything, apply these non-negotiable constraints:
| Rule |
Detail |
/libs is immutable |
Never write to /libs; use /conf/global/ or /apps/ overlays |
| Model design-time path |
/conf/global/settings/workflow/models/<id> |
| Model runtime path (for API calls) |
/var/workflow/models/<id> |
| Launcher config path |
/conf/global/settings/workflow/launcher/config/ |
| Service users |
Always use workflow-process-service sub-service; never admin credentials |
| OSGi annotations |
Use DS R6 (@Component, @Reference from org.osgi.service.component.annotations) |
| Deploy via |
Cloud Manager pipeline — no Package Manager in production |
No javax.jcr.Session.loginAdministrative |
Use ResourceResolverFactory.getServiceResourceResolver() |
Full detail: references/workflow-foundation/cloud-service-guardrails.md
Quick Architecture Recap
Author tier
│
├── Content Author
│ └── triggers via: Timeline UI / Manage Publication
│
├── Custom code (OSGi service / event handler / scheduler)
│ └── triggers via: WorkflowSession.startWorkflow()
│
└── Workflow Launcher (cq:WorkflowLauncher)
└── triggers via: JCR observation events
↓
Granite Workflow Engine
↓
Workflow Instance (/var/workflow/instances/)
↓
Steps executed as Sling Jobs:
- PROCESS step → WorkflowProcess.execute()
- PARTICIPANT step → inbox task for user/group
- DYNAMIC_PARTICIPANT → ParticipantStepChooser.getParticipant()
- OR_SPLIT → route expression evaluates to true/false
- AND_SPLIT → parallel branches, AND_JOIN waits for all
Common Task Patterns (End-to-End)
Pattern A: New custom approval workflow
- Load
workflow-model-design + workflow-development sub-skills
- Design model: START → PARTICIPANT (reviewer) → PROCESS (approve/reject logic) → END
- Implement
WorkflowProcess for the approve/reject step
- Deploy model XML to
/conf/global/settings/workflow/models/
- Deploy OSGi bundle with the process step
Pattern B: Auto-process content on upload
- Load
workflow-launchers sub-skill
- Configure a
cq:WorkflowLauncher for NODE_ADDED on the DAM path
- Point it to your workflow model at
/var/workflow/models/
- Deploy launcher config to
/conf/global/settings/workflow/launcher/config/
Pattern C: Programmatically batch-start workflows
- Load
workflow-triggering sub-skill
- Implement
WorkflowStarterService using ResourceResolverFactory + WorkflowSession
- Map sub-service
workflow-starter to workflow-process-service
- Deploy and trigger from a Sling Scheduler or Servlet
Pattern D: "Workflow errors on host X for the past 4 hours"
- Load
workflow-triaging → classify as workflow_fails_or_shows_error
- Suggest Splunk / Cloud Manager log search for
Error executing workflow step on host + time range
- If errors found, load
workflow-debugging → map to runbook, walk decision tree
- Return: symptom_id, runbook, evidence, remediation
Pattern E: "Workflow stuck — not advancing"
- Load
workflow-debugging → classify as workflow_stuck_not_progressing
- Follow decision tree: check for work item → step type → specific checks
- If thread pool suspected, guide thread dump analysis (Developer Console)
- Return: root cause, config fix (via Git), remediation steps
References in This Skill
references/workflow-foundation/architecture-overview.md
references/workflow-foundation/api-reference.md
references/workflow-foundation/jcr-paths-reference.md
references/workflow-foundation/cloud-service-guardrails.md
references/workflow-foundation/quick-start-guide.md
1---2name: workflow-orchestrator-43description: Master entry point for all AEM Workflow tasks on Cloud Service spanning development and production support4license: Apache-2.05---67# Workflow Orchestrator — AEM as a Cloud Service89## Purpose1011This is the **master entry point** for all AEM Workflow tasks on Cloud Service — spanning both **development** (building workflows) and **production support** (debugging and triaging workflow issues). Read this skill first. It classifies the user's request and routes to the right sub-skill.1213## How to Use This Skill14151. Read the user's request carefully162. Classify it using the **Task Classifier** table below173. Load the identified sub-skill's `SKILL.md` and its references184. For development tasks, always load the `workflow-foundation` references alongside the sub-skill references195. For production-support tasks, the debugging and triaging skills are self-contained2021---2223## Task Classifier2425### Development Skills2627| User Says / Asks | Sub-Skill to Load |28|---|---|29| "Create a workflow model", "Add steps to a workflow", "Design an OR split", "I need a parallel review" | `workflow-model-design` |30| "Implement a custom process step", "Write a WorkflowProcess", "Create a ParticipantStepChooser", "Dynamic participant" | `workflow-development` |31| "Start a workflow from code", "Trigger a workflow via API", "Use Manage Publication with a workflow", "HTTP REST API to start a workflow" | `workflow-triggering` |32| "Configure a launcher", "Auto-start on asset upload", "Launcher not firing", "cq:WorkflowLauncher", "Overlay an OOTB launcher" | `workflow-launchers` |33| "How do workflows work?", "Explain workflow architecture" | Load `workflow-foundation` references only |3435### Production Support Skills3637| User Says / Asks | Sub-Skill to Load |38|---|---|39| "Workflow is stuck", "Why isn't my workflow advancing?", "No work item", "Workflow failed", "Step shows error" | `workflow-debugging` |40| "Task not in Inbox", "User can't see work item", "Permissions error on workflow" | `workflow-debugging` |41| "Thread pool exhausted", "Auto-advancement not working", "Queue backlog", "Sling Jobs stuck" | `workflow-debugging` |42| "Repository bloat", "Too many workflow instances", "Purge not working", "Stale workflows" | `workflow-debugging` |43| "What workflow errors on host X?", "Workflow activity for the past N hours", "What should I collect?" | `workflow-triaging` |44| "Classify this workflow ticket", "What Splunk query should I use?", "What logs do I need?" | `workflow-triaging` |45| "Why did workflow X fail? Show me the error.", "Failure details for model Y" | `workflow-triaging` |4647**Routing heuristic:**48- Building/implementing workflows → development skills (`workflow-model-design`, `workflow-development`, `workflow-triggering`, `workflow-launchers`)49- Deep troubleshooting (decision trees, config checks, thread analysis, remediation) → `workflow-debugging`50- Incident classification (symptom → runbook, log patterns, Splunk, data gathering) → `workflow-triaging`51- When both debugging and triaging apply, start with `workflow-triaging` to classify, then `workflow-debugging` for resolution5253---5455## Reference Loading Order5657For every workflow task on Cloud Service, load in this order:5859### Step 1: Always load these foundation references6061```62workflow-orchestrator/references/workflow-foundation/architecture-overview.md63workflow-orchestrator/references/workflow-foundation/api-reference.md64workflow-orchestrator/references/workflow-foundation/jcr-paths-reference.md65workflow-orchestrator/references/workflow-foundation/cloud-service-guardrails.md66workflow-orchestrator/references/workflow-foundation/quick-start-guide.md67```6869### Step 2: Load the sub-skill's SKILL.md7071```72workflow-model-design/SKILL.md ← for model design tasks73workflow-development/SKILL.md ← for Java implementation tasks74workflow-triggering/SKILL.md ← for start/trigger tasks75workflow-launchers/SKILL.md ← for launcher config tasks76workflow-debugging/SKILL.md ← for production debugging tasks77workflow-triaging/SKILL.md ← for incident triage tasks78```7980### Step 3: Load the sub-skill's topic references8182**workflow-model-design:**83```84workflow-model-design/references/workflow-model-design/step-types-catalog.md85workflow-model-design/references/workflow-model-design/model-xml-reference.md86workflow-model-design/references/workflow-model-design/model-design-patterns.md87```8889**workflow-development:**90```91workflow-development/references/workflow-development/process-step-patterns.md92workflow-development/references/workflow-development/participant-step-patterns.md93workflow-development/references/workflow-development/variables-and-metadata.md94```9596**workflow-triggering:**97```98workflow-triggering/references/workflow-triggering/triggering-mechanisms.md99workflow-triggering/references/workflow-triggering/programmatic-api.md100```101102**workflow-launchers:**103```104workflow-launchers/references/workflow-launchers/launcher-config-reference.md105workflow-launchers/references/workflow-launchers/condition-patterns.md106```107108**workflow-debugging:**109```110workflow-debugging/SKILL.md111workflow-debugging/reference.md112```113114**workflow-triaging:**115```116workflow-triaging/SKILL.md117```118119---120121## Cloud Service Production Support Constraints122123| Constraint | Detail |124|---|---|125| No JMX | No `retryFailedWorkItems`, `countStaleWorkflows`, `restartStaleWorkflows`, `purgeCompleted` via JMX |126| Retry failed items | Inbox Retry only |127| Stale detection | Custom API/script only |128| Purge | Purge Scheduler (OSGi config in Git) |129| Log access | Cloud Manager → Environments → Logs (download / streaming) |130| Thread dumps | Developer Console or support request |131| Config changes | Code in Git + Cloud Manager pipeline deploy |132133---134135## AEM Cloud Service Guardrails Summary136137Before doing anything, apply these non-negotiable constraints:138139| Rule | Detail |140|---|---|141| `/libs` is immutable | Never write to `/libs`; use `/conf/global/` or `/apps/` overlays |142| Model design-time path | `/conf/global/settings/workflow/models/<id>` |143| Model runtime path (for API calls) | `/var/workflow/models/<id>` |144| Launcher config path | `/conf/global/settings/workflow/launcher/config/` |145| Service users | Always use `workflow-process-service` sub-service; never admin credentials |146| OSGi annotations | Use DS R6 (`@Component`, `@Reference` from `org.osgi.service.component.annotations`) |147| Deploy via | Cloud Manager pipeline — no Package Manager in production |148| No `javax.jcr.Session.loginAdministrative` | Use `ResourceResolverFactory.getServiceResourceResolver()` |149150Full detail: `references/workflow-foundation/cloud-service-guardrails.md`151152---153154## Quick Architecture Recap155156```157Author tier158 │159 ├── Content Author160 │ └── triggers via: Timeline UI / Manage Publication161 │162 ├── Custom code (OSGi service / event handler / scheduler)163 │ └── triggers via: WorkflowSession.startWorkflow()164 │165 └── Workflow Launcher (cq:WorkflowLauncher)166 └── triggers via: JCR observation events167 ↓168 Granite Workflow Engine169 ↓170 Workflow Instance (/var/workflow/instances/)171 ↓172 Steps executed as Sling Jobs:173 - PROCESS step → WorkflowProcess.execute()174 - PARTICIPANT step → inbox task for user/group175 - DYNAMIC_PARTICIPANT → ParticipantStepChooser.getParticipant()176 - OR_SPLIT → route expression evaluates to true/false177 - AND_SPLIT → parallel branches, AND_JOIN waits for all178```179180---181182## Common Task Patterns (End-to-End)183184### Pattern A: New custom approval workflow1851861. Load `workflow-model-design` + `workflow-development` sub-skills1872. Design model: START → PARTICIPANT (reviewer) → PROCESS (approve/reject logic) → END1883. Implement `WorkflowProcess` for the approve/reject step1894. Deploy model XML to `/conf/global/settings/workflow/models/`1905. Deploy OSGi bundle with the process step191192### Pattern B: Auto-process content on upload1931941. Load `workflow-launchers` sub-skill1952. Configure a `cq:WorkflowLauncher` for `NODE_ADDED` on the DAM path1963. Point it to your workflow model at `/var/workflow/models/`1974. Deploy launcher config to `/conf/global/settings/workflow/launcher/config/`198199### Pattern C: Programmatically batch-start workflows2002011. Load `workflow-triggering` sub-skill2022. Implement `WorkflowStarterService` using `ResourceResolverFactory` + `WorkflowSession`2033. Map sub-service `workflow-starter` to `workflow-process-service`2044. Deploy and trigger from a Sling Scheduler or Servlet205206### Pattern D: "Workflow errors on host X for the past 4 hours"2072081. Load `workflow-triaging` → classify as `workflow_fails_or_shows_error`2092. Suggest Splunk / Cloud Manager log search for `Error executing workflow step` on host + time range2103. If errors found, load `workflow-debugging` → map to runbook, walk decision tree2114. Return: symptom_id, runbook, evidence, remediation212213### Pattern E: "Workflow stuck — not advancing"2142151. Load `workflow-debugging` → classify as `workflow_stuck_not_progressing`2162. Follow decision tree: check for work item → step type → specific checks2173. If thread pool suspected, guide thread dump analysis (Developer Console)2184. Return: root cause, config fix (via Git), remediation steps219220---221222## References in This Skill223224```225references/workflow-foundation/architecture-overview.md226references/workflow-foundation/api-reference.md227references/workflow-foundation/jcr-paths-reference.md228references/workflow-foundation/cloud-service-guardrails.md229references/workflow-foundation/quick-start-guide.md230```