npx claudepluginhub parhumm/jaan-to --plugin jaan-toThis skill uses the workspace's default tool permissions.
> Transform UX design handoffs into production-ready frontend task breakdowns.
Creates isolated Git worktrees for feature branches with prioritized directory selection, gitignore safety checks, auto project setup for Node/Python/Rust/Go, and baseline verification.
Executes implementation plans in current session by dispatching fresh subagents per independent task, with two-stage reviews: spec compliance then code quality.
Dispatches parallel agents to independently tackle 2+ tasks like separate test failures or subsystems without shared state or dependencies.
Transform UX design handoffs into production-ready frontend task breakdowns.
$JAAN_CONTEXT_DIR/tech.md - Tech stack context (optional, auto-imported if exists)
#current-stack, #frameworks, #constraints$JAAN_CONTEXT_DIR/config.md - Project configuration$JAAN_TEMPLATES_DIR/jaan-to-frontend-task-breakdown.template.md - Output template$JAAN_LEARN_DIR/jaan-to-frontend-task-breakdown.learn.md - Past lessons (loaded in Pre-Execution)${CLAUDE_PLUGIN_ROOT}/docs/extending/language-protocol.md - Language resolution protocolUX Handoff: $ARGUMENTS
Accepts any of:
Contract parsing: If --contract present, extract path first, validate file exists and contains openapi: or swagger: key, then parse remaining positional argument as UX handoff description or Figma link.
If no input provided, ask: "What feature or UX handoff should I break down?"
MANDATORY — Read and execute ALL steps in: ${CLAUDE_PLUGIN_ROOT}/docs/extending/pre-execution-protocol.md
Skill name: frontend-task-breakdown
Execute: Step 0 (Init Guard) → A (Load Lessons) → B (Resolve Template) → C (Offer Template Seeding)
Also read tech context if available:
$JAAN_CONTEXT_DIR/tech.md - Know the tech stack for framework-specific patternsRead and apply language protocol: ${CLAUDE_PLUGIN_ROOT}/docs/extending/language-protocol.md
Override field for this skill: language_frontend-task-breakdown
ultrathink
Use extended reasoning for:
Analyze the provided input to extract:
If Figma link:
If design description / feature name:
If screenshot path:
If PRD reference:
Build an initial understanding:
INPUT SUMMARY
─────────────
Type: {figma/description/screenshot/prd}
Screens: {list of identified screens}
Flows: {list of user flows}
Data: {data requirements identified}
Unknown: {areas needing clarification}
Ask up to 5 smart questions based on what's unclear from Step 1. Skip questions already answered by the input.
Scope questions (ask if ambiguous):
Framework questions (ask if tech.md unavailable or incomplete): 3. "Any specific framework constraints? (React, Vue, Next.js, etc.)" — if not in tech.md
Depth question (always ask): 4. Use AskUserQuestion:
Coverage question (ask if scope is Production or In between): 5. Use AskUserQuestion:
For each screen/flow, identify components using Atomic Design taxonomy:
Reference: Full taxonomy table with estimate bands in
docs/extending/frontend-task-breakdown-reference.md→ Atomic Design Taxonomy.
For each component, record:
Present component inventory:
COMPONENT INVENTORY
───────────────────
Atoms: {count} ({reusable}/{new})
Molecules: {count} ({reusable}/{new})
Organisms: {count} ({reusable}/{new})
Templates: {count}
Pages: {count}
Total: {total_count} components
When an API contract is available:
Reference: See
${CLAUDE_PLUGIN_ROOT}/docs/extending/openapi-integration-reference.mdfor code generation decision tree.
For every component at molecule level and above, enumerate states:
| State | What to Define | UI Element |
|---|---|---|
| Default | Initial render appearance | Standard view |
| Loading | During data fetch | Skeleton shimmer or spinner |
| Success | Happy path with data | Populated view |
| Error | API failure or validation error | Error message + retry action |
| Empty | No data available | Illustration + CTA |
| Partial | Cached data while refreshing | Stale data + refresh indicator |
For screens/pages, also enumerate:
Edge cases:
Browser compatibility (if scope includes it):
Build a state matrix:
STATE MATRIX (screens x states)
───────────────────────────────
Default Loading Success Error Empty Partial
Screen A: [x] [x] [x] [x] [x] [ ]
Screen B: [x] [x] [x] [x] [ ] [x]
...
Apply the coverage checklist based on scope selected in Step 2.
Reference: Full coverage checklist (53 items across 7 domains: Accessibility, Responsive, Interaction, Performance, SEO, Infrastructure, Testing) in
docs/extending/frontend-task-breakdown-reference.md→ Coverage Checklist.
For each item, mark: Included / Not applicable / Deferred
Count coverage:
COVERAGE SUMMARY
────────────────
Included: {n} tasks
Not applicable: {n} items
Deferred: {n} items (list reasons)
Build the dependency graph for all identified components:
Standard dependency chains:
Identify:
Format as Mermaid:
graph TD
A[Design Tokens] --> B[Atom Components]
B --> C[Molecule Components]
C --> D[Organism Components]
E[API Client] --> F[Data Hooks]
F --> D
D --> G[Page Assembly]
G --> H[Integration Testing]
Categorize and rate risks:
Technical risks:
Integration risks:
UX risks:
Rate each: Likelihood (Low/Medium/High) x Impact (Low/Medium/High)
Propose mitigation for every Medium+ impact risk.
Present the complete analysis summary:
TASK BREAKDOWN PLAN
═══════════════════
COMPONENTS
──────────
Atoms: {count} (XS) Molecules: {count} (S)
Organisms: {count} (M) Templates: {count} (L)
Pages: {count} (XL) Total: {total}
ESTIMATES
─────────
Total tasks: {task_count}
Critical path: {n} sequential tasks
Parallel tracks: {n} independent streams
COVERAGE
────────
Scope: {MVP/Production/In between}
Included: {n} coverage items
Deferred: {n} items
TOP RISKS
─────────
1. {risk_1} — {likelihood}/{impact} — {mitigation_summary}
2. {risk_2} — {likelihood}/{impact} — {mitigation_summary}
3. {risk_3} — {likelihood}/{impact} — {mitigation_summary}
Use AskUserQuestion:
Do NOT proceed to Phase 2 without explicit approval.
Read template: $JAAN_TEMPLATES_DIR/jaan-to-frontend-task-breakdown.template.md
If tech stack needed, extract sections from tech.md:
#current-stack#frameworks#constraintsFill all template sections with analysis from Phase 1:
Overview section:
Component Inventory section:
 alongside relevant component groupsTask naming convention:
[Action Verb] + [Component/Feature] + [Specific Detail]
Estimate bands (T-shirt sizes, not hours):
Reference: Full estimate bands table (XS–XL with meanings and typical work) in
docs/extending/frontend-task-breakdown-reference.md→ Estimate Bands.
State Machine stubs (for organisms and above):
Reference: State machine stub template (states, events, transitions format) in
docs/extending/frontend-task-breakdown-reference.md→ State Machine Stubs.
Dependency Graph — Mermaid diagram from Step 6
Performance Budget (if scope = Production or In between):
Reference: Performance budget table (LCP, INP, CLS, Bundle targets and optimization tasks) in
docs/extending/frontend-task-breakdown-reference.md→ Performance Budget.
Risk Register — table from Step 7
Coverage Checklist — applicable items from Step 5
Definition of Ready / Definition of Done:
Reference: Full checklists (6 Ready items, 8 Done items) in
docs/extending/frontend-task-breakdown-reference.md→ Definition of Ready / Definition of Done.
Before preview, verify:
$JAAN_* variables) syntax and URL-encoded pathsIf any check fails, fix before preview.
Show the complete task breakdown document.
Use AskUserQuestion:
If approved, set up the output structure:
source "${CLAUDE_PLUGIN_ROOT}/scripts/lib/id-generator.sh"
# Define subdomain directory
SUBDOMAIN_DIR="$JAAN_OUTPUTS_DIR/frontend/task-breakdown"
mkdir -p "$SUBDOMAIN_DIR"
# Generate next ID
NEXT_ID=$(generate_next_id "$SUBDOMAIN_DIR")
# Create folder and file paths (slug from feature name)
slug="{lowercase-hyphenated-feature-name}"
OUTPUT_FOLDER="${SUBDOMAIN_DIR}/${NEXT_ID}-${slug}"
MAIN_FILE="${OUTPUT_FOLDER}/${NEXT_ID}-${slug}.md"
Output Configuration
- ID: {NEXT_ID}
- Folder: $JAAN_OUTPUTS_DIR/frontend/task-breakdown/{NEXT_ID}-{slug}/
- Main file: {NEXT_ID}-{slug}.md
If screenshot paths were provided as input:
Reference: See
${CLAUDE_PLUGIN_ROOT}/docs/extending/asset-embedding-reference.mdfor the asset resolution protocol (path detection, copy rules, markdown embedding).
Source ${CLAUDE_PLUGIN_ROOT}/scripts/lib/asset-handler.sh. For each screenshot: check is_jaan_path — if inside $JAAN_*, reference in-place; if external, ask user before copying. Use resolve_asset_path for markdown-relative paths.
mkdir -p "$OUTPUT_FOLDER"
cat > "$MAIN_FILE" <<'EOF'
{generated task breakdown with Executive Summary}
EOF
source "${CLAUDE_PLUGIN_ROOT}/scripts/lib/index-updater.sh"
add_to_index \
"$SUBDOMAIN_DIR/README.md" \
"$NEXT_ID" \
"${NEXT_ID}-${slug}" \
"{Feature Title}" \
"{1-2 sentence summary: frontend task breakdown for feature}"
✓ Task breakdown written to: $JAAN_OUTPUTS_DIR/frontend/task-breakdown/{NEXT_ID}-{slug}/{NEXT_ID}-{slug}.md ✓ Index updated: $JAAN_OUTPUTS_DIR/frontend/task-breakdown/README.md
"Task breakdown complete."
Note: For detailed state machine definitions skill (
/jaan-to:frontend-state-machine), see roadmap - coming in future release.
Use AskUserQuestion:
Question: "Any feedback on the task breakdown?"
Header: "Feedback"
Options:
Fix now: Update the output file, re-preview, re-write
Learn: Run /jaan-to:learn-add frontend-task-breakdown "{feedback}"
Both: Do both
tech.md detection$JAAN_OUTPUTS_DIR path$JAAN_OUTPUTS_DIR/frontend/task-breakdown/{id}-{slug}/{id}-{slug}.md