Rules and patterns for creating/modifying Lutece 8 workflow modules. Tasks, CDI producers, components, templates.
View on GitHubskills/lutece-workflow/SKILL.md
February 5, 2026
Select agents to install to:
npx add-skill https://github.com/lutece-platform/lutece-dev-plugin-claude/blob/main/skills/lutece-workflow/SKILL.md -a claude-code --skill lutece-workflowInstallation paths:
.claude/skills/lutece-workflow/# Lutece 8 Workflow Module Development
Complete guide for creating and modifying Lutece 8 workflow modules.
> Before writing workflow code, consult `~/.lutece-references/lutece-wf-module-workflow-forms/` (the reference module) using Read, Grep and Glob.
## Workflow Architecture
```
plugin-workflow (core)
├── library-workflow-core # Base interfaces and classes
│ ├── ITask, Task, SimpleTask
│ ├── ITaskType, TaskType
│ ├── ITaskConfigService, TaskConfigService
│ └── ITaskConfigDAO
│
└── module-workflow-{xxx} # Custom module
├── business/ # Config + DAO
├── service/ # Task + Producers
└── web/ # TaskComponent
```
## Workflow Module Structure
```
module-workflow-{pluginName}/
├── pom.xml
├── src/
│ ├── java/fr/paris/lutece/plugins/workflow/modules/{pluginName}/
│ │ ├── business/
│ │ │ ├── Task{Name}Config.java
│ │ │ └── Task{Name}ConfigDAO.java
│ │ ├── service/
│ │ │ ├── Task{Name}.java
│ │ │ ├── TaskType{Name}Producer.java
│ │ │ └── Task{Name}ConfigServiceProducer.java
│ │ ├── web/
│ │ │ └── {Name}TaskComponent.java
│ │ └── resources/
│ │ └── workflow-{pluginName}_messages.properties
│ ├── sql/plugins/workflow/modules/
│ │ └── create_db_workflow-{pluginName}.sql
│ └── main/resources/META-INF/
│ └── beans.xml
└── webapp/WEB-INF/
├── conf/plugins/
│ └── workflow-{pluginName}.properties
├── plugins/
│ └── workflow-{pluginName}.xml
└── templates/admin/plugins/workflow/modules/{pluginName}/
├── task_{name}_config.html
├── task_{name}_form.html
└── task_{name}_information.html
```
## 1. Task Implementation
### Simple Task (no internal state)
```java
package fr.paris.lutece.plugins.workflow.modules.{pluginName}.service;
import fr.paris.lutece.plugins.workflowcore.service.task.SimpleTask;
import fr.pa