oh-my-opencode 4.14.1 → 4.15.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.
Files changed (50) hide show
  1. package/dist/cli/index.js +88 -35
  2. package/dist/cli-node/index.js +88 -35
  3. package/dist/index.js +13 -13
  4. package/dist/skills/frontend/ATTRIBUTION.md +14 -1
  5. package/dist/skills/frontend/SKILL.md +11 -6
  6. package/dist/skills/frontend/references/design/README.md +15 -37
  7. package/dist/skills/frontend/references/design/_INDEX.md +5 -3
  8. package/dist/skills/frontend/references/design/aside.md +209 -0
  9. package/dist/skills/frontend/references/design/clone-from-url.md +65 -0
  10. package/dist/skills/programming/SKILL.md +5 -3
  11. package/dist/skills/remove-ai-slops/SKILL.md +34 -15
  12. package/dist/skills/visual-qa/SKILL.md +11 -0
  13. package/dist/skills/visual-qa/scripts/skill-prompt-contract.test.ts +42 -0
  14. package/package.json +13 -13
  15. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  16. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  17. package/packages/omo-codex/plugin/components/codegraph/package.json +1 -1
  18. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  19. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  20. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  21. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  22. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  23. package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
  24. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  25. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  26. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  27. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  28. package/packages/omo-codex/plugin/package-lock.json +13 -13
  29. package/packages/omo-codex/plugin/package.json +1 -1
  30. package/packages/omo-codex/plugin/skills/frontend/ATTRIBUTION.md +14 -1
  31. package/packages/omo-codex/plugin/skills/frontend/SKILL.md +11 -6
  32. package/packages/omo-codex/plugin/skills/frontend/references/design/README.md +15 -37
  33. package/packages/omo-codex/plugin/skills/frontend/references/design/_INDEX.md +5 -3
  34. package/packages/omo-codex/plugin/skills/frontend/references/design/aside.md +209 -0
  35. package/packages/omo-codex/plugin/skills/frontend/references/design/clone-from-url.md +65 -0
  36. package/packages/omo-codex/plugin/skills/programming/SKILL.md +5 -3
  37. package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +34 -15
  38. package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +11 -0
  39. package/packages/omo-codex/plugin/test/aggregate-skills.test.mjs +23 -0
  40. package/packages/omo-codex/scripts/install-dist/install-local.mjs +67 -14
  41. package/packages/shared-skills/skills/frontend/ATTRIBUTION.md +14 -1
  42. package/packages/shared-skills/skills/frontend/SKILL.md +11 -6
  43. package/packages/shared-skills/skills/frontend/references/design/README.md +15 -37
  44. package/packages/shared-skills/skills/frontend/references/design/_INDEX.md +5 -3
  45. package/packages/shared-skills/skills/frontend/references/design/aside.md +209 -0
  46. package/packages/shared-skills/skills/frontend/references/design/clone-from-url.md +65 -0
  47. package/packages/shared-skills/skills/programming/SKILL.md +5 -3
  48. package/packages/shared-skills/skills/remove-ai-slops/SKILL.md +34 -15
  49. package/packages/shared-skills/skills/visual-qa/SKILL.md +11 -0
  50. package/packages/shared-skills/skills/visual-qa/scripts/skill-prompt-contract.test.ts +42 -0
