sheleg-design-skill 0.7.0 → 1.2.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/CHANGELOG.md +228 -0
- package/README.md +156 -67
- package/bin/cli.js +35 -12
- package/cursor/rules/sheleg-design.mdc +67 -1
- package/package.json +5 -3
- package/plugins/sheleg-design/.claude-plugin/plugin.json +1 -1
- package/plugins/sheleg-design/commands/sheleg-design.md +4 -1
- package/plugins/sheleg-design/skills/sheleg-design/AI_PRODUCT_PATTERNS.md +155 -0
- package/plugins/sheleg-design/skills/sheleg-design/FIGMA_BRIDGE.md +125 -0
- package/plugins/sheleg-design/skills/sheleg-design/SHELEG_DESIGN.md +50 -32
- package/plugins/sheleg-design/skills/sheleg-design/SKILL.md +83 -12
- package/plugins/sheleg-design/skills/sheleg-design/styles/STYLE_PACK_TEMPLATE.md +63 -0
- package/plugins/sheleg-design/skills/sheleg-design/styles/editorial-luxury.md +5 -2
- package/plugins/sheleg-design/skills/sheleg-design/styles/tokens/editorial-luxury.css +2 -2
- package/plugins/sheleg-design/skills/sheleg-design/styles/tokens/workbench.css +15 -2
- package/plugins/sheleg-design/skills/sheleg-design/styles/workbench.md +21 -12
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,234 @@ All notable changes to this project are documented in this file. The format
|
|
|
4
4
|
follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); versions
|
|
5
5
|
follow [SemVer](https://semver.org/spec/v2.0.0.html).
|
|
6
6
|
|
|
7
|
+
## [1.2.0] - 2026-07-29
|
|
8
|
+
|
|
9
|
+
Worked through Figma's *State of the Designer 2026* (NewtonX, 906 digital
|
|
10
|
+
designers across five regions, surveyed September–October 2025). It is a survey
|
|
11
|
+
of the profession — AI adoption, what designers mean by craft, satisfaction,
|
|
12
|
+
regional outlook — **not** a visual-trends report, so nothing here is a "trend"
|
|
13
|
+
invented from it. Two findings were actionable, and one was a gap in this skill.
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
|
|
17
|
+
- **`AI_PRODUCT_PATTERNS.md`** — the surfaces a model drives, which the skill
|
|
18
|
+
had nothing to say about while the survey ranks *designing AI-driven
|
|
19
|
+
products* the **third most in-demand skill (37%)**, ahead of motion design
|
|
20
|
+
(29%) and information architecture (19%). Organizing rule: **honest state**.
|
|
21
|
+
|
|
22
|
+
Contents: the five states of a model call (idle · working · complete ·
|
|
23
|
+
refused/needs-a-human · failed — a refusal is not an error and a rate limit
|
|
24
|
+
is not a crash); streaming instead of spinners, with a stop control from the
|
|
25
|
+
first frame, a reserved container and no fake typing delay; latency as two
|
|
26
|
+
numbers (time-to-first-token is the one users feel); provenance and
|
|
27
|
+
uncertainty (cite or don't claim, no confidence theater, show the context the
|
|
28
|
+
model actually used); agent actions where the confirmation *is* the design —
|
|
29
|
+
the diff/recipient/query shown before it runs, explicit consent for anything
|
|
30
|
+
irreversible or outward-facing, undo for what's cheap; empty states that
|
|
31
|
+
carry the capability; chat as a shape rather than the shape; cost and scope
|
|
32
|
+
as visible state; and a ban list. Pairs with `workbench` and reuses its
|
|
33
|
+
status tokens.
|
|
34
|
+
- **The craft bar** in `SKILL.md` — a definition of done ordered by what
|
|
35
|
+
designers actually mean by craft in that survey: visual polish (58%),
|
|
36
|
+
thoughtful problem solving (47%), clear intuitive UX (36%), emotion and
|
|
37
|
+
delight (35%), consistency (15%). Item 3 is explicitly *not* this skill's
|
|
38
|
+
half — if flows and states aren't decided, the honest move is to stop.
|
|
39
|
+
- Discovery, the Cursor rule, the README and both installers cover the AI-UI
|
|
40
|
+
direction; `scenarios.md` gains T9.
|
|
41
|
+
|
|
42
|
+
### Fixed
|
|
43
|
+
|
|
44
|
+
- **The validator enforced five of the nine required pack headings** while the
|
|
45
|
+
0.9.0 entry, `CONTRIBUTING.md`, the README and the wiki all claimed the full
|
|
46
|
+
contract was gated. Exactly the promise-without-a-check defect this repo
|
|
47
|
+
keeps hunting, living inside the checker itself. All nine are now enforced
|
|
48
|
+
(`Motion flavor` stays conditional — `workbench` is standalone and has no
|
|
49
|
+
motion layer to flavor), which is also why the check count jumps to 194.
|
|
50
|
+
|
|
51
|
+
## [1.1.1] - 2026-07-29
|
|
52
|
+
|
|
53
|
+
### Fixed
|
|
54
|
+
|
|
55
|
+
- `FIGMA_BRIDGE.md` described the mapping without mentioning that the official
|
|
56
|
+
Figma MCP **gates its main tools behind guidance skills** (`/figma-use`
|
|
57
|
+
before `use_figma`, `/figma-create-new-file` before `create_new_file`,
|
|
58
|
+
`/figma-design-to-code` before `get_design_context`) — the server names
|
|
59
|
+
skipping them the cause of hard-to-debug failures. An agent following the
|
|
60
|
+
bridge alone would have called them bare. The doc now says to load the gate
|
|
61
|
+
first and that the server's instructions win on *how* to call anything; this
|
|
62
|
+
file is the contract, not a tool manual. It also names the two read paths
|
|
63
|
+
worth knowing: `get_variable_defs` for token parity, `get_metadata` for frame
|
|
64
|
+
existence and naming.
|
|
65
|
+
|
|
66
|
+
## [1.1.0] - 2026-07-29
|
|
67
|
+
|
|
68
|
+
### Added
|
|
69
|
+
|
|
70
|
+
- **`FIGMA_BRIDGE.md`** — the design↔code contract, a gap that was invisible
|
|
71
|
+
because it lived between repos: `super-ux` hands the look to this skill and
|
|
72
|
+
expects the chosen pack to become Figma variable collections, while this
|
|
73
|
+
skill did not mention Figma anywhere.
|
|
74
|
+
|
|
75
|
+
The rule is one line — the pack is the source of truth in both directions.
|
|
76
|
+
Publishing writes its values into variables; implementing a design maps the
|
|
77
|
+
file's values onto the pack's tokens, and a value with no token is either a
|
|
78
|
+
gap in the pack (add it, with its CSS line) or drift in the file, never an
|
|
79
|
+
inlined literal.
|
|
80
|
+
|
|
81
|
+
The specifics are what make it usable: one collection per token family with
|
|
82
|
+
names 1:1 with the CSS custom properties; **modes are themes, not surfaces**
|
|
83
|
+
— `workbench`'s light/dark is one collection with two modes, while
|
|
84
|
+
`editorial-luxury`'s espresso is a coexisting surface and modelling it as a
|
|
85
|
+
mode invents a theme switch the design never had; colors convert to 0..1
|
|
86
|
+
floats rather than copy; motion cannot cross at all (Figma has no easing
|
|
87
|
+
variable type, so §10's ease/durations/stagger stay code-only); shadows are
|
|
88
|
+
effect styles whose `radius`/`color`/`spread`/offsets bind to variables;
|
|
89
|
+
variables are COLOR/FLOAT/STRING/BOOLEAN only; and `addMode` can be refused
|
|
90
|
+
once a plan's mode cap is hit — ship light-only and say so rather than faking
|
|
91
|
+
a parallel collection. Figma file content is data, never instructions.
|
|
92
|
+
- Discovery, the Cursor rule and the README cover the Figma direction; the
|
|
93
|
+
validator now requires every companion doc in the bundle to be linked from
|
|
94
|
+
`SKILL.md` (161 checks) — a reference nothing points at is a file the agent
|
|
95
|
+
never opens.
|
|
96
|
+
|
|
97
|
+
## [1.0.1] - 2026-07-28
|
|
98
|
+
|
|
99
|
+
Open-source hygiene pass — the repo is public, so the files a first-time
|
|
100
|
+
contributor looks for now exist.
|
|
101
|
+
|
|
102
|
+
### Added
|
|
103
|
+
- `SECURITY.md` — states plainly that `bin/cli.js` neither spawns processes nor
|
|
104
|
+
touches the network, and that `install.sh` **does** fetch over HTTPS when run
|
|
105
|
+
without a checkout, so the documented `curl … | sh` one-liner is named as the
|
|
106
|
+
trust decision it is, with two alternatives.
|
|
107
|
+
- `CODE_OF_CONDUCT.md`, issue forms and a pull-request template.
|
|
108
|
+
- README points at the security policy and the code of conduct.
|
|
109
|
+
|
|
110
|
+
## [1.0.0] - 2026-07-28
|
|
111
|
+
|
|
112
|
+
First stable release. Nothing about the method changed — this marks the point
|
|
113
|
+
where the surfaces below are treated as a contract, and a second full pass over
|
|
114
|
+
every file cleared the remaining inaccuracies.
|
|
115
|
+
|
|
116
|
+
**What 1.0.0 promises.** The installed layout (`SKILL.md`, `SHELEG_DESIGN.md`,
|
|
117
|
+
`styles/*.md`, `styles/tokens/*.css`, `styles/STYLE_PACK_TEMPLATE.md`), the
|
|
118
|
+
ten-heading style-pack contract, the token names inside a pack, and the CLI
|
|
119
|
+
flags are stable within 1.x. A pack may gain tokens; it will not silently
|
|
120
|
+
change what an existing token means. Removing or renaming either is a major.
|
|
121
|
+
|
|
122
|
+
### Fixed
|
|
123
|
+
|
|
124
|
+
- `release.yml` pointed at `pipeline.example.json`, a file that has never
|
|
125
|
+
existed in this repo, and installed `jsonschema` for a validator whose first
|
|
126
|
+
line says stdlib-only. Both gone; its post-release smoke test now `diff -r`s
|
|
127
|
+
the whole installed bundle instead of checking three paths.
|
|
128
|
+
- The CLI accepted a bare trailing `--dir` and silently fell back to
|
|
129
|
+
auto-detect — installing somewhere the caller did not ask for. `--dir`
|
|
130
|
+
without a path, an unknown flag, and `--dir` combined with
|
|
131
|
+
`--cursor`/`--claude` now print the reason and exit 2 (previously exit 0).
|
|
132
|
+
- `SKILL.md` listed "dashboards" under *not for*, one line after listing
|
|
133
|
+
dashboards as a supported use — the exclusion is about the cinematic motion
|
|
134
|
+
layer, and now says so.
|
|
135
|
+
- `SHELEG_DESIGN.md` §13 presented the reference implementation's Next.js paths
|
|
136
|
+
as if they were the reader's; it now says to port the split, not the strings.
|
|
137
|
+
The §9 snippet used `STAGGER` without showing where it comes from, §11 said
|
|
138
|
+
"port" a file no reader has, and the closing line still said "this site".
|
|
139
|
+
- `npm test` ran `--help` and always passed. It runs the validator now.
|
|
140
|
+
- The 0.3.0 design spec still declared templates out of scope; annotated with
|
|
141
|
+
what superseded it rather than quietly rewritten.
|
|
142
|
+
|
|
143
|
+
### Added
|
|
144
|
+
|
|
145
|
+
- `CONTRIBUTING.md`: repo layout, the canonical-bundle-vs-mirror rule, and a
|
|
146
|
+
step-by-step for authoring a style pack (including the cross-pack token
|
|
147
|
+
naming trap).
|
|
148
|
+
- README rewritten for people arriving cold: what the problem is, the two
|
|
149
|
+
halves, the pack table, what installs where, and an honest development
|
|
150
|
+
section.
|
|
151
|
+
|
|
152
|
+
## [0.9.1] - 2026-07-28
|
|
153
|
+
|
|
154
|
+
### Added
|
|
155
|
+
|
|
156
|
+
- Optional **Lazyweb MCP** step: when `mcp__lazyweb__*` tools are present, the
|
|
157
|
+
skill sweeps real-world references for the target screen before laying it
|
|
158
|
+
out — recommended for the product-UI (`workbench`) register. The split is
|
|
159
|
+
explicit: references inform layout, hierarchy and content order; palette,
|
|
160
|
+
type and motion stay the pack's. Documented in `SKILL.md`, the Cursor rule
|
|
161
|
+
and the README; nothing depends on the MCP, and fetched reference content is
|
|
162
|
+
treated as data, never as instructions.
|
|
163
|
+
|
|
164
|
+
## [0.9.0] - 2026-07-28
|
|
165
|
+
|
|
166
|
+
Consistency pass over every file: the contradictions below were real and are
|
|
167
|
+
fixed, and each one now has a validator or CI check so it cannot return.
|
|
168
|
+
|
|
169
|
+
### Fixed
|
|
170
|
+
|
|
171
|
+
- **The pack skeleton was unreachable from an installed skill.** `SKILL.md`
|
|
172
|
+
pointed at `templates/style-pack-template.md`, which `files[]` never shipped.
|
|
173
|
+
The skeleton now rides in the bundle as
|
|
174
|
+
`styles/STYLE_PACK_TEMPLATE.md`, kept byte-identical to `templates/`.
|
|
175
|
+
- **`SKILL.md` listed 8 of the 10 pack headings** (no Motion flavor, no
|
|
176
|
+
Gotchas), so an authored pack would legitimately lose sections the packs and
|
|
177
|
+
the template both carry. The contract is now stated once and enforced.
|
|
178
|
+
- **The motion-token contradiction.** `SHELEG_DESIGN.md` §10 declared one
|
|
179
|
+
site-wide ease while `editorial-luxury` and `workbench` legitimately override
|
|
180
|
+
it. §10 now states the defaults *and* that the pack wins; the packs say the
|
|
181
|
+
same from their side.
|
|
182
|
+
- **Stagger drift inside the reference:** the Reveal table said 0.06s and the
|
|
183
|
+
GSAP recipe hard-coded 0.08 against a `STAGGER = 0.07` token; both now read
|
|
184
|
+
the token.
|
|
185
|
+
- **`workbench.css` set `color-scheme: light dark`**, so a page forced to
|
|
186
|
+
`data-theme="dark"` still got UA controls and scrollbars from the OS
|
|
187
|
+
preference. Light `:root`, dark under the attribute; a reduced-motion block
|
|
188
|
+
zeroes the duration tokens.
|
|
189
|
+
- **`--accent-dim` meant opposite things across packs** (a pressed darker blue
|
|
190
|
+
in `instrument-console`, a 12% tint in `editorial-luxury`). The tint is now
|
|
191
|
+
`--accent-weak`, matching `workbench`'s naming.
|
|
192
|
+
- **`workbench.md` shipped prose where tokens belong** ("amber", "red",
|
|
193
|
+
"`#1a7f37`-family") — the table now carries the exact light/dark pairs from
|
|
194
|
+
the CSS, and `--info` is documented as deliberately the accent hue.
|
|
195
|
+
- **CLI help still advertised two style packs** (the success message had been
|
|
196
|
+
fixed, the help text had not), and the bundle blurb omitted the token CSS.
|
|
197
|
+
- **The Cursor rule promised product-UI guidance it never gave** — it now
|
|
198
|
+
carries a self-contained workbench contract for agents without the skill
|
|
199
|
+
installed.
|
|
200
|
+
- README, `marketplace.json`, and the `/sheleg-design` command all described a
|
|
201
|
+
landing-page-only skill; all three now state the product-UI half.
|
|
202
|
+
- Reference cleanups: ASCII architecture diagram re-aligned (the fan-out
|
|
203
|
+
connector was one column off the store box), `bias` added to the store
|
|
204
|
+
fields it lists, the `936 = 24 × 13 × 3` factorization disambiguated from
|
|
205
|
+
scene indices, and a product-specific closing-line example genericized.
|
|
206
|
+
|
|
207
|
+
### Added
|
|
208
|
+
|
|
209
|
+
- Validator (146 checks, was 101): the **whole** `.cursor/` mirror is compared
|
|
210
|
+
against the plugin bundle file-by-file in both directions (previously only
|
|
211
|
+
`SKILL.md`), the full ten-heading pack contract is enforced on every pack and
|
|
212
|
+
on the template, the shipped template must match `templates/`, and every pack
|
|
213
|
+
must be routed from the `SKILL.md` table and named in the CLI output.
|
|
214
|
+
- CI installs through both channels and `diff -r`s the result against the
|
|
215
|
+
bundle, so a file that reaches one installer and not the other fails the run.
|
|
216
|
+
- `test/scenarios.md` gains T7 (authoring a new pack against the contract).
|
|
217
|
+
|
|
218
|
+
## [0.8.0] - 2026-07-28
|
|
219
|
+
|
|
220
|
+
### Fixed
|
|
221
|
+
- The Cursor channel copy of `SKILL.md` could drift from the plugin copy without
|
|
222
|
+
anything noticing. The validator now compares them and fails on drift.
|
|
223
|
+
|
|
224
|
+
### Changed
|
|
225
|
+
- `RU triggers - …` replaced with English-first pairs
|
|
226
|
+
(`"design tokens" / "дизайн-токены"`), so the description reads as English
|
|
227
|
+
with localized aliases.
|
|
228
|
+
- README is English-only, with a plain statement of what the skill gives you and
|
|
229
|
+
an author/links block.
|
|
230
|
+
|
|
231
|
+
### Added
|
|
232
|
+
- Validator enforces the description canon: `Use when` opening, Russian trigger
|
|
233
|
+
aliases present, front-matter under 1024 characters.
|
|
234
|
+
|
|
7
235
|
## [0.7.0] - 2026-07-25
|
|
8
236
|
|
|
9
237
|
Review pass.
|
package/README.md
CHANGED
|
@@ -1,36 +1,53 @@
|
|
|
1
|
-
# SHELEG Design — agent skill
|
|
1
|
+
# SHELEG Design — design taste as an agent skill
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/sheleg-design-skill)
|
|
4
4
|
[](https://github.com/ssheleg/sheleg-design-skill/actions/workflows/validate.yml)
|
|
5
5
|
[](./LICENSE)
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
An agent can generate a landing page in under a minute, and it will look like
|
|
8
|
+
every other generated landing page: three cards, a gradient, a hero that does
|
|
9
|
+
nothing. Ask it for a dashboard and you get a different flavor of the same
|
|
10
|
+
problem — invented colors, six accent hues, dark mode retrofitted later.
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
This skill is the taste layer. It gives a coding agent **one motion
|
|
13
|
+
methodology** for cinematic, scroll-driven pages and **three locked style
|
|
14
|
+
packs** with ready-made design tokens, so what it builds reads as one system
|
|
15
|
+
instead of a pile of effects.
|
|
12
16
|
|
|
13
17
|
```bash
|
|
14
18
|
npx sheleg-design-skill
|
|
15
19
|
```
|
|
16
20
|
|
|
17
|
-
That drops
|
|
18
|
-
|
|
21
|
+
That drops the bundle — `SKILL.md`, the `SHELEG_DESIGN.md` reference, the style
|
|
22
|
+
packs and their token CSS — into `.cursor/skills/` or `.claude/skills/`, where
|
|
23
|
+
your agent discovers it on its own.
|
|
19
24
|
|
|
20
|
-
|
|
25
|
+
---
|
|
21
26
|
|
|
22
|
-
|
|
23
|
-
truth** (scroll position) driving **many cheap, layered responses** that are
|
|
24
|
-
individually quiet and collectively cinematic. One scroll "clock" feeds a WebGL
|
|
25
|
-
particle field, a 2D fallback, attention dimming, parallax, scrubbed
|
|
26
|
-
instruments, and a progress rail — each an independent, degrade-to-calm layer.
|
|
27
|
-
Nothing crossfades; things *redeploy*. The result reads as one precision
|
|
28
|
-
instrument responding to your hand.
|
|
27
|
+
## The two halves
|
|
29
28
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
29
|
+
**Motion** — for landings, heroes, scroll narratives. A page feels *alive* not
|
|
30
|
+
from many animations but from a **single source of truth** (measured scroll
|
|
31
|
+
position) driving **many cheap, layered responses** that are individually quiet
|
|
32
|
+
and collectively cinematic. One scroll "clock" feeds a WebGL particle field, a
|
|
33
|
+
2D fallback, attention dimming, parallax, scrubbed instruments and a progress
|
|
34
|
+
rail — each an independent, degrade-to-calm layer. Nothing crossfades; things
|
|
35
|
+
*redeploy*.
|
|
36
|
+
|
|
37
|
+
**Style packs** — the visual identity, pluggable per project. The `workbench`
|
|
38
|
+
pack is meant to be used **standalone**, with none of the motion layer: quiet
|
|
39
|
+
light/dark product UI for dashboards, admin panels, internal and dev tools.
|
|
40
|
+
|
|
41
|
+
| Pack | Look | Choose for |
|
|
42
|
+
|---|---|---|
|
|
43
|
+
| `instrument-console` | near-black aerospace console, one electric-blue signal, mono telemetry | technical / systems / infra |
|
|
44
|
+
| `editorial-luxury` | warm cream + espresso ink, sage accent, Fraunces/Newsreader, dossier motifs | editorial / research / premium B2B |
|
|
45
|
+
| `workbench` | neutral grays, borders as elevation, one blue accent, mono data, light + dark twins | dashboards, admin, internal & dev tools |
|
|
46
|
+
|
|
47
|
+
Each pack locks palette, type, texture, motion tokens, signature motifs and
|
|
48
|
+
bans — and ships a `tokens/<pack>.css` to copy verbatim, so the agent never
|
|
49
|
+
invents a hex. Where a pack sets its own ease and durations, the pack wins; the
|
|
50
|
+
motion layer never hard-codes a palette.
|
|
34
51
|
|
|
35
52
|
### The five principles
|
|
36
53
|
|
|
@@ -44,91 +61,163 @@ an agent can rebuild that level on a new site.
|
|
|
44
61
|
5. **Degrade to calm.** Reduced-motion / coarse pointer / no-WebGL collapse to a
|
|
45
62
|
static, fully-legible page.
|
|
46
63
|
|
|
47
|
-
|
|
64
|
+
The method was reverse-engineered from a production landing page — a 14-scene
|
|
65
|
+
particle narrative that morphs through formations and ends in a brand glyph that
|
|
66
|
+
charges and bursts — then generalized so an agent can rebuild that level
|
|
67
|
+
anywhere.
|
|
68
|
+
|
|
69
|
+
## Install
|
|
70
|
+
|
|
71
|
+
Requires Node ≥ 16 for the installer. Nothing is added to your dependencies:
|
|
72
|
+
the skill is documentation an agent reads.
|
|
48
73
|
|
|
49
74
|
```bash
|
|
50
|
-
# Auto-detect (.cursor/ or .claude/), default
|
|
75
|
+
# Auto-detect (.cursor/ or .claude/), default .cursor/skills/sheleg-design/
|
|
51
76
|
npx sheleg-design-skill
|
|
52
77
|
|
|
53
|
-
#
|
|
78
|
+
# Pick the target explicitly
|
|
54
79
|
npx sheleg-design-skill --cursor
|
|
55
80
|
npx sheleg-design-skill --claude
|
|
56
|
-
|
|
57
|
-
# Custom location
|
|
58
81
|
npx sheleg-design-skill --dir docs/skills/sheleg-design
|
|
59
82
|
|
|
60
|
-
# Overwrite an existing install
|
|
83
|
+
# Overwrite an existing install / see all options
|
|
61
84
|
npx sheleg-design-skill --force
|
|
62
|
-
|
|
63
|
-
# Help
|
|
64
85
|
npx sheleg-design-skill --help
|
|
65
86
|
```
|
|
66
87
|
|
|
67
|
-
|
|
88
|
+
Other channels:
|
|
68
89
|
|
|
69
90
|
```bash
|
|
70
|
-
# Claude Code plugin
|
|
91
|
+
# Claude Code plugin — adds the /sheleg-design command too
|
|
71
92
|
/plugin marketplace add ssheleg/sheleg-design-skill
|
|
72
93
|
/plugin install sheleg-design@sheleg-design-skill
|
|
73
94
|
|
|
74
|
-
# vercel-labs skills CLI
|
|
95
|
+
# vercel-labs skills CLI
|
|
75
96
|
npx skills add ssheleg/sheleg-design-skill
|
|
76
97
|
|
|
77
98
|
# POSIX fallback, no Node
|
|
78
99
|
curl -fsSL https://raw.githubusercontent.com/ssheleg/sheleg-design-skill/main/install.sh | sh
|
|
79
100
|
```
|
|
80
101
|
|
|
102
|
+
Cursor rules users: `cursor/rules/sheleg-design.mdc` is a self-contained
|
|
103
|
+
condensed version — copy it into `.cursor/rules/` if you prefer rules over
|
|
104
|
+
skills.
|
|
105
|
+
|
|
81
106
|
### What gets installed
|
|
82
107
|
|
|
83
108
|
| File | Purpose |
|
|
84
109
|
|---|---|
|
|
85
|
-
| `SKILL.md` |
|
|
86
|
-
| `SHELEG_DESIGN.md` | The full reference: architecture, layer-by-layer mechanics with code, the exact morph math, the DOM↔WebGL projection bridge, a build-from-scratch recipe, and
|
|
87
|
-
| `
|
|
110
|
+
| `SKILL.md` | The agent-facing skill: discovery triggers, the principles, how to apply them, quick-reference rules, common mistakes |
|
|
111
|
+
| `SHELEG_DESIGN.md` | The full reference: architecture, layer-by-layer mechanics with code, the exact morph math, the DOM↔WebGL projection bridge, a build-from-scratch recipe, and why each piece works |
|
|
112
|
+
| `FIGMA_BRIDGE.md` | The design↔code contract: how a pack's tokens map onto Figma variable collections and modes, how to implement a design without importing raw values, and what cannot cross the border |
|
|
113
|
+
| `AI_PRODUCT_PATTERNS.md` | The surfaces a model drives: the five states of a call, streaming instead of spinners, latency, provenance and uncertainty, agent confirmations, and the bans that keep it honest |
|
|
114
|
+
| `styles/*.md` | The three style packs — palette, type, texture, motion tokens, motifs, bans, and the traps each one carries |
|
|
115
|
+
| `styles/tokens/*.css` | The ready-made token layer per pack, copied verbatim instead of transcribed (workbench ships a light `:root` plus a `data-theme="dark"` twin) |
|
|
116
|
+
| `styles/STYLE_PACK_TEMPLATE.md` | The pack contract as a skeleton, so a new style is authored against the same headings rather than improvised |
|
|
117
|
+
|
|
118
|
+
## What you get out of it
|
|
119
|
+
|
|
120
|
+
- **A motion methodology, not a component dump.** Scroll-linked animation,
|
|
121
|
+
particle and WebGL backgrounds, parallax layers that stay in phase instead of
|
|
122
|
+
drifting apart as the page grows.
|
|
123
|
+
- **Product UI with the boring parts already decided** — tokens, light/dark,
|
|
124
|
+
elevation, state colors, data typography — up front rather than retrofitted.
|
|
125
|
+
- **A diagnosis for pages that feel busy or janky**, naming which layer to cut
|
|
126
|
+
instead of telling you to "simplify".
|
|
127
|
+
- **Stack-agnostic and dependency-free.** The reference implementation happens
|
|
128
|
+
to use Next.js + React + three / react-three-fiber + GSAP ScrollTrigger +
|
|
129
|
+
Lenis, but the method applies to any stack that can render to a canvas and
|
|
130
|
+
read scroll. It is a way of building, not a framework you now depend on.
|
|
131
|
+
|
|
132
|
+
## AI product surfaces
|
|
133
|
+
|
|
134
|
+
Chat, agent runs, streaming output and generated content are the surfaces most
|
|
135
|
+
design systems were written before — and the ones everyone is now building.
|
|
136
|
+
`AI_PRODUCT_PATTERNS.md` covers them with one organizing rule, **honest state**:
|
|
137
|
+
a model's output is slow, uncertain, occasionally refused and sometimes wrong,
|
|
138
|
+
and an interface that hides any of that is not calmer, it is lying.
|
|
139
|
+
|
|
140
|
+
Concretely: five states per call, not two (idle · working · complete · refused ·
|
|
141
|
+
failed — a refusal is not an error and a rate limit is not a crash); streaming
|
|
142
|
+
instead of spinners, with a stop control from the first frame and no reflow; the
|
|
143
|
+
context the model actually used, because most "wrong answer" reports are
|
|
144
|
+
wrong-context reports; an agent's action shown in the shape it will take before
|
|
145
|
+
it runs; and no confidence number with nothing behind it.
|
|
146
|
+
|
|
147
|
+
This is where the skill's positioning is externally measured rather than
|
|
148
|
+
asserted: in Figma's *State of the Designer 2026* (NewtonX, 906 designers,
|
|
149
|
+
Sept–Oct 2025), designing AI-driven products is the **third most in-demand
|
|
150
|
+
skill (37%)** — ahead of motion design and information architecture — while
|
|
151
|
+
**visual polish tops the list at 58%**, and craft is named the differentiator
|
|
152
|
+
now that anyone can prompt their way to a prototype.
|
|
153
|
+
|
|
154
|
+
## Figma, in both directions
|
|
155
|
+
|
|
156
|
+
Design files and design tokens are two encodings of one system, and the usual
|
|
157
|
+
outcome is that they drift until nobody trusts either. The skill's rule is that
|
|
158
|
+
**the pack is the source of truth on both sides**: publishing writes a pack's
|
|
159
|
+
values into Figma variable collections; implementing a design maps the file's
|
|
160
|
+
values *onto* the pack's tokens instead of inlining hexes.
|
|
161
|
+
|
|
162
|
+
The bridge is specific because the traps are: `workbench`'s light and dark are
|
|
163
|
+
two **modes of one collection**, while `editorial-luxury`'s espresso sections
|
|
164
|
+
are surfaces and not a mode at all; Figma colors are 0..1 floats, not hex; and
|
|
165
|
+
motion never crosses — Figma has no easing variable type, so the ease, durations
|
|
166
|
+
and stagger stay code-only, and shadows are effect styles whose parts bind to
|
|
167
|
+
variables. A value in a file with no matching token is either a gap in the pack
|
|
168
|
+
or drift in the file — the one thing it is never is a literal in a component.
|
|
169
|
+
|
|
170
|
+
## Optional: Lazyweb MCP
|
|
171
|
+
|
|
172
|
+
A style pack locks *how it looks*. It says nothing about what a good version of
|
|
173
|
+
the screen you're about to build actually **contains**. If the
|
|
174
|
+
[Lazyweb](https://www.lazyweb.com) MCP server is connected, the skill sweeps
|
|
175
|
+
real-world references for the target screen (signup, onboarding, paywall,
|
|
176
|
+
pricing, checkout, dashboard, settings) before laying anything out.
|
|
177
|
+
|
|
178
|
+
The division of labor keeps the result one system: references inform **layout,
|
|
179
|
+
hierarchy and content order**; palette, type and motion stay the pack's. Setup
|
|
180
|
+
is a Streamable HTTP MCP server plus a per-user token — keep it out of your
|
|
181
|
+
repo. Entirely optional; without it the skill works from the pack alone.
|
|
88
182
|
|
|
89
|
-
|
|
90
|
-
skill and use it when you ask it to build or upgrade a cinematic,
|
|
91
|
-
scroll-driven, particle-backed page.
|
|
92
|
-
|
|
93
|
-
## Style-agnostic motion, pluggable identity
|
|
94
|
-
|
|
95
|
-
The motion methodology (one clock, layered responses, degrade-to-calm) is
|
|
96
|
-
independent of the visual style. The look comes from a **style pack** the
|
|
97
|
-
agent picks per project — dark instrument console or warm editorial luxury
|
|
98
|
-
out of the box, or a new pack authored against the same contract.
|
|
183
|
+
## Development
|
|
99
184
|
|
|
100
|
-
|
|
185
|
+
```bash
|
|
186
|
+
python3 test/validate.py # or: npm test
|
|
187
|
+
```
|
|
101
188
|
|
|
102
|
-
The
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
189
|
+
The validator is the repo's contract, not a formality — it checks manifests and
|
|
190
|
+
four-way version sync, skill/command/rule front-matter and description canon,
|
|
191
|
+
the full style-pack section contract, pack ↔ `SKILL.md` ↔ CLI-help agreement,
|
|
192
|
+
the bundled template against `templates/`, both installers' file lists, the
|
|
193
|
+
entire `.cursor/` mirror against the plugin copy, and every relative link. CI
|
|
194
|
+
runs it on each push and PR alongside a negative self-test (the validator must
|
|
195
|
+
fail on a corrupted version) and installs the bundle through **both** installers,
|
|
196
|
+
diffing the result against the source.
|
|
106
197
|
|
|
107
|
-
|
|
198
|
+
`test/scenarios.md` (T1–T7) is the behavioral harness: fresh subagents given a
|
|
199
|
+
task, checking that the skill is discovered, applied and quoted correctly.
|
|
200
|
+
Re-run the affected scenarios after any edit to `SKILL.md`, a pack or the
|
|
201
|
+
reference.
|
|
108
202
|
|
|
109
|
-
|
|
110
|
-
|
|
203
|
+
Adding a style pack, or anything else: see [CONTRIBUTING.md](./CONTRIBUTING.md)
|
|
204
|
+
and the [Code of Conduct](./CODE_OF_CONDUCT.md). To report a vulnerability, see
|
|
205
|
+
[SECURITY.md](./SECURITY.md).
|
|
111
206
|
|
|
112
|
-
##
|
|
207
|
+
## Author
|
|
113
208
|
|
|
114
|
-
|
|
115
|
-
skill/command/rule front-matter, relative links); CI runs it plus a CLI smoke
|
|
116
|
-
test on every push and PR. Versioning is semver; bump `marketplace.json` +
|
|
117
|
-
`plugin.json` + `package.json` + `CHANGELOG.md` together — the validator
|
|
118
|
-
enforces the sync.
|
|
209
|
+
Built by ssheleg — [sshlg.me](https://sshlg.me)
|
|
119
210
|
|
|
120
|
-
|
|
211
|
+
- X / Twitter — [@fuck_this_year](https://x.com/fuck_this_year)
|
|
212
|
+
- Telegram — [@sshlg](https://t.me/sshlg)
|
|
121
213
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
задаёт выбранный пак (`styles/<pack>.md` + `styles/tokens/<pack>.css`):
|
|
126
|
-
`instrument-console` (тёмная приборная панель), `editorial-luxury` (тёплая
|
|
127
|
-
издательская), `workbench` (светлый рабочий интерфейс).
|
|
214
|
+
Part of the [ssheleg skill family](https://github.com/ssheleg/sshlg-skills):
|
|
215
|
+
`super-ux`, `task-pipeline`, `make-skill`, `sheleg-design`, `seo-aeo-audit`.
|
|
216
|
+
One command installs all five for every agent you use:
|
|
128
217
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
218
|
+
```bash
|
|
219
|
+
npx sshlg-skills install
|
|
220
|
+
```
|
|
132
221
|
|
|
133
222
|
## License
|
|
134
223
|
|
package/bin/cli.js
CHANGED
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
/**
|
|
5
5
|
* sheleg-design-skill installer.
|
|
6
6
|
*
|
|
7
|
-
* Copies the SHELEG Design skill bundle (SKILL.md
|
|
8
|
-
* current project so a Cursor / Claude
|
|
7
|
+
* Copies the SHELEG Design skill bundle (SKILL.md, SHELEG_DESIGN.md, the style
|
|
8
|
+
* packs and their token CSS) into the current project so a Cursor / Claude
|
|
9
|
+
* agent can discover and apply it.
|
|
9
10
|
*
|
|
10
11
|
* Zero dependencies on purpose: it must run instantly via `npx` with no install
|
|
11
12
|
* step and no supply-chain surface.
|
|
@@ -60,6 +61,7 @@ function parseArgs(argv) {
|
|
|
60
61
|
force: false,
|
|
61
62
|
help: false,
|
|
62
63
|
version: false,
|
|
64
|
+
error: null, // set → print help and exit non-zero
|
|
63
65
|
};
|
|
64
66
|
for (let i = 0; i < argv.length; i++) {
|
|
65
67
|
const a = argv[i];
|
|
@@ -68,13 +70,23 @@ function parseArgs(argv) {
|
|
|
68
70
|
else if (a === "--force" || a === "-f") opts.force = true;
|
|
69
71
|
else if (a === "--cursor") opts.flavor = "cursor";
|
|
70
72
|
else if (a === "--claude") opts.flavor = "claude";
|
|
71
|
-
else if (a === "--dir")
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
opts.
|
|
73
|
+
else if (a === "--dir") {
|
|
74
|
+
// A bare trailing --dir must fail loudly: silently falling back to
|
|
75
|
+
// auto-detect would install somewhere the caller did not ask for.
|
|
76
|
+
const value = argv[++i];
|
|
77
|
+
if (!value || value.startsWith("-")) opts.error = "--dir needs a path";
|
|
78
|
+
else opts.target = value;
|
|
79
|
+
} else if (a.startsWith("--dir=")) {
|
|
80
|
+
const value = a.slice("--dir=".length);
|
|
81
|
+
if (!value) opts.error = "--dir needs a path";
|
|
82
|
+
else opts.target = value;
|
|
83
|
+
} else {
|
|
84
|
+
opts.error = `unknown argument: ${a}`;
|
|
76
85
|
}
|
|
77
86
|
}
|
|
87
|
+
if (opts.flavor && opts.target) {
|
|
88
|
+
opts.error = "--dir cannot be combined with --cursor / --claude";
|
|
89
|
+
}
|
|
78
90
|
return opts;
|
|
79
91
|
}
|
|
80
92
|
|
|
@@ -99,9 +111,14 @@ ${c("bold", "Default")}
|
|
|
99
111
|
otherwise creates .cursor/skills/${SKILL_SLUG}/.
|
|
100
112
|
|
|
101
113
|
${c("bold", "What it installs")}
|
|
102
|
-
SKILL.md
|
|
103
|
-
SHELEG_DESIGN.md
|
|
104
|
-
|
|
114
|
+
SKILL.md the agent-facing skill (discovery + principles)
|
|
115
|
+
SHELEG_DESIGN.md the full reference (architecture, recipes, why it works)
|
|
116
|
+
FIGMA_BRIDGE.md the design↔code contract (tokens ⇄ Figma variables)
|
|
117
|
+
AI_PRODUCT_PATTERNS.md chat / agent / streaming surfaces (honest state)
|
|
118
|
+
styles/ three style packs — instrument-console (dark console),
|
|
119
|
+
editorial-luxury (warm editorial), workbench (light/dark
|
|
120
|
+
product UI, standalone) — plus a ready-made token CSS
|
|
121
|
+
per pack and STYLE_PACK_TEMPLATE.md for authoring more
|
|
105
122
|
`);
|
|
106
123
|
}
|
|
107
124
|
|
|
@@ -122,6 +139,11 @@ function resolveTargetDir(opts, cwd) {
|
|
|
122
139
|
function main() {
|
|
123
140
|
const opts = parseArgs(process.argv.slice(2));
|
|
124
141
|
|
|
142
|
+
if (opts.error) {
|
|
143
|
+
console.error(c("yellow", `sheleg-design-skill: ${opts.error}`));
|
|
144
|
+
printHelp();
|
|
145
|
+
process.exit(2);
|
|
146
|
+
}
|
|
125
147
|
if (opts.version) {
|
|
126
148
|
console.log(pkg.version);
|
|
127
149
|
return;
|
|
@@ -169,9 +191,10 @@ function main() {
|
|
|
169
191
|
`\n${c("green", "✓")} ${c("bold", "SHELEG Design")} installed to ${c("blue", rel + "/")}\n` +
|
|
170
192
|
` ${c("dim", "SKILL.md")} the agent skill\n` +
|
|
171
193
|
` ${c("dim", "SHELEG_DESIGN.md")} the full reference\n` +
|
|
172
|
-
` ${c("dim", "styles/")} style packs (instrument-console / editorial-luxury / workbench)\n\n` +
|
|
194
|
+
` ${c("dim", "styles/")} style packs + token CSS (instrument-console / editorial-luxury / workbench)\n\n` +
|
|
173
195
|
`Your Cursor / Claude agent can now discover the skill and build\n` +
|
|
174
|
-
`cinematic, scroll-driven
|
|
196
|
+
`cinematic, scroll-driven pages — or style product UI (dashboards,\n` +
|
|
197
|
+
`admin, internal tools) from the workbench pack — on its principles.\n\n` +
|
|
175
198
|
`${c("dim", "Docs: " + pkg.homepage)}\n`,
|
|
176
199
|
);
|
|
177
200
|
}
|