GSAP in Vue, Nuxt and Svelte
greensock/gsap-skills
Shows how to use GSAP in Vue, Nuxt, Svelte and other lifecycle-based frameworks: create after mount, scope selectors to the component, and revert on unmount.
A skill your agent uses when building, reviewing or fixing Svelte 5 (runes) and SvelteKit code — components with the rune primitives, rune modules versus stores, file routing, universal versus…
$ npx skills add ericrisco/rsc-harness --skill svelte -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install ericrisco/rsc-harness svelte --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/svelte .claude/skills/svelte && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "svelte" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/svelte into .claude/skills/svelte/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "svelte", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/ericrisco/rsc-harness/tree/main/skills/svelteType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add ericrisco/rsc-harness --skill svelte -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install ericrisco/rsc-harness svelte --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/svelte .agents/skills/svelte && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "svelte" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/svelte into .agents/skills/svelte/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "svelte", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ericrisco/rsc-harness --skill svelte -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install ericrisco/rsc-harness svelte --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/svelte .cursor/skills/svelte && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "svelte" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/svelte into .cursor/skills/svelte/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "svelte", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/ericrisco/rsc-harness.git --path skills/svelte--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add ericrisco/rsc-harness --skill svelte -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install ericrisco/rsc-harness svelte --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/svelte .gemini/skills/svelte && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "svelte" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/svelte into .gemini/skills/svelte/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "svelte", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install ericrisco/rsc-harness svelteInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add ericrisco/rsc-harness --skill svelte -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/svelte .github/skills/svelte && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "svelte" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/svelte into .github/skills/svelte/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "svelte", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ericrisco/rsc-harness --skill svelte -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install ericrisco/rsc-harness svelte --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/svelte .opencode/skills/svelte && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "svelte" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/svelte into .opencode/skills/svelte/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "svelte", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
svelteA skill your agent uses when building, reviewing or fixing Svelte 5 (runes) and SvelteKit code — components with the rune primitives, rune modules versus stores, file routing, universal versus…
Svelte is an agent skill from ericrisco/rsc-harness. Use when building, reviewing or fixing Svelte 5 (runes) and SvelteKit code — components with the rune primitives, rune modules versus stores, file routing, universal versus server load functions, form actions with progressive enhancement, remote functions, SSR/CSR/prerender choices, and adapters. Covers migrating Svelte 4 reactive statements to runes and hydration mismatches. NOT Next.js or RSC (that is nextjs).
Its SKILL.md is about 3.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 8 other files, including scripts and reference files (for example `evals/README.md`, `evals/cases.yaml` and `references/runes.md`).
It sits in Frontend & Design. It works with Svelte, Next.js and SvelteKit. The repository describes itself as: Your agent invents things because it has no memory, and can't touch your database because it has no arms. rsc is the meta-harness that gives it both, plus the trade to know the… The licence is MIT.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit e3d5b33. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/ (Shell), which the agent can run.
Shell commands in SKILL.md call:
tscFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Svelte loads about 3.1k tokens when it runs, and up to ~5.9k if it reads all its reference files. Until then it costs about 106 tokens; SKILL.md has 1,168 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from ericrisco/rsc-harness at commit e3d5b33, republished under its MIT licence (© ericrisco). 1,168 words, ~3,134 tokens.
.claude/skills/svelte/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.Explicit, signal-based reactivity (runes) plus the SvelteKit data-loading contract: knowing where code runs and how
loaddata reaches a page.
Two things break Svelte code more than anything else: treating $effect as the default for computed values, and confusing server-only load with universal load. This skill keeps you on the right side of both.
.svelte / .svelte.js / .svelte.ts files.$state vs $derived vs $effect; migrating Svelte 4 let / $: / export let to runes.+page.svelte, +page.ts, +page.server.ts, +layout*, +server.ts, +error.svelte, hooks.server.ts.load design (universal vs server), PageData typing, depends/invalidate, streaming promises, form actions with use:enhance.query/form/command/prerender in *.remote.ts).../nextjs/SKILL.md. Different reactivity model and data-loading contract. Never cross runes with RSC.../typescript/SKILL.md.../vercel/SKILL.md, ../netlify/SKILL.md, ../cloudflare/SKILL.md. This skill picks the adapter; those skills own the platform.Current as of June 2026: Svelte 5.56.x, SvelteKit 2.61.x. Svelte 5 (runes) shipped Oct 2024.
The #1 way to hand someone broken advice is to mix Svelte 4 reactivity ($:, export let) with runes in the same file. They are silently incompatible: a $: block in a runes component does nothing reactive. Detect the mode first.
package.json → dependencies/devDependencies svelte. ^5 (or 5.x) = runes era. ^4 = legacy.svelte.config.js. compilerOptions.runes: true forces runes everywhere; absent = per-file auto-detect (a file is in runes mode iff it uses any rune).$state( / $props( / $derived( → runes mode. export let / $: / <slot → legacy.Rule: never give $:/export let advice and $state/$props advice for the same component. If the codebase is Svelte 4 and the task is new work, migrate the file to runes first (see references/runes.md migration map) rather than appending runes onto legacy syntax.
Pick the rune by what the value is, not by habit. Reading a rune registers a dependency; writing one schedules an update.
| You need | Rune | Why |
|---|---|---|
| A reactive value you mutate | $state(v) | The cell tracked for reads/writes; deep objects/arrays are proxied. |
| A value computed from others | $derived(expr) / $derived.by(fn) | Recomputed lazily from deps read synchronously; no manual wiring. |
| A side effect (DOM, subscription, log) | $effect(fn) | Runs after DOM update; return a cleanup fn. Escape hatch, not default. |
| A component input | let { x } = $props() | Destructure props; supports defaults and rest. |
| A two-way-bindable prop | let { x = $bindable() } = $props() | Opts the prop into parent bind:x. |
$effect is the escape hatch. If an effect's only job is to set state from other state, it's a $derived in disguise — and worse, writing $state inside an effect that also reads it can loop.
<!-- Bad: effect used to compute → extra render, can loop -->
<script>
let count = $state(0);
let doubled = $state(0);
$effect(() => { doubled = count * 2; });
</script>
<!-- Good: derived value, no effect -->
<script>
let count = $state(0);
let doubled = $derived(count * 2);
</script>Deep mutation is reactive on $state (it returns a proxy), so mutate in place — you don't need to reassign.
<script>
let todos = $state([{ done: false }]);
// Good: proxied, the push is tracked
function add() { todos.push({ done: false }); }
// Also fine: todos[0].done = true;
</script>Props with defaults and renaming:
<script>
// Good: default + rename a reserved-ish name + rest props
let { title = 'Untitled', class: klass = '', ...rest } = $props();
</script>Reactive shared state must live in a .svelte.js or .svelte.ts module (the .svelte part tells the compiler to process runes). A plain .js file cannot use runes.
The trap: you cannot export let count = $state(0) and reassign it elsewhere — importers get the value at import time, not the live cell, so it appears to "stop being reactive." Export a container whose identity is stable.
// counter.svelte.js
// Bad: importers bind the value, not the reactive cell
export let count = $state(0); // reassigning count elsewhere won't propagate
// Good: object identity is stable; .value stays reactive
export const counter = $state({ value: 0 });
// Good: getter/setter object
let _n = $state(0);
export const n = {
get value() { return _n; },
set value(v) { _n = v; },
};
// Good: a class instance (fields are reactive)
export class Counter {
value = $state(0);
increment() { this.value += 1; }
}Classic writable/readable/derived stores from svelte/store are still valid and still work — prefer them when you need the $store auto-subscription sugar in templates or are integrating Svelte 4 code. For new runes-first code, the module patterns above are simpler. Depth in references/runes.md.
| File | Runs | Purpose |
|---|---|---|
+page.svelte | client + SSR | The page component; reads data: PageData. |
+page.ts / +layout.ts | server (SSR) and browser (client nav) | Universal load. No secrets — code ships to the client. |
+page.server.ts / +layout.server.ts | server only | Server load + actions. DB, secrets, filesystem live here. |
+server.ts | server only | API route: GET/POST/… returning Response. |
+error.svelte | client + SSR | Rendered when a load/render throws. |
hooks.server.ts | server only | handle, handleFetch, handleError middleware. |
Universal vs server is the core decision. Secrets, DB clients, and $env/static/private belong in +page.server.ts — +page.ts code is shipped to the browser. Type the return with the generated ./$types.
// +page.server.ts — server only; safe to touch DB/secrets
import type { PageServerLoad } from './$types';
import { db } from '$lib/server/db';
export const load: PageServerLoad = async ({ params, depends }) => {
depends('app:post'); // custom dep, target of invalidate('app:post')
const post = await db.post.find(params.id);
// Top-level promise streams: the page renders, comments arrive later.
return { post, comments: db.comment.forPost(params.id) };
};<!-- +page.svelte -->
<script lang="ts">
import type { PageData } from './$types';
let { data }: { data: PageData } = $props();
</script>
<h1>{data.post.title}</h1>
{#await data.comments}
<p>Loading comments…</p>
{:then comments}
<ul>{#each comments as c}<li>{c.body}</li>{/each}</ul>
{/await}Streaming a top-level promise works only from a server load. Universal load cannot stream the same way — await there or move the slow fetch to the server. Re-run a load with invalidate('app:post') (matches depends) or invalidateAll(). Patterns for parent(), named actions, and validation live in references/sveltekit-data.md.
Default to form actions. They live in +page.server.ts, are posted to by a real <form method="POST">, and work without JS. use:enhance upgrades them to no-reload submission progressively.
// +page.server.ts
import { fail, redirect } from '@sveltejs/kit';
import type { Actions } from './$types';
export const actions: Actions = {
login: async ({ request, cookies }) => {
const data = await request.formData();
const email = String(data.get('email') ?? '');
if (!email) return fail(400, { email, missing: true });
cookies.set('session', '…', { path: '/' });
throw redirect(303, '/dashboard');
},
};<!-- +page.svelte -->
<script lang="ts">
import { enhance } from '$app/forms';
import type { ActionData } from './$types';
let { form }: { form: ActionData } = $props();
</script>
<form method="POST" action="?/login" use:enhance>
<input name="email" type="email" />
{#if form?.missing}<p>Email required</p>{/if}
<button>Log in</button>
</form>Remote functions are EXPERIMENTAL (available since SvelteKit 2.27, iterated through 2.61; API subject to change). They live in *.remote.ts and require opting in with both flags in svelte.config.js — kit.experimental.remoteFunctions: true and compilerOptions.experimental.async: true (the latter enables top-level await/awaited deriveds the feature relies on; without it remote functions do not actually enable). Four kinds: query (cached server read), form (progressive, parses its own FormData, no schema), command (mutation outside a form — requires JS), prerender (build-time). Use them for JS-driven flows where a plain form action is awkward; otherwise stick to form actions. Full usage in references/sveltekit-data.md.
Control rendering per route with module-level exports in +page.ts/+page.server.ts:
export const prerender = true; // render at build time → static HTML
export const ssr = false; // skip server render; client-only
export const csr = false; // no client JS; pure SSR/staticPick the adapter for the deploy target, then hand platform details to the platform skill:
adapter-auto — zero-config on Vercel / Netlify / Cloudflare. Good default.adapter-node — long-running Node server (your own host, Docker).adapter-static — full prerender; the whole site is static (needs prerender = true reachable everywhere).Env vars, edge runtime, KV/D1 bindings, build settings: that's ../vercel/SKILL.md, ../netlify/SKILL.md, ../cloudflare/SKILL.md, not this skill.
| Anti-pattern | Why it's wrong | Do this instead |
|---|---|---|
$effect to compute a value from $state | Extra render pass; can loop if it reads what it writes | $derived(expr) / $derived.by(fn) |
export let count = $state(0) for shared state | Importers bind the value, not the live cell → "not reactive" | Export an object / getter / class instance |
Runes in a plain .js file | Compiler doesn't process runes there | Name it .svelte.js / .svelte.ts |
Mixing $: / export let with runes in one file | $: is dead in runes mode → silent non-reactivity | Migrate the whole file to runes (see references) |
DB call / secret in +page.ts | Universal load ships to the browser; secret leaks | Move to +page.server.ts (server-only) |
Streaming a top-level promise from universal load | Only server load streams | Await in load, or move the fetch server-side |
Mutating a non-$state object expecting reactivity | Only $state proxies are tracked | Wrap the value in $state(...) |
| Reaching for remote functions by default | Experimental, JS-required, API may change | Form actions first; remote functions only when needed |
Run scripts/verify.sh from the SvelteKit project root: svelte-check → tsc --noEmit → Vitest → vite build. Each tool is detected and skipped (not failed) if absent; it exits non-zero only on a real failure. The build step writes the output dir — not read-only.
© ericrisco, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 5 other files (scripts, references) in skills/svelte of ericrisco/rsc-harness.
Open the folder on GitHubat commit e3d5b33
Svelte next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Svelte this skillericrisco/rsc-harness | 167 | — | ~3.1k | Automated safety check: Pass | MIT | |
| GSAP in Vue, Nuxt and Sveltegreensock/gsap-skills | 16k | 4 repos | ~2.6k | Automated safety check: Pass | MIT | |
| Svelte Core Best Practicesrilldata/rill | 2.9k | 4 repos | ~1.8k | Automated safety check: Pass | Apache-2.0 | |
| Turnstile Spincloudflare/skills | 3k | 4 repos | ~7.2k | Automated safety check: Notes | Apache-2.0 | |
| UI/UX Design System AdvisorGalaxy-Dawn/claude-scholar | 5.7k | 1 repos | ~1.1k | Automated safety check: Pass | MIT | |
| Design StyleCastor6/tactus | 376 | 1 repos | ~2.1k | Automated safety check: Pass | Apache-2.0 |
greensock/gsap-skills
Shows how to use GSAP in Vue, Nuxt, Svelte and other lifecycle-based frameworks: create after mount, scope selectors to the component, and revert on unmount.
rilldata/rill
Rules for writing idiomatic Svelte 5 code: when to reach for runes like state, derived and effect, and how to handle props, attachments and bindings.
cloudflare/skills
Set up, repair, or migrate to Cloudflare Turnstile bot verification in an existing frontend and backend, including server-side Siteverify.
Galaxy-Dawn/claude-scholar
Turns a vague UI request into a concrete design system with style, palette, typography and layout guidance from a search script, plus stack-specific implementation advice.
Castor6/tactus
A skill your agent uses whenever the user asks to build, create, design, develop, improve, or style any frontend interface or visual element.
kampsy/ui
CLI tools for Svelte 5 documentation lookup and code analysis.
ericrisco/rsc-harness
A skill your agent uses when designing or analyzing a controlled experiment — falsifiable hypothesis, sample size from an MDE, reading significance/CI/power, CUPED, or rescuing tests that won't go…
ericrisco/rsc-harness
A skill your agent uses when making a web UI conform to WCAG 2.2 Level AA — axe-core or Lighthouse a11y violations, keyboard operability, focus management, ARIA roles/names/live regions, contrast…
ericrisco/rsc-harness
A skill your agent uses when running or fixing paid acquisition on Google or Meta — campaign structure (Performance Max, Demand Gen, Search, Advantage+), platform-fit creative, budget/scaling rules…
ericrisco/rsc-harness
A skill your agent uses when measuring whether an LLM or agent system actually got better and gating merges on it: golden sets, fixing an inflated LLM-as-judge, scoring RAG (faithfulness, contextual…
ericrisco/rsc-harness
A skill your agent uses when a creative goal must become a finished media file: pick and order generative-media models per modality — AI voiceover, image-to-video clips, score — then glue them with…
ericrisco/rsc-harness
A skill your agent uses when instrumenting product or web analytics — GA4/PostHog SDK wiring, event taxonomy, funnels, double-counted events, consent gating, PII scrubbing.
Categories
A skill your agent uses when building, reviewing or fixing Svelte 5 (runes) and SvelteKit code — components with the rune primitives, rune modules versus stores, file routing, universal versus…. Svelte is an agent skill from ericrisco/rsc-harness. Use when building, reviewing or fixing Svelte 5 (runes) and SvelteKit code — components with the rune primitives, rune modules versus stores, file routing, universal versus server load functions, form actions with progressive enhancement, remote functions, SSR/CSR/prerender choices, and adapters.
Svelte fits situations like: fixing Svelte 5 (runes) and SvelteKit code — components with the rune primitives; rune modules versus stores; universal versus server load functions; form actions with progressive enhancement.
Run `npx skills add ericrisco/rsc-harness --skill svelte -a claude-code`. Or copy the skill folder (skills/svelte in ericrisco/rsc-harness) into .claude/skills/svelte in your project. Claude Code loads it when a task matches its description.
Run `npx skills add ericrisco/rsc-harness --skill svelte -a codex`. Or copy the skill folder (skills/svelte in ericrisco/rsc-harness) into .agents/skills/svelte in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add ericrisco/rsc-harness --skill svelte -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/svelte, .gemini/skills/svelte, .github/skills/svelte and .opencode/skills/svelte in your project.
Going by SKILL.md and its folder, Svelte needs a shell for the scripts in its folder and the command-line tools its instructions call (tsc). Our summary lists: A Bash shell; Docker.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Svelte is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.1k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 2.8k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Svelte: GSAP in Vue, Nuxt and Svelte (greensock/gsap-skills, 16k stars), Svelte Core Best Practices (rilldata/rill, 2.9k stars), Turnstile Spin (cloudflare/skills, 3k stars) and UI/UX Design System Advisor (Galaxy-Dawn/claude-scholar, 5.7k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
ericrisco (a GitHub user) maintains it in ericrisco/rsc-harness, which has 167 GitHub stars. The repository holds 227 skills in this directory. The repository was last updated on October 7, 2026.
Source: ericrisco/rsc-harness on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.