Run WCAG 2.2 Level AA accessibility audits against generated UI. Use when a story has ui:true or when asked to audit accessibility.
日本語の概要は準備中です。原文の説明を表示しています。
Universal dispatcher: run a named taffy workflow (.claude/taffy/<name>.yaml), a skill (/skill-name), or a sub-agent (@agent-name). Falls back to skills.sh registry when a skill is not found locally. Tracks all runs in .claude/state/maple.json so the maple TUI shows live progress.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Dispatches any named workflow, skill, or agent from a single entry point. Resolution order:
.claude/taffy/<name>.yaml; if found, execute each stage in order.claude/skills/<name>/; if found, invoke the skill.claude/agents/<name>.md; if found, delegate to @<name>Pipeline state is written to .claude/state/maple.json at every transition.
/pipeline-runner <name>
Examples:
/pipeline-runner new-ui-feature
/pipeline-runner api-endpoint
/pipeline-runner implement-stories
/pipeline-runner tdd-workflow
/pipeline-runner orchestrator
List available taffy workflows:
ls .claude/taffy/*.yaml | grep -v schema
List available skills:
ls .claude/skills/
# Check taffy first
[ -f ".claude/taffy/<name>.yaml" ] && dispatch=taffy
# Then local skill
[ -d ".claude/skills/<name>" ] && dispatch=skill
# Then agent
[ -f ".claude/agents/<name>.md" ] && dispatch=agent
# Fallback: fetch from skills.sh registry, then retry
if [ -z "$dispatch" ] && command -v npx &>/dev/null; then
echo "pipeline-runner: '<name>' not found locally — checking skills.sh…"
npx --yes skills add kinncj/maple@<name> -a claude-code -y 2>/dev/null \
|| npx --yes skills add <name> -a claude-code -y 2>/dev/null \
|| true
[ -d ".claude/skills/<name>" ] && dispatch=skill
fi
If nothing matches after the registry fallback, report:
pipeline-runner: no taffy workflow, skill, or agent named '<name>' (also checked skills.sh registry)
Write to .claude/state/maple.json (merge — do not overwrite unowned fields):
{
"taffy": "<name>",
"stage": "<first-stage or skill-name>",
"status": "RUNNING",
"awaiting_approval": null,
"started_at": "<iso8601>",
"updated_at": "<iso8601>"
}
Before any stage execution, read and enforce:
CLAUDE.mdOPENCODE.mdCURSOR.mdCOPILOT.mdAGENTS.md.github/copilot-instructions.md.github/instructions/stories.instructions.md (when touching story files)When the launch prompt contains a <maple-gherkin-handoff> block:
cucumber/*_steps.py, use Python behave-style steps.@cucumber/cucumber unless the repository already uses it as the active standard./tests/features/./tests./app or story directories.docs/, .github/, or .claude/.Load .claude/taffy/<name>.yaml, parse stages:, resolve depends_on order.
If the workflow defines an orchestrator-kickoff stage, execute it first before all other stages. This stage must publish the initial plan and heartbeat cadence.
For each stage:
when: guard:
when: ui:true — skip if story has ui: false, unless .claude/state/maple.json has force_ui: true with launch_source: maple-x (MAPLE [x] quick-launch override).when: ui:false — skip if story has ui: truewhen: always — always rundepends_on: all listed stages must be DONE before this one starts.
Dispatch:
agent: <name> → delegate to @<name> with current story contextskill: <name> → invoke the skillpipeline: standard → run the full 8-phase orchestrator pipelineAfter each stage: update maple.json with current stage + RUNNING.
Progress heartbeats (mandatory):
maple.json updated_at and current stage.<stage / phase><brief><brief><none or blocker><ETA>maple.json to FAILED with an explicit error and stop.Completion artifact gate (mandatory):
DONE, verify the run produced concrete story-linked artifacts under the BusinessRepo layout./app (or existing domain folders),/tests (unit/integration/e2e as applicable),/tests/features plus matching step implementations.docs/, .github/, or .claude/.maple.json to FAILED and report missing paths explicitly.Invoke the skill directly. Update maple.json on start and completion.
Delegate to @<name>. Update maple.json on start and completion.
When a stage has gate: human-approval:
wireframe, visual-identity, design-tokens, ui-mockup-builder, design-refresh), artifact production is mandatory:
.excalidraw, .html, .svg, .png, .jpg, .jpeg, .webp, or .md) under docs/design (or approved artifact dirs), anddesign.target (project.config.yaml, default web): web = .md + .html + .excalidraw; tui = .md + .excalidraw (no .html). A run that produces fewer than the required formats is incomplete, and.claude/state/design-artifacts.json with current stage artifact paths so the review portal can update live.wireframe stage (mandatory before PAUSING):
# Verify wireframes are in the canonical location and the required formats exist.
# Required formats depend on design.target (web: md+html+excalidraw; tui: md+excalidraw).
TARGET=$(sed -n 's/^[[:space:]]*target:[[:space:]]*\([a-z]*\).*/\1/p' project.config.yaml 2>/dev/null | head -1)
[ -z "$TARGET" ] && TARGET=web
CANONICAL=$(find docs/design/wireframes -name "*.wireframe.*" 2>/dev/null | wc -l | tr -d ' ')
MISPLACED=$(find docs -name "*.wireframe.*" -not -path "*/docs/design/wireframes/*" 2>/dev/null)
MISSING_HTML=""
if [ "$TARGET" != "tui" ]; then
MISSING_HTML=$(find docs/design/wireframes -name "*.wireframe.md" 2>/dev/null | while read md; do
base="${md%.wireframe.md}"
[ ! -f "${base}.wireframe.html" ] && echo "${base}.wireframe.html"
done)
fi
MISSING_EXCALIDRAW=$(find docs/design/wireframes -name "*.wireframe.md" 2>/dev/null | while read md; do
base="${md%.wireframe.md}"
[ ! -f "${base}.wireframe.excalidraw" ] && echo "${base}.wireframe.excalidraw"
done)
if [ "$CANONICAL" -eq 0 ]; then
if [ -n "$MISPLACED" ]; then
echo "PIPELINE GATE FAILED: wireframes found at wrong path(s): $MISPLACED"
echo "Canonical path is docs/design/wireframes/ — move files there before this stage can complete."
else
echo "PIPELINE GATE FAILED: no wireframe artifacts in docs/design/wireframes/"
fi
# set maple.json FAILED and stop
fi
if [ -n "$MISSING_HTML" ]; then
echo "PIPELINE GATE FAILED: missing .wireframe.html for: $MISSING_HTML — generate it now."
# set maple.json FAILED and stop
fi
if [ -n "$MISSING_EXCALIDRAW" ]; then
echo "PIPELINE GATE FAILED: missing .wireframe.excalidraw for: $MISSING_EXCALIDRAW — generate it now."
# set maple.json FAILED and stop
fi
If the gate fails, produce the missing files before re-running the gate check.maple.json to FAILED and stop.{ "stage": "<name>", "status": "PAUSED", "awaiting_approval": "<name>", "updated_at": "<iso8601>" }
.claude/state/approval-pending.txt.TAFFY PAUSED — awaiting human approval
Stage: <stage-name>
Artifact: <artifact path or description>
Approve via the maple TUI ([P] pipeline → [a] approve) or reply "approved" / "continue".
I will not advance to the next stage until approval is confirmed.
timeout 540 bash -c 'until [ ! -f .claude/state/approval-pending.txt ]; do sleep 2; done'
tmux new-session wrapper). Either signal is sufficient to resume.RUNNING, advance to next stage..claude/state/design-feedback.json:
status: requested_changes or status: rejected means apply the requested updates before advancing.attachments as required review inputs (uploaded files such as .excalidraw, images, HTML, text), typically under docs/design/review-input/.{ "taffy": "<name>", "stage": "DONE", "status": "DONE", "awaiting_approval": null, "updated_at": "<iso8601>" }
Output:
TAFFY COMPLETE — <name>
Stages run: N
Duration: <elapsed>
After 3 consecutive failures on any stage:
{ "stage": "<name>", "status": "FAILED", "error": "<summary>", "updated_at": "<iso8601>" }
Stop. Report failed stage and error to human. Do not proceed.
When a usage limit, rate limit, HTTP 429, or "resets at <time>" message stops you continuing, before stopping:
.claude/state/maple.json (keep taffy/stage):{ "status": "RATE_LIMITED", "resume_at": "<iso8601 reset time, else now+1h>", "rate_limit_reason": "<one line>", "updated_at": "<iso8601>" }
.claude/state/rate-limit.txt: <resume_at>|<reason>. One cheap write — do it even if nothing else is possible.[r], or auto when armed).On startup, read .claude/state/sessions.json if it exists:
{ "claude": "<uuid>", "opencode": "<id>", "copilot": "<id>" }
Use the matching session ID when resuming work within an existing agent session.
All state in .claude/state/. TUI and skill share these files.
.claude/state/maple.json| Field | Owner | Values |
|---|---|---|
taffy | skill | workflow/skill/agent name |
stage | skill | current stage name |
status | skill | RUNNING, PAUSED, DONE, FAILED |
awaiting_approval | skill | local MAPLE stage name (e.g., spec-kit = Specification Knowledge & Integration Toolkit) or null — not an external package reference |
pipeline | skill | standard if running 8-phase |
started_at | skill | ISO 8601 |
updated_at | skill | ISO 8601 |
resume_at | skill/TUI | ISO 8601 — when the rate-limit window clears |
rate_limit_reason | skill/TUI | one-line cause |
harness | TUI | which harness ran this pipeline (for resume) |
auto_resume | TUI | true when auto-resume is armed |
state | TUI | running or exited |
ts | TUI | ISO 8601 |
Merge-not-overwrite: read existing file, update only owned fields, re-write.
.claude/state/approval-pending.txtSkill writes stage name. TUI deletes when user presses [a].
.claude/state/rate-limit.txtSkill/agent writes <resume_at>|<reason>. TUI reads, promotes maple.json to RATE_LIMITED, and deletes the file.
.claude/state/sessions.jsonTUI writes harness→session-ID map. Skill reads for session resume.
spike/* and chore/* branches: skip Spec-Kit stages, run implementation stages.when: ui:true on a ui: false story: skip silently, log [pipeline-runner] SKIP stage=<name> reason=ui:false unless quick-launch override is active (force_ui=true, launch_source=maple-x).まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Run WCAG 2.2 Level AA accessibility audits against generated UI. Use when a story has ui:true or when asked to audit accessibility.
日本語の概要は準備中です。原文の説明を表示しています。
Generate a complete component file tree wired to design tokens with tests and Gherkin spec. Use when scaffolding a new UI component.
日本語の概要は準備中です。原文の説明を表示しています。
Extract Gherkin scenarios from story markdown files into runnable .feature files and generate step definition stubs. Use when syncing stories to test suites.
日本語の概要は準備中です。原文の説明を表示しています。
Read and write design tokens in W3C DTCG format (tokens.json) and emit CSS, Tailwind, and Mantine outputs. Use when modifying or generating design tokens.
日本語の概要は準備中です。原文の説明を表示しています。
Apply Docker and Docker Compose best practices for containerising services. Use when writing or reviewing Dockerfiles and compose configs.
日本語の概要は準備中です。原文の説明を表示しています。
Identify and annotate cloud cost implications of architectural decisions. Use when reviewing infrastructure changes or designing new services.
日本語の概要は準備中です。原文の説明を表示しています。