@ericrisco/rsc 0.1.64 → 0.1.66

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/manifest.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.1.64",
2
+ "version": "0.1.66",
3
3
  "counts": {
4
4
  "skills": 258
5
5
  },
@@ -4231,7 +4231,7 @@
4231
4231
  },
4232
4232
  {
4233
4233
  "id": "shopify",
4234
- "description": "Use when building or customizing a Shopify store across its three code surfaces — themes (Liquid + Online Store 2.0 sections/blocks/JSON templates), apps (Remix + versioned GraphQL Admin API), and checkout (UI extensions, Functions, Web Pixels). Triggers: writing/reviewing any .liquid section/snippet/template or {% schema %}, scaffolding a Shopify app with @shopify/shopify-app-remix + Polaris, Admin GraphQL queries and the query-cost/throttle model, shopify CLI flow (theme dev/push, app dev/deploy), 'merchant must edit content in the theme editor without a deploy', 'our checkout customizations broke after the August upgrade', 'add an @app block to the product section', 'migrar el checkout.liquid a checkout extensibility', 'afegir un bloc d'app a la secció de producte'. NOT WooCommerce/PHP stores (that is wordpress), NOT the React/RSC layer of a headless storefront (that is nextjs), NOT non-Shopify payment integrations (that is stripe).",
4234
+ "description": "Use when building or customizing a Shopify store across its three code surfaces — themes (Liquid, Online Store 2.0 sections, blocks and JSON templates), apps (Remix with the versioned GraphQL Admin API and its query-cost model), and checkout (UI extensions, Functions, Web Pixels), plus the CLI flow and checkout-extensibility migration. NOT WooCommerce or PHP stores (that is `wordpress`), NOT the React layer of a headless storefront (that is `nextjs`), NOT non-Shopify payment integrations (that is `stripe`).",
4235
4235
  "tags": [
4236
4236
  "shopify",
4237
4237
  "liquid",
@@ -4252,7 +4252,7 @@
4252
4252
  },
4253
4253
  {
4254
4254
  "id": "shortform-editing",
4255
- "description": "Use when you have raw 9:16 footage and need it cut into a posted-ready vertical short — dead air removed, fast jump cuts, karaoke word-by-word burned-in captions from a transcript, cuts and zooms snapped to the music beat, and a platform-correct MP4 export. Use to remove silences, generate or fix burned captions, sync cuts to a beat grid, or encode to TikTok/Reels/Shorts specs. Triggers: 'remove the dead air from this talking-head clip', 'burn TikTok-style word-by-word captions onto this short', 'cut this footage to the beat of the song', 'export this Reel with the right specs', 'my captions are out of sync and getting hidden behind the TikTok buttons', 'quítale los silencios y ponle subtítulos quemados estilo TikTok', 'munta'm aquest clip vertical amb talls sincronitzats amb la música'. NOT writing the script, hook, beats, or caption text (that is video-shorts), NOT building a Remotion React composition codebase (that is remotion-video), NOT deciding when/where to post (that is social-publisher).",
4255
+ "description": "Use when you have raw 9:16 footage and need it cut into a post-ready vertical short — dead air removed, fast jump cuts, karaoke word-by-word burned-in captions from a transcript, cuts and zooms snapped to the music beat, safe-area placement so captions clear the platform UI, and a platform-correct MP4 export. NOT writing the script, hook, beats or caption text (that is `video-shorts`), NOT building a Remotion React composition codebase (that is `remotion-video`), NOT deciding when or where to post (that is `social-publisher`).",
4256
4256
  "tags": [
4257
4257
  "video-editing",
4258
4258
  "shortform",
@@ -4294,7 +4294,7 @@
4294
4294
  },
4295
4295
  {
4296
4296
  "id": "shortform-packaging",
4297
- "description": "Use when a vertical short (TikTok/Reels/YouTube Shorts) is shot or scripted and you need the upload-form copy and cover that win the feed: the hook line, the first-frame on-screen text, the search-led caption, a tight 3-5 hashtag set, and the cover frame; it learns from what performed via the 02-DOCS log. Triggers: 'write the hook and caption for this Reel', 'pick the cover frame and its text', 'what hashtags for this TikTok', the non-obvious 'is 20 hashtags too many' and 'my shorts get views but nobody shares them, fix the packaging', 'rewrite the caption to rank in TikTok search', 'log how the last 5 shorts performed and apply it', plus Spanish/Catalan 'escríbeme el gancho y el pie de foto para este Reel' / 'ningú comparteix els meus vídeos, arregla'm el packaging i dona'm els hashtags'. NOT inventing the idea (that is shortform-ideation), NOT scripting or directing the cuts (that is video-shorts), NOT executing the edit (that is shortform-editing), NOT scheduling the post (that is social-publisher).",
4297
+ "description": "Use when a vertical short is shot or scripted and you need the upload-form copy and cover that win the feed — the hook line, the first-frame on-screen text, the search-led caption, a tight hashtag set, and the cover frame; it learns from what performed via the 02-DOCS log. NOT inventing the idea (that is `shortform-ideation`), NOT scripting or directing the cuts (that is `video-shorts`), NOT executing the edit (that is `shortform-editing`), NOT scheduling the post (that is `social-publisher`).",
4298
4298
  "tags": [
4299
4299
  "shortform",
4300
4300
  "packaging",
@@ -4348,7 +4348,7 @@
4348
4348
  },
4349
4349
  {
4350
4350
  "id": "skill-scout",
4351
- "description": "Use when about to do a task and a specialized skill probably exists but is not loaded, when a task feels harder than it should because generic reasoning is doing a domain skill's job, or when auditing a workspace's skill coverage for holes. Triggers: 'is there a skill for this?', 'what skill am I missing?', 'should I install a skill before doing this?', 'audit my .claude/skills against what this repo does', 'this feels like reinventing something we already have a skill for', 'qué skill me falta', 'quina skill em falta'. Names the absent skill and emits an install command, or routes to author-skill when none exists. NOT routing among skills you already have (that is suggest), and NOT writing the skill when none exists (that is author-skill).",
4351
+ "description": "Use when a specialized skill probably exists but is not loaded, when a task feels harder than it should because generic reasoning is doing a domain skill's job, or when auditing a workspace's skill coverage for holes. Names the absent skill and emits an install command, or routes onward when none exists. NOT routing among skills you already have (that is `suggest`), NOT writing the skill when none exists (that is `author-skill`).",
4352
4352
  "tags": [
4353
4353
  "skill-discovery",
4354
4354
  "capability-gap",
@@ -4367,7 +4367,7 @@
4367
4367
  },
4368
4368
  {
4369
4369
  "id": "social-publisher",
4370
- "description": "Use when planning a posting schedule, building a multi-platform content calendar, or reshaping one source asset into channel-native posts across X, LinkedIn, Instagram, Threads, Bluesky, TikTok, Facebook, or YouTube — deciding cadence, best-time slots, per-platform char/format limits, and producing a dated CSV/JSON calendar a scheduler can import. Use when the same caption flopped after being cross-posted everywhere, when reach drops after a posting gap, or when checking API publish caps before programmatic posting. Triggers: 'build me a posting schedule for next week', 'turn this blog into a week of posts', 'give me a CSV calendar I can import into Buffer', 'how often and what time should we post Reels vs LinkedIn', 'I posted the same text on every platform and it tanked', 'planificar el calendario de publicaciones', 'reaprovechar aquest post a tots els canals'. NOT the brand voice the posts speak in (that is brand-voice) and NOT the editorial strategy of what to make (that is content-engine).",
4370
+ "description": "Use when planning a posting schedule, building a multi-platform content calendar, or reshaping one source asset into channel-native posts across X, LinkedIn, Instagram, Threads, Bluesky, TikTok, Facebook or YouTube — cadence, best-time slots, per-platform format limits, API publish caps, and a dated CSV or JSON calendar a scheduler can import. NOT the brand voice the posts speak in (that is `brand-voice`), NOT the editorial strategy of what to make (that is `content-engine`).",
4371
4371
  "tags": [
4372
4372
  "social-media",
4373
4373
  "scheduling",
@@ -4386,7 +4386,7 @@
4386
4386
  },
4387
4387
  {
4388
4388
  "id": "solid-js",
4389
- "description": "Use when building, reviewing, or debugging a SolidJS app — signals, stores, effects, memos, resources, and JSX that compiles to real DOM with no virtual DOM (solid-js 1.9.x stable, Solid 2.0 beta, @solidjs/router). Triggers: \\\"signal isn't updating the UI\\\", \\\"<For> vs <Index>\\\", \\\"createStore for a form\\\", \\\"createEffect infinite loop\\\", \\\"why does my component only run once\\\", \\\"el prop no es reactiu quan el desestructuro\\\", \\\"mi prop no se actualiza al desestructurar\\\". NOT React's re-render model (that is react).",
4389
+ "description": "Use when building, reviewing or debugging a SolidJS app — signals, stores, effects, memos and resources, and JSX that compiles to real DOM with no virtual DOM. Covers the classic traps: a signal that does not update the UI, For versus Index, effect loops, components that run once, and props losing reactivity when destructured. NOT React's re-render model (that is `react`).",
4390
4390
  "tags": [
4391
4391
  "solidjs",
4392
4392
  "signals",
@@ -4404,7 +4404,7 @@
4404
4404
  },
4405
4405
  {
4406
4406
  "id": "sop-builder",
4407
- "description": "Use when a repeated process lives in one person's head, breaks when they're out, gets re-explained to every new hire, or produces inconsistent results because everyone does it differently — and needs to be written down once so anyone (or an agent) can run it the same way. Also when an existing SOP is stale, ignored, or missing its branches and needs an audit + rewrite. Triggers: 'write an SOP for how we publish the weekly newsletter', 'document this process step by step', 'turn this Loom/recording into a written procedure', 'it breaks every time Maria is on holiday because nobody else knows how she does it', 'our client handoff is different every time, standardize it', 'documenta este proceso paso a paso', 'crea un procedimiento para que cualquiera lo pueda hacer'. NOT capturing a meeting's decisions and action items (that is meeting-notes), NOT running a one-time project plan with milestones (that is project-ops).",
4407
+ "description": "Use when a repeated process lives in one person's head, breaks when they are away, gets re-explained to every new hire, or produces inconsistent results — and needs writing down once so anyone or any agent can run it the same way. Also for auditing and rewriting an SOP that is stale, ignored or missing its branches. NOT capturing a meeting's decisions and action items (that is `meeting-notes`), NOT running a one-time project plan with milestones (that is `project-ops`).",
4408
4408
  "tags": [
4409
4409
  "sop",
4410
4410
  "process-documentation",
@@ -4442,7 +4442,7 @@
4442
4442
  },
4443
4443
  {
4444
4444
  "id": "spreadsheet-ops",
4445
- "description": "Use when you must work a spreadsheet programmatically: write or repair a formula, generate an .xlsx file with Python (charts, conditional formats, append a sheet), drive Google Sheets from a script, build a read→transform→write-to-sheet pipeline, or write an in-sheet macro/trigger. Symptoms: a formula returns #VALUE!/#REF!/#SPILL!, a nightly job hits 429 quota on the Sheets API, or openpyxl 'wrote' a formula but the cell reads back blank. Triggers: 'export this DataFrame to Excel with a chart', 'my SUMIFS returns #VALUE!', 'append rows to a Google Sheet every night', 'openpyxl formula shows blank until I open in Excel', 'service account can't see my sheet / PermissionError', 'build an XLOOKUP across sheets', 'automatitza un full de càlcul', 'haz una macro de Google Sheets que coloree filas'. NOT pure dedupe/normalize with no sheet output (that is data-cleaning), NOT scraping a web table into rows (that is data-scraper), NOT multi-app event wiring (that is automation-flows).",
4445
+ "description": "Use when working a spreadsheet programmatically — writing or repairing a formula, generating an .xlsx with Python including charts and conditional formats, driving Google Sheets from a script, building a read-transform-write pipeline, or writing an in-sheet macro or trigger. Covers formula errors, Sheets API quota, service-account permissions, and formulas that read back blank. NOT pure dedupe or normalisation with no sheet output (that is `data-cleaning`), NOT scraping a web table into rows (that is `data-scraper`), NOT multi-app event wiring (that is `automation-flows`).",
4446
4446
  "tags": [
4447
4447
  "spreadsheet",
4448
4448
  "excel",
@@ -4484,7 +4484,7 @@
4484
4484
  },
4485
4485
  {
4486
4486
  "id": "sql",
4487
- "description": "Use when writing or reviewing advanced SQL query logic independent of any one engine — multi-table joins, window functions, CTEs (incl. recursive), GROUP BY/GROUPING SETS aggregation, or UNION/INTERSECT/EXCEPT set ops — or when a query returns too many rows, too few rows, or wrong totals. Triggers: 'top N per group', 'running total', 'period over period', 'gaps and islands', 'recursive CTE', 'why is my SUM doubled', 'NOT IN returns nothing', 'dedup keep latest', 'consulta SQL avanzada', 'función de ventana', 'per què el JOIN duplica files'. NOT engine internals/indexes/EXPLAIN (that is postgresdb), NOT MySQL config (that is mysql), NOT OLAP columnar specifics (that is duckdb).",
4487
+ "description": "Use when writing or reviewing advanced SQL query logic independent of any one engine — multi-table joins, window functions, CTEs including recursive ones, GROUP BY and GROUPING SETS aggregation, and set operations — or when a query returns too many rows, too few, or wrong totals. NOT engine internals, indexes or EXPLAIN (that is `postgresdb`), NOT MySQL config (that is `mysql`), NOT OLAP columnar specifics (that is `duckdb`).",
4488
4488
  "tags": [
4489
4489
  "sql",
4490
4490
  "query",
@@ -4502,7 +4502,7 @@
4502
4502
  },
4503
4503
  {
4504
4504
  "id": "sqlite-turso",
4505
- "description": "Use when deciding whether plain SQLite is enough or wiring SQLite/Turso/libSQL for local-first, edge, or embedded-replica apps — a local file DB, a remote Turso URL, or a local replica synced to a remote primary — plus WAL mode and SQLite's single-writer model. Triggers: 'is SQLite enough', 'database is locked'/SQLITE_BUSY, 'embedded replica', 'edge database', 'createClient @libsql/client', 'database per user', 'sync local file to the cloud', 'base de datos local-first', 'base de dades a l'edge', 'rèplica incrustada'. NOT Drizzle schema/queries on libSQL (that is drizzle-orm), NOT versioned up/down migrations (that is db-migrations), NOT serverless Postgres with branching (that is neon).",
4505
+ "description": "Use when deciding whether plain SQLite is enough, or wiring SQLite, Turso or libSQL for local-first, edge and embedded-replica apps — a local file DB, a remote Turso URL, or a local replica synced to a remote primary — plus WAL mode and SQLite's single-writer model and its lock errors. NOT Drizzle schema or queries on libSQL (that is `drizzle-orm`), NOT versioned up/down migrations (that is `db-migrations`), NOT serverless Postgres with branching (that is `neon`).",
4506
4506
  "tags": [
4507
4507
  "sqlite",
4508
4508
  "turso",
@@ -4524,7 +4524,7 @@
4524
4524
  },
4525
4525
  {
4526
4526
  "id": "stripe",
4527
- "description": "Use when wiring an app to Stripe for payments, subscriptions, Checkout, webhooks, or the billing portal — adding a paywall or Pro plan, charging recurring fees, or debugging why checkout.session.completed never fires or signature verification fails. Triggers: 'add Stripe Checkout', 'handle Stripe webhooks', 'let users cancel their subscription', 'No signatures found matching the expected signature', 'the webhook fires twice and duplicates the order', 'integrar pagos con Stripe', 'configurar el webhook de Stripe', 'portal de facturación del cliente'. NOT a generic non-Stripe inbound event receiver (that is webhooks), NOT the invoice document's legal form (that is invoicing), NOT deciding what to charge (that is pricing).",
4527
+ "description": "Use when wiring an app to Stripe for payments, subscriptions, Checkout, webhooks or the billing portal — adding a paywall or paid plan, charging recurring fees, and debugging why a completion event never fires, why signature verification fails, or why a webhook fires twice and duplicates the order. NOT a generic non-Stripe inbound event receiver (that is `webhooks`), NOT the invoice document's legal form (that is `invoicing`), NOT deciding what to charge (that is `pricing`).",
4528
4528
  "tags": [
4529
4529
  "stripe",
4530
4530
  "payments",
@@ -4545,7 +4545,7 @@
4545
4545
  },
4546
4546
  {
4547
4547
  "id": "structured-extraction",
4548
- "description": "Use when text must become a typed, schema-conformant object you can trust — pulling name/email/amount/due-date into a fixed JSON shape, extracting line items as typed records, classifying into enums, or fixing an extractor that throws JSON.parse errors, leaks markdown fences, or fabricates a value when a field is absent — including building the Pydantic/Zod model plus the validate-and-retry loop. Triggers: 'extract these fields into a fixed JSON schema', 'my LLM keeps returning a markdown fence and JSON.parse blows up', 'the model invents an email when the text has none — I want null', 'classify each ticket into one of 6 enums and pull the order id', 'build the Pydantic model and a retry loop for 10k receipts', 'convertir estos contratos en datos estructurados con un esquema fijo y validar los campos', 'extreure camps a un esquema fix i validar-los'. NOT getting the text out of a PDF/scan/DOCX first (that is document-processing), NOT general prompt craft untied to a schema (that is prompt-engineering).",
4548
+ "description": "Use when text must become a typed, schema-conformant object you can trust — pulling fields into a fixed JSON shape, extracting line items as typed records, classifying into enums, and building the Pydantic or Zod model plus the validate-and-retry loop. Covers extractors that throw parse errors, leak markdown fences, or fabricate a value where the field is absent instead of returning null. NOT getting the text out of a PDF, scan or DOCX first (that is `document-processing`), NOT general prompt craft untied to a schema (that is `prompt-engineering`).",
4549
4549
  "tags": [
4550
4550
  "structured-outputs",
4551
4551
  "json-schema",
@@ -4583,7 +4583,7 @@
4583
4583
  },
4584
4584
  {
4585
4585
  "id": "supabase",
4586
- "description": "Use when building on Supabase as a backend over managed Postgres — wiring the supabase-js or @supabase/ssr client, writing or debugging Row Level Security, cookie-based Auth, Storage buckets, Realtime, or Edge Functions. Triggers: 'my RLS policy returns no rows', 'cookie auth in Next.js with Supabase', 'getClaims vs getUser', 'should I verify the JWT locally or hit the Auth server', 'asymmetric signing keys', 'Broadcast vs Postgres Changes', 'service_role key', 'data API not exposing my table', 'configura Supabase con Next.js', 'mis políticas RLS no devuelven filas'. NOT raw Postgres tuning (that is postgresdb).",
4586
+ "description": "Use when building on Supabase as a backend over managed Postgres — wiring the supabase-js or SSR client, writing or debugging Row Level Security, cookie-based Auth, Storage buckets, Realtime, and Edge Functions, including local versus server JWT verification and the service-role key. NOT raw Postgres tuning (that is `postgresdb`).",
4587
4587
  "tags": [
4588
4588
  "supabase",
4589
4589
  "postgres",
@@ -4605,7 +4605,7 @@
4605
4605
  },
4606
4606
  {
4607
4607
  "id": "svelte",
4608
- "description": "Use when building, reviewing, or fixing Svelte 5 (runes) and SvelteKit code — components with $state/$derived/$effect/$props/$bindable, .svelte.js rune modules vs stores, file routing (+page/+layout/+server/+error), universal vs server load functions, form actions with use:enhance, remote functions, SSR/CSR/prerender, adapters. Triggers: '$state vs $derived', 'migrate Svelte 4 $: to runes', '+page.server.ts load', 'use:enhance form action', 'shared state across .svelte.js modules', 'hydration mismatch in SvelteKit', 'componente Svelte con runes', 'per què no es reactiu el meu $state'. NOT Next.js/RSC (that is nextjs).",
4608
+ "description": "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`).",
4609
4609
  "tags": [
4610
4610
  "svelte",
4611
4611
  "sveltekit",
@@ -4623,7 +4623,7 @@
4623
4623
  },
4624
4624
  {
4625
4625
  "id": "swift-ios",
4626
- "description": "Use when building native iOS / Apple-platform apps in Swift with SwiftUI and modern Swift concurrency — designing @Observable view models, fixing Swift 6 strict data-race diagnostics, modeling async/await + actors, persisting with SwiftData, navigating with NavigationStack, or testing with Swift Testing. Triggers: 'native iOS app in SwiftUI', 'non-Sendable type crosses actor boundary', 'main actor-isolated property cannot be referenced from a nonisolated context', 'should this be an actor or @MainActor', '@Observable vs ObservableObject', '#expect vs XCTAssert', 'SwiftData @Model @Query', 'app nativa de iOS con SwiftUI i concurrència', 'liquid glass iOS 26'. NOT cross-platform Dart (that is flutter), NOT React Native (that is react-native), NOT native Kotlin/Android (that is kotlin-android), NOT shared KMP code across both OSes (that is compose-multiplatform).",
4626
+ "description": "Use when building native iOS and Apple-platform apps in Swift with SwiftUI and modern Swift concurrency — observable view models, Swift 6 strict data-race diagnostics, async/await and actors, SwiftData persistence, NavigationStack, and Swift Testing. NOT cross-platform Dart (that is `flutter`), NOT React Native (that is `react-native`), NOT native Kotlin for Android (that is `kotlin-android`), NOT shared KMP code across both OSes (that is `compose-multiplatform`).",
4627
4627
  "tags": [
4628
4628
  "swift",
4629
4629
  "swiftui",
@@ -4684,7 +4684,7 @@
4684
4684
  },
4685
4685
  {
4686
4686
  "id": "technical-writing",
4687
- "description": "Use when writing or fixing user-facing technical docs — a README, a getting-started tutorial, a how-to guide, API/CLI/config reference — and the page tries to teach, explain, and list every parameter at once, a tutorial branches into choose-your-own-adventure, a reference is padded with opinions, a README reads like a sales pitch, code samples are stale or untested, or weasel words (simply, just, easy, seamless) crept in. Triggers: 'write a README for my CLI', 'turn these notes into a step-by-step getting-started guide', 'document this REST endpoint's params and error codes', 'my docs page tries to do everything and confuses people', 'split this into tutorial vs how-to', 'this README reads like a sales pitch', 'add a Vale lint to block simply/just in our /docs', 'escriu un README clar per aquesta llibreria', 'documenta esta API con una guía paso a paso'. NOT an SEO blog article (that is article-writing), and NOT the content calendar or pipeline (that is content-engine).",
4687
+ "description": "Use when writing or fixing user-facing technical docs — a README, a getting-started tutorial, a how-to guide, or API/CLI/config reference — especially when a page tries to teach, explain and enumerate at once, a tutorial branches, a reference is padded with opinions, a README reads like a sales pitch, samples are stale, or weasel words have crept in. NOT an SEO blog article (that is `article-writing`), NOT the content calendar or pipeline (that is `content-engine`).",
4688
4688
  "tags": [
4689
4689
  "documentation",
4690
4690
  "technical-writing",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ericrisco/rsc",
3
- "version": "0.1.64",
3
+ "version": "0.1.66",
4
4
  "description": "Eric Risco's agent-skills catalog as a granular, self-recommending CLI installer.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: shopify
3
- description: "Use when building or customizing a Shopify store across its three code surfaces — themes (Liquid + Online Store 2.0 sections/blocks/JSON templates), apps (Remix + versioned GraphQL Admin API), and checkout (UI extensions, Functions, Web Pixels). Triggers: writing/reviewing any .liquid section/snippet/template or {% schema %}, scaffolding a Shopify app with @shopify/shopify-app-remix + Polaris, Admin GraphQL queries and the query-cost/throttle model, shopify CLI flow (theme dev/push, app dev/deploy), 'merchant must edit content in the theme editor without a deploy', 'our checkout customizations broke after the August upgrade', 'add an @app block to the product section', 'migrar el checkout.liquid a checkout extensibility', 'afegir un bloc d'app a la secció de producte'. NOT WooCommerce/PHP stores (that is wordpress), NOT the React/RSC layer of a headless storefront (that is nextjs), NOT non-Shopify payment integrations (that is stripe)."
3
+ description: "Use when building or customizing a Shopify store across its three code surfaces — themes (Liquid, Online Store 2.0 sections, blocks and JSON templates), apps (Remix with the versioned GraphQL Admin API and its query-cost model), and checkout (UI extensions, Functions, Web Pixels), plus the CLI flow and checkout-extensibility migration. NOT WooCommerce or PHP stores (that is `wordpress`), NOT the React layer of a headless storefront (that is `nextjs`), NOT non-Shopify payment integrations (that is `stripe`)."
4
4
  tags: [shopify, liquid, ecommerce, themes, checkout, graphql, storefront]
5
5
  recommends: [nextjs, stripe, wordpress, api-design, seo-geo]
6
6
  origin: risco
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: shortform-editing
3
- description: "Use when you have raw 9:16 footage and need it cut into a posted-ready vertical short — dead air removed, fast jump cuts, karaoke word-by-word burned-in captions from a transcript, cuts and zooms snapped to the music beat, and a platform-correct MP4 export. Use to remove silences, generate or fix burned captions, sync cuts to a beat grid, or encode to TikTok/Reels/Shorts specs. Triggers: 'remove the dead air from this talking-head clip', 'burn TikTok-style word-by-word captions onto this short', 'cut this footage to the beat of the song', 'export this Reel with the right specs', 'my captions are out of sync and getting hidden behind the TikTok buttons', 'quítale los silencios y ponle subtítulos quemados estilo TikTok', 'munta'm aquest clip vertical amb talls sincronitzats amb la música'. NOT writing the script, hook, beats, or caption text (that is video-shorts), NOT building a Remotion React composition codebase (that is remotion-video), NOT deciding when/where to post (that is social-publisher)."
3
+ description: "Use when you have raw 9:16 footage and need it cut into a post-ready vertical short — dead air removed, fast jump cuts, karaoke word-by-word burned-in captions from a transcript, cuts and zooms snapped to the music beat, safe-area placement so captions clear the platform UI, and a platform-correct MP4 export. NOT writing the script, hook, beats or caption text (that is `video-shorts`), NOT building a Remotion React composition codebase (that is `remotion-video`), NOT deciding when or where to post (that is `social-publisher`)."
4
4
  tags: [video-editing, shortform, captions, ffmpeg, whisper, beat-sync, vertical-video]
5
5
  recommends: [video-shorts, remotion-video, shortform-packaging, social-publisher, podcast]
6
6
  origin: risco
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: shortform-packaging
3
- description: "Use when a vertical short (TikTok/Reels/YouTube Shorts) is shot or scripted and you need the upload-form copy and cover that win the feed: the hook line, the first-frame on-screen text, the search-led caption, a tight 3-5 hashtag set, and the cover frame; it learns from what performed via the 02-DOCS log. Triggers: 'write the hook and caption for this Reel', 'pick the cover frame and its text', 'what hashtags for this TikTok', the non-obvious 'is 20 hashtags too many' and 'my shorts get views but nobody shares them, fix the packaging', 'rewrite the caption to rank in TikTok search', 'log how the last 5 shorts performed and apply it', plus Spanish/Catalan 'escríbeme el gancho y el pie de foto para este Reel' / 'ningú comparteix els meus vídeos, arregla'm el packaging i dona'm els hashtags'. NOT inventing the idea (that is shortform-ideation), NOT scripting or directing the cuts (that is video-shorts), NOT executing the edit (that is shortform-editing), NOT scheduling the post (that is social-publisher)."
3
+ description: "Use when a vertical short is shot or scripted and you need the upload-form copy and cover that win the feed — the hook line, the first-frame on-screen text, the search-led caption, a tight hashtag set, and the cover frame; it learns from what performed via the 02-DOCS log. NOT inventing the idea (that is `shortform-ideation`), NOT scripting or directing the cuts (that is `video-shorts`), NOT executing the edit (that is `shortform-editing`), NOT scheduling the post (that is `social-publisher`)."
4
4
  tags: [shortform, packaging, tiktok, reels, shorts, caption, hashtags, hook, cover, retention, social-copy]
5
5
  recommends: [video-shorts, shortform-ideation, shortform-strategy, shortform-editing, social-publisher, brand-voice, tiktok-api, instagram-api]
6
6
  profiles: []
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: skill-scout
3
- description: "Use when about to do a task and a specialized skill probably exists but is not loaded, when a task feels harder than it should because generic reasoning is doing a domain skill's job, or when auditing a workspace's skill coverage for holes. Triggers: 'is there a skill for this?', 'what skill am I missing?', 'should I install a skill before doing this?', 'audit my .claude/skills against what this repo does', 'this feels like reinventing something we already have a skill for', 'qué skill me falta', 'quina skill em falta'. Names the absent skill and emits an install command, or routes to author-skill when none exists. NOT routing among skills you already have (that is suggest), and NOT writing the skill when none exists (that is author-skill)."
3
+ description: "Use when a specialized skill probably exists but is not loaded, when a task feels harder than it should because generic reasoning is doing a domain skill's job, or when auditing a workspace's skill coverage for holes. Names the absent skill and emits an install command, or routes onward when none exists. NOT routing among skills you already have (that is `suggest`), NOT writing the skill when none exists (that is `author-skill`)."
4
4
  tags: [skill-discovery, capability-gap, meta, recommendations, coverage-audit]
5
5
  recommends: [suggest, author-skill, context-budget, continuous-learning, knowledge-ops]
6
6
  origin: risco
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: social-publisher
3
- description: "Use when planning a posting schedule, building a multi-platform content calendar, or reshaping one source asset into channel-native posts across X, LinkedIn, Instagram, Threads, Bluesky, TikTok, Facebook, or YouTube — deciding cadence, best-time slots, per-platform char/format limits, and producing a dated CSV/JSON calendar a scheduler can import. Use when the same caption flopped after being cross-posted everywhere, when reach drops after a posting gap, or when checking API publish caps before programmatic posting. Triggers: 'build me a posting schedule for next week', 'turn this blog into a week of posts', 'give me a CSV calendar I can import into Buffer', 'how often and what time should we post Reels vs LinkedIn', 'I posted the same text on every platform and it tanked', 'planificar el calendario de publicaciones', 'reaprovechar aquest post a tots els canals'. NOT the brand voice the posts speak in (that is brand-voice) and NOT the editorial strategy of what to make (that is content-engine)."
3
+ description: "Use when planning a posting schedule, building a multi-platform content calendar, or reshaping one source asset into channel-native posts across X, LinkedIn, Instagram, Threads, Bluesky, TikTok, Facebook or YouTube — cadence, best-time slots, per-platform format limits, API publish caps, and a dated CSV or JSON calendar a scheduler can import. NOT the brand voice the posts speak in (that is `brand-voice`), NOT the editorial strategy of what to make (that is `content-engine`)."
4
4
  tags: [social-media, scheduling, repurposing, content-calendar, distribution]
5
5
  recommends: [content-engine, brand-voice, video-shorts, newsletter, calendar-scheduling]
6
6
  origin: risco
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: solid-js
3
- description: "Use when building, reviewing, or debugging a SolidJS app — signals, stores, effects, memos, resources, and JSX that compiles to real DOM with no virtual DOM (solid-js 1.9.x stable, Solid 2.0 beta, @solidjs/router). Triggers: \"signal isn't updating the UI\", \"<For> vs <Index>\", \"createStore for a form\", \"createEffect infinite loop\", \"why does my component only run once\", \"el prop no es reactiu quan el desestructuro\", \"mi prop no se actualiza al desestructurar\". NOT React's re-render model (that is react)."
3
+ description: "Use when building, reviewing or debugging a SolidJS app — signals, stores, effects, memos and resources, and JSX that compiles to real DOM with no virtual DOM. Covers the classic traps: a signal that does not update the UI, For versus Index, effect loops, components that run once, and props losing reactivity when destructured. NOT React's re-render model (that is `react`)."
4
4
  tags: [solidjs, signals, reactivity, frontend, jsx, web]
5
5
  recommends: [vercel, testing-web, design]
6
6
  origin: risco
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: sop-builder
3
- description: "Use when a repeated process lives in one person's head, breaks when they're out, gets re-explained to every new hire, or produces inconsistent results because everyone does it differently — and needs to be written down once so anyone (or an agent) can run it the same way. Also when an existing SOP is stale, ignored, or missing its branches and needs an audit + rewrite. Triggers: 'write an SOP for how we publish the weekly newsletter', 'document this process step by step', 'turn this Loom/recording into a written procedure', 'it breaks every time Maria is on holiday because nobody else knows how she does it', 'our client handoff is different every time, standardize it', 'documenta este proceso paso a paso', 'crea un procedimiento para que cualquiera lo pueda hacer'. NOT capturing a meeting's decisions and action items (that is meeting-notes), NOT running a one-time project plan with milestones (that is project-ops)."
3
+ description: "Use when a repeated process lives in one person's head, breaks when they are away, gets re-explained to every new hire, or produces inconsistent results — and needs writing down once so anyone or any agent can run it the same way. Also for auditing and rewriting an SOP that is stale, ignored or missing its branches. NOT capturing a meeting's decisions and action items (that is `meeting-notes`), NOT running a one-time project plan with milestones (that is `project-ops`)."
4
4
  tags:
5
5
  - sop
6
6
  - process-documentation
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: spreadsheet-ops
3
- description: "Use when you must work a spreadsheet programmatically: write or repair a formula, generate an .xlsx file with Python (charts, conditional formats, append a sheet), drive Google Sheets from a script, build a read→transform→write-to-sheet pipeline, or write an in-sheet macro/trigger. Symptoms: a formula returns #VALUE!/#REF!/#SPILL!, a nightly job hits 429 quota on the Sheets API, or openpyxl 'wrote' a formula but the cell reads back blank. Triggers: 'export this DataFrame to Excel with a chart', 'my SUMIFS returns #VALUE!', 'append rows to a Google Sheet every night', 'openpyxl formula shows blank until I open in Excel', 'service account can't see my sheet / PermissionError', 'build an XLOOKUP across sheets', 'automatitza un full de càlcul', 'haz una macro de Google Sheets que coloree filas'. NOT pure dedupe/normalize with no sheet output (that is data-cleaning), NOT scraping a web table into rows (that is data-scraper), NOT multi-app event wiring (that is automation-flows)."
3
+ description: "Use when working a spreadsheet programmatically — writing or repairing a formula, generating an .xlsx with Python including charts and conditional formats, driving Google Sheets from a script, building a read-transform-write pipeline, or writing an in-sheet macro or trigger. Covers formula errors, Sheets API quota, service-account permissions, and formulas that read back blank. NOT pure dedupe or normalisation with no sheet output (that is `data-cleaning`), NOT scraping a web table into rows (that is `data-scraper`), NOT multi-app event wiring (that is `automation-flows`)."
4
4
  tags: [spreadsheet, excel, google-sheets, openpyxl, gspread, apps-script, formulas, automation]
5
5
  recommends: [data-cleaning, data-scraper, automation-flows, google-workspace, reporting, duckdb, document-processing]
6
6
  origin: risco
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: sql
3
- description: "Use when writing or reviewing advanced SQL query logic independent of any one engine — multi-table joins, window functions, CTEs (incl. recursive), GROUP BY/GROUPING SETS aggregation, or UNION/INTERSECT/EXCEPT set ops — or when a query returns too many rows, too few rows, or wrong totals. Triggers: 'top N per group', 'running total', 'period over period', 'gaps and islands', 'recursive CTE', 'why is my SUM doubled', 'NOT IN returns nothing', 'dedup keep latest', 'consulta SQL avanzada', 'función de ventana', 'per què el JOIN duplica files'. NOT engine internals/indexes/EXPLAIN (that is postgresdb), NOT MySQL config (that is mysql), NOT OLAP columnar specifics (that is duckdb)."
3
+ description: "Use when writing or reviewing advanced SQL query logic independent of any one engine — multi-table joins, window functions, CTEs including recursive ones, GROUP BY and GROUPING SETS aggregation, and set operations — or when a query returns too many rows, too few, or wrong totals. NOT engine internals, indexes or EXPLAIN (that is `postgresdb`), NOT MySQL config (that is `mysql`), NOT OLAP columnar specifics (that is `duckdb`)."
4
4
  tags: [sql, query, joins, window-functions, cte]
5
5
  recommends: [postgresdb, mysql, duckdb, drizzle-orm]
6
6
  origin: risco
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: sqlite-turso
3
- description: "Use when deciding whether plain SQLite is enough or wiring SQLite/Turso/libSQL for local-first, edge, or embedded-replica apps — a local file DB, a remote Turso URL, or a local replica synced to a remote primary — plus WAL mode and SQLite's single-writer model. Triggers: 'is SQLite enough', 'database is locked'/SQLITE_BUSY, 'embedded replica', 'edge database', 'createClient @libsql/client', 'database per user', 'sync local file to the cloud', 'base de datos local-first', 'base de dades a l'edge', 'rèplica incrustada'. NOT Drizzle schema/queries on libSQL (that is drizzle-orm), NOT versioned up/down migrations (that is db-migrations), NOT serverless Postgres with branching (that is neon)."
3
+ description: "Use when deciding whether plain SQLite is enough, or wiring SQLite, Turso or libSQL for local-first, edge and embedded-replica apps — a local file DB, a remote Turso URL, or a local replica synced to a remote primary — plus WAL mode and SQLite's single-writer model and its lock errors. NOT Drizzle schema or queries on libSQL (that is `drizzle-orm`), NOT versioned up/down migrations (that is `db-migrations`), NOT serverless Postgres with branching (that is `neon`)."
4
4
  tags: [sqlite, turso, libsql, edge, embedded-replica, local-first, wal]
5
5
  recommends: [drizzle-orm, db-migrations, postgresdb, neon, backups, sql]
6
6
  origin: risco
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: stripe
3
- description: "Use when wiring an app to Stripe for payments, subscriptions, Checkout, webhooks, or the billing portal — adding a paywall or Pro plan, charging recurring fees, or debugging why checkout.session.completed never fires or signature verification fails. Triggers: 'add Stripe Checkout', 'handle Stripe webhooks', 'let users cancel their subscription', 'No signatures found matching the expected signature', 'the webhook fires twice and duplicates the order', 'integrar pagos con Stripe', 'configurar el webhook de Stripe', 'portal de facturación del cliente'. NOT a generic non-Stripe inbound event receiver (that is webhooks), NOT the invoice document's legal form (that is invoicing), NOT deciding what to charge (that is pricing)."
3
+ description: "Use when wiring an app to Stripe for payments, subscriptions, Checkout, webhooks or the billing portal — adding a paywall or paid plan, charging recurring fees, and debugging why a completion event never fires, why signature verification fails, or why a webhook fires twice and duplicates the order. NOT a generic non-Stripe inbound event receiver (that is `webhooks`), NOT the invoice document's legal form (that is `invoicing`), NOT deciding what to charge (that is `pricing`)."
4
4
  tags: [stripe, payments, subscriptions, checkout, webhooks, billing, saas]
5
5
  recommends: [webhooks, invoicing, pricing, secure-coding, nodejs]
6
6
  profiles: []
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: structured-extraction
3
- description: "Use when text must become a typed, schema-conformant object you can trust — pulling name/email/amount/due-date into a fixed JSON shape, extracting line items as typed records, classifying into enums, or fixing an extractor that throws JSON.parse errors, leaks markdown fences, or fabricates a value when a field is absent — including building the Pydantic/Zod model plus the validate-and-retry loop. Triggers: 'extract these fields into a fixed JSON schema', 'my LLM keeps returning a markdown fence and JSON.parse blows up', 'the model invents an email when the text has none — I want null', 'classify each ticket into one of 6 enums and pull the order id', 'build the Pydantic model and a retry loop for 10k receipts', 'convertir estos contratos en datos estructurados con un esquema fijo y validar los campos', 'extreure camps a un esquema fix i validar-los'. NOT getting the text out of a PDF/scan/DOCX first (that is document-processing), NOT general prompt craft untied to a schema (that is prompt-engineering)."
3
+ description: "Use when text must become a typed, schema-conformant object you can trust — pulling fields into a fixed JSON shape, extracting line items as typed records, classifying into enums, and building the Pydantic or Zod model plus the validate-and-retry loop. Covers extractors that throw parse errors, leak markdown fences, or fabricate a value where the field is absent instead of returning null. NOT getting the text out of a PDF, scan or DOCX first (that is `document-processing`), NOT general prompt craft untied to a schema (that is `prompt-engineering`)."
4
4
  tags: [structured-outputs, json-schema, pydantic, extraction, validation, llm]
5
5
  recommends: [document-processing, prompt-engineering, llm-pipeline, agent-eval, rag, data-cleaning]
6
6
  profiles: []
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: supabase
3
- description: "Use when building on Supabase as a backend over managed Postgres — wiring the supabase-js or @supabase/ssr client, writing or debugging Row Level Security, cookie-based Auth, Storage buckets, Realtime, or Edge Functions. Triggers: 'my RLS policy returns no rows', 'cookie auth in Next.js with Supabase', 'getClaims vs getUser', 'should I verify the JWT locally or hit the Auth server', 'asymmetric signing keys', 'Broadcast vs Postgres Changes', 'service_role key', 'data API not exposing my table', 'configura Supabase con Next.js', 'mis políticas RLS no devuelven filas'. NOT raw Postgres tuning (that is postgresdb)."
3
+ description: "Use when building on Supabase as a backend over managed Postgres — wiring the supabase-js or SSR client, writing or debugging Row Level Security, cookie-based Auth, Storage buckets, Realtime, and Edge Functions, including local versus server JWT verification and the service-role key. NOT raw Postgres tuning (that is `postgresdb`)."
4
4
  tags: [supabase, postgres, rls, auth, edge-functions, realtime, storage, baas]
5
5
  recommends: [postgresdb, nextjs, db-migrations, secure-coding, drizzle-orm]
6
6
  origin: risco
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: svelte
3
- description: "Use when building, reviewing, or fixing Svelte 5 (runes) and SvelteKit code — components with $state/$derived/$effect/$props/$bindable, .svelte.js rune modules vs stores, file routing (+page/+layout/+server/+error), universal vs server load functions, form actions with use:enhance, remote functions, SSR/CSR/prerender, adapters. Triggers: '$state vs $derived', 'migrate Svelte 4 $: to runes', '+page.server.ts load', 'use:enhance form action', 'shared state across .svelte.js modules', 'hydration mismatch in SvelteKit', 'componente Svelte con runes', 'per què no es reactiu el meu $state'. NOT Next.js/RSC (that is nextjs)."
3
+ description: "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`)."
4
4
  tags: [svelte, sveltekit, runes, frontend, ssr, web]
5
5
  recommends: [typescript, vercel, design]
6
6
  origin: risco
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: swift-ios
3
- description: "Use when building native iOS / Apple-platform apps in Swift with SwiftUI and modern Swift concurrency — designing @Observable view models, fixing Swift 6 strict data-race diagnostics, modeling async/await + actors, persisting with SwiftData, navigating with NavigationStack, or testing with Swift Testing. Triggers: 'native iOS app in SwiftUI', 'non-Sendable type crosses actor boundary', 'main actor-isolated property cannot be referenced from a nonisolated context', 'should this be an actor or @MainActor', '@Observable vs ObservableObject', '#expect vs XCTAssert', 'SwiftData @Model @Query', 'app nativa de iOS con SwiftUI i concurrència', 'liquid glass iOS 26'. NOT cross-platform Dart (that is flutter), NOT React Native (that is react-native), NOT native Kotlin/Android (that is kotlin-android), NOT shared KMP code across both OSes (that is compose-multiplatform)."
3
+ description: "Use when building native iOS and Apple-platform apps in Swift with SwiftUI and modern Swift concurrency — observable view models, Swift 6 strict data-race diagnostics, async/await and actors, SwiftData persistence, NavigationStack, and Swift Testing. NOT cross-platform Dart (that is `flutter`), NOT React Native (that is `react-native`), NOT native Kotlin for Android (that is `kotlin-android`), NOT shared KMP code across both OSes (that is `compose-multiplatform`)."
4
4
  tags: [swift, swiftui, ios, swift-concurrency, swiftdata, swift-testing, apple]
5
5
  recommends: [kotlin-android, compose-multiplatform, flutter, react-native, expo, testing-web, github-actions, ship]
6
6
  profiles: []
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: technical-writing
3
- description: "Use when writing or fixing user-facing technical docs — a README, a getting-started tutorial, a how-to guide, API/CLI/config reference — and the page tries to teach, explain, and list every parameter at once, a tutorial branches into choose-your-own-adventure, a reference is padded with opinions, a README reads like a sales pitch, code samples are stale or untested, or weasel words (simply, just, easy, seamless) crept in. Triggers: 'write a README for my CLI', 'turn these notes into a step-by-step getting-started guide', 'document this REST endpoint's params and error codes', 'my docs page tries to do everything and confuses people', 'split this into tutorial vs how-to', 'this README reads like a sales pitch', 'add a Vale lint to block simply/just in our /docs', 'escriu un README clar per aquesta llibreria', 'documenta esta API con una guía paso a paso'. NOT an SEO blog article (that is article-writing), and NOT the content calendar or pipeline (that is content-engine)."
3
+ description: "Use when writing or fixing user-facing technical docs — a README, a getting-started tutorial, a how-to guide, or API/CLI/config reference — especially when a page tries to teach, explain and enumerate at once, a tutorial branches, a reference is padded with opinions, a README reads like a sales pitch, samples are stale, or weasel words have crept in. NOT an SEO blog article (that is `article-writing`), NOT the content calendar or pipeline (that is `content-engine`)."
4
4
  tags: [documentation, technical-writing, diataxis, readme, docs-as-code, developer-docs]
5
5
  recommends: [article-writing, content-engine, course-storytelling, translation-l10n, brand-voice, accessibility]
6
6
  origin: risco