agentleFS
catlog22catlog22/Claude-Code-Workflow/.claude/skills/wf-player/SKILL.md

wf-player

Skill2.1k starsChanged 7 months agoMITArchived repositoryView on GitHub

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".

1 other project uses a version of this.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

4 rules. About 0 are common, 3 are distinctive, and 1 is very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈3

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Read phases/01-load.md and execute.

    line 93
  2. Distinctive:

    Objective: Create WFR session directory, init state, compute execution plan.

    line 105
  3. Distinctive:

    Wait for hook callback — DO NOT poll with TaskOutput

    line 119
  4. Distinctive:

    Success: All nodes completed, all checkpoints saved.

    line 122

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Workflow 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

ConstantValue
Session prefixWFR
Session dir.workflow/sessions/WFR-<slug>-<date>/
State filesession-state.json
Template dir.workflow/templates/
Template index.workflow/templates/index.json

Entry Router

Parse $ARGUMENTS:

DetectionConditionHandler
List templates--list in args-> handleList
Resume session--resume <session-id> in args-> Phase 2 (resume)
Dry run--dry-run in args-> Phase 1 + 2, print plan, exit
NormalTemplate slug/path provided-> Phase 1
No argsEmpty 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-*/

  1. Scan .workflow/sessions/WFR-*/session-state.json for status = "running" | "paused"
  2. Multiple found → AskUserQuestion for selection
  3. Load session-state.json
  4. Identify last_checkpoint and node_states
  5. Reset any running nodes back to pending (they were interrupted)
  6. Determine next executable node from topological_order after last checkpoint
  7. 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 ccw cli in background and immediately STOP
  • 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

ScenarioResolution
Required variable missingAskUserQuestion to collect it
Template not foundShow --list 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-executionState saved at last checkpoint; resume with --resume <session-id>
Cycle in DAGError immediately, point to template for fix

Specs Reference

SpecPurpose
specs/node-executor.mdExecution mechanism per node type
specs/state-schema.mdsession-state.json schema

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.