@@ -89,6 +89,16 @@ Key fields: `maxWidth`, `overflowLines[]`, `borderMisaligned`, `wideCharColumns[
89
89
 
90
90
  This JSON (diff ratio, similarity score, hotspots or overflow lines, border alignment, wide-char columns, alpha) is REFERENCE evidence to aim the reviewers. It is not the verdict by itself.
91
91
 
92
+ ### Motion and interaction capture
93
+
94
+ Static screenshots miss what moves. For every interactive element and every animated region, do NOT settle for a single resting frame — capture the motion as evidence:
95
+
96
+ - **Interaction states:** drive the real browser to each state before capturing. Hover the element, focus it, click/press it, and for scroll-driven surfaces scroll to trigger the effect. Capture three frames per transition: **rest** (before), **mid-transition** (~100ms in, to prove the animation exists and is smooth), and **settled** (after it completes).
97
+ - **Entrance and scroll motion:** capture scroll-triggered reveals and any load animation as a short frame sequence (start, mid, end), not one frame. A reveal that never fires, janks, or lands in the wrong place is a defect only the sequence exposes.
98
+ - **Reference clones:** when the reference site has its own motion, capture the reference's motion the same way and compare it to the actual — timing, easing feel, and end state.
99
+
100
+ **Animation is never an excuse to skip or pass a region.** A high `diffRatio` caused by an in-flight animation is **never a valid excuse** to dismiss a defect or wave a region through. Compare **settled state to settled state** for pixel fidelity, and separately verify the motion against the **reference's own motion** (or, with no reference, against the stated intent). "The pixels differ because it animates" is a reason to capture the settled frame and the motion properly — not a reason to pass.
101
+
92
102
  ## Step 3 - Dispatch two read-only QA subagents in parallel
93
103
 
94
104
  This independent review is REQUIRED before any "done" claim. Do not self-review inside the main agent and call the UI verified - a self-graded pass is the failure mode this step exists to stop. Dispatch it yourself, every time, without waiting to be told. Give each reviewer the captures for every enumerated page from Step 2, not a sample, and tell it the page count so it can confirm none were skipped.
@@ -135,6 +145,7 @@ CHECK EACH:
135
145
  5. Responsive and resize behavior across viewport sizes (web) or terminal resize (TUI).
136
146
  6. Do the user-intended FEATURES actually work: interactions, states, navigation (web); input handling, resize, scroll (TUI)? Trace the code paths.
137
147
  7. Reference packet coverage: every reference page, state, viewport, and annotated requirement is implemented or explicitly marked out of scope by the user. Missing copy, missing overview content, swapped hierarchy, or unimplemented reference states are BLOCKING.
148
+ 8. Slop animation: flag motion that signals nothing. A hover-without-action (a hover that produces no state change or affordance), motion on a non-interactive element, or a decorative micro-animation with no informational purpose is slop and a REVISE finding. Motion must map to a real interaction, state, or affordance; the hero may carry one signature moment, nothing else earns decoration.
138
149
 
139
150
  OUTPUT:
140
151
  VERDICT: PASS | REVISE | FAIL
@@ -252,3 +252,45 @@ describe("visual-qa skill exhaustive-coverage and review-gate contract", () => {
252
252
  }
253
253
  })
254
254
  })
255
+
256
+ describe("visual-qa motion capture and slop-animation contract", () => {
257
+ test("#given an animated or interactive surface #when capturing #then rest, mid-transition and settled frames are driven and captured", () => {
258
+ for (const fixture of fixtures()) {
259
+ const motion = sectionBetween(fixture.text, "### Motion and interaction capture", "## Step 3")
260
+ const lower = motion.toLowerCase()
261
+
262
+ expect(lower, fixture.label).toContain("rest")
263
+ expect(lower, fixture.label).toContain("mid-transition")
264
+ expect(lower, fixture.label).toContain("settled")
265
+ expect(lower, fixture.label).toContain("hover")
266
+ expect(lower, fixture.label).toContain("focus")
267
+ expect(lower, fixture.label).toContain("click")
268
+ expect(lower, fixture.label).toContain("scroll-triggered")
269
+ expect(lower, fixture.label).toContain("load animation")
270
+ }
271
+ })
272
+
273
+ test("#given animation-induced pixel diff #when judging fidelity #then it is never an excuse to dismiss a defect", () => {
274
+ for (const fixture of fixtures()) {
275
+ const motion = sectionBetween(fixture.text, "### Motion and interaction capture", "## Step 3")
276
+ const lower = motion.toLowerCase()
277
+
278
+ expect(lower, fixture.label).toContain("never a valid excuse")
279
+ expect(lower, fixture.label).toContain("settled state to settled state")
280
+ expect(lower, fixture.label).toContain("reference's own motion")
281
+ }
282
+ })
283
+
284
+ test("#given meaningless motion #when reviewing #then Pass A flags slop animation, especially hover-without-action", () => {
285
+ for (const fixture of fixtures()) {
286
+ const passA = sectionBetween(fixture.text, "### Pass A", "### Pass B")
287
+ const checkBlock = sectionBetween(passA, "CHECK EACH:", "OUTPUT:")
288
+ const lower = checkBlock.toLowerCase()
289
+
290
+ expect(lower, fixture.label).toContain("slop animation")
291
+ expect(lower, fixture.label).toContain("non-interactive")
292
+ expect(lower, fixture.label).toContain("no state change")
293
+ expect(lower, fixture.label).toContain("hover-without-action")
294
+ }
295
+ })
296
+ })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-opencode",
3
- "version": "4.14.1",
3
+ "version": "4.15.0",
4
4
  "description": "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
5
5
  "main": "./dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -191,18 +191,18 @@
191
191
  "typescript": "^6.0.3"
192
192
  },
193
193
  "optionalDependencies": {
194
- "oh-my-opencode-darwin-arm64": "4.14.1",
195
- "oh-my-opencode-darwin-x64": "4.14.1",
196
- "oh-my-opencode-darwin-x64-baseline": "4.14.1",
197
- "oh-my-opencode-linux-arm64": "4.14.1",
198
- "oh-my-opencode-linux-arm64-musl": "4.14.1",
199
- "oh-my-opencode-linux-x64": "4.14.1",
200
- "oh-my-opencode-linux-x64-baseline": "4.14.1",
201
- "oh-my-opencode-linux-x64-musl": "4.14.1",
202
- "oh-my-opencode-linux-x64-musl-baseline": "4.14.1",
203
- "oh-my-opencode-windows-arm64": "4.14.1",
204
- "oh-my-opencode-windows-x64": "4.14.1",
205
- "oh-my-opencode-windows-x64-baseline": "4.14.1"
194
+ "oh-my-opencode-darwin-arm64": "4.15.0",
195
+ "oh-my-opencode-darwin-x64": "4.15.0",
196
+ "oh-my-opencode-darwin-x64-baseline": "4.15.0",
197
+ "oh-my-opencode-linux-arm64": "4.15.0",
198
+ "oh-my-opencode-linux-arm64-musl": "4.15.0",
199
+ "oh-my-opencode-linux-x64": "4.15.0",
200
+ "oh-my-opencode-linux-x64-baseline": "4.15.0",
201
+ "oh-my-opencode-linux-x64-musl": "4.15.0",
202
+ "oh-my-opencode-linux-x64-musl-baseline": "4.15.0",
203
+ "oh-my-opencode-windows-arm64": "4.15.0",
204
+ "oh-my-opencode-windows-x64": "4.15.0",
205
+ "oh-my-opencode-windows-x64-baseline": "4.15.0"
206
206
  },
207
207
  "overrides": {
208
208
  "hono": "^4.12.18",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omo",
3
- "version": "4.14.1",
3
+ "version": "4.15.0",
4
4
  "description": "One Codex plugin namespace for Yeongyu's local Codex components.",
5
5
  "author": {
6
6
  "name": "Yeongyu Kim",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-bootstrap",
3
- "version": "4.14.1",
3
+ "version": "4.15.0",
4
4
  "description": "Codex SessionStart bootstrap component that provisions LazyCodex runtime dependencies from a detached worker.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-codegraph",
3
- "version": "4.14.1",
3
+ "version": "4.15.0",
4
4
  "description": "Codex plugin MCP wrapper for CodeGraph.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-comment-checker",
3
- "version": "4.14.1",
3
+ "version": "4.15.0",
4
4
  "description": "Codex plugin that runs comment-checker after edit-like PostToolUse hooks.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-git-bash-hook",
3
- "version": "4.14.1",
3
+ "version": "4.15.0",
4
4
  "description": "Codex hook component that reminds Windows sessions to prefer the OMO git_bash MCP.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-lazycodex-executor-verify",
3
- "version": "4.14.1",
3
+ "version": "4.15.0",
4
4
  "description": "Codex SubagentStop evidence verifier for LazyCodex executor completions.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-lsp",
3
- "version": "4.14.1",
3
+ "version": "4.15.0",
4
4
  "description": "Codex plugin that exposes Language Server Protocol tools and post-edit diagnostics.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-rules",
3
- "version": "4.14.1",
3
+ "version": "4.15.0",
4
4
  "description": "Codex plugin that injects project rule files into model context through lifecycle hooks.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-start-work-continuation",
3
- "version": "4.14.1",
3
+ "version": "4.15.0",
4
4
  "description": "Codex Stop hook continuation injector for omo-codex start-work plans.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-teammode",
3
- "version": "4.14.1",
3
+ "version": "4.15.0",
4
4
  "description": "Codex team-mode hook component that keeps background thread titles descriptive after create_thread.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-telemetry",
3
- "version": "4.14.1",
3
+ "version": "4.15.0",
4
4
  "description": "Codex plugin component that emits omo-codex anonymous daily-active telemetry on SessionStart.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-ultrawork",
3
- "version": "4.14.1",
3
+ "version": "4.15.0",
4
4
  "description": "Codex plugin that injects the ultrawork orchestration directive and ships LazyCodex planning, review, QA, and gate agent roles.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-ulw-loop",
3
- "version": "4.14.1",
3
+ "version": "4.15.0",
4
4
  "description": "Codex plugin: durable repo-native multi-goal orchestration with embedded success criteria and observable evidence audit.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/omo-codex-plugin",
3
- "version": "4.14.1",
3
+ "version": "4.15.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@sisyphuslabs/omo-codex-plugin",
9
- "version": "4.14.1",
9
+ "version": "4.15.0",
10
10
  "workspaces": [
11
11
  "components/codegraph",
12
12
  "components/comment-checker",
@@ -93,7 +93,7 @@
93
93
  },
94
94
  "components/codegraph": {
95
95
  "name": "@sisyphuslabs/codex-codegraph",
96
- "version": "4.14.1",
96
+ "version": "4.15.0",
97
97
  "bin": {
98
98
  "omo-codegraph": "dist/cli.js"
99
99
  },
@@ -112,7 +112,7 @@
112
112
  },
113
113
  "components/comment-checker": {
114
114
  "name": "@code-yeongyu/codex-comment-checker",
115
- "version": "4.14.1",
115
+ "version": "4.15.0",
116
116
  "license": "MIT",
117
117
  "bin": {
118
118
  "omo-comment-checker": "dist/cli.js"
@@ -133,7 +133,7 @@
133
133
  },
134
134
  "components/git-bash": {
135
135
  "name": "@sisyphuslabs/codex-git-bash-hook",
136
- "version": "4.14.1",
136
+ "version": "4.15.0",
137
137
  "bin": {
138
138
  "omo-git-bash-hook": "dist/cli.js"
139
139
  },
@@ -148,7 +148,7 @@
148
148
  },
149
149
  "components/lazycodex-executor-verify": {
150
150
  "name": "@code-yeongyu/codex-lazycodex-executor-verify",
151
- "version": "4.14.1",
151
+ "version": "4.15.0",
152
152
  "license": "MIT",
153
153
  "bin": {
154
154
  "lazycodex-executor-verify": "dist/cli.js"
@@ -165,7 +165,7 @@
165
165
  },
166
166
  "components/lsp": {
167
167
  "name": "@code-yeongyu/codex-lsp",
168
- "version": "4.14.1",
168
+ "version": "4.15.0",
169
169
  "license": "MIT",
170
170
  "dependencies": {
171
171
  "@code-yeongyu/lsp-daemon": "file:../../../../lsp-daemon"
@@ -185,7 +185,7 @@
185
185
  },
186
186
  "components/rules": {
187
187
  "name": "@code-yeongyu/codex-rules",
188
- "version": "4.14.1",
188
+ "version": "4.15.0",
189
189
  "license": "MIT",
190
190
  "dependencies": {
191
191
  "picomatch": "^4.0.3"
@@ -207,7 +207,7 @@
207
207
  },
208
208
  "components/start-work-continuation": {
209
209
  "name": "@code-yeongyu/codex-start-work-continuation",
210
- "version": "4.14.1",
210
+ "version": "4.15.0",
211
211
  "license": "MIT",
212
212
  "bin": {
213
213
  "omo-start-work-continuation": "dist/cli.js"
@@ -224,7 +224,7 @@
224
224
  },
225
225
  "components/teammode": {
226
226
  "name": "@sisyphuslabs/codex-teammode",
227
- "version": "4.14.1",
227
+ "version": "4.15.0",
228
228
  "devDependencies": {
229
229
  "@types/node": "^25.9.3",
230
230
  "bun-types": "^1.3.1",
@@ -237,7 +237,7 @@
237
237
  },
238
238
  "components/telemetry": {
239
239
  "name": "@code-yeongyu/codex-telemetry",
240
- "version": "4.14.1",
240
+ "version": "4.15.0",
241
241
  "license": "MIT",
242
242
  "bin": {
243
243
  "omo-telemetry": "dist/cli.js"
@@ -255,7 +255,7 @@
255
255
  },
256
256
  "components/ultrawork": {
257
257
  "name": "@code-yeongyu/codex-ultrawork",
258
- "version": "4.14.1",
258
+ "version": "4.15.0",
259
259
  "license": "MIT",
260
260
  "bin": {
261
261
  "omo-ultrawork": "dist/cli.js"
@@ -273,7 +273,7 @@
273
273
  },
274
274
  "components/ulw-loop": {
275
275
  "name": "@code-yeongyu/codex-ulw-loop",
276
- "version": "4.14.1",
276
+ "version": "4.15.0",
277
277
  "license": "MIT",
278
278
  "bin": {
279
279
  "omo-ulw-loop": "dist/cli.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/omo-codex-plugin",
3
- "version": "4.14.1",
3
+ "version": "4.15.0",
4
4
  "description": "Aggregate Codex plugin root for OMO components.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -186,10 +186,23 @@ SOFTWARE.
186
186
 
187
187
  ## 5. Project-original files
188
188
 
189
- `frontend/SKILL.md`, `frontend/references/design/README.md`, `_INDEX.md`,
189
+ `frontend/SKILL.md`, `frontend/references/design/README.md`, `_INDEX.md`, `aside.md`,
190
190
  `design-system-architecture.md`, `react-dev-tooling-skill.md`,
191
191
  `frontend/references/perfection/README.md`, `react-perf-tooling.md`, and
192
192
  `frontend/scripts/perfection/lighthouse-audit.py` are original to this project and require
193
193
  no third-party attribution. The perfection docs and script only invoke third-party tools
194
194
  (react-scan, react-doctor, react-grab, playwright-lighthouse, lighthouse, chrome-launcher)
195
195
  at runtime; no source from those tools is vendored, so their licenses are not carried here.
196
+
197
+ `frontend/references/design/aside.md` is a project-original synthesis from live browser
198
+ capture evidence and a local reconnaissance run following the MIT-licensed
199
+ `JCodesMore/ai-website-cloner-template` workflow; it is not copied from Aside or from the
200
+ template. Aside names, trademarks, product text, and visual assets remain the property of
201
+ their respective owners and are referenced only for descriptive design-analysis purposes.
202
+
203
+ `frontend/references/design/clone-from-url.md` is a project-original runtime-extraction
204
+ workflow guide. Its browser + `getComputedStyle` clone approach follows the same
205
+ MIT-licensed `JCodesMore/ai-website-cloner-template` clone-website workflow that `aside.md`
206
+ cites; no source from that template is copied. It carries no third-party attribution beyond
207
+ that lineage note, and it grants no license to copy any target site's trademarks, brand
208
+ assets, or proprietary copy.
@@ -24,8 +24,11 @@ This file is a router, not a rulebook. The rules live in four rulesets under `re
24
24
 
