From solo-dev-suite
Generates a customized design-exploration loop prompt for an existing project by discovering its stack, domain, and aesthetic, then tailoring references and constraints accordingly. Triggers on requests like "design loop on {project}", "refine the UI of this project", "explore design directions for {project}", "make this look more polished", "visual refresh", "modernize the UI", or "UI audit". Not for greenfield design, CSS debugging, or single-component tweaks — requires a target directory with an existing UI surface to analyze.
How this skill is triggered — by the user, by Claude, or both
Slash command
/solo-dev-suite:design-loopThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Turns a project directory into a customized, multi-loop design exploration prompt. Does **not** execute the loop — produces the prompt that a separate loop runner consumes.
LOOP_PROMPT.mdcontext.jsondata/README.mddata/dimensions.jsondata/references.jsonfixtures/monorepo/README.mdfixtures/monorepo/apps/admin/package.jsonfixtures/monorepo/apps/admin/src/page.tsxfixtures/monorepo/apps/admin/tailwind.config.jsfixtures/monorepo/apps/marketing/package.jsonfixtures/nextjs-dashboard/README.mdfixtures/nextjs-dashboard/package.jsonfixtures/nextjs-dashboard/src/app/page.tsxfixtures/nextjs-dashboard/src/components/Button.tsxfixtures/nextjs-dashboard/src/components/Chart.tsxfixtures/nextjs-dashboard/tailwind.config.tsfixtures/static-site/README.mdfixtures/static-site/index.htmlfixtures/static-site/styles.cssfixtures/streamlit-app/README.mdTurns a project directory into a customized, multi-loop design exploration prompt. Does not execute the loop — produces the prompt that a separate loop runner consumes.
brainstorming skill. This skill exits early if discover.py finds no UI surface.If the user didn't supply one, ask. If the path doesn't exist or isn't a directory, stop and surface that before running anything else.
mkdir -p <target_path>/design-exploration
python "<SKILL_DIR>/scripts/discover.py" <target_path> \
> <target_path>/design-exploration/context.json
Handle two early-exit cases based on what discover.py emits:
project_type == "unknown" with zero domain hits): stop. Tell the user this looks greenfield or backend-only and suggest the brainstorming skill. Do not generate a prompt.apps/admin + apps/marketing): discover.py emits a ui_surfaces array. Ask the user which surface to target, then re-run with --surface apps/admin passed to generate_prompt.py.Before generating the prompt, print these fields from context.json so the user can override:
project_typeui_frameworkstyle_systemproject_typecomponent_dirs and any existing screenshots/mockupsdata_version of the references/dimensions librariesAsk: "Override any of these with --type, --refs, --surface, --hero, or --runner?"
python "<SKILL_DIR>/scripts/generate_prompt.py" \
<target_path>/design-exploration/context.json \
> <target_path>/design-exploration/LOOP_PROMPT.md
python "<SKILL_DIR>/scripts/validate_prompt.py" \
<target_path>/design-exploration/LOOP_PROMPT.md
If validation fails, the template or generator regressed — fix before handing off. Do not ship a prompt that doesn't pass validation.
Print the full path to LOOP_PROMPT.md and the runner invocation. The default is /loop, but any exploration runner works — the prompt itself is runner-agnostic.
Prompt ready: <target_path>/design-exploration/LOOP_PROMPT.md
Suggested invocation: /loop 10m (6 loops)
If the user passed --runner to generate_prompt.py, echo that invocation instead.
Pass hints through generate_prompt.py to skip or correct discovery:
| Flag | Purpose | Default |
|---|---|---|
--type | saas-dashboard | marketing | dev-tool | internal-ops | ecommerce | creative | game | docs | auto-detected |
--refs | Comma-separated reference override, e.g. linear,vercel,stripe | auto-picked from library |
--surface | UI surface path in a monorepo, e.g. apps/admin | first detected |
--loops | Loop count | 6 |
--duration | Per-loop duration | 10m |
--hero | Final hero mockup target | type-appropriate default |
--runner | Runner invocation embedded in handoff | /loop |
--min-viewport | Minimum viewport spec | 1280x800 |
Example:
python generate_prompt.py context.json \
--type creative --refs figma,ableton,arc --loops 8 --runner /loop
Every generated prompt MUST include the items below, and validate_prompt.py asserts each one. If you add a required section, update the validator in the same commit.
manifesto.md + hero mockupdesign-loop/
├── SKILL.md
├── scripts/
│ ├── discover.py # scans target, emits context.json
│ ├── generate_prompt.py # fills template from context
│ └── validate_prompt.py # asserts output contract
├── templates/
│ └── loop-prompt.md.tmpl # parameterized exploration prompt
├── data/
│ ├── references.json # project-type → reference products (versioned)
│ ├── dimensions.json # project-type → exploration dimensions (versioned)
│ └── README.md # schema + allowed project types
├── fixtures/
│ ├── nextjs-dashboard/ # sample + expected outputs
│ ├── streamlit-app/
│ └── static-site/
└── tests/
└── test_pipeline.py # end-to-end fixture diff test
The reference and dimensions libraries are the highest-leverage places to improve output quality. When a generated prompt produces weak design directions, first check whether the references and dimensions matched the project. Edit data/references.json and data/dimensions.json rather than rewriting the template.
Both data files carry a "version" field (e.g. "2026.04"). Bump it on non-trivial edits. generate_prompt.py writes the version into the prompt header and warns when a context.json was produced against an older library version than the current one.
See data/README.md for the full schema, allowed project_type values, and field definitions — edit that doc if you extend the libraries.
Run pytest tests/ after any change to discover.py, generate_prompt.py, the template, or the data files. Fixtures under fixtures/ are synthetic project skeletons with pinned expected outputs; the test diffs the generated context.json and LOOP_PROMPT.md against the expected files and fails loud on drift.
When a fixture's expected output changes legitimately (e.g. you bumped the references library), regenerate and commit the updated expected files in the same PR.
npx claudepluginhub frobinson47/solo-dev-suite --plugin feature-enhanceProvides CDSS development patterns for drug interaction checking, dose validation, clinical scoring (NEWS2, qSOFA), and alert classification integrated into EMR workflows.