plugins/aem/6.5-lts/skills/aem-workflow/workflow-orchestrator/SKILL.md
Master entry point for all AEM Workflow tasks on AEM 6.5 LTS spanning development and production support
npx skillsauth add adobe/skills workflow-orchestratorInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This is the master entry point for all AEM Workflow tasks on AEM 6.5 LTS — 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.
SKILL.md and its referencesworkflow-foundation references alongside the sub-skill references| 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?", "What is the Granite Workflow Engine?", "Explain workflow architecture" | Load workflow-foundation references only |
| 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 |
| "countStaleWorkflows", "restartStaleWorkflows", "retryFailedWorkItems", "JMX workflow" | 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 |
| "What does JMX returnSystemJobInfo show?", "Check queue depth via JMX" | workflow-triaging |
Routing heuristic:
workflow-model-design, workflow-development, workflow-triggering, workflow-launchers)workflow-debuggingworkflow-triagingworkflow-triaging to classify, then workflow-debugging for resolutionFor every workflow task on AEM 6.5 LTS, load in this order:
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/65-lts-guardrails.md
workflow-orchestrator/references/workflow-foundation/quick-start-guide.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
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
| Capability | Detail |
|---|---|
| JMX | Full access via Felix Console (/system/console/jmx) or JMX client |
| Retry failed items | JMX retryFailedWorkItems or Inbox Retry |
| Stale detection | JMX countStaleWorkflows |
| Stale restart | JMX restartStaleWorkflows(dryRun=true) then execute |
| Purge | JMX purgeCompleted(dryRun=true) or Purge Scheduler |
| Queue info | JMX returnSystemJobInfo, returnWorkflowQueueInfo |
| Log access | Direct filesystem (crx-quickstart/logs/) or AMS log access |
| Thread dumps | jstack or AMS support request |
| Config status ZIP | Felix Console → Status → Configuration Status |
| Config changes | Felix Console, OSGi config in repo, or CRX/DE |
Before doing anything, apply these constraints:
| Rule | Detail |
|---|---|
| Avoid editing /libs | Use overlays under /apps or store at /conf/global |
| Model design-time path | /conf/global/settings/workflow/models/<id> (preferred) or /etc/workflow/models/<id> (legacy) |
| Model runtime path (for API calls) | /var/workflow/models/<id> |
| Launcher config paths | /conf/global/settings/workflow/launcher/config/ (preferred), /apps/settings/workflow/launcher/config/ (overlay), or /etc/workflow/launcher/config/ (legacy) |
| Service users | Use ResourceResolverFactory.getServiceResourceResolver() with a sub-service; avoid loginAdministrative |
| OSGi annotations | DS R6 preferred; Felix SCR still supported on 6.5 LTS |
| Deploy via | Package Manager (CRX Package), Maven + Content Package Plugin, or ACS AEM Commons JCR |
| No javax.jcr.Session.loginAdministrative | Deprecated — use loginService() or ResourceResolverFactory |
Full detail: references/workflow-foundation/65-lts-guardrails.md
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
│
└── Replication Agent (6.5 LTS only)
└── triggers via: replication event / "Trigger on Receive"
↓
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
workflow-model-design + workflow-development sub-skillsWorkflowProcess for the approve/reject step/conf/global/settings/workflow/models/ via Maven content packageworkflow-launchers sub-skillcq:WorkflowLauncher for NODE_ADDED on the DAM path/var/workflow/models//conf/global/settings/workflow/launcher/config/workflow-triggering sub-skillWorkflowStarterService using ResourceResolverFactory + WorkflowSessionworkflow-starter to workflow-process-service or a dedicated service userworkflow-launchers sub-skilldam_update_asset_create from /libs/settings/workflow/launcher/config/ to /apps/settings/workflow/launcher/config/enabled="{Boolean}false" on the overlayworkflow-triaging → classify as workflow_fails_or_shows_errorError executing workflow step on host + time rangereturnSystemJobInfo for queue/job metricsworkflow-debugging → map to runbook, walk decision treeworkflow-debugging → classify as workflow_stuck_not_progressingcountStaleWorkflows to check for stale instances039_Sling_Thread_Pools.txt)workflow-triaging → identify required inputs (host, time range, model, instance ID)countStaleWorkflows, returnSystemJobInfo, returnWorkflowQueueInforeferences/workflow-foundation/architecture-overview.md
references/workflow-foundation/api-reference.md
references/workflow-foundation/jcr-paths-reference.md
references/workflow-foundation/65-lts-guardrails.md
references/workflow-foundation/quick-start-guide.md
tools
Use the run-workflow MCP to discover, compose, execute, publish, and save Adobe Firefly workflows. TRIGGER when: user asks what actions are available, what the MCP can do, how to process images/video/3D via workflow, wants to build/run/save/publish a workflow, OR pastes any workflow/batch/execution ID. BARE ID (UUID/workflowId/batchId) = INSPECT ONLY — call inspect_run, NEVER run_workflow_submit. ALWAYS call list_actions first for capability/discovery questions. DO NOT TRIGGER for direct Firefly API calls without MCP (use firefly-api-specs).
tools
Run predefined featured workflows via run-workflow MCP. TRIGGER when user names a featured workflow (retargeting, banners at scale, localization, packaging, banner advertising, etc.) or asks to run a known marketing/production workflow. Requires run-workflow MCP. ALWAYS call get_featured_workflow before compose_workflow. DO NOT TRIGGER for custom one-off workflows with no named template — use run-workflow skill.
tools
Migrate an Adobe Commerce App Builder project from the Integration Starter Kit or Checkout Starter Kit to the new App Management approach. Run from the root of the App Builder project to be migrated. Pass --auto to skip confirmation prompts (suitable for CI or batch use) — auto mode prints a summary of all Q&A questions answered with their defaults. Pass --doc-scan-only to scan README.md and env.dist for outdated content without modifying any files. Use when the user wants to migrate an App Builder project from the Integration Starter Kit or Checkout Starter Kit to the App Management approach, or mentions upgrading their Adobe Commerce extension architecture.
development
Add or modify webhook interceptors in an Adobe Commerce app. Use when the user wants to intercept Commerce operations to validate input, append data, or modify behavior — before or after execution. Requires a base app initialized with commerce-app-init.