25
25
  Every implementation must choose one of these branches before UI code changes:
26
26
 
27
- 1. **Concrete visual reference:** if the user supplies a screenshot, generated mockup, Stitch/Imagen output, Figma export, overview, or annotated reference packet, treat it as the visual contract. Load `references/design/image-to-code-skill.md` plus the relevant design/perfection files, extract the reference's exact tokens, layout geometry, copy, spacing, states, and responsive intent into `DESIGN.md`, then implement reusable primitives against that contract. Final QA must run `/visual-qa` in reference-fidelity mode: compare the actual UI against the reference packet pixel-by-pixel and verify the code is an extensible design-system implementation, not a screenshot-matched one-off.
28
- 2. **Greenfield or fresh setup:** if the user gave no concrete visual reference, use `references/design/_INDEX.md` to shortlist 2-3 plausible Layer B references, then deeply load exactly one Layer A style skill and one Layer B brand/design-system reference; use `open-design` only when the curated set has no fit. Treat those references as source material, not mood labels: extract tokens, layout grammar, component anatomy, interaction states, motion, and taste decisions into `DESIGN.md`, then recombine them into project-specific primitives. Customize for the user's product and content, but do not freestyle past the selected references; never copy logos, trademarked assets, or brand-specific copy. Define Section 5 primitives with variants, default/hover/active/focus/disabled/loading/empty/error states, accessibility, and motion before code. Build them first in a component showcase or state harness; each primitive and required state must pass mobile/tablet/desktop visual QA before product screens.
27
+ 1. **Concrete visual reference:** the user supplied a reference treat it as the visual contract, then handle it by kind:
28
+ - **Static visual reference** (screenshot, generated mockup, Stitch/Imagen output, Figma export, overview, or annotated packet): load `references/design/image-to-code-skill.md` plus the relevant design/perfection files, extract the reference's exact tokens, layout geometry, copy, spacing, states, and responsive intent into `DESIGN.md`, then implement reusable primitives against that contract.
29
+ - **Live site or URL reference** (the user names a site to clone or gives a URL): load `references/design/clone-from-url.md`. Drive a real browser and extract the runtime truth via `getComputedStyle` — tokens, layout geometry, default/hover/focus/active states, transitions and keyframes, and downloaded assets — into `DESIGN.md`, then clone-code reusable primitives against that contract.
30
+ Final QA for both runs `/visual-qa` in reference-fidelity mode: compare the actual UI against the reference pixel-by-pixel and verify the code is an extensible design-system implementation, not a screenshot-matched one-off.
31
+ 2. **Greenfield or fresh setup:** if the user gave no concrete visual reference, use `references/design/_INDEX.md` to shortlist 2-3 plausible Layer B references, then deeply load exactly one Layer A style skill and one Layer B brand/design-system reference; use `open-design` only when the curated set has no fit. Treat those references as source material, not mood labels: extract tokens, layout grammar, component anatomy, interaction states, motion, and taste decisions into `DESIGN.md`, then recombine them into project-specific primitives — never freestyle past the selected references, never copy logos or brand-specific copy. For an expressive brief (glossy, premium, wow, brand-grade), default to generating 2-3 imagen concept drafts, each seeded with the loaded Layer A + Layer B tokens (palette, type, material); pick the strongest and treat the chosen draft as the reference-fidelity contract. Define Section 5 primitives and their default/hover/active/focus/disabled/loading/empty/error states before code, and pass each through mobile/tablet/desktop visual QA before product screens.
29
32
  3. **Existing project with `DESIGN.md` or a component system:** read it, follow it, and update it before implementation only when the requested work needs a new token, primitive, state, motion rule, accessibility constraint, accepted debt, or reference-fidelity requirement.
30
33
  4. **Existing project with UI but no `DESIGN.md` and no reusable component layer:** STOP and ask the user one focused question: should you preserve the current look with copy-nearby styling, or extract a real `DESIGN.md` plus reusable components before continuing? Do not silently choose.
31
34
 
@@ -33,7 +36,7 @@ When `references/designpowers/README.md` is loaded for implementation, redesign,
33
36
 
34
37
  ## Ruleset 1 — design (`references/design/`)
35
38
 
36
- The reference library has one architecture file, 12 taste skills (Layer A — *how to execute*), and 69 brand design systems (Layer B — *what it should look like*). Most non-trivial tasks load **one Layer A + one Layer B**. `README.md` carries the full routing flow, stacking rules, anti-patterns, and the mandatory browser-based Design QA phase; `_INDEX.md` catalogs all 81 files with mood-to-brand mappings — read it whenever routing is not obvious from the tables below.
39
+ The reference library has one architecture file, 12 taste skills (Layer A — *how to execute*), and 70 brand design systems (Layer B — *what it should look like*). Most non-trivial tasks load **one Layer A + one Layer B**. `README.md` carries the full routing flow, stacking rules, anti-patterns, and the mandatory browser-based Design QA phase; `_INDEX.md` catalogs all 83 files with mood-to-brand mappings — read it whenever routing is not obvious from the tables below.
37
40
 
