Skip to main content

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

소스 정보

저장소
catlog22/Claude-Code-Workflow
최근 소스 활동
2026년 3월 17일 15:03
감지된 SKILL.md 언어
영어
스타
2,120
포크
166

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

파일 탐색기
7 개 파일

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
wf-player
description
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".
argument-hint
<template-slug|path> [--context key=value...] [--resume <session-id>] [--list] [--dry-run]
allowed-tools
Agent(*), AskUserQuestion(*), Read(*), Write(*), Edit(*), Bash(*), Glob(*), Grep(*), Skill(*)
# 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 | Constant | Value | |----------|-------| | Session prefix | `WFR` | | Session dir | `.workflow/sessions/WFR-<slug>-<date>/` | | State file | `session-state.json` | | Template dir | `.workflow/templates/` | | Template index | `.workflow/templates/index.json` | ## Entry Router Parse `$ARGUMENTS`: | Detection | Condition | Handler | |-----------|-----------|---------| | 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 | | 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-*/` 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 | Scenario | Resolution | |----------|------------| | Required variable missing | AskUserQuestion to collect it | | Template not found | Show `--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-execution | State saved at last checkpoint; resume with `--resume <session-id>` | | Cycle in DAG | Error immediately, point to template for fix | ## Specs Reference | Spec | Purpose | |------|---------| | [specs/node-executor.md](specs/node-executor.md) | Execution mechanism per node type | | [specs/state-schema.md](specs/state-schema.md) | session-state.json schema |
GitHub에서 보기