@syncedco/motion 0.1.0 → 0.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 CHANGED
@@ -15,6 +15,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
15
15
  - **Bundle budgets** in `scripts/check-size.mjs` are part of the contract. They
16
16
  are raised deliberately, never quietly.
17
17
 
18
+ ## [0.2.0](https://github.com/SyncedCo/synced-motion/compare/v0.1.0...v0.2.0) (2026-09-25)
19
+
20
+
21
+ ### Features
22
+
23
+ * ship an agent skill and install it per agent target ([48a5fcf](https://github.com/SyncedCo/synced-motion/commit/48a5fcf221ca8eb411c57f72db9ae54453da12ac))
24
+
25
+
26
+ ### Bug Fixes
27
+
28
+ * **site:** publish every page and use relative links on GitHub Pages ([c1151ba](https://github.com/SyncedCo/synced-motion/commit/c1151bab0f15edc63397267059dee697e438d28d))
29
+
18
30
  ## [0.1.0] - 2026-09-25
19
31
 
20
32
  Initial release: the recipe schema, compiler, registry and runtime; sixty
package/README.md CHANGED
@@ -7,7 +7,12 @@ behaviour, no-JavaScript fallbacks and deterministic cleanup are part of the
7
7
  contract instead of something you remember to add later.
8
8
 
9
9
  Framework-neutral. No jQuery, no page builder runtime, no generated class
10
- names. Works in plain HTML, React, Vue, Svelte, Astro and WordPress.
10
+ names. Works in plain HTML, React, Vue, Svelte, Astro and WordPress, with any
11
+ CSS, and [pairs naturally with Synced Flow](#pairs-well-with-synced-flow).
12
+
13
+ **[See it live](https://syncedco.github.io/synced-motion/)** ·
14
+ [Browse all sixty recipes](https://syncedco.github.io/synced-motion/gallery/) ·
15
+ [Full-page examples](https://syncedco.github.io/synced-motion/examples/)
11
16
 
12
17
  ```bash
13
18
  npm install @syncedco/motion gsap
@@ -44,6 +49,34 @@ Don't know the attribute you need? Ask for it:
44
49
  npx synced-motion add reveal-rise
45
50
  ```
46
51
 
52
+ ### No build step
53
+
54
+ For Webflow, a WordPress theme or a plain HTML page, load it from a CDN with an
55
+ import map. Nothing to install.
56
+
57
+ <!-- x-release-please-start-version -->
58
+ ```html
59
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@syncedco/motion@0.2.0/dist/styles.css">
60
+ <script type="importmap">
61
+ {
62
+ "imports": {
63
+ "@syncedco/motion": "https://cdn.jsdelivr.net/npm/@syncedco/motion@0.2.0/dist/index.js",
64
+ "gsap": "https://cdn.jsdelivr.net/npm/gsap@3/index.js",
65
+ "gsap/ScrollTrigger": "https://cdn.jsdelivr.net/npm/gsap@3/ScrollTrigger.js",
66
+ "lenis": "https://cdn.jsdelivr.net/npm/lenis@1/dist/lenis.mjs"
67
+ }
68
+ }
69
+ </script>
70
+ <script type="module">
71
+ import { createSyncedMotion } from '@syncedco/motion'
72
+ createSyncedMotion()
73
+ </script>
74
+ ```
75
+ <!-- x-release-please-end -->
76
+
77
+ Recipes that need an optional GSAP plugin are covered in
78
+ [Framework and CMS integrations](docs/INTEGRATIONS.md#plain-html-webflow-and-no-build-sites).
79
+
47
80
  ## What makes it different
48
81
 
49
82
  Most animation libraries hand you a tween and leave the hard parts to you.
@@ -104,15 +137,14 @@ package as a consumer installs it.
104
137
 
105
138
  ## Browse the recipes
106
139
 
107
- ```bash
108
- npm run gallery
109
- ```
110
-
111
- Search all sixty, inspect their slots and fallbacks, tune bounded parameters,
112
- simulate reduced motion, and copy the markup. Or read
140
+ **[Open the recipe gallery](https://syncedco.github.io/synced-motion/gallery/)**
141
+ to search all sixty, inspect their slots and fallbacks, tune bounded
142
+ parameters, simulate reduced motion, and copy the markup. Or read
113
143
  [the generated reference](docs/RECIPE-REFERENCE.md), which is produced from the
114
144
  registry so it cannot drift from the code.
115
145
 
146
+ Working on this repository? `npm run gallery` runs the same gallery locally.
147
+
116
148
  ## Command line and agents
117
149
 
118
150
  The CLI and the local MCP server share one side-effect-free service, so an
@@ -126,10 +158,13 @@ npx synced-motion scan --file src/page.html # find roots, report missing slots
126
158
  npx synced-motion compose "restrained but cinematic" --file src/page.html
127
159
  npx synced-motion doctor
128
160
  npx synced-motion mcp # local stdio MCP server
161
+ npx synced-motion agents install --target all # AGENTS.md, CLAUDE.md, skill
129
162
  ```
130
163
 
131
164
  The MCP server is local and provider-agnostic. It uploads nothing and needs no
132
- account. See [CLI and MCP tools](docs/TOOLING.md).
165
+ account. The package also ships an agent skill,
166
+ `skills/synced-motion/SKILL.md`, that teaches an AI agent the recipes, the
167
+ commands and the accessibility contract. See [CLI and MCP tools](docs/TOOLING.md).
133
168
 
134
169
  ## Frameworks and CMSs
135
170
 
@@ -148,7 +183,8 @@ small lifecycle adapters that keep their runtimes out of the core bundle. See
148
183
  ## Pairs well with Synced Flow
149
184
 
150
185
  Synced Motion works with any CSS — Tailwind, vanilla, CSS modules, your own
151
- design system. It has no dependency on Synced Flow and never will.
186
+ design system. It has no dependency on [Synced Flow](https://docs.syncedflow.dev)
187
+ and never will.
152
188
 
153
189
  That said, the two were built to the same rule, and it shows when you use them
154
190
  together: **Flow decides what things look like, Motion decides how they
@@ -178,8 +214,14 @@ know exactly which package is responsible for what. Motion toggles semantic
178
214
  state — `data-active`, `aria-current`, `aria-expanded` — and your CSS decides
179
215
  how that state looks, which is the same seam whether or not the CSS is Flow's.
180
216
 
181
- Keep brand tokens in `synced-flow.config.mjs`. This repository's showcase is a
182
- worked example of the pairing; run `npm run dev` to see it.
217
+ Both packages ship the same kind of AI tooling — a CLI with `--json` output, a
218
+ packaged agent skill and project guidance for `AGENTS.md` — so an agent that
219
+ knows one already knows how to drive the other. Run `synced-flow` commands for
220
+ layout and styling, `synced-motion` commands for animation.
221
+
222
+ Keep brand tokens in `synced-flow.config.mjs`. The
223
+ [live showcase](https://syncedco.github.io/synced-motion/) is built with both,
224
+ and so are the [full-page examples](https://syncedco.github.io/synced-motion/examples/).
183
225
 
184
226
  ## Writing your own recipe
185
227
 
package/dist/cli.js CHANGED
@@ -9,12 +9,34 @@ import "./chunk-JET2MYEG.js";
9
9
 
10
10
  // src/cli.js
11
11
  import { readFileSync as readFileSync2 } from "fs";
12
+ import { relative } from "path";
12
13
 
13
14
  // src/project/setup.js
14
- import { existsSync, readFileSync, writeFileSync } from "fs";
15
- import { resolve } from "path";
15
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
16
+ import { dirname, resolve } from "path";
17
+ import { fileURLToPath } from "url";
16
18
  var AGENT_START = "<!-- synced-motion:agent-guidance:start -->";
17
19
  var AGENT_END = "<!-- synced-motion:agent-guidance:end -->";
20
+ var MOTION_AGENT_TARGETS = {
21
+ universal: { guidance: "AGENTS.md" },
22
+ claude: { guidance: "CLAUDE.md", skill: ".claude/skills/synced-motion/SKILL.md" }
23
+ };
24
+ function resolveMotionAgentTargets(value = "universal") {
25
+ const requested = String(value).split(",").map((entry) => entry.trim()).filter(Boolean);
26
+ const expanded = requested.flatMap((entry) => entry === "all" ? Object.keys(MOTION_AGENT_TARGETS) : [entry]);
27
+ const unique = [...new Set(expanded)];
28
+ return {
29
+ targets: unique.filter((entry) => entry in MOTION_AGENT_TARGETS),
30
+ unknown: unique.filter((entry) => !(entry in MOTION_AGENT_TARGETS))
31
+ };
32
+ }
33
+ function packagedMotionSkillPath() {
34
+ for (const candidate of ["../skills/synced-motion/SKILL.md", "../../skills/synced-motion/SKILL.md"]) {
35
+ const path = fileURLToPath(new URL(candidate, import.meta.url));
36
+ if (existsSync(path)) return path;
37
+ }
38
+ return void 0;
39
+ }
18
40
  var motionConfigTemplate = `export default {
19
41
  scan: ['src', 'app', 'pages', 'components', 'templates', 'parts'],
20
42
  recipes: [],
@@ -29,6 +51,7 @@ var motionConfigTemplate = `export default {
29
51
  var motionAgentGuidance = `${AGENT_START}
30
52
  ## Synced Motion
31
53
 
54
+ - Read the packaged skill first: node_modules/@syncedco/motion/skills/synced-motion/SKILL.md
32
55
  - Run \`synced-motion catalog --json\` before choosing motion recipes.
33
56
  - Use \`synced-motion suggest "<brief>" --json\` and \`synced-motion plan <id...> --json\` before writing animation code.
34
57
  - Prefer registered recipes and root-scoped semantic hooks over global selectors.
@@ -55,7 +78,7 @@ function packageUpdate(existing) {
55
78
  return `${JSON.stringify(pkg, null, 2)}
56
79
  `;
57
80
  }
58
- function planMotionProjectSetup({ cwd = process.cwd(), agents = false } = {}) {
81
+ function planMotionProjectSetup({ cwd = process.cwd(), agents = false, targets = ["universal"] } = {}) {
59
82
  const writes = [];
60
83
  const configPath = resolve(cwd, "synced-motion.config.mjs");
61
84
  if (!existsSync(configPath)) writes.push({ path: configPath, content: motionConfigTemplate, kind: "config" });
@@ -66,21 +89,47 @@ function planMotionProjectSetup({ cwd = process.cwd(), agents = false } = {}) {
66
89
  if (content !== current) writes.push({ path: packagePath, content, kind: "package" });
67
90
  }
68
91
  if (agents) {
69
- const agentsPath = resolve(cwd, "AGENTS.md");
70
- const current = existsSync(agentsPath) ? readFileSync(agentsPath, "utf8") : "";
71
- const content = updateManagedSection(current, motionAgentGuidance);
72
- if (content !== current) writes.push({ path: agentsPath, content, kind: "agents" });
92
+ for (const target of targets) {
93
+ const { guidance, skill } = MOTION_AGENT_TARGETS[target];
94
+ const guidancePath = resolve(cwd, guidance);
95
+ const current = existsSync(guidancePath) ? readFileSync(guidancePath, "utf8") : "";
96
+ const content = updateManagedSection(current, motionAgentGuidance);
97
+ if (content !== current) writes.push({ path: guidancePath, content, kind: "agents" });
98
+ const source = skill && packagedMotionSkillPath();
99
+ if (source) {
100
+ const skillPath = resolve(cwd, skill);
101
+ const skillContent = readFileSync(source, "utf8");
102
+ const existing = existsSync(skillPath) ? readFileSync(skillPath, "utf8") : void 0;
103
+ if (skillContent !== existing) writes.push({ path: skillPath, content: skillContent, kind: "skill" });
104
+ }
105
+ }
73
106
  }
74
107
  return { cwd, writes };
75
108
  }
76
109
  function applyMotionProjectSetup(plan, { dryRun = false } = {}) {
77
- if (!dryRun) for (const write of plan.writes) writeFileSync(write.path, write.content);
110
+ if (!dryRun) {
111
+ for (const write of plan.writes) {
112
+ mkdirSync(dirname(write.path), { recursive: true });
113
+ writeFileSync(write.path, write.content);
114
+ }
115
+ }
78
116
  return { ...plan, dryRun, changed: plan.writes.length > 0 };
79
117
  }
80
118
  function motionAgentStatus({ cwd = process.cwd() } = {}) {
81
- const path = resolve(cwd, "AGENTS.md");
82
- const installed = existsSync(path) && readFileSync(path, "utf8").includes(AGENT_START);
83
- return { installed, path };
119
+ const hasGuidance = (file) => {
120
+ const path = resolve(cwd, file);
121
+ return existsSync(path) && readFileSync(path, "utf8").includes(AGENT_START);
122
+ };
123
+ const targets = Object.fromEntries(Object.entries(MOTION_AGENT_TARGETS).map(([name, { guidance, skill }]) => [
124
+ name,
125
+ hasGuidance(guidance) && (!skill || existsSync(resolve(cwd, skill)))
126
+ ]));
127
+ return {
128
+ installed: Object.values(targets).some(Boolean),
129
+ path: resolve(cwd, "AGENTS.md"),
130
+ targets,
131
+ skill: packagedMotionSkillPath()
132
+ };
84
133
  }
85
134
  function doctorMotionProject({ cwd = process.cwd(), service } = {}) {
86
135
  const checks = [];
@@ -157,12 +206,23 @@ slot, using the documented data-motion-* attributes.
157
206
  summary: "Check project wiring and agent guidance."
158
207
  },
159
208
  init: {
160
- usage: "synced-motion init [--agents] [--dry-run] [--json]",
209
+ usage: "synced-motion init [--agents] [--target <name>] [--dry-run] [--json]",
161
210
  summary: "Set up Synced Motion in the current project."
162
211
  },
163
212
  agents: {
164
- usage: "synced-motion agents install|status [--dry-run] [--json]",
165
- summary: "Install or inspect agent guidance in AGENTS.md."
213
+ usage: "synced-motion agents install|status [--target <name>] [--dry-run] [--json]",
214
+ summary: "Install or inspect AI agent guidance and the packaged skill.",
215
+ detail: `Targets:
216
+ universal AGENTS.md (default; read by Codex, Cursor, Copilot and most agents)
217
+ claude CLAUDE.md and .claude/skills/synced-motion/SKILL.md
218
+ all every target
219
+
220
+ synced-motion agents install --target claude
221
+ synced-motion agents install --target all`
222
+ },
223
+ skill: {
224
+ usage: "synced-motion skill [--json]",
225
+ summary: "Show the packaged AI agent skill and the core agent commands."
166
226
  },
167
227
  mcp: {
168
228
  usage: "synced-motion mcp",
@@ -231,6 +291,18 @@ ${result.suggestions.map((entry) => `- ${entry.id}: ${entry.intent}`).join("\n")
231
291
  Warnings:
232
292
  ${result.warnings.map((warning) => `- ${warning}`).join("\n")}` : ""}`;
233
293
  if (command === "validate") return result.ok ? "pass recipe registry is valid." : `fail ${JSON.stringify(result.issues)}`;
294
+ if (command === "agents") return Object.entries(result.targets).map(([name, ok]) => `${ok ? "pass" : "warn"} ${name}${ok ? "" : `: run synced-motion agents install --target ${name}`}`).join("\n");
295
+ if (command === "skill") return `Synced Motion AI skill
296
+
297
+ Skill file: ${result.path ? relative(process.cwd(), result.path) : "missing from this install"}
298
+ Use it to guide AI agents toward registered recipes, data-motion-* hooks, and the reduced-motion, no-JavaScript and cleanup contract.
299
+
300
+ Project setup:
301
+ synced-motion agents install
302
+ synced-motion agents install --target all
303
+
304
+ Core agent commands:
305
+ ${result.commands.map((entry) => ` ${entry}`).join("\n")}`;
234
306
  if (command === "doctor") return result.checks.map((check) => `${check.ok ? "pass" : "warn"} ${check.id}${check.fix ? `: ${check.fix}` : ""}`).join("\n");
235
307
  return String(result);
236
308
  }
@@ -352,17 +424,35 @@ Needs optional GSAP plugins: ${plugins.join(", ")}.`);
352
424
  }
353
425
  } else if (command === "doctor") {
354
426
  result = doctorMotionProject({ cwd: process.cwd(), service });
355
- } else if (command === "init") {
356
- result = applyMotionProjectSetup(planMotionProjectSetup({ cwd: process.cwd(), agents: Boolean(options.agents) }), { dryRun: Boolean(options["dry-run"]) });
357
- } else if (command === "agents") {
358
- const action = positional[0] ?? "status";
427
+ } else if (command === "init" || command === "agents") {
428
+ const { targets, unknown } = resolveMotionAgentTargets(options.target === void 0 || options.target === true ? "universal" : options.target);
429
+ if (unknown.length || !targets.length) {
430
+ io.error(`Unknown agent target "${unknown.join(", ") || options.target}". Use universal, claude or all.`);
431
+ return { code: 1 };
432
+ }
433
+ const action = command === "init" ? "install" : positional[0] ?? "status";
434
+ const agents = command === "agents" || Boolean(options.agents) || options.target !== void 0;
359
435
  if (action === "status") result = motionAgentStatus({ cwd: process.cwd() });
360
436
  else if (action === "install") {
361
- result = applyMotionProjectSetup(planMotionProjectSetup({ cwd: process.cwd(), agents: true }), { dryRun: Boolean(options["dry-run"]) });
437
+ result = applyMotionProjectSetup(planMotionProjectSetup({ cwd: process.cwd(), agents, targets }), { dryRun: Boolean(options["dry-run"]) });
362
438
  } else {
363
439
  io.error(`Unknown agents action "${action}". Use install or status.`);
364
440
  return { code: 1 };
365
441
  }
442
+ } else if (command === "skill") {
443
+ result = {
444
+ path: packagedMotionSkillPath(),
445
+ commands: [
446
+ "synced-motion catalog --json",
447
+ 'synced-motion suggest "<brief>" --json',
448
+ "synced-motion plan <id...> --json",
449
+ "synced-motion add <id...>",
450
+ "synced-motion scan --file <path> --json",
451
+ "synced-motion validate",
452
+ "synced-motion doctor",
453
+ "synced-motion mcp"
454
+ ]
455
+ };
366
456
  } else if (command === "mcp") {
367
457
  const { startMotionMcpServer } = await import("./mcp.js");
368
458
  await startMotionMcpServer({ service });
@@ -373,7 +463,7 @@ Needs optional GSAP plugins: ${plugins.join(", ")}.`);
373
463
  ${help()}`);
374
464
  return { code: 1 };
375
465
  }
376
- io.log(options.json ? JSON.stringify(result, null, 2) : command === "init" || command === "agents" ? `${result.changed === false ? "pass no changes required." : `${result.dryRun ? "planned" : "updated"} ${result.writes?.length ?? 0} project files.`}` : formatText(command, result));
466
+ io.log(options.json ? JSON.stringify(result, null, 2) : command === "init" || command === "agents" && positional[0] === "install" ? `${result.changed === false ? "pass no changes required." : `${result.dryRun ? "planned" : "updated"} ${result.writes?.length ?? 0} project files.`}` : formatText(command, result));
377
467
  return { code: result?.ok === false ? 1 : 0, result };
378
468
  }
379
469
  export {
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli.js","../src/project/setup.js"],"mappings":"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","names":["readFileSync","readFileSync"]}
1
+ {"version":3,"sources":["../src/cli.js","../src/project/setup.js"],"mappings":"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","names":["readFileSync","readFileSync"]}
@@ -90,3 +90,72 @@ document.dispatchEvent(new Event('motion:refresh'))
90
90
 
91
91
  Calling `motion.destroy()` removes these event listeners and destroys the
92
92
  active scoped runtime.
93
+
94
+ ## Plain HTML, Webflow and no-build sites
95
+
96
+ No bundler is needed. An import map tells the browser where `gsap`, its
97
+ plugins and `lenis` live, and the package loads straight from a CDN. This
98
+ works in a Webflow custom-code embed, a WordPress theme `<head>`, or a static
99
+ HTML page.
100
+
101
+ The core covers every recipe that needs only ScrollTrigger:
102
+
103
+ <!-- x-release-please-start-version -->
104
+ ```html
105
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@syncedco/motion@0.2.0/dist/styles.css">
106
+ <script type="importmap">
107
+ {
108
+ "imports": {
109
+ "@syncedco/motion": "https://cdn.jsdelivr.net/npm/@syncedco/motion@0.2.0/dist/index.js",
110
+ "gsap": "https://cdn.jsdelivr.net/npm/gsap@3/index.js",
111
+ "gsap/ScrollTrigger": "https://cdn.jsdelivr.net/npm/gsap@3/ScrollTrigger.js",
112
+ "lenis": "https://cdn.jsdelivr.net/npm/lenis@1/dist/lenis.mjs"
113
+ }
114
+ }
115
+ </script>
116
+ <script type="module">
117
+ import { createSyncedMotion } from '@syncedco/motion'
118
+ createSyncedMotion()
119
+ </script>
120
+ ```
121
+ <!-- x-release-please-end -->
122
+
123
+ For all sixty recipes, including split text, FLIP and SVG, use the `full`
124
+ entry and map the optional GSAP plugins as well:
125
+
126
+ <!-- x-release-please-start-version -->
127
+ ```html
128
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@syncedco/motion@0.2.0/dist/styles.css">
129
+ <script type="importmap">
130
+ {
131
+ "imports": {
132
+ "@syncedco/motion/full": "https://cdn.jsdelivr.net/npm/@syncedco/motion@0.2.0/dist/full.js",
133
+ "gsap": "https://cdn.jsdelivr.net/npm/gsap@3/index.js",
134
+ "gsap/ScrollTrigger": "https://cdn.jsdelivr.net/npm/gsap@3/ScrollTrigger.js",
135
+ "gsap/SplitText": "https://cdn.jsdelivr.net/npm/gsap@3/SplitText.js",
136
+ "gsap/Flip": "https://cdn.jsdelivr.net/npm/gsap@3/Flip.js",
137
+ "gsap/DrawSVGPlugin": "https://cdn.jsdelivr.net/npm/gsap@3/DrawSVGPlugin.js",
138
+ "gsap/MorphSVGPlugin": "https://cdn.jsdelivr.net/npm/gsap@3/MorphSVGPlugin.js",
139
+ "gsap/MotionPathPlugin": "https://cdn.jsdelivr.net/npm/gsap@3/MotionPathPlugin.js",
140
+ "lenis": "https://cdn.jsdelivr.net/npm/lenis@1/dist/lenis.mjs"
141
+ }
142
+ }
143
+ </script>
144
+ <script type="module">
145
+ import { createSyncedMotion } from '@syncedco/motion/full'
146
+ createSyncedMotion()
147
+ </script>
148
+ ```
149
+ <!-- x-release-please-end -->
150
+
151
+ Module scripts run after the document is parsed, so the snippet can sit in the
152
+ `<head>`. A page may have only one import map, and it must come before the
153
+ first module script. Keep an exact version in production URLs so an upgrade
154
+ is always a deliberate change.
155
+
156
+ Using Synced Flow too? Add its stylesheet before the Synced Motion one, then
157
+ use `sf-*` classes and `data-motion-*` attributes on the same elements:
158
+
159
+ ```html
160
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@syncedco/flow/styles.css">
161
+ ```
package/docs/TOOLING.md CHANGED
@@ -34,10 +34,33 @@ npx synced-motion --version
34
34
  - `validate` validates the active registry; pass `--file <recipe.json>` to validate a custom declarative recipe.
35
35
  - `doctor` checks that the registry and service are usable.
36
36
  - `init --agents` installs project config, scripts, and managed AI guidance.
37
- - `agents install|status` manages only the marked Synced Motion guidance block.
37
+ - `agents install|status [--target <name>]` manages only the marked Synced
38
+ Motion guidance block, plus the agent skill where the target supports one.
39
+ Targets are `universal` (`AGENTS.md`, the default), `claude` (`CLAUDE.md`
40
+ and `.claude/skills/synced-motion/SKILL.md`) and `all`.
41
+ - `skill` prints where the packaged agent skill lives and the core agent
42
+ commands.
38
43
  - `mcp` starts the project-local stdio MCP server.
39
44
 
40
- The 1.0 catalog contains sixty implemented and verified recipes: five recipes
45
+ ## Agent skill
46
+
47
+ The package ships an agent skill at
48
+ `node_modules/@syncedco/motion/skills/synced-motion/SKILL.md`. It tells an AI
49
+ agent how to choose recipes, which commands to run, and the rules every recipe
50
+ follows: reduced motion, no-JavaScript fallbacks, accessibility and cleanup.
51
+
52
+ ```bash
53
+ npx synced-motion agents install # AGENTS.md guidance
54
+ npx synced-motion agents install --target claude # Claude Code skill + CLAUDE.md
55
+ npx synced-motion agents install --target all
56
+ ```
57
+
58
+ The guidance block is marked, so running the command again updates it in place
59
+ and leaves the rest of the file alone. It follows the same layout as Synced
60
+ Flow's `synced-flow agents install`, so a project using both gets one section
61
+ for each.
62
+
63
+ The catalog contains sixty implemented and verified recipes: five recipes
41
64
  in each of twelve families. Placeholder or no-op entries are rejected from the
42
65
  launch catalog. The CLI, MCP server, public service, gallery, and inspector all
43
66
  read the same source registry.
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@syncedco/motion",
3
- "version": "0.1.0",
4
- "description": "Accessible, framework-neutral scroll and interaction animation for the web. Sixty validated GSAP recipes with reduced-motion, no-JS and cleanup behaviour built into the contract.",
3
+ "version": "0.2.0",
4
+ "description": "Accessible, framework-neutral scroll and interaction animation for the web. Sixty validated GSAP recipes with reduced-motion, no-JS and cleanup behaviour built into the contract, plus a CLI, MCP server and agent skill. Pairs with Synced Flow; works with any CSS.",
5
5
  "type": "module",
6
6
  "author": "Scott Mackey",
7
- "homepage": "https://github.com/SyncedCo/synced-motion#readme",
7
+ "homepage": "https://syncedco.github.io/synced-motion/",
8
8
  "repository": {
9
9
  "type": "git",
10
10
  "url": "git+https://github.com/SyncedCo/synced-motion.git"
@@ -22,6 +22,7 @@
22
22
  "bin",
23
23
  "dist",
24
24
  "docs",
25
+ "skills",
25
26
  "README.md",
26
27
  "CHANGELOG.md",
27
28
  "CONTRIBUTING.md",
@@ -114,12 +115,25 @@
114
115
  },
115
116
  "keywords": [
116
117
  "animation",
118
+ "scroll-animation",
117
119
  "gsap",
118
120
  "scrolltrigger",
119
121
  "lenis",
120
- "synced-flow",
121
122
  "motion",
122
- "scroll-animation"
123
+ "accessibility",
124
+ "a11y",
125
+ "reduced-motion",
126
+ "no-js",
127
+ "ai",
128
+ "mcp",
129
+ "agents",
130
+ "react",
131
+ "vue",
132
+ "svelte",
133
+ "astro",
134
+ "wordpress",
135
+ "webflow",
136
+ "synced-flow"
123
137
  ],
124
138
  "license": "MIT",
125
139
  "peerDependencies": {
@@ -0,0 +1,136 @@
1
+ ---
2
+ name: synced-motion
3
+ description: Use Synced Motion to add accessible scroll, reveal, pinned, hover, navigation and page-load animation with validated GSAP recipes, data-motion-* attributes, the synced-motion CLI and its local MCP server. Pairs with Synced Flow for styling but works with any CSS.
4
+ ---
5
+
6
+ # Synced Motion
7
+
8
+ Use this skill when a project uses, evaluates, installs or generates animation
9
+ with Synced Motion (`@syncedco/motion`), or when a brief asks for scroll
10
+ animation, reveals, pinned storytelling, marquees, split text or similar motion
11
+ on a website.
12
+
13
+ Synced Motion is a catalog of sixty validated GSAP recipes driven by
14
+ `data-motion-*` attributes. Every recipe declares and is tested against its
15
+ reduced-motion behaviour, its no-JavaScript fallback, its accessibility notes
16
+ and its cleanup. Pick a recipe before writing any animation code.
17
+
18
+ ## First moves
19
+
20
+ 1. Check whether `@syncedco/motion` and `gsap` are installed.
21
+ 2. Check for `synced-motion.config.mjs`. If it is missing, run
22
+ `synced-motion init --agents`.
23
+ 3. Run `synced-motion catalog --json` before choosing recipes.
24
+ 4. Run `synced-motion suggest "<brief>" --json` to rank recipes against the
25
+ brief, then `synced-motion plan <id...> --json` for the chosen ones.
26
+ 5. Run `synced-motion add <id...>` for ready-to-paste markup with every
27
+ required slot.
28
+ 6. For existing markup, run `synced-motion scan --file <path> --json` to find
29
+ recipe roots and missing slots, or `synced-motion compose "<brief>" --file
30
+ <path> --json` for one combined proposal.
31
+ 7. Run `synced-motion validate` and `synced-motion doctor` before handoff.
32
+
33
+ The same answers are available over MCP: `synced-motion mcp` starts a local
34
+ stdio server with `motion_catalog`, `motion_recipe`, `motion_suggest`,
35
+ `motion_plan`, `motion_scan`, `motion_compose` and `motion_validate`. It needs
36
+ no account and uploads nothing.
37
+
38
+ ## Setup
39
+
40
+ ```bash
41
+ npm install @syncedco/motion gsap
42
+ ```
43
+
44
+ ```js
45
+ import { createSyncedMotion } from '@syncedco/motion'
46
+ import '@syncedco/motion/styles.css'
47
+
48
+ const motion = createSyncedMotion()
49
+ // Call motion.destroy() on route change or hot reload.
50
+ ```
51
+
52
+ ```html
53
+ <h1 data-motion-reveal="up">Heading</h1>
54
+ <ul data-motion-stagger>
55
+ <li data-motion-stagger-item>One</li>
56
+ <li data-motion-stagger-item>Two</li>
57
+ </ul>
58
+ ```
59
+
60
+ - Seventeen recipes need an optional GSAP plugin (SplitText, Flip, DrawSVG,
61
+ MorphSVG or MotionPath). Import from `@syncedco/motion/full`, or pass only the
62
+ plugin needed: `createSyncedMotion({ dependencies: { SplitText } })`.
63
+ `motion.inspect().skipped` lists any recipe skipped for a missing plugin.
64
+ - For the smallest bundle, import single recipes from
65
+ `@syncedco/motion/recipes` and pass them to `createMotionRegistry`.
66
+ - Framework adapters: `@syncedco/motion/react`, `/vue`, `/svelte`, `/astro`
67
+ and `/wordpress`. Never import GSAP plugins from the core entry.
68
+ - No build step (Webflow, WordPress themes, plain HTML): use the import-map
69
+ snippet in the package README.
70
+
71
+ ## Recipe families
72
+
73
+ Twelve families, five recipes each: reveals and entrances, split text and
74
+ typography, scroll and parallax, pinned storytelling, horizontal galleries,
75
+ media mask and clip, hover focus and pointer, navigation and overlay, loops and
76
+ progress, FLIP layout, SVG path and morph, page load and route. Use
77
+ `synced-motion catalog --json` for the ids, and
78
+ `synced-motion recipe <id> --json` for slots, parameters, fallbacks and
79
+ performance cost.
80
+
81
+ ## Rules
82
+
83
+ - Use the `data-motion-*` vocabulary only. There is no other prefix.
84
+ - Prefer registered recipes and root-scoped hooks over global selectors. Never
85
+ target `body` or `html`.
86
+ - Synced Motion owns animation orchestration only. The design system owns
87
+ layout, colour, spacing, typography, tokens and final states. Do not put
88
+ inline colours, spacing or font sizes into motion code.
89
+ - Toggle semantic state (`data-active`, `aria-current`, `aria-expanded`) and let
90
+ CSS style it.
91
+ - Animate transforms and opacity. Layout animation needs an explicit opt-in.
92
+ - Keep content readable when JavaScript fails and when the visitor prefers
93
+ reduced motion. Never hide content that motion might fail to reveal.
94
+ - Keep keyboard behaviour, focus order and reading order unchanged.
95
+ - Every custom animation must clean up on `destroy()`.
96
+ - Keep high-cost recipes to a few per page. The config `budgets` sets the
97
+ limit.
98
+ - When the catalog cannot express an effect, write a typed custom recipe with
99
+ `defineMotionRecipe`. It must declare `reducedMotion`, `noJs`,
100
+ `accessibility`, `performance` and a cleanup function, and it must pass
101
+ `synced-motion validate --file <recipe.json>`.
102
+
103
+ ## With Synced Flow
104
+
105
+ Synced Motion has no dependency on Synced Flow, but the two are designed to be
106
+ used together: Flow decides what things look like, Motion decides how they
107
+ arrive.
108
+
109
+ - Use `sf-*` classes for layout and styling, and `data-motion-*` attributes for
110
+ animation, on the same elements.
111
+ - Run `synced-flow` commands for layout and styling, and `synced-motion`
112
+ commands for animation.
113
+ - Keep brand tokens in `synced-flow.config.mjs`, never in motion code.
114
+ - Run `synced-flow lint --json` and `synced-flow doctor` as well as the Motion
115
+ checks before handoff.
116
+
117
+ ```html
118
+ <section class="sf-section">
119
+ <div class="sf-container sf-stack">
120
+ <p class="sf-kicker" data-motion-reveal="fade">A motion system</p>
121
+ <h1 class="sf-text-display" data-motion-split="lines">Heading</h1>
122
+ </div>
123
+ </section>
124
+ ```
125
+
126
+ ## Reference
127
+
128
+ Inside `node_modules/@syncedco/motion/docs/`:
129
+
130
+ - `RECIPE-REFERENCE.md`: all sixty recipes, generated from the registry
131
+ - `ATTRIBUTE-API.md`: the declarative attribute API
132
+ - `API.md`: the JavaScript API
133
+ - `INTEGRATIONS.md`: frameworks, CMSs and no-build sites
134
+ - `TOOLING.md`: the CLI and MCP server
135
+
136
+ Live gallery: https://syncedco.github.io/synced-motion/gallery/