Use when implementing editorial workflows, approval chains, scheduled publishing, or role-based content permissions. Covers workflow states, transitions, notifications, and workflow APIs for headless CMS.
View on GitHubmelodic-software/claude-code-plugins
content-management-system
plugins/content-management-system/skills/content-workflow/SKILL.md
January 21, 2026
Select agents to install to:
npx add-skill https://github.com/melodic-software/claude-code-plugins/blob/main/plugins/content-management-system/skills/content-workflow/SKILL.md -a claude-code --skill content-workflowInstallation paths:
.claude/skills/content-workflow/# Content Workflow
Guidance for implementing editorial workflows, approval processes, and scheduled publishing in headless CMS systems.
## When to Use This Skill
- Implementing multi-stage approval workflows
- Adding scheduled/embargo publishing
- Building content moderation systems
- Defining role-based publishing permissions
- Automating workflow notifications
## Workflow States
### Basic Workflow States
```csharp
public enum WorkflowState
{
Draft, // Initial creation, author editing
InReview, // Submitted for review
Approved, // Approved, ready to publish
Published, // Live content
Unpublished, // Removed from live
Archived, // Long-term storage
Rejected // Review rejected, needs revision
}
```
### Extended Workflow States
```csharp
public enum ExtendedWorkflowState
{
// Creation
Draft,
// Review stages
PendingEditorialReview,
EditorialApproved,
PendingLegalReview,
LegalApproved,
PendingFinalApproval,
// Publication
Scheduled,
Published,
// Post-publication
Unpublished,
Expired,
Archived
}
```
## State Machine Implementation
### Workflow Definition
```csharp
public class WorkflowDefinition
{
public string Name { get; set; } = string.Empty;
public List<WorkflowStateDefinition> States { get; set; } = new();
public List<WorkflowTransition> Transitions { get; set; } = new();
}
public class WorkflowStateDefinition
{
public string Name { get; set; } = string.Empty;
public bool IsInitial { get; set; }
public bool IsFinal { get; set; }
public List<string> AllowedRoles { get; set; } = new();
public List<string> RequiredFields { get; set; } = new();
}
public class WorkflowTransition
{
public string Name { get; set; } = string.Empty;
public string FromState { get; set; } = string.Empty;
public string ToState { get; set; } = string.Empty;
public List<string> AllowedRoles { get; set; }