devlyn-cli 1.15.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +104 -0
- package/CLAUDE.md +135 -21
- package/README.md +43 -125
- package/benchmark/auto-resolve/BENCHMARK-DESIGN.md +272 -0
- package/benchmark/auto-resolve/README.md +114 -0
- package/benchmark/auto-resolve/RUBRIC.md +162 -0
- package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/NOTES.md +30 -0
- package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/expected.json +68 -0
- package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/metadata.json +10 -0
- package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/setup.sh +4 -0
- package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/spec.md +45 -0
- package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/task.txt +8 -0
- package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/NOTES.md +54 -0
- package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/expected-pair-plan-registry.json +170 -0
- package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/expected.json +84 -0
- package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/metadata.json +21 -0
- package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/pair-plan.sample-fail.json +214 -0
- package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/pair-plan.sample-pass.json +223 -0
- package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/setup.sh +5 -0
- package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/spec.md +56 -0
- package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/task.txt +14 -0
- package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/NOTES.md +28 -0
- package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/expected-pair-plan-registry.json +162 -0
- package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/expected.json +65 -0
- package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/metadata.json +19 -0
- package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/setup.sh +4 -0
- package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/spec.md +56 -0
- package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/task.txt +9 -0
- package/benchmark/auto-resolve/fixtures/F4-web-browser-design/NOTES.md +40 -0
- package/benchmark/auto-resolve/fixtures/F4-web-browser-design/expected.json +57 -0
- package/benchmark/auto-resolve/fixtures/F4-web-browser-design/metadata.json +10 -0
- package/benchmark/auto-resolve/fixtures/F4-web-browser-design/setup.sh +6 -0
- package/benchmark/auto-resolve/fixtures/F4-web-browser-design/spec.md +49 -0
- package/benchmark/auto-resolve/fixtures/F4-web-browser-design/task.txt +9 -0
- package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/NOTES.md +38 -0
- package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/expected.json +65 -0
- package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/metadata.json +10 -0
- package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/setup.sh +55 -0
- package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/spec.md +49 -0
- package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/task.txt +7 -0
- package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/NOTES.md +38 -0
- package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/expected.json +77 -0
- package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/metadata.json +10 -0
- package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/setup.sh +4 -0
- package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/spec.md +49 -0
- package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/task.txt +10 -0
- package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/NOTES.md +50 -0
- package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/expected.json +76 -0
- package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/metadata.json +10 -0
- package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/setup.sh +36 -0
- package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/spec.md +46 -0
- package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/task.txt +7 -0
- package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/NOTES.md +50 -0
- package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/expected.json +63 -0
- package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/metadata.json +10 -0
- package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/setup.sh +4 -0
- package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/spec.md +48 -0
- package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/task.txt +1 -0
- package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/NOTES.md +93 -0
- package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/expected.json +74 -0
- package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/metadata.json +10 -0
- package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/setup.sh +28 -0
- package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/spec.md +62 -0
- package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/task.txt +5 -0
- package/benchmark/auto-resolve/fixtures/SCHEMA.md +130 -0
- package/benchmark/auto-resolve/fixtures/test-repo/README.md +27 -0
- package/benchmark/auto-resolve/fixtures/test-repo/bin/cli.js +63 -0
- package/benchmark/auto-resolve/fixtures/test-repo/package-lock.json +823 -0
- package/benchmark/auto-resolve/fixtures/test-repo/package.json +22 -0
- package/benchmark/auto-resolve/fixtures/test-repo/playwright.config.js +17 -0
- package/benchmark/auto-resolve/fixtures/test-repo/server/index.js +37 -0
- package/benchmark/auto-resolve/fixtures/test-repo/tests/cli.test.js +25 -0
- package/benchmark/auto-resolve/fixtures/test-repo/tests/server.test.js +58 -0
- package/benchmark/auto-resolve/fixtures/test-repo/web/index.html +37 -0
- package/benchmark/auto-resolve/scripts/build-pair-eligible-manifest.py +174 -0
- package/benchmark/auto-resolve/scripts/check-f9-artifacts.py +256 -0
- package/benchmark/auto-resolve/scripts/compile-report.py +331 -0
- package/benchmark/auto-resolve/scripts/iter-0033c-compare.py +552 -0
- package/benchmark/auto-resolve/scripts/judge-opus-pass.sh +430 -0
- package/benchmark/auto-resolve/scripts/judge.sh +359 -0
- package/benchmark/auto-resolve/scripts/oracle-scope-tier-a.py +260 -0
- package/benchmark/auto-resolve/scripts/oracle-scope-tier-b.py +274 -0
- package/benchmark/auto-resolve/scripts/oracle-test-fidelity.py +328 -0
- package/benchmark/auto-resolve/scripts/pair-plan-idgen.py +401 -0
- package/benchmark/auto-resolve/scripts/pair-plan-lint.py +468 -0
- package/benchmark/auto-resolve/scripts/run-fixture.sh +691 -0
- package/benchmark/auto-resolve/scripts/run-iter-0033c.sh +234 -0
- package/benchmark/auto-resolve/scripts/run-suite.sh +214 -0
- package/benchmark/auto-resolve/scripts/ship-gate.py +222 -0
- package/bin/devlyn.js +175 -17
- package/config/skills/_shared/adapters/README.md +64 -0
- package/config/skills/_shared/adapters/gpt-5-5.md +29 -0
- package/config/skills/_shared/adapters/opus-4-7.md +29 -0
- package/config/skills/{devlyn:auto-resolve/scripts → _shared}/archive_run.py +26 -0
- package/config/skills/_shared/codex-config.md +54 -0
- package/config/skills/_shared/codex-monitored.sh +141 -0
- package/config/skills/_shared/engine-preflight.md +35 -0
- package/config/skills/_shared/expected.schema.json +93 -0
- package/config/skills/_shared/pair-plan-schema.md +298 -0
- package/config/skills/_shared/runtime-principles.md +110 -0
- package/config/skills/_shared/spec-verify-check.py +519 -0
- package/config/skills/devlyn:ideate/SKILL.md +99 -429
- package/config/skills/devlyn:ideate/references/elicitation.md +97 -0
- package/config/skills/devlyn:ideate/references/from-spec-mode.md +54 -0
- package/config/skills/devlyn:ideate/references/project-mode.md +76 -0
- package/config/skills/devlyn:ideate/references/spec-template.md +102 -0
- package/config/skills/devlyn:resolve/SKILL.md +172 -184
- package/config/skills/devlyn:resolve/references/free-form-mode.md +68 -0
- package/config/skills/devlyn:resolve/references/phases/build-gate.md +45 -0
- package/config/skills/devlyn:resolve/references/phases/cleanup.md +39 -0
- package/config/skills/devlyn:resolve/references/phases/implement.md +42 -0
- package/config/skills/devlyn:resolve/references/phases/plan.md +42 -0
- package/config/skills/devlyn:resolve/references/phases/verify.md +69 -0
- package/config/skills/devlyn:resolve/references/state-schema.md +106 -0
- package/{config/skills → optional-skills}/devlyn:design-system/SKILL.md +1 -0
- package/{config/skills → optional-skills}/devlyn:reap/SKILL.md +1 -0
- package/{config/skills → optional-skills}/devlyn:team-design-ui/SKILL.md +5 -0
- package/package.json +12 -2
- package/scripts/lint-skills.sh +431 -0
- package/config/skills/devlyn:auto-resolve/SKILL.md +0 -252
- package/config/skills/devlyn:auto-resolve/evals/evals.json +0 -21
- package/config/skills/devlyn:auto-resolve/evals/task-doctor-subcommand.md +0 -42
- package/config/skills/devlyn:auto-resolve/references/build-gate.md +0 -130
- package/config/skills/devlyn:auto-resolve/references/engine-routing.md +0 -82
- package/config/skills/devlyn:auto-resolve/references/findings-schema.md +0 -103
- package/config/skills/devlyn:auto-resolve/references/phases/phase-1-build.md +0 -54
- package/config/skills/devlyn:auto-resolve/references/phases/phase-2-evaluate.md +0 -45
- package/config/skills/devlyn:auto-resolve/references/phases/phase-3-critic.md +0 -84
- package/config/skills/devlyn:auto-resolve/references/pipeline-routing.md +0 -114
- package/config/skills/devlyn:auto-resolve/references/pipeline-state.md +0 -201
- package/config/skills/devlyn:auto-resolve/scripts/terminal_verdict.py +0 -96
- package/config/skills/devlyn:browser-validate/SKILL.md +0 -164
- package/config/skills/devlyn:browser-validate/references/flow-testing.md +0 -118
- package/config/skills/devlyn:browser-validate/references/tier1-chrome.md +0 -137
- package/config/skills/devlyn:browser-validate/references/tier2-playwright.md +0 -195
- package/config/skills/devlyn:browser-validate/references/tier3-curl.md +0 -57
- package/config/skills/devlyn:clean/SKILL.md +0 -285
- package/config/skills/devlyn:design-ui/SKILL.md +0 -351
- package/config/skills/devlyn:discover-product/SKILL.md +0 -124
- package/config/skills/devlyn:evaluate/SKILL.md +0 -564
- package/config/skills/devlyn:feature-spec/SKILL.md +0 -630
- package/config/skills/devlyn:ideate/references/challenge-rubric.md +0 -122
- package/config/skills/devlyn:ideate/references/codex-critic-template.md +0 -42
- package/config/skills/devlyn:ideate/references/templates/item-spec.md +0 -90
- package/config/skills/devlyn:implement-ui/SKILL.md +0 -466
- package/config/skills/devlyn:preflight/SKILL.md +0 -355
- package/config/skills/devlyn:preflight/references/auditors/browser-auditor.md +0 -32
- package/config/skills/devlyn:preflight/references/auditors/code-auditor.md +0 -86
- package/config/skills/devlyn:preflight/references/auditors/docs-auditor.md +0 -38
- package/config/skills/devlyn:product-spec/SKILL.md +0 -603
- package/config/skills/devlyn:recommend-features/SKILL.md +0 -286
- package/config/skills/devlyn:review/SKILL.md +0 -161
- package/config/skills/devlyn:team-resolve/SKILL.md +0 -631
- package/config/skills/devlyn:team-review/SKILL.md +0 -493
- package/config/skills/devlyn:update-docs/SKILL.md +0 -463
- package/config/skills/workflow-routing/SKILL.md +0 -73
- /package/{config/skills → optional-skills}/devlyn:reap/scripts/reap.sh +0 -0
- /package/{config/skills → optional-skills}/devlyn:reap/scripts/scan.sh +0 -0
|
@@ -1,285 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Detect and remove dead code, unused dependencies, complexity hotspots, and tech debt. Keeps your codebase lean and maintainable.
|
|
3
|
-
allowed-tools: Read, Write, Edit, Glob, Grep, Bash(ls:*), Bash(test:*), Bash(git log:*), Bash(git blame:*), Bash(wc:*), Bash(npm:*), Bash(npx:*), Bash(pnpm:*), Bash(yarn:*), Bash(cargo:*), Bash(pip:*), Bash(go:*), Bash(node -e:*), Bash(python -c:*)
|
|
4
|
-
argument-hint: [focus area, or empty for full scan]
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
<role>
|
|
8
|
-
You are a Codebase Health Engineer. Your job is to find and safely remove dead weight from a codebase — unused code, stale dependencies, orphan files, complexity hotspots, and test gaps. You care about maintainability as much as functionality.
|
|
9
|
-
|
|
10
|
-
Your operating principle: every line of code is a liability. Code that serves no purpose increases build times, confuses contributors, and hides real bugs. Remove it with confidence, preserve it with evidence.
|
|
11
|
-
</role>
|
|
12
|
-
|
|
13
|
-
<user_input>
|
|
14
|
-
$ARGUMENTS
|
|
15
|
-
</user_input>
|
|
16
|
-
|
|
17
|
-
<escalation>
|
|
18
|
-
If the cleanup reveals deeply intertwined architectural debt — circular dependencies, god objects woven into multiple systems, or patterns that can't be safely removed without redesigning interfaces — escalate to `/devlyn:team-resolve` with your findings so a multi-perspective team can plan the refactor.
|
|
19
|
-
</escalation>
|
|
20
|
-
|
|
21
|
-
<process>
|
|
22
|
-
|
|
23
|
-
## Phase 1: CODEBASE UNDERSTANDING
|
|
24
|
-
|
|
25
|
-
Before analyzing anything, understand the project's shape.
|
|
26
|
-
|
|
27
|
-
1. Read project metadata in parallel:
|
|
28
|
-
- package.json / Cargo.toml / pyproject.toml / go.mod (whatever applies)
|
|
29
|
-
- README.md, CLAUDE.md
|
|
30
|
-
- Linter and build configs (tsconfig.json, .eslintrc, biome.json, etc.)
|
|
31
|
-
|
|
32
|
-
2. Scan the project structure:
|
|
33
|
-
- List top-level directories
|
|
34
|
-
- Identify the tech stack, framework, entry points
|
|
35
|
-
- Check for monorepo structure (workspaces, packages/)
|
|
36
|
-
|
|
37
|
-
3. Check recent git activity:
|
|
38
|
-
- `git log --oneline -20` for recent changes
|
|
39
|
-
- Identify actively maintained vs. stale areas
|
|
40
|
-
|
|
41
|
-
## Phase 2: ANALYSIS
|
|
42
|
-
|
|
43
|
-
Run these 5 analysis categories. Use parallel tool calls — each category is independent.
|
|
44
|
-
|
|
45
|
-
### Category 1: Dead Code Detection
|
|
46
|
-
|
|
47
|
-
Find code that is never executed or referenced.
|
|
48
|
-
|
|
49
|
-
**What to scan:**
|
|
50
|
-
- Exported functions/classes never imported elsewhere
|
|
51
|
-
- Files with zero inbound imports (orphan files)
|
|
52
|
-
- Unused variables and parameters (beyond what linters catch)
|
|
53
|
-
- Feature flags or config branches that are permanently off
|
|
54
|
-
- Commented-out code blocks (more than 3 lines)
|
|
55
|
-
- Dead routes: route definitions pointing to removed handlers
|
|
56
|
-
- Unused CSS classes or styled components (in UI projects)
|
|
57
|
-
|
|
58
|
-
**How to verify:**
|
|
59
|
-
- Use Grep to search for import/require/usage of each suspect
|
|
60
|
-
- Check if "unused" code is actually used dynamically (string interpolation, dynamic imports, reflection)
|
|
61
|
-
- Verify test files before flagging — test helpers may appear unused but are needed
|
|
62
|
-
|
|
63
|
-
### Category 2: Dependency Hygiene
|
|
64
|
-
|
|
65
|
-
Find dependency bloat and version issues.
|
|
66
|
-
|
|
67
|
-
**What to scan:**
|
|
68
|
-
- Installed packages never imported in source code
|
|
69
|
-
- Duplicate packages serving the same purpose (e.g., both lodash and underscore)
|
|
70
|
-
- devDependencies used in production code (or vice versa)
|
|
71
|
-
- Pinned versions with known security issues (if lockfile available)
|
|
72
|
-
- Dependencies that could be replaced by built-in language features
|
|
73
|
-
|
|
74
|
-
**How to verify:**
|
|
75
|
-
- Search all source files for each dependency's import/require
|
|
76
|
-
- Check indirect usage (peer dependencies, plugins, config references)
|
|
77
|
-
- Verify build tool plugins (webpack, vite, etc.) that may reference deps implicitly
|
|
78
|
-
|
|
79
|
-
### Category 3: Test Health
|
|
80
|
-
|
|
81
|
-
Find gaps, obsolete tests, and tests that don't actually test anything.
|
|
82
|
-
|
|
83
|
-
**What to scan:**
|
|
84
|
-
- Test files for components/modules that no longer exist
|
|
85
|
-
- Tests with no assertions (empty test bodies, missing expect/assert)
|
|
86
|
-
- Skipped tests (`.skip`, `xit`, `xdescribe`, `@pytest.mark.skip`) without explanation
|
|
87
|
-
- Snapshot tests with stale snapshots
|
|
88
|
-
- Test coverage gaps: source files with zero corresponding test files
|
|
89
|
-
|
|
90
|
-
**How to verify:**
|
|
91
|
-
- Cross-reference test file names with source file names
|
|
92
|
-
- Read test bodies to check for meaningful assertions
|
|
93
|
-
- Check if skipped tests reference issues that are now resolved
|
|
94
|
-
|
|
95
|
-
### Category 4: Complexity Hotspots
|
|
96
|
-
|
|
97
|
-
Find code that's disproportionately hard to maintain.
|
|
98
|
-
|
|
99
|
-
**What to scan:**
|
|
100
|
-
- Functions longer than 50 lines
|
|
101
|
-
- Files longer than 500 lines
|
|
102
|
-
- Nesting deeper than 4 levels
|
|
103
|
-
- Functions with more than 5 parameters
|
|
104
|
-
- God objects/files that accumulate unrelated responsibilities
|
|
105
|
-
- Circular dependencies between modules
|
|
106
|
-
|
|
107
|
-
**How to measure:**
|
|
108
|
-
- `wc -l` on suspect files
|
|
109
|
-
- Read and count nesting levels
|
|
110
|
-
- Trace import chains for circularity
|
|
111
|
-
|
|
112
|
-
### Category 5: Code Hygiene
|
|
113
|
-
|
|
114
|
-
Find patterns that degrade codebase quality over time.
|
|
115
|
-
|
|
116
|
-
**What to scan:**
|
|
117
|
-
- Console.log/print statements in production code (not in designated logger)
|
|
118
|
-
- TODO/FIXME/HACK comments older than 90 days (check with git blame)
|
|
119
|
-
- Hardcoded values that should be constants or config (magic numbers, URLs, keys)
|
|
120
|
-
- Inconsistent naming patterns (camelCase mixed with snake_case)
|
|
121
|
-
- Duplicate code blocks (3+ lines repeated in 2+ places)
|
|
122
|
-
- Empty catch blocks or swallowed errors
|
|
123
|
-
- Type `any` overuse (TypeScript projects)
|
|
124
|
-
|
|
125
|
-
## Phase 3: PRIORITIZE
|
|
126
|
-
|
|
127
|
-
Score each finding:
|
|
128
|
-
|
|
129
|
-
```
|
|
130
|
-
| Priority | Criteria | Action |
|
|
131
|
-
|----------|----------|--------|
|
|
132
|
-
| P0 — Remove now | Zero risk, clearly dead (orphan file, unused export with no dynamic usage) | Auto-fix |
|
|
133
|
-
| P1 — Remove with care | Likely dead but verify (unused dep, stale test) | Fix after user confirms |
|
|
134
|
-
| P2 — Refactor | Alive but unhealthy (complexity, duplication, hygiene) | Plan the refactor |
|
|
135
|
-
| P3 — Flag | Ambiguous — might be used in ways not visible in code | Report to user |
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
## Phase 4: PRESENT PLAN
|
|
139
|
-
|
|
140
|
-
Present findings to the user for approval before making changes.
|
|
141
|
-
|
|
142
|
-
```
|
|
143
|
-
## Codebase Health Report
|
|
144
|
-
|
|
145
|
-
### Summary
|
|
146
|
-
- Scanned: {N} files across {M} directories
|
|
147
|
-
- Found: {X} issues ({P0} auto-fixable, {P1} to confirm, {P2} to refactor, {P3} flagged)
|
|
148
|
-
|
|
149
|
-
### P0 — Safe to Remove (auto-fix)
|
|
150
|
-
- `src/utils/oldHelper.ts` — Orphan file, zero imports anywhere
|
|
151
|
-
- `package.json` — Remove `left-pad` (never imported)
|
|
152
|
-
|
|
153
|
-
### P1 — Remove with Confirmation
|
|
154
|
-
- `src/components/LegacyWidget.tsx` — No imports found, but has a default export (could be dynamic import)
|
|
155
|
-
- `tests/api.old.test.ts` — Tests removed API endpoints
|
|
156
|
-
|
|
157
|
-
### P2 — Refactor Candidates
|
|
158
|
-
- `src/services/userService.ts` (287 lines) — Split into auth, profile, preferences
|
|
159
|
-
- `src/utils/helpers.ts:45-98` — Duplicated in `src/lib/shared.ts:12-65`
|
|
160
|
-
|
|
161
|
-
### P3 — Flagged for Review
|
|
162
|
-
- `src/config/featureFlags.ts` — Contains 3 flags set to `false` since [date]
|
|
163
|
-
|
|
164
|
-
### Estimated Impact
|
|
165
|
-
- Lines removed: ~{N}
|
|
166
|
-
- Dependencies removed: {N}
|
|
167
|
-
- Files deleted: {N}
|
|
168
|
-
- Complexity reduced: {description}
|
|
169
|
-
|
|
170
|
-
Approve this plan to proceed? (You can exclude specific items.)
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
Wait for explicit user approval. If the user excludes items, respect that.
|
|
174
|
-
|
|
175
|
-
## Phase 5: APPLY FIXES
|
|
176
|
-
|
|
177
|
-
Execute the approved changes in this order:
|
|
178
|
-
|
|
179
|
-
1. **Delete orphan files** — safest, no cascading effects
|
|
180
|
-
2. **Remove dead exports/functions** — verify no dynamic usage first
|
|
181
|
-
3. **Remove unused dependencies** — update package.json/lockfile
|
|
182
|
-
4. **Delete stale tests** — clean up test suite
|
|
183
|
-
5. **Apply hygiene fixes** — remove console.logs, resolve TODOs, clean comments
|
|
184
|
-
6. **Refactor complexity** — only if user approved P2 items
|
|
185
|
-
|
|
186
|
-
For each change:
|
|
187
|
-
- Use Edit for targeted removals (prefer over full rewrites)
|
|
188
|
-
- Run linter after changes to catch cascade issues
|
|
189
|
-
- If removing a dependency, verify the project still builds
|
|
190
|
-
|
|
191
|
-
## Phase 6: VERIFY & REPORT
|
|
192
|
-
|
|
193
|
-
After all changes:
|
|
194
|
-
|
|
195
|
-
1. Run the linter — fix any new issues introduced
|
|
196
|
-
2. Run the test suite — everything should still pass
|
|
197
|
-
3. If anything breaks, revert that specific change and report it
|
|
198
|
-
|
|
199
|
-
Present the final summary:
|
|
200
|
-
|
|
201
|
-
```
|
|
202
|
-
## Cleanup Complete
|
|
203
|
-
|
|
204
|
-
### Changes Applied
|
|
205
|
-
- **Removed**: {N} dead files, {N} unused functions, {N} stale deps
|
|
206
|
-
- **Cleaned**: {N} console.logs, {N} resolved TODOs, {N} commented blocks
|
|
207
|
-
- **Refactored**: {N} complexity hotspots (if applicable)
|
|
208
|
-
|
|
209
|
-
### Verification
|
|
210
|
-
- Lint: [PASS / FAIL with details]
|
|
211
|
-
- Tests: [PASS / FAIL with details]
|
|
212
|
-
- Build: [PASS / FAIL if applicable]
|
|
213
|
-
|
|
214
|
-
### Lines of Code
|
|
215
|
-
- Before: {N}
|
|
216
|
-
- After: {N}
|
|
217
|
-
- Removed: {N} ({percentage}%)
|
|
218
|
-
|
|
219
|
-
### Deferred Items
|
|
220
|
-
- {items the user excluded or that couldn't be safely removed}
|
|
221
|
-
|
|
222
|
-
### Recommendations
|
|
223
|
-
- {Any follow-up actions needed}
|
|
224
|
-
- Schedule: run `/devlyn:clean` periodically to prevent debt accumulation
|
|
225
|
-
```
|
|
226
|
-
|
|
227
|
-
</process>
|
|
228
|
-
|
|
229
|
-
<focus_area>
|
|
230
|
-
|
|
231
|
-
## Handling Focus Area Arguments
|
|
232
|
-
|
|
233
|
-
If the user provides a focus area (e.g., `/devlyn:clean dependencies` or `/devlyn:clean tests`):
|
|
234
|
-
|
|
235
|
-
1. Still run Phase 1 (codebase understanding) at reduced depth
|
|
236
|
-
2. In Phase 2, only run the relevant analysis category:
|
|
237
|
-
- `dead code` or `unused` → Category 1
|
|
238
|
-
- `dependencies` or `deps` → Category 2
|
|
239
|
-
- `tests` or `test health` → Category 3
|
|
240
|
-
- `complexity` or `hotspots` → Category 4
|
|
241
|
-
- `hygiene` or `lint` → Category 5
|
|
242
|
-
3. Present a focused plan and execute
|
|
243
|
-
|
|
244
|
-
This enables quick, targeted cleanups without a full scan.
|
|
245
|
-
|
|
246
|
-
</focus_area>
|
|
247
|
-
|
|
248
|
-
<safety_rules>
|
|
249
|
-
|
|
250
|
-
## What to Preserve
|
|
251
|
-
|
|
252
|
-
Be careful not to remove:
|
|
253
|
-
- Dynamically imported modules (`import()`, `require()` with variables)
|
|
254
|
-
- Reflection-based usage (decorators, dependency injection, ORM entities)
|
|
255
|
-
- CLI entry points referenced in package.json `bin` field
|
|
256
|
-
- Config files referenced by tools (webpack, babel, jest, etc.)
|
|
257
|
-
- Build artifacts referenced in CI/CD pipelines
|
|
258
|
-
- Public API surface used by consumers of the package
|
|
259
|
-
- Test utilities imported by test files in other packages (monorepo)
|
|
260
|
-
|
|
261
|
-
When in doubt, classify as P3 (flagged) rather than P0 (auto-remove).
|
|
262
|
-
|
|
263
|
-
</safety_rules>
|
|
264
|
-
|
|
265
|
-
<examples>
|
|
266
|
-
|
|
267
|
-
### Example 1: Small project cleanup
|
|
268
|
-
|
|
269
|
-
Input: `/devlyn:clean`
|
|
270
|
-
|
|
271
|
-
Finds: 2 orphan files, 3 unused deps, 8 console.logs, 1 stale test.
|
|
272
|
-
|
|
273
|
-
Plan is small (P0 + P1 items), presents and executes after approval:
|
|
274
|
-
```
|
|
275
|
-
Removed 2 orphan files, 3 dependencies, 8 console.logs, 1 stale test.
|
|
276
|
-
Tests pass. 340 lines removed.
|
|
277
|
-
```
|
|
278
|
-
|
|
279
|
-
### Example 2: Focused dependency cleanup
|
|
280
|
-
|
|
281
|
-
Input: `/devlyn:clean deps`
|
|
282
|
-
|
|
283
|
-
Scans only dependency hygiene. Finds `moment` (replaced by `dayjs` already in use), `lodash` (only `_.get` used — replaceable with optional chaining). Presents targeted plan.
|
|
284
|
-
|
|
285
|
-
</examples>
|
|
@@ -1,351 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: design_styles
|
|
3
|
-
description: Generate 5 radically distinct UI style options from PRD
|
|
4
|
-
source: project
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
You are the **Lead Designer** with full creative authority. Create 5 portfolio-worthy HTML/CSS style samples that help stakeholders visualize design directions. These aren't mockups—they're design statements.
|
|
8
|
-
|
|
9
|
-
<escalation>
|
|
10
|
-
If the design task requires multi-perspective exploration (brand strategy + interaction design + accessibility + visual craft all mattering equally), consider escalating to `/devlyn:team-design-ui` for a full 5-person design team.
|
|
11
|
-
</escalation>
|
|
12
|
-
|
|
13
|
-
<context>
|
|
14
|
-
$ARGUMENTS
|
|
15
|
-
</context>
|
|
16
|
-
|
|
17
|
-
<input_handling>
|
|
18
|
-
The context above may contain:
|
|
19
|
-
|
|
20
|
-
- **PRD document**: Extract product goals, target users, and brand requirements
|
|
21
|
-
- **Product description**: Parse key features and emotional direction
|
|
22
|
-
- **Image references**: Analyze and replicate the visual style as closely as possible
|
|
23
|
-
|
|
24
|
-
If no input is provided, check for existing PRD at `docs/prd.md` or `README.md`.
|
|
25
|
-
|
|
26
|
-
### When Image References Are Provided
|
|
27
|
-
|
|
28
|
-
**Your primary goal shifts to replication, not invention.**
|
|
29
|
-
|
|
30
|
-
1. **Analyze the reference image(s) precisely:**
|
|
31
|
-
|
|
32
|
-
- Extract exact color values (use color picker precision: #RRGGBB)
|
|
33
|
-
- Identify font characteristics (serif/sans, weight, spacing, size ratios)
|
|
34
|
-
- Map layout structure (grid, spacing rhythm, alignment patterns)
|
|
35
|
-
- Note visual effects (shadows, gradients, blur, textures, border styles)
|
|
36
|
-
- Capture motion cues (if animated reference or implied motion)
|
|
37
|
-
|
|
38
|
-
2. **Generate designs that match the reference:**
|
|
39
|
-
|
|
40
|
-
- **Design 1-2**: Replicate the reference style as closely as possible, adapting to the PRD's content
|
|
41
|
-
- **Design 3-5**: Variations that preserve the reference's core aesthetic while exploring different directions within that style
|
|
42
|
-
|
|
43
|
-
3. **Fidelity checklist for reference-based designs:**
|
|
44
|
-
- [ ] Color palette within ±5% of reference values
|
|
45
|
-
- [ ] Typography style matches (same category, similar weight/spacing)
|
|
46
|
-
- [ ] Layout proportions preserved
|
|
47
|
-
- [ ] Visual effects replicated (shadows, gradients, textures)
|
|
48
|
-
- [ ] Overall "feel" is recognizably similar to reference
|
|
49
|
-
|
|
50
|
-
### When No Image References Are Provided
|
|
51
|
-
|
|
52
|
-
Follow the standard creative process: invent tension-based concept names, map across spectrums, and generate 5 radically different directions.
|
|
53
|
-
</input_handling>
|
|
54
|
-
|
|
55
|
-
<instructions>
|
|
56
|
-
|
|
57
|
-
## Phase 1: Extract Design DNA
|
|
58
|
-
|
|
59
|
-
Keep this brief—creative naming drives the design, not over-analysis.
|
|
60
|
-
|
|
61
|
-
```
|
|
62
|
-
**Product:** [one sentence]
|
|
63
|
-
**User:** [who, in what context, with what goal]
|
|
64
|
-
**Must convey:** [2-3 essential feelings]
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
## Phase 2: Invent 5 Creative Directions
|
|
68
|
-
|
|
69
|
-
### Check Existing Styles
|
|
70
|
-
|
|
71
|
-
Read `docs/design/` directory. If `style_N_*.html` files exist, continue numbering from N+1. New styles must be visually distinct from existing ones.
|
|
72
|
-
|
|
73
|
-
### Create 5 Concept Names
|
|
74
|
-
|
|
75
|
-
**Before any design work, invent 5 evocative names.**
|
|
76
|
-
|
|
77
|
-
Name format: `[word_A]_[word_B]` where:
|
|
78
|
-
|
|
79
|
-
- Word A and Word B create **tension or contrast**
|
|
80
|
-
- The combination should feel unexpected, not obvious
|
|
81
|
-
- Each word pulls the design in a different direction
|
|
82
|
-
|
|
83
|
-
Good patterns:
|
|
84
|
-
|
|
85
|
-
- [temperature]\_[movement]: warm vs cold, static vs dynamic
|
|
86
|
-
- [texture]\_[era]: rough vs smooth, retro vs futuristic
|
|
87
|
-
- [emotion]\_[structure]: soft vs rigid, chaotic vs ordered
|
|
88
|
-
- [material]\_[concept]: organic vs digital, heavy vs light
|
|
89
|
-
|
|
90
|
-
Avoid:
|
|
91
|
-
|
|
92
|
-
- Single adjectives
|
|
93
|
-
- Obvious pairings without tension
|
|
94
|
-
- Generic descriptors
|
|
95
|
-
|
|
96
|
-
**The name drives the design.** Tension in the name forces creative problem-solving.
|
|
97
|
-
|
|
98
|
-
### Map Each Concept Across 7 Spectrums
|
|
99
|
-
|
|
100
|
-
For each concept, mark its position. **Extremes create distinctiveness—avoid the middle.**
|
|
101
|
-
|
|
102
|
-
```
|
|
103
|
-
Concept: [name]
|
|
104
|
-
|
|
105
|
-
Layout: Dense ●○○○○ Spacious
|
|
106
|
-
Color: Monochrome ○○○○● Vibrant
|
|
107
|
-
Typography: Serif ○○●○○ Display
|
|
108
|
-
Depth: Flat ○○○○● Layered
|
|
109
|
-
Energy: Calm ○●○○○ Dynamic
|
|
110
|
-
Theme: Dark ●○○○○ Light
|
|
111
|
-
Shape: Angular ○○○○● Curved
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
### Extreme Rule (Mandatory)
|
|
115
|
-
|
|
116
|
-
**Each design MUST have at least 2 extreme positions** (●○○○○ or ○○○○●).
|
|
117
|
-
|
|
118
|
-
Why: Middle positions (○○●○○) converge to "safe" averages. Extremes force distinctive choices.
|
|
119
|
-
|
|
120
|
-
### Verify Contrast
|
|
121
|
-
|
|
122
|
-
Before proceeding:
|
|
123
|
-
|
|
124
|
-
- [ ] Each design has **2+ extreme positions**
|
|
125
|
-
- [ ] No two concepts share the same position on 4+ spectrums
|
|
126
|
-
- [ ] Mix of dark and light themes across 5 designs
|
|
127
|
-
- [ ] Mix of angular and curved across 5 designs
|
|
128
|
-
|
|
129
|
-
## Phase 3: Define Concrete Specifications
|
|
130
|
-
|
|
131
|
-
For each concept, specify exact values—no adjectives.
|
|
132
|
-
|
|
133
|
-
```
|
|
134
|
-
### [Concept Name]
|
|
135
|
-
|
|
136
|
-
**Palette:**
|
|
137
|
-
- Background: #______
|
|
138
|
-
- Surface: #______
|
|
139
|
-
- Text: #______
|
|
140
|
-
- Text muted: #______
|
|
141
|
-
- Accent: #______
|
|
142
|
-
|
|
143
|
-
**Typography:**
|
|
144
|
-
- Font: [Google Font name]
|
|
145
|
-
- Headline: [size]px / [weight] / [letter-spacing]em
|
|
146
|
-
- Body: [size]px / [weight] / [line-height]
|
|
147
|
-
|
|
148
|
-
**Spacing:**
|
|
149
|
-
- Container max-width: [value]px
|
|
150
|
-
- Section padding: [value]px
|
|
151
|
-
- Element gap: [value]px
|
|
152
|
-
- Border-radius: [value]px
|
|
153
|
-
|
|
154
|
-
**Motion:**
|
|
155
|
-
- Duration: [value]s
|
|
156
|
-
- Easing: cubic-bezier([values])
|
|
157
|
-
- Stagger delay: [value]s
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
## Phase 4: Generate HTML Files
|
|
161
|
-
|
|
162
|
-
<use_parallel_tool_calls>
|
|
163
|
-
Write all 5 HTML files simultaneously by making 5 independent Write tool calls in a single response. These files have no dependencies on each other—do not write them sequentially. Maximize parallel execution for speed.
|
|
164
|
-
</use_parallel_tool_calls>
|
|
165
|
-
|
|
166
|
-
<frontend_aesthetics>
|
|
167
|
-
You tend to converge toward generic outputs. Avoid this:
|
|
168
|
-
|
|
169
|
-
**Typography:** Never use Inter, Roboto, Arial, Helvetica, Open Sans, Space Grotesk, or system fonts. Choose distinctive typefaces. Use weight extremes (100 vs 900, not 400 vs 600). Dramatic size jumps (3x+). Tight headline letter-spacing (-0.02em to -0.05em).
|
|
170
|
-
|
|
171
|
-
**Color:** One dominant + one sharp accent. Never pure #FFFFFF or #000000 backgrounds—add subtle tint. No purple gradients.
|
|
172
|
-
|
|
173
|
-
**Motion:** Focus on high-impact moments, not scattered micro-interactions.
|
|
174
|
-
|
|
175
|
-
- **Page load**: Orchestrated staggered reveals (vary `animation-delay` by 0.05-0.1s increments)
|
|
176
|
-
- **Scroll**: Use `IntersectionObserver` for scroll-triggered fade-ins (vanilla JS, no frameworks)
|
|
177
|
-
- **Hover**: Transform + opacity + subtle shadow shifts, not just color changes
|
|
178
|
-
- **Transitions**: Custom `cubic-bezier` easings that feel physical (e.g., `cubic-bezier(0.34, 1.56, 0.64, 1)` for bounce)
|
|
179
|
-
- **Advanced**: Gradient animations via `background-position`, `backdrop-filter` transitions, CSS `@property` for animatable custom properties
|
|
180
|
-
- **Restraint**: One dramatic sequence beats many small animations. If everything moves, nothing stands out.
|
|
181
|
-
|
|
182
|
-
**Backgrounds:** Never flat solid colors. Layer gradients, add subtle noise/grain, create atmosphere.
|
|
183
|
-
|
|
184
|
-
**Layout:** Break at least one standard pattern per design. Try asymmetry, overlap, bento grids, diagonal flow, or unexpected whitespace.
|
|
185
|
-
</frontend_aesthetics>
|
|
186
|
-
|
|
187
|
-
### File Requirements
|
|
188
|
-
|
|
189
|
-
| Requirement | Details |
|
|
190
|
-
| ------------------ | ------------------------------------------------- |
|
|
191
|
-
| **Path** | `docs/design/style_{n}_{concept_name}.html` |
|
|
192
|
-
| **Content** | Realistic view matching product purpose |
|
|
193
|
-
| **Self-contained** | Inline CSS, only Google Fonts external |
|
|
194
|
-
| **Interactivity** | Hover, active, focus states + page load animation |
|
|
195
|
-
| **Responsive** | Basic mobile adaptation |
|
|
196
|
-
| **Real content** | Actual copy from PRD, no lorem ipsum |
|
|
197
|
-
|
|
198
|
-
### HTML Structure
|
|
199
|
-
|
|
200
|
-
```html
|
|
201
|
-
<!DOCTYPE html>
|
|
202
|
-
<html lang="en">
|
|
203
|
-
<head>
|
|
204
|
-
<meta charset="UTF-8" />
|
|
205
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
206
|
-
<title>[Product] - [Concept]</title>
|
|
207
|
-
|
|
208
|
-
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
209
|
-
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
210
|
-
<link href="https://fonts.googleapis.com/css2?family=[Font]:[weights]&display=swap" rel="stylesheet" />
|
|
211
|
-
|
|
212
|
-
<style>
|
|
213
|
-
/* Concept: [name]
|
|
214
|
-
Spectrum: L[x] C[x] T[x] D[x] E[x] Th[x] Sh[x]
|
|
215
|
-
Extremes: [list which 2+ are extreme] */
|
|
216
|
-
|
|
217
|
-
:root {
|
|
218
|
-
--bg: #[hex];
|
|
219
|
-
--surface: #[hex];
|
|
220
|
-
--text: #[hex];
|
|
221
|
-
--text-muted: #[hex];
|
|
222
|
-
--accent: #[hex];
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
* {
|
|
226
|
-
margin: 0;
|
|
227
|
-
padding: 0;
|
|
228
|
-
box-sizing: border-box;
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
body {
|
|
232
|
-
font-family: "[Font]", sans-serif;
|
|
233
|
-
background: var(--bg);
|
|
234
|
-
color: var(--text);
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
/* Page load: staggered reveal */
|
|
238
|
-
.reveal {
|
|
239
|
-
opacity: 0;
|
|
240
|
-
transform: translateY(20px);
|
|
241
|
-
animation: fadeUp 0.6s cubic-bezier(0.16, 1, 0.3, 1) forwards;
|
|
242
|
-
}
|
|
243
|
-
.reveal:nth-child(1) {
|
|
244
|
-
animation-delay: 0.1s;
|
|
245
|
-
}
|
|
246
|
-
.reveal:nth-child(2) {
|
|
247
|
-
animation-delay: 0.15s;
|
|
248
|
-
}
|
|
249
|
-
.reveal:nth-child(3) {
|
|
250
|
-
animation-delay: 0.2s;
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
@keyframes fadeUp {
|
|
254
|
-
to {
|
|
255
|
-
opacity: 1;
|
|
256
|
-
transform: translateY(0);
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
/* Scroll-triggered: hidden until in view */
|
|
261
|
-
.scroll-reveal {
|
|
262
|
-
opacity: 0;
|
|
263
|
-
transform: translateY(30px);
|
|
264
|
-
transition: opacity 0.6s cubic-bezier(0.16, 1, 0.3, 1), transform 0.6s cubic-bezier(0.16, 1, 0.3, 1);
|
|
265
|
-
}
|
|
266
|
-
.scroll-reveal.visible {
|
|
267
|
-
opacity: 1;
|
|
268
|
-
transform: translateY(0);
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
/* Hover: physical-feeling bounce */
|
|
272
|
-
.interactive {
|
|
273
|
-
transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1), box-shadow 0.3s ease;
|
|
274
|
-
}
|
|
275
|
-
.interactive:hover {
|
|
276
|
-
transform: translateY(-4px);
|
|
277
|
-
box-shadow: 0 12px 24px -8px rgba(0, 0, 0, 0.15);
|
|
278
|
-
}
|
|
279
|
-
</style>
|
|
280
|
-
</head>
|
|
281
|
-
<body>
|
|
282
|
-
<!-- Semantic HTML with real content -->
|
|
283
|
-
|
|
284
|
-
<script>
|
|
285
|
-
// Scroll-triggered animations
|
|
286
|
-
const observer = new IntersectionObserver(
|
|
287
|
-
(entries) => {
|
|
288
|
-
entries.forEach((entry) => {
|
|
289
|
-
if (entry.isIntersecting) {
|
|
290
|
-
entry.target.classList.add("visible");
|
|
291
|
-
}
|
|
292
|
-
});
|
|
293
|
-
},
|
|
294
|
-
{ threshold: 0.1 }
|
|
295
|
-
);
|
|
296
|
-
|
|
297
|
-
document.querySelectorAll(".scroll-reveal").forEach((el) => observer.observe(el));
|
|
298
|
-
</script>
|
|
299
|
-
</body>
|
|
300
|
-
</html>
|
|
301
|
-
```
|
|
302
|
-
|
|
303
|
-
## Phase 5: Verify Quality
|
|
304
|
-
|
|
305
|
-
### Per-Design Checklist
|
|
306
|
-
|
|
307
|
-
- [ ] Font is distinctive (not Inter/Roboto/Arial/system)
|
|
308
|
-
- [ ] Background has depth (not flat white/black)
|
|
309
|
-
- [ ] Page load animation with staggered delays
|
|
310
|
-
- [ ] Scroll-triggered reveals on below-fold content
|
|
311
|
-
- [ ] Hover states with transform + shadow (not just color)
|
|
312
|
-
- [ ] Custom easing (cubic-bezier), not default `ease` or `linear`
|
|
313
|
-
- [ ] CSS custom properties for colors
|
|
314
|
-
- [ ] Layout breaks at least one standard pattern
|
|
315
|
-
|
|
316
|
-
### Cross-Design Contrast
|
|
317
|
-
|
|
318
|
-
Each pair of designs must have 5+ obvious visual differences. If not, revise.
|
|
319
|
-
|
|
320
|
-
## Phase 6: Save & Report
|
|
321
|
-
|
|
322
|
-
Create `docs/design/` directory if needed. Save all 5 HTML files.
|
|
323
|
-
|
|
324
|
-
</instructions>
|
|
325
|
-
|
|
326
|
-
<output_format>
|
|
327
|
-
|
|
328
|
-
```
|
|
329
|
-
## Generated Styles
|
|
330
|
-
|
|
331
|
-
| # | Name | Spectrum (L/C/T/D/E/Th/Sh) | Extremes | Palette | Font |
|
|
332
|
-
|---|------|---------------------------|----------|---------|------|
|
|
333
|
-
| {n} | {name} | [x][x][x][x][x][x][x] | {which 2+} | #___, #___, #___ | {font} |
|
|
334
|
-
|
|
335
|
-
### Files
|
|
336
|
-
- docs/design/style_{n}_{name}.html
|
|
337
|
-
- ...
|
|
338
|
-
|
|
339
|
-
### Rationale
|
|
340
|
-
1. **{name}**: [1 sentence connecting to product requirements]
|
|
341
|
-
2. ...
|
|
342
|
-
```
|
|
343
|
-
|
|
344
|
-
</output_format>
|
|
345
|
-
|
|
346
|
-
Make bold choices. Each design should be portfolio-worthy—something you'd proudly present.
|
|
347
|
-
|
|
348
|
-
<next_step>
|
|
349
|
-
After the user picks a style, suggest:
|
|
350
|
-
→ Run `/devlyn:design-system [style-number]` to extract design tokens from the chosen style into a reusable design system reference.
|
|
351
|
-
</next_step>
|