From craft-skills
Use when starting a new feature that needs thorough design exploration. This is the most comprehensive workflow: collaborative brainstorming with the user, then planning, then parallel agent development, then browser testing. Use for complex features, unclear requirements, or when the user wants to explore approaches before committing.
npx claudepluginhub alexiolan/craft-skills --plugin craft-skillsThis skill uses the workspace's default tool permissions.
The full design-first development pipeline. Collaborative design exploration with the user, then implementation, then browser testing.
Guides structured brainstorming to refine ideas into approved designs and specs via dialogue, expert consultation, and review loops before implementation. Enforces for all projects.
Guides ideas into approved designs and specs via dialogue: explores context, clarifies requirements one-by-one, proposes approaches with trade-offs, writes reviewed design docs before implementation.
Guides collaborative brainstorming to refine ideas into approved designs and specs before implementation. Use prior to building features, components, or modifying behavior.
Share bugs, ideas, or general feedback.
The full design-first development pipeline. Collaborative design exploration with the user, then implementation, then browser testing.
Pipeline: Brainstorm → Plan → Develop → Browser Test → Report
This pipeline uses a three-tier model strategy to optimize speed, cost, and quality:
| Tier | Model | Used For | Why |
|---|---|---|---|
| Premium | opus | Brainstorming (main conversation), spec writing, spec review agent, integration tasks | Deep reasoning, creative exploration, critical analysis |
| Balanced | sonnet | Context exploration agents, plan review agent, data layer + UI implementation agents | Good balance — doesn't need opus-level reasoning |
| Fast | haiku | Browser test agents | Fast and cheap — UI clicks and text verification |
When dispatching Claude agents, always specify the model parameter explicitly. The main conversation model is controlled by the user — these guidelines apply only to dispatched agents.
The user input is: $ARGUMENTS
Prompt File Number (e.g., 01, 07):
.claude/prompts/{number}*.mdDirect Prompt Text (e.g., Add a pricing modal to the property list):
Empty Input:
First action in the pipeline. Write the profile marker so later steps can gate behavior correctly.
echo -n "claude" > .craft-profile
This is the base /craft profile — Claude only, no Codex, no local LLM. LLM-related steps in this file are gated on this profile and will be skipped. Users who want LLM-assisted review should invoke /craft-local instead.
Run graph tools and LLM bash directly in this conversation — no dedicated agents for these.
Step 1 — Check LM Studio (Bash tool, wait for result):
Profile-gated. Only runs when profile includes llm:
CRAFT_PROFILE=$(cat .craft-profile 2>/dev/null || echo "claude")
case "$CRAFT_PROFILE" in
*llm*)
CRAFT_SCRIPTS=$(find ~/.claude/plugins -name "llm-agent.sh" -path "*/craft-skills/*" -exec dirname {} \; 2>/dev/null | head -1) && curl -s --max-time 2 ${LLM_URL:-http://127.0.0.1:1234} > /dev/null 2>&1 && echo "LLM_AVAILABLE:$CRAFT_SCRIPTS" || echo "LLM_UNAVAILABLE"
;;
*)
echo "LLM_SKIPPED_BY_PROFILE"
;;
esac
Step 2 — Start LLM exploration in background (if available AND profile includes llm):
Run only if Step 1 returned LLM_AVAILABLE (which only happens when the profile includes llm). If Step 1 returned LLM_SKIPPED_BY_PROFILE or LLM_UNAVAILABLE, skip this step.
If eligible, run with Bash tool (run_in_background: true, timeout 300000ms). Self-contained profile check for safety:
CRAFT_PROFILE=$(cat .craft-profile 2>/dev/null || echo "claude")
case "$CRAFT_PROFILE" in
*llm*)
CRAFT_SCRIPTS=$(find ~/.claude/plugins -name "llm-agent.sh" -path "*/craft-skills/*" -exec dirname {} \; 2>/dev/null | head -1)
bash "$CRAFT_SCRIPTS/llm-agent.sh" "Investigate [2-3 domain paths relevant to the feature] for a [feature] feature. Check: 1) What types/services exist in these domains 2) How forms and validation are set up 3) Any related API endpoints. Give a structured summary." <project-root>
;;
*)
echo "LLM_EXPLORATION_SKIPPED_BY_PROFILE"
;;
esac
Do NOT unload — more LLM steps follow (spec review 1.10, plan review 2.4).
Step 3 — Run graph exploration (while LLM processes in background):
Load graph MCP tools via ToolSearch (search for "code-review-graph"), then run:
build_or_update_graph_tool — ensure graph is freshsemantic_search_nodes_tool — search with feature keywords (try 2-3 variations if few results)query_graph_tool with pattern file_summaryquery_graph_tool with imports_of and importers_ofNEVER use get_architecture_overview_tool, list_communities_tool, or detect_changes_tool — they return 90-300K+ chars.
Step 4 — Read project context (in parallel with graph queries):
git log --oneline -10)Scoping rule: Never ask to "explore the whole project." Always scope to specific directories or files.
Fallback — if both LLM and graph are unavailable: Dispatch sonnet agents for exploration.
Before detailed questions, assess scope:
Before asking user questions, investigate (use the exploration results):
Ask questions one at a time to refine the idea:
Once you understand the requirement:
Present the design in sections, scaled to complexity:
Before writing the spec (which now requires a Prior-Art Scan table — see below), ensure the project's reuse contract exists.
if [ ! -f .claude/reuse-index.md ]; then
echo "REUSE_INDEX_MISSING"
else
echo "REUSE_INDEX_PRESENT"
fi
REUSE_INDEX_PRESENT → continue to 1.7.REUSE_INDEX_MISSING → invoke craft-skills:reuse-index via the Skill tool. Non-blocking, one-time-per-project cost. Mirrors the aesthetic-direction gate at 1.8a. Continue once the skill returns (or is skipped).Save the validated design to .claude/plans/specs/YYYY-MM-DD-{feature}-design.md
Prior-Art Scan (MANDATORY section in the spec):
Before saving, include a "Prior-Art Scan" table in the spec for every new concept (type, enum, helper, util, hook, component, shared constant) it introduces. Each row records: the concept, where you searched (graph queries, globs, greps), whether prior art exists, and the decision (reuse / extend / justify new). If .claude/reuse-index.md exists at the project root, consult it before searching and cite matching entries in the row. Common false-negative traps to always search for: date formatting, HTTP clients, toast/notification primitives, icon wrappers, drawer/modal/accordion primitives, enum→label maps, relative-time helpers, string normalizers, pluralization.
Replaces the earlier ambient "UI/UX Review." Fires only when the spec includes UI work, and invokes skills deterministically with transparent gating.
Skip this step unless the spec introduces UI — new components, pages, forms, tables, modals, or modifications to any .tsx/.vue/.svelte file. For backend-only specs, jump to 1.9.
1.8a — Ensure aesthetic direction exists:
if [ ! -f .claude/aesthetic-direction.md ]; then
echo "AESTHETIC_MISSING"
else
echo "AESTHETIC_PRESENT"
fi
If AESTHETIC_MISSING, invoke craft-skills:aesthetic-direction via the Skill tool. The skill generates .claude/aesthetic-direction.md non-blockingly (user can refine later). One-time cost per project.
1.8b — Generate UX brief:
Invoke craft-skills:ux-brief via the Skill tool with the spec path as argument. It will:
complexity: frontmatter, or inferred from keywords like "comparison", "dashboard", "complex-form", "data-dense")frontend-design only) for simple UI or combined mode (frontend-design + ui-ux-pro-max) for complex UI.claude/plans/{feature-dir}/ux-brief.md with diagnosis, prioritized patches, success criteria1.8c — Incorporate brief into spec:
Read the returned ux-brief.md. Fold its key decisions into the spec:
Fallback: if ux-brief skill cannot run (e.g. frontend-design skill not installed), continue without it. Add a note to the spec: > UX brief not generated (skill unavailable). Spec proceeds without design-layer contract.
Review the spec with fresh eyes:
Profile gate — claude+ace:
When CRAFT_PROFILE is claude+ace, SKIP the opus agent spec review below. Instead, run Qwen3.6 in a fixed two-pass review (see pattern below):
CRAFT_PROFILE=$(cat .craft-profile 2>/dev/null || echo "claude")
if [ "$CRAFT_PROFILE" = "claude+ace" ]; then
CRAFT_SCRIPTS=$(find ~/.claude/plugins -name "llm-review.sh" -path "*/craft-skills/*" -exec dirname {} \; 2>/dev/null | head -1)
bash "$CRAFT_SCRIPTS/llm-review.sh" <spec-file-path> "completeness, feasibility, API alignment, architecture compliance, internal consistency, security/safety, reuse/duplication (any new util/type/helper that duplicates an existing shared implementation)"
fi
Review pattern — fixed two-pass consolidation (not a convergence loop):
llm-review.sh on the spec → save findings as Pass Allm-review.sh on the same unchanged spec a second time → save as Pass BRationale: Empirically (validated 2026-05-05, n=5 across two specs) Qwen3.6 in review mode is broad + exploratory — each pass discovers 4-10 findings, with ~30-40% overlap between consecutive passes on an unchanged input. This is high-recall behavior, not flakiness — single-pass findings are usually real issues that the other pass simply prioritized differently. The "loop until 2 consecutive clean" rule from the Gemma era assumed narrow + stable review (1-2 findings, repeated verbatim) which is the opposite of how Qwen behaves. With the new pattern: 2 passes ≈ 2-3 minutes wall time, predictable, and uses Qwen's discovery breadth as a feature rather than fighting it. Adding security/safety to the review prompt catches SSRF / injection / DoS issues in the spec phase, where they're cheapest to fix.
After the loop completes, skip directly to Step 1.11 (user review). Do NOT dispatch the opus agent or the parallel LLM review — Qwen3.6 handles both roles.
For all other profiles, proceed with the existing behavior below.
Spawn a fresh agent (code-reviewer type, opus model) to review the spec with zero prior context. The agent has no knowledge of the brainstorming conversation, so it reviews the spec purely on its own merits against the codebase and backend contracts.
Provide the agent with:
The agent should categorize findings as: Critical / Important / Minor / Suggestions.
Why opus: Spec review is a critical gate — a missed issue here cascades through the entire implementation. This is not the place to save on model cost.
Parallel local LLM review (profile-gated):
Only runs when profile includes llm. Run with Bash tool (run_in_background: true, timeout 300000ms) in parallel with the opus agent:
CRAFT_PROFILE=$(cat .craft-profile 2>/dev/null || echo "claude")
case "$CRAFT_PROFILE" in
*llm*)
CRAFT_SCRIPTS=$(find ~/.claude/plugins -name "llm-agent.sh" -path "*/craft-skills/*" -exec dirname {} \; 2>/dev/null | head -1) && bash "$CRAFT_SCRIPTS/llm-review.sh" <spec-file-path> "completeness, feasibility, API alignment, architecture compliance, security/safety, reuse/duplication (any new util/type/helper that duplicates an existing shared implementation)"
;;
*)
echo "LLM_SPEC_REVIEW_SKIPPED"
;;
esac
Do NOT unload — more LLM steps may follow.
After receiving the review(s):
"Spec written to
<path>. Please review and let me know if you want changes before we plan implementation."
Wait for approval. If changes requested, revise and re-review.
Before defining tasks, map out which files will be created or modified:
Break into bite-sized tasks (2-5 minutes each):
Profile gate — claude+ace:
When CRAFT_PROFILE is claude+ace, SKIP the sonnet agent plan review below. Instead, run Qwen3.6 in a fixed two-pass review (same pattern as Step 1.10):
CRAFT_PROFILE=$(cat .craft-profile 2>/dev/null || echo "claude")
if [ "$CRAFT_PROFILE" = "claude+ace" ]; then
CRAFT_SCRIPTS=$(find ~/.claude/plugins -name "llm-review.sh" -path "*/craft-skills/*" -exec dirname {} \; 2>/dev/null | head -1)
bash "$CRAFT_SCRIPTS/llm-review.sh" <plan-file-path> "spec coverage, task ordering, completeness, risk areas, security/safety, reuse/duplication (flag any new util/type/helper the plan creates that duplicates an existing shared implementation)"
fi
Review pattern: Same fixed-two-pass consolidation as Step 1.10 — run llm-review.sh on the plan twice on the unchanged file, bucket findings into Consensus (both passes) and Single-pass (one pass), fix the legitimate ones, then stop. No convergence loop. After consolidation, unload the model:
bash "$CRAFT_SCRIPTS/llm-unload.sh"
After consolidation, skip directly to Step 2.5 (save and approve). Do NOT dispatch the sonnet agent or the parallel LLM review.
For all other profiles, proceed with the existing behavior below.
Spawn a fresh agent (code-reviewer type, sonnet model) to review the plan with zero prior context.
Provide the agent with:
The agent should categorize findings as: Critical / Important / Minor / Suggestions.
Why sonnet: The plan is a structured breakdown of an already-reviewed spec. The review checks coverage and ordering — systematic work that doesn't require opus-level reasoning.
Parallel supplementary reviews:
run_in_background: true, timeout 300000ms):
CRAFT_PROFILE=$(cat .craft-profile 2>/dev/null || echo "claude")
case "$CRAFT_PROFILE" in
*llm*)
CRAFT_SCRIPTS=$(find ~/.claude/plugins -name "llm-agent.sh" -path "*/craft-skills/*" -exec dirname {} \; 2>/dev/null | head -1) && bash "$CRAFT_SCRIPTS/llm-review.sh" <plan-file-path> "spec coverage, task ordering, completeness, risk areas, security/safety, reuse/duplication (flag any new util/type/helper the plan creates that duplicates an existing shared implementation)"
bash "$CRAFT_SCRIPTS/llm-unload.sh"
;;
*)
echo "LLM_PLAN_REVIEW_SKIPPED"
;;
esac
get_impact_radius_tool on each file from the plan. Catches unintended side effects from modifying shared files. Runs in all profiles (graph is not gated).After receiving the review(s):
Save to .claude/plans/YYYY-MM-DD-{feature}.md
Present summary and wait for user approval.
Invoke craft-skills:develop with the approved plan.
Runs only when UI files were created/modified (check .shared-state.md "Created / Modified Files" for .tsx/.vue/.svelte extensions).
If UI files are present, invoke craft-skills:design-review. It:
.claude/aesthetic-direction.md and the feature's ux-brief.md success criteria.claude/plans/{feature-dir}/design-review.md with PASS / MINOR_ISSUES / MAJOR_ISSUES verdictBased on the verdict:
Skip this phase silently if no UI files changed OR .claude/aesthetic-direction.md does not exist.
After a successful build AND design-review has passed (if applicable), invoke craft-skills:browser-test with the spec/plan.
Summarize the full journey: