Claude-Code-Workflow wf-player
Workflow template player — load a JSON template produced by wf-composer, bind context variables, execute nodes in DAG order (serial/parallel), persist state at checkpoints, support resume from any checkpoint. Uses ccw-coordinator serial-blocking for CLI nodes and team-coordinate worker pattern for parallel agent nodes. Triggers on "wf-player " or "/wf-player".
git clone https://github.com/catlog22/Claude-Code-Workflow
T=$(mktemp -d) && git clone --depth=1 https://github.com/catlog22/Claude-Code-Workflow "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.claude/skills/wf-player" ~/.claude/skills/catlog22-claude-code-workflow-wf-player && rm -rf "$T"
.claude/skills/wf-player/SKILL.mdWorkflow Run
Load a workflow template → bind variables → execute DAG → persist checkpoints → resume capable.
Architecture
Skill(skill="wf-player", args="<template> --context goal='...'") | +-- Phase 0: Entry Router |-- --list -> list available templates, exit |-- --resume -> load session, skip to Phase 3 (Execute) |-- --dry-run -> load + show execution plan, no execution |-- default -> Phase 1 (Load) | +-- Phase 1: Load & Bind | Load template JSON, bind {variables} from --context, validate required vars | +-- Phase 2: Instantiate | Init session state, topological sort, write WFR session file | +-- Phase 3: Execute Loop | For each node in order: | skill node -> Skill(skill=...) [synchronous] | cli node -> ccw cli [background + stop, hook callback] | command node -> Skill(skill="namespace:cmd") [synchronous] | agent node -> Agent(...) [run_in_background per node config] | checkpoint -> save state, optionally pause | +-- Phase 4: Complete Archive session, output summary
Shared Constants
| Constant | Value |
|---|---|
| Session prefix | |
| Session dir | |
| State file | |
| Template dir | |
| Template index | |
Entry Router
Parse
$ARGUMENTS:
| Detection | Condition | Handler |
|---|---|---|
| List templates | in args | -> handleList |
| Resume session | in args | -> Phase 2 (resume) |
| Dry run | in args | -> Phase 1 + 2, print plan, exit |
| Normal | Template slug/path provided | -> Phase 1 |
| No args | Empty args | -> handleList + AskUserQuestion |
handleList
Scan
.workflow/templates/index.json. Display:
Available workflow templates: feature-tdd-review [feature, complex] 3 work nodes, 2 checkpoints quick-bugfix [bugfix, simple] 2 work nodes, 1 checkpoint ... Run: Skill(skill="wf-player", args="<slug> --context goal='...'")
Phase 0 (Resume): Session Reconciliation
Trigger:
--resume <session-id> or active WFR session found in .workflow/sessions/WFR-*/
- Scan
for status = "running" | "paused".workflow/sessions/WFR-*/session-state.json - Multiple found → AskUserQuestion for selection
- Load session-state.json
- Identify
andlast_checkpointnode_states - Reset any
nodes back torunning
(they were interrupted)pending - Determine next executable node from
after last checkpointtopological_order - Resume at Phase 3 (Execute Loop) from that node
Phase 1: Load & Bind
Read
phases/01-load.md and execute.
Objective: Load template, collect missing variables, bind all {variable} references.
Success: Template loaded, all required variables bound,
bound_context{} ready.
Phase 2: Instantiate
Read
phases/02-instantiate.md and execute.
Objective: Create WFR session directory, init state, compute execution plan.
Success:
session-state.json written, topological_order ready.
Phase 3: Execute Loop
Read
phases/03-execute.md and execute.
Objective: Execute each node in topological_order using appropriate mechanism.
CRITICAL — CLI node blocking:
- CLI nodes launch
in background and immediately STOPccw cli - Wait for hook callback — DO NOT poll with TaskOutput
- Hook callback resumes execution at next node
Success: All nodes completed, all checkpoints saved.
Phase 4: Complete
Read
phases/04-complete.md and execute.
Objective: Archive session, output execution summary and artifact paths.
Error Handling
| Scenario | Resolution |
|---|---|
| Required variable missing | AskUserQuestion to collect it |
| Template not found | Show and suggest closest match |
| Node failed (on_fail=abort) | AskUserQuestion: Retry / Skip / Abort |
| Node failed (on_fail=skip) | Log warning, continue to next node |
| Node failed (on_fail=retry) | Retry once, then abort |
| Interrupted mid-execution | State saved at last checkpoint; resume with |
| Cycle in DAG | Error immediately, point to template for fix |
Specs Reference
| Spec | Purpose |
|---|---|
| specs/node-executor.md | Execution mechanism per node type |
| specs/state-schema.md | session-state.json schema |