38
41
  ### Layer 0 — architecture
39
42
 
@@ -58,7 +61,7 @@ The reference library has one architecture file, 12 taste skills (Layer A — *h
58
61
 
59
62
  ### Layer B — brand design systems (orthogonal to Layer A; stack freely)
60
63
 
61
- When the user names a brand or site — "Linear-style", "like Stripe's landing" — load `references/design/<brand>.md` as the token source of truth (palette, type scale, components, do/don'ts). Coverage includes `apple` `stripe` `linear.app` `notion` `vercel` `claude` `figma` `airbnb` `nike` `tesla` `spotify` `raycast` `revolut` and ~56 more; the full list with mood shortcuts is in `_INDEX.md`. Extract the tokens and apply them to the project's own content — never copy logos or trademarked imagery. If the named brand is missing, fall back to a Layer A mood match or the `open-design` skill.
64
+ When the user names a brand or site — "Linear-style", "like Stripe's landing", "Aside-style browser agent" — load `references/design/<brand>.md` as the token source of truth (palette, type scale, components, do/don'ts). Coverage includes `aside` `apple` `stripe` `linear.app` `notion` `vercel` `claude` `figma` `airbnb` `nike` `tesla` `spotify` `raycast` `revolut` and ~56 more; the full list with mood shortcuts is in `_INDEX.md`. Extract the tokens and apply them to the project's own content — never copy logos or trademarked imagery. If the named brand is missing, fall back to a Layer A mood match or the `open-design` skill.
62
65
 
63
66
  ### React dev tooling
64
67
 
@@ -102,6 +105,7 @@ Domains: `product` `style` `typography` `color` `landing` `chart` `ux` `react` `
102
105
  | Request | Load |
103
106
  |---|---|
104
107
  | "Build a landing page" (no direction given) | `design/README.md` + `design/_INDEX.md` shortlist → exactly one Layer B reference + `design/taste-skill.md` + `perfection/README.md` |
108
+ | "Aside-style AI browser / browser agent page" | `design/README.md` + `design/aside.md` + `design/taste-skill.md` + `perfection/README.md` |
105
109
  | "Linear-style landing page" | `design/README.md` + `design/linear.app.md` + `design/taste-skill.md` + `perfection/README.md` |
106
110
  | "Premium SaaS hero like Stripe" | `design/README.md` + `design/stripe.md` + `design/soft-skill.md` + `perfection/README.md` |
107
111
  | "Improve this existing dashboard" | `design/README.md` + `design/redesign-skill.md` + `perfection/README.md` |
@@ -119,13 +123,14 @@ Domains: `product` `style` `typography` `color` `landing` `chart` `ux` `react` `
119
123
  - **Never weaken UX OR flatten the surface to buy points.** No dropping animations, hiding content, simplifying interactions, or replacing rendered/lit material with flat fills and flat geometric primitives for a Lighthouse score or a deadline. Hit 100 AND keep the surface dimensional — both, or neither.
120
124
  - **No emojis as icons.** SVG icon sets only (Lucide, Heroicons, Radix, Phosphor).
121
125
  - **GPU-composited animation only** — `transform`, `opacity`, `filter`; never animate layout properties.
122
- - **Verify in a real browser before declaring done.** Screenshots at 375 / 768 / 1280px; hover, focus, loading, empty, and error states all exercised.
126
+ - **Slop animation is forbidden motion serves meaning.** Every animation or hover must map to a real interaction, state change, or affordance. A hover that changes nothing, motion on a non-interactive element, or a decorative micro-animation with no informational purpose is slop — do not add it.
127
+ - **Done is the `/visual-qa` dual-oracle gate, not your own glance.** A frontend design task is verified through `/visual-qa` (real browser at 375 / 768 / 1280px, every page, with interaction states and motion driven and inspected) until the dual-oracle completion gate passes on fresh evidence.
123
128
 
124
129
  ## When to load something else instead
125
130
 
126
131
  | Situation | Load |
127
132
  |---|---|
128
- | Brand/style not among the 69 in `references/design/`, or the user says "Open Design" | `open-design` skill — the local nexu-io/open-design library (137+ design skills, 150+ design systems) |
133
+ | Brand/style not among the 70 in `references/design/`, or the user says "Open Design" | `open-design` skill — the local nexu-io/open-design library (137+ design skills, 150+ design systems) |
129
134
  | Driving a browser for the Design QA phase | `agent-browser` skill |
130
135
  | Pure TypeScript/logic work with zero visual surface | `programming` skill alone — this skill adds nothing there |
131
136
 
@@ -16,9 +16,9 @@ Two things ship flat most often, and both read as "clean but generic": the **her
16
16
  The library lives flat in this directory (`references/design/`, max depth 1) and has two conceptual layers, and **most non-trivial tasks load one from each layer**:
17
17
 
18
18
  - **Layer A — taste skills (12 files):** how to execute. Discipline, motion physics, spacing rules, anti-slop guardrails, output completeness. Filenames end in `-skill.md` or start with `imagegen-`.
19
- - **Layer B — design systems (69 files):** what it should look like. Concrete color/type/component tokens for one specific brand aesthetic. Filenames are brand names (`claude.md`, `notion.md`, `stripe.md`, ).
19
+ - **Layer B — design systems (70 files):** what it should look like. Concrete color/type/component tokens for one specific brand aesthetic. Filenames are brand names (`aside.md`, `claude.md`, `notion.md`, `stripe.md`, ...).
20
20
 
21
- A combined directory of all 81 reference files is at `_INDEX.md`. **Read that index before loading anything** unless the routing is obvious — it has the full mood-mapping and stacking rules in one place.
21
+ A combined directory of all 83 reference files is at `_INDEX.md`. **Read that index before loading anything** unless the routing is obvious — it has the full mood-mapping and stacking rules in one place.
22
22
 
23
23
  ## Open Design Library
24
24
 
@@ -94,7 +94,7 @@ Run through this in order and stop at the first match. Do not skip — earlier r
94
94
 
95
95
  ### Step 1 — Did the user name a specific brand or site?
96
96
 
97
- Phrasings: "make it look like Linear", "Stripe-style buttons", "Notion-feel sidebar", "like {brand}'s landing page", or pasting a screenshot of a known brand site.
97
+ Phrasings: "make it look like Linear", "Stripe-style buttons", "Notion-feel sidebar", "Aside-style browser agent", "like {brand}'s landing page", or pasting a screenshot of a known brand site.
98
98
 
99
99
  **Action:** Open `_INDEX.md`, find the brand under "Layer B — Design Systems", then load `<brand>.md`. Use it as the project's design system source of truth (color hex values, type scale, component specs, do/don'ts).
100
100
 
@@ -131,12 +131,14 @@ Do NOT use this for greenfield work — the audit phase is wasted effort there.
131
131
 
132
132
  ### Step 4 — Is this an image-first workflow?
133
133
 
134
- Triggers: "generate the design first then code it", "make a mockup before we build", "show me what it could look like".
134
+ Triggers: "generate the design first then code it", "make a mockup before we build", "show me what it could look like" — AND, by default, any expressive greenfield brief (glossy / premium / wow / brand-grade) with no user-supplied reference.
135
135
 
136
136
  **Action:** Load both:
137
137
  - `image-to-code-skill.md` (the workflow: generate → analyze → implement)
138
138
  - `imagegen-frontend-web.md` for web, or `imagegen-frontend-mobile.md` for mobile screens
139
139
 
140
+ For an expressive greenfield brief, default to generating **2-3 imagen concept drafts**, each prompt **seeded with the loaded Layer A + Layer B tokens** (palette, type, signature material) so the drafts inherit the reference's taste instead of generic priors. Pick the strongest, then treat the chosen draft as the reference-fidelity contract for `/visual-qa`.
141
+
140
142
  If the user wants only the imagery (no code), load only the imagegen file.
141
143
 
142
144
  ### Step 5 — Image-only requests (no code)
@@ -201,6 +203,7 @@ Once references are loaded, before writing any UI code:
201
203
  | User asks for... | Load these |
202
204
  |---|---|
203
205
  | "Build me a landing page" (no other info) | `_INDEX.md` shortlist → exactly one Layer B reference + `taste-skill.md` |
206
+ | "Build me an Aside-style AI browser / agent page" | `aside.md` + `taste-skill.md` |
204
207
  | "Build me a Linear-style landing page" | `linear.app.md` + `taste-skill.md` |
205
208
  | "Make it Notion-like and minimal" | `notion.md` + `minimalist-skill.md` |
206
209
  | "Premium SaaS hero, like Stripe" | `stripe.md` + `soft-skill.md` |
@@ -214,39 +217,14 @@ Once references are loaded, before writing any UI code:
214
217
 
215
218
  ## Phase Final — Design QA (MANDATORY, runs after implementation)
216
219
 
217
- After implementation is complete, **before declaring the task done**, run a real browser-based Design QA.
218
-
219
- ### Why
220
-
221
- Code that "looks correct" in an editor is not verified. Colors render differently, spacing collapses, fonts fail to load, responsive breakpoints break, states are missing. The only way to know is to SEE it in a real browser.
222
-
223
- ### How
224
-
225
- 1. **Launch the app** in a real browser (use `agent-browser` skill or the project's dev server + screenshot tool).
226
- 2. **Take screenshots** at key breakpoints: mobile (375px), tablet (768px), desktop (1280px).
227
- 3. **Walk the design system checklist** visually:
228
- - [ ] Colors match `DESIGN.md` palette — no off-brand colors visible
229
- - [ ] Typography hierarchy is clear — headings, body, captions are visually distinct
230
- - [ ] Spacing rhythm feels consistent — no cramped or floating elements
231
- - [ ] Interactive states work — hover every button, focus every input, toggle every switch
232
- - [ ] Empty, loading, and error states exist and look intentional
233
- - [ ] Dark mode (if declared in `DESIGN.md`) works completely
234
- - [ ] No layout overflow, no horizontal scroll on mobile
235
- - [ ] Motion/animation feels smooth — no jank, no missing transitions
236
- - [ ] (Expressive brief) Surfaces AND the hero focal object read as real, dimensional material — not flat fills or flat geometric primitives. Use the brand's material: glass = tint+backdrop saturate+rim+sheen+glow; bright/playful = gradient fills+soft depth shadows+a lit focal object. The hero focal object is a generated bitmap, or carries real light/shadow/gradient/depth.
237
- - [ ] (Expressive brief) Brand color is a perceptual ramp (multiple stops / OKLCH), not one tint reused at different opacities
238
- - [ ] (Expressive brief) Every interactive element has a visible hover AND active/pressed micro-interaction, and the hero carries one signature moment
239
- 4. **Two kinds of failure count equally — fix both, then re-check.** Defects: clipping, wrong font, missing state, jank. Flatness: a surface that reads generic next to the loaded reference. When the render is bug-free but flat, you are NOT done — RAISE the design: deepen the material layering, give the color real depth and a ramp, add the signature interaction. Patching only bugs while the surface stays at the floor is the single most common way this skill ships clean-but-generic work. Do not report "done" with visual bugs OR a floor-level surface.
240
- 5. **If you cannot launch a browser** (e.g. no dev server, CI-only environment), state this explicitly and list what you would check. Never silently skip QA.
241
-
242
- ### QA Report
243
-
244
- After passing QA, write a short summary:
245
- - Breakpoints tested
246
- - States verified (hover, focus, disabled, loading, error, empty)
247
- - Design system compliance: all tokens traced back to `DESIGN.md`
248
- - Issues found and fixed during QA
249
- - Screenshot evidence (attach or describe)
220
+ Before declaring the task done, verify the rendered UI. **The verification authority is `/visual-qa`, not a hand-rolled checklist here.** Run `/visual-qa`: it captures every page and breakpoint (375 / 768 / 1280px) on fresh evidence, drives and inspects interaction states (hover/focus/active) and motion (transitions, scroll-triggered, load), runs the dual-oracle pass, and loops until an independent reviewer passes. For a concrete reference or clone, run it in reference-fidelity mode.
221
+
222
+ This skill adds only the design-taste judgments `/visual-qa` cannot make for you:
223
+
224
+ 1. **Two kinds of failure count equally fix both, then re-check.** Defects: clipping, wrong font, missing state, jank. Flatness: a surface that reads generic next to the loaded reference. When the render is bug-free but flat, you are NOT done — RAISE the design: deepen the material layering, give the color a real perceptual ramp (multiple stops / OKLCH, not one tint at varied opacity), render the hero focal object as real dimensional material (a generated bitmap, or real light/shadow/gradient/depth — never flat geometric primitives), and add the one signature moment. Patching only bugs while the surface stays at the floor is the single most common way this skill ships clean-but-generic work.
225
+ 2. **Motion serves meaning; slop animation is forbidden.** Every interactive element must communicate its affordance and state changes — but a hover that changes nothing, motion on a non-interactive element, or a decorative micro-animation with no informational purpose is slop. Do not add it, and treat any you find as a defect. The hero may carry one signature moment; the rest of the surface earns motion only where it signals interaction or state.
226
+
227
+ Report "done" only when `/visual-qa` has passed on fresh evidence AND neither a visual bug nor a floor-level or slop-laden surface remains.
250
228
 
251
229
 
252
230
  ## Final notes
@@ -3,7 +3,7 @@
3
3
  All reference files live flat in this directory. Three layers:
4
4
  - **Layer 0 — design system architecture** (1 file): the mandatory gate. Defines `DESIGN.md` structure, creation workflow, validation rules. Always loaded by Phase 0 when no design system exists.
5
5
  - **Layer A — taste skills** (12 files): how to execute. Discipline, motion, spacing, anti-slop, output completeness.
6
- - **Layer B — design systems** (69 files): what it should look like. Brand-specific color/type/component tokens.
6
+ - **Layer B — design systems** (70 files): what it should look like. Brand-specific color/type/component tokens.
7
7
 
8
8
  **Phase 0 runs first** (check/create `DESIGN.md`), then most non-trivial tasks load **one Layer A + one Layer B** together. See the routing flow in the sibling `README.md`.
9
9
 
@@ -52,9 +52,9 @@ From [Leonxlnx/taste-skill](https://github.com/Leonxlnx/taste-skill).
52
52
 
53
53
  ---
54
54
 
55
- ## Layer B — Design Systems (71)
55
+ ## Layer B — Design Systems (70)
56
56
 
57
- From [VoltAgent/awesome-design-md](https://github.com/VoltAgent/awesome-design-md), based on [Google Stitch DESIGN.md format](https://stitch.withgoogle.com/docs/design-md/overview/). Each file captures one website's complete visual language: color palette, typography, components, layout principles, depth, do/don't, responsive behavior, and an agent prompt guide.
57
+ Most Layer B files are materialized from [VoltAgent/awesome-design-md](https://github.com/VoltAgent/awesome-design-md), based on [Google Stitch DESIGN.md format](https://stitch.withgoogle.com/docs/design-md/overview/). Project-original entries such as `aside.md` are listed here only when `ATTRIBUTION.md` and `frontend-refs-manifest.mjs` mark them as original. Each file captures one website's complete visual language: color palette, typography, components, layout principles, depth, do/don't, responsive behavior, and an agent prompt guide.
58
58
 
59
59
  ### How to use
60
60
 
@@ -83,6 +83,7 @@ Each file ships with: visual theme, hex color palette + semantic roles, full typ
83
83
 
84
84
  | File | Aesthetic |
85
85
  |---|---|
86
+ | `aside.md` | AI browser agent. Bright product-app marketing, custom display type, soft squircle controls, browser-product framing. |
86
87
  | `cursor.md` | AI-first code editor. Sleek dark interface, gradient accents. |
87
88
  | `expo.md` | React Native platform. Dark theme, tight letter-spacing, code-centric. |
88
89
  | `lovable.md` | AI full-stack builder. Playful gradients, friendly dev aesthetic. |
@@ -183,6 +184,7 @@ Each file ships with: visual theme, hex color palette + semantic roles, full typ
183
184
  - **"Brutal / Swiss / industrial"** → `nike.md`, `bugatti.md`, `vodafone.md`
184
185
  - **"Dark cinematic"** → `runwayml.md`, `elevenlabs.md`, `superhuman.md`, `shopify.md`
185
186
  - **"Terminal / developer-native"** → `vercel.md`, `warp.md`, `voltagent.md`, `ollama.md`
187
+ - **"AI browser / agentic browser / product-app launch"** → `aside.md`, `raycast.md`, `superhuman.md`
186
188
  - **"Warm / approachable / soft"** → `airbnb.md`, `notion.md`, `intercom.md`, `mastercard.md`
187
189
  - **"Data-dense / dashboard"** → `sentry.md`, `kraken.md`, `posthog.md`, `clickhouse.md`
188
190
  - **"Bold / sporty / monochrome punch"** → `nike.md`, `uber.md`, `tesla.md`, `binance.md`