@ericrisco/rsc 0.1.54 → 0.1.56

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.54",
2
+ "version": "0.1.56",
3
3
  "counts": {
4
4
  "skills": 258
5
5
  },
@@ -2020,7 +2020,7 @@
2020
2020
  },
2021
2021
  {
2022
2022
  "id": "gdpr-privacy",
2023
- "description": "Use when getting a product or website into practical GDPR shape: a privacy policy that matches what the product actually does, a cookie/consent banner, a defensible lawful basis per processing activity, a Record of Processing Activities, an Article 28 data-processing agreement with a vendor, an international-transfer mechanism (SCCs), or a working data-subject-rights flow. Triggers: 'write a GDPR privacy policy', 'is our cookie banner compliant', 'consent or legitimate interest for product emails', 'write the LIA', 'review this vendor DPA', 'we send data to a US sub-processor what mechanism', 'build our ROPA', 'how do we handle a DSAR / right to erasure', 'do we need a DPIA', 'redacta nuestra política de privacidad RGPD', 'revisa el banner de cookies perquè el rebuig sigui tan fàcil com acceptar'. NOT internal data retention/classification rules (that is data-policy) and NOT the consumer Terms of Service contract (that is terms-conditions).",
2023
+ "description": "Use when producing the GDPR artifacts a product publishes or hands over: a privacy policy true to what it processes, a cookie/consent banner, a lawful basis per purpose, an Art. 28 DPA, an SCC transfer mechanism, or a DSAR flow. Drafts for counsel review. NOT internal retention rules (that is `data-policy`), NOT consumer ToS (that is `terms-conditions`).",
2024
2024
  "tags": [
2025
2025
  "gdpr",
2026
2026
  "privacy",
@@ -2379,7 +2379,7 @@
2379
2379
  },
2380
2380
  {
2381
2381
  "id": "invoicing",
2382
- "description": "Use when someone needs to cut a legally-valid bill or quote, move it through its get-paid lifecycle, or chase money that hasn't arrived — billing completed work, drafting a quote before a job, an invoice weeks overdue, what must legally be on the page, or readiness for a structured e-invoicing mandate. Triggers: 'send an invoice to this client', 'create a quote / estimate for a prospect', 'this invoice is 3 weeks overdue, what do I send', 'what legally has to be on my invoice', 'our invoice numbers jump from 0042 to 0044 — is that a problem', 'issue a credit note for the one I sent', 'are we ready for the French e-invoicing mandate', 'emite una factura con el IVA desglosado', 'esta factura está vencida', 'crear un presupuesto', 'fes una factura per aquest client'. NOT recording a paid invoice in the books (that is bookkeeping), NOT wiring up the Stripe SDK as a software task (that is stripe), NOT setting the price (that is pricing).",
2382
+ "description": "Use when issuing an invoice, quote, or credit note and moving it draft-to-paid — the legally required VAT fields, gap-free numbering, per-country e-invoicing mandates, dunning overdue ones. NOT recording a paid invoice in the books (that is `bookkeeping`), NOT Stripe SDK plumbing (that is `stripe`), NOT setting the price (that is `pricing`).",
2383
2383
  "tags": [
2384
2384
  "invoicing",
2385
2385
  "billing",
@@ -2654,7 +2654,7 @@
2654
2654
  },
2655
2655
  {
2656
2656
  "id": "linkedin-outreach",
2657
- "description": "Use when running LinkedIn-native social selling as a repeatable motion: building Sales Navigator saved searches and trigger alerts, fixing a low connection-acceptance rate, designing a daily social-selling routine, turning profile views / post engagers / accepted connections into warm conversations, and logging every touch so the loop is measurable. Triggers: 'set up a Sales Nav saved search and alert me on job changes', 'how many connection requests per week without getting flagged', 'my acceptance rate is in the toilet', 'someone viewed my profile, what is the play', 'turn the people who liked my post into conversations', 'munta'm una rutina de social selling a LinkedIn', '¿cuántas invitaciones puedo enviar por semana'. This owns the loop and its ledger, NOT writing the cold connection note or DM copy (that is cold-outreach).",
2657
+ "description": "Use when running LinkedIn social selling as a repeatable motion — Sales Navigator saved searches and trigger alerts, weekly request budgets, fixing a low acceptance rate, turning profile views and post engagers into warm threads, logging every touch. NOT the note or DM copy (that is `cold-outreach`), NOT the deal after a reply (that is `sales-pipeline`).",
2658
2658
  "tags": [
2659
2659
  "linkedin",
2660
2660
  "social-selling",
@@ -2888,7 +2888,7 @@
2888
2888
  },
2889
2889
  {
2890
2890
  "id": "meeting-notes",
2891
- "description": "Use when a meeting, standup, or call just ended and you have a transcript or rough notes to turn into a durable record — extract the decisions with their why, assign action items with an owner and a real due date, flag open questions, and ship a one-screen recap within 24–48h. Also when an AI-notetaker transcript hallucinated tasks or mixed up speakers and you must clean it before sending. Triggers: 'pull the action items out of this transcript and tell me who owns what by when', 'the Otter transcript mixed up who said what, clean it up so I can send it', 'resume la reunión de hoy y saca los próximos pasos con responsable y fecha límite', 'fes una acta de la reunió'. NOT the durable decision record with full alternatives and review cadence (that is decision-records).",
2891
+ "description": "Use when a meeting just ended and a transcript or rough notes must become a record the absent can act on — decisions with their why, actions with an owner and a real date, open questions, a recap inside 24–48h — or to clean an AI-notetaker draft that invented tasks or swapped speakers. NOT the durable ADR with alternatives weighed (that is decision-records).",
2892
2892
  "tags": [
2893
2893
  "meeting-notes",
2894
2894
  "action-items",
@@ -3135,7 +3135,7 @@
3135
3135
  },
3136
3136
  {
3137
3137
  "id": "no-code-app",
3138
- "description": "Use when building an app on a no-code/low-code platform (Bubble, Softr, Glide, with Airtable/Xano backends) — picking the tool, modeling the data, taming usage/cost metering, or planning the exit before lock-in. Triggers: 'build a CRM without code', 'Bubble or Glide for my MVP', 'monta una app sin codi per reserves', 'my Bubble bill suddenly exploded' (workload-unit metering), 'Glide updates overage', 'how do I avoid getting locked into a no-code tool', 'when should I stop and write real code'. NOT a coded web app (that is nextjs).",
3138
+ "description": "Use when building an app on a no-code/low-code platform (Bubble, Softr, Glide over Airtable or Xano) — picking the platform, modeling the data, keeping usage-metered cost predictable, and planning the exit before lock-in. NOT a hand-written coded app (that is `nextjs`), NOT wiring SaaS tools together with no app UI (that is `automation-flows`).",
3139
3139
  "tags": [
3140
3140
  "no-code",
3141
3141
  "low-code",
@@ -3307,7 +3307,7 @@
3307
3307
  },
3308
3308
  {
3309
3309
  "id": "performance",
3310
- "description": "Use when one page or route is slow for a single user and the fix has to start with a measurement — failing Core Web Vitals (LCP, INP, CLS), a bloated JS bundle, too many re-renders, slow hydration, or a profiler showing where the time actually goes. Triggers: 'my LCP is 4 seconds', 'the page feels janky, typing lags', 'First Load JS is huge', 'INP is failing in Search Console', the non-obvious 'we import the whole library for one function' and 'a use client boundary is shipping the server tree to the browser', and Catalan/Spanish 'la pàgina carrega lenta i no passa els Core Web Vitals' / 'el bundle pesa demasiado, hay que analizarlo antes de tocar nada'. NOT surviving a concurrent traffic spike with caches, replicas and load tests (that is scaling), NOT fixing the slow SQL query or N+1 itself (that is postgresdb).",
3310
+ "description": "Use when a page or interaction is slow for one user and the fix starts from a measurement — a failing Core Web Vital (LCP, INP, CLS), a heavy JS bundle, wasted re-renders, an over-broad client boundary: profile, attribute the cost to one phase, fix it, re-measure. NOT surviving concurrent load (that is `scaling`), NOT the slow query (that is `postgresdb`).",
3311
3311
  "tags": [
3312
3312
  "performance",
3313
3313
  "core-web-vitals",
@@ -3459,7 +3459,7 @@
3459
3459
  },
3460
3460
  {
3461
3461
  "id": "power-automate",
3462
- "description": "Use when operating Microsoft Power Automate cloud flows programmatically — creating, enabling, updating, listing or deleting flows through the Dataverse Web API (the workflow table, category 5) with Entra ID / OAuth2 auth, or reading action-level run history via the third-party FlowStudio MCP. Triggers: 'create a Power Automate cloud flow with the Dataverse API', 'enable my flow by code / set statecode to 1', 'why can't I create or edit a My Flow programmatically', 'PATCH the workflow clientdata', 'automatizar el despliegue de un flujo de Power Automate desde código'. NOT designing the flow or authoring its definition (automation-flows), NOT choosing a platform by billing model (automation-strategy), NOT a generic typed REST client with auth/pagination/backoff (api-connector-builder), NOT the endpoint receiving an HTTP-trigger POST in your app (webhooks), NOT scripting Microsoft 365 / Graph mail & calendar directly (no first-party skill — api-connector-builder, or google-workspace).",
3462
+ "description": "Use when operating Microsoft Power Automate cloud flows from code — create, enable, update, list or delete via the Dataverse Web API (`workflow` table, category 5) with Entra ID OAuth2, plus run-history debugging. NOT designing the flow definition (that is `automation-flows`), NOT picking a platform by billing model (that is `automation-strategy`).",
3463
3463
  "tags": [
3464
3464
  "power-automate",
3465
3465
  "dataverse",
@@ -3750,7 +3750,7 @@
3750
3750
  },
3751
3751
  {
3752
3752
  "id": "react-native",
3753
- "description": "Use when writing the JS/TS code inside a React Native or Expo app — screens, navigation, lists, animation, platform-conditional UI, data/offline state, and native-module authoring — and when killing runtime jank or render bugs. Triggers: 'scaffold an Expo Router app', 'FlashList vs FlatList', 'auth-gated route groups', 'gesture reattaches every render', 're-render storm on every keystroke', 'deep link lands on the wrong screen', 'write an Expo Module wrapping a native SDK', 'la llista pateix lag quan faig scroll', 'mi app va fluida en iOS pero a tirones en Android'. NOT eas build/submit/OTA update/prebuild/config-plugin (that is expo), NOT a Dart app (that is flutter), NOT web React/DOM (that is react or nextjs).",
3753
+ "description": "Use when writing the JS/TS inside a React Native or Expo app — screens, Expo Router navigation, lists, Reanimated gestures, platform forks, offline state, native modules — or killing jank and render storms. NOT eas build/submit/OTA/config-plugin (that is `expo`), NOT a Dart app (that is `flutter`), NOT web React/DOM (that is `react` or `nextjs`).",
3754
3754
  "tags": [
3755
3755
  "react-native",
3756
3756
  "expo",
@@ -3994,7 +3994,7 @@
3994
3994
  },
3995
3995
  {
3996
3996
  "id": "roast-me",
3997
- "description": "Use when you want honest, comedic feedback on how you prompt — analyzing your own past sessions to score prompt quality and compute efficiency, surface your worst habits, and generate a model-selection cheat sheet. Triggers: 'roast me', 'roast my prompting', 'audit my prompting habits', 'how good are my prompts', 'am I prompting well', 'what are my bad prompt habits', 'analiza mis prompts', 'puntua els meus prompts', 'how much am I wasting on model costs'. NOT reviewing your code or output quality (use code-review for that) and NOT a general prompt-engineering tutorial (use prompt-engineering for that).",
3997
+ "description": "Use when someone wants an honest, comedic audit of their own prompting — reads their past agent transcripts, scores prompt quality and compute efficiency, names their worst habits, builds a model-selection cheat sheet. NOT reviewing code an agent produced (that is `code-review`), NOT prompting technique in general (that is `prompt-engineering`).",
3998
3998
  "tags": [
3999
3999
  "prompting",
4000
4000
  "self-audit",
@@ -4322,7 +4322,7 @@
4322
4322
  },
4323
4323
  {
4324
4324
  "id": "shortform-strategy",
4325
- "description": "Use when running the durable strategy layer of a TikTok and/or Instagram Reels account — positioning, posting cadence, format mix, which trends and sounds to ride, recurring series, and the what-worked learning loop — not making one video. Use for standing up a new account before posting; diagnosing a flat or declining account (positioning, cadence, or format?); deciding whether to ride a trend or sound now; designing a recurring series; the monthly strategy review; or choosing the Reels-vs-carousel mix. Triggers: 'starting a new TikTok account, what and how often should we post', 'we post every single day and our reach is going down' (cadence-dilution symptom, no strategy word), 'should we jump on this sound or is it dead', 'we want a weekly recurring series on Reels', 'muntar l''estratègia del compte de Reels: posicionament i cadència', '¿nos subimos a esta tendencia o ya pasó?'. NOT writing the single short script or hook variants (that is video-shorts).",
4325
+ "description": "Use when the unit of work is a TikTok/Reels account, not one clip: positioning, sustainable cadence and format mix, ride-or-skip on a trend or sound, recurring series, diagnosing a flat account, and the dated learning loop. NOT the single script or hook variants (that is `video-shorts`), NOT the idea backlog (that is `shortform-ideation`).",
4326
4326
  "tags": [
4327
4327
  "short-form-video",
4328
4328
  "tiktok",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ericrisco/rsc",
3
- "version": "0.1.54",
3
+ "version": "0.1.56",
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: gdpr-privacy
3
- description: "Use when getting a product or website into practical GDPR shape: a privacy policy that matches what the product actually does, a cookie/consent banner, a defensible lawful basis per processing activity, a Record of Processing Activities, an Article 28 data-processing agreement with a vendor, an international-transfer mechanism (SCCs), or a working data-subject-rights flow. Triggers: 'write a GDPR privacy policy', 'is our cookie banner compliant', 'consent or legitimate interest for product emails', 'write the LIA', 'review this vendor DPA', 'we send data to a US sub-processor what mechanism', 'build our ROPA', 'how do we handle a DSAR / right to erasure', 'do we need a DPIA', 'redacta nuestra política de privacidad RGPD', 'revisa el banner de cookies perquè el rebuig sigui tan fàcil com acceptar'. NOT internal data retention/classification rules (that is data-policy) and NOT the consumer Terms of Service contract (that is terms-conditions)."
3
+ description: "Use when producing the GDPR artifacts a product publishes or hands over: a privacy policy true to what it processes, a cookie/consent banner, a lawful basis per purpose, an Art. 28 DPA, an SCC transfer mechanism, or a DSAR flow. Drafts for counsel review. NOT internal retention rules (that is `data-policy`), NOT consumer ToS (that is `terms-conditions`)."
4
4
  tags: [gdpr, privacy, data-protection, cookies, consent, lawful-basis, dpa, scc, dsar, ropa, dpia, rgpd]
5
5
  recommends: [data-policy, terms-conditions, contracts, compliance, secure-coding, email-deliverability]
6
6
  origin: risco
@@ -128,9 +128,7 @@ Per-right runbook: `references/dsar-and-consent.md`.
128
128
  - **DPIA (Art. 35):** mandatory *before* any processing "likely to result in a high risk." Trigger checklist — do a DPIA if any apply: large-scale processing of special categories (Art. 9 data), systematic monitoring of a public area, or novel/high-risk technology (e.g. new biometric or AI-driven profiling). When in doubt, do it.
129
129
  - **Breach (Art. 33/34):** notify the supervisory authority **within 72 hours** of becoming aware, unless the breach is unlikely to result in risk; notify affected individuals when the risk to them is high. Have the contact and the template ready *before* a breach, not during.
130
130
 
131
- ## The legal boundary (non-negotiable)
132
-
133
- This skill drafts artifacts and flags issues. It is **not legal advice**. Emit the counsel/DPO-review line before anything is published or relied on — every time, no exceptions.
131
+ ## Stakes, and what isn't yours
134
132
 
135
133
  The fines make the stakes concrete: up to **€20M or 4% of global annual turnover** (whichever is higher) for the most serious infringements, €10M / 2% for the lesser tier; cumulative GDPR fines already exceed €7.1B. This is not a Big-Tech-only risk.
136
134
 
@@ -158,10 +156,4 @@ Hand off what isn't yours:
158
156
  | "Industry-standard security" with no Art. 32 reference | Cite Article 32 and describe the actual measures |
159
157
  | Says it's giving legal advice / the policy is safe to publish unreviewed | Flag for qualified privacy counsel / DPO every time |
160
158
 
161
- ## References
162
-
163
- - `references/privacy-policy-blueprint.md` — Art. 13/14 mandatory-disclosure sections as `[BRACKET]` fill-ins, each with a "why required" line.
164
- - `references/dpa-and-transfers.md` — Art. 28 demand/offer clause table, 2021 SCC module picker, TIA skeleton, DPF note, sub-processor change-notice clause.
165
- - `references/dsar-and-consent.md` — data-subject-rights runbook, the LIA three-part template, a compliant cookie-banner config shape, and the `verify.sh` banlist rationale.
166
-
167
- Run `scripts/verify.sh <artifact-file>` over any policy/banner/DPA you emit to catch missing Art. 13/14 tokens, placeholder leftovers, boilerplate-lies, and a banner missing its reject control.
159
+ Run `scripts/verify.sh <artifact-file>` over any policy/banner/DPA you emit to catch missing Art. 13/14 tokens, placeholder leftovers, boilerplate-lies, and a banner missing its reject control (banlist rationale in `references/dsar-and-consent.md`).
@@ -14,9 +14,9 @@ should_trigger:
14
14
  - prompt: "Someone emailed asking us to delete all their data — what's our deadline and process?"
15
15
  why: DSAR/erasure flow and the one-month statutory clock with exceptions.
16
16
  - prompt: "Redacta nuestra política de privacidad conforme al RGPD."
17
- why: Spanish trigger — drafting the privacy policy under GDPR.
17
+ why: Drafting the privacy policy under GDPR, asked in Spanish — matched by meaning, not keyword.
18
18
  - prompt: "Revisa el banner de cookies del web perquè el rebuig sigui tan fàcil com acceptar."
19
- why: Catalan trigger — cookie-banner review with the reject-parity rule.
19
+ why: Cookie-banner review against the reject-parity rule, asked in Catalan.
20
20
 
21
21
  should_not_trigger:
22
22
  - prompt: "Define our internal data retention schedule and data-classification tiers."
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: invoicing
3
- description: "Use when someone needs to cut a legally-valid bill or quote, move it through its get-paid lifecycle, or chase money that hasn't arrived — billing completed work, drafting a quote before a job, an invoice weeks overdue, what must legally be on the page, or readiness for a structured e-invoicing mandate. Triggers: 'send an invoice to this client', 'create a quote / estimate for a prospect', 'this invoice is 3 weeks overdue, what do I send', 'what legally has to be on my invoice', 'our invoice numbers jump from 0042 to 0044 — is that a problem', 'issue a credit note for the one I sent', 'are we ready for the French e-invoicing mandate', 'emite una factura con el IVA desglosado', 'esta factura está vencida', 'crear un presupuesto', 'fes una factura per aquest client'. NOT recording a paid invoice in the books (that is bookkeeping), NOT wiring up the Stripe SDK as a software task (that is stripe), NOT setting the price (that is pricing)."
3
+ description: "Use when issuing an invoice, quote, or credit note and moving it draft-to-paid — the legally required VAT fields, gap-free numbering, per-country e-invoicing mandates, dunning overdue ones. NOT recording a paid invoice in the books (that is `bookkeeping`), NOT Stripe SDK plumbing (that is `stripe`), NOT setting the price (that is `pricing`)."
4
4
  tags: [invoicing, billing, vat-invoice, dunning, accounts-receivable, e-invoicing, quotes, credit-note]
5
5
  recommends: [bookkeeping, stripe, pricing, contracts, proposals, e-signature, webhooks, finance-ops]
6
6
  origin: risco
@@ -8,7 +8,7 @@ origin: risco
8
8
 
9
9
  # Invoicing — cut the document, run the lifecycle, get paid
10
10
 
11
- You are the person in the business who **cuts the invoice, sends it, and gets it paid**. You own the billing document and its collection lifecycle: what must be on the page for a tax authority to accept it, how it moves from draft to paid, and how to chase money politely-then-firmly without breaking the law. You are not the accountant who later files it, and not the engineer who wires up the payment processor.
11
+ You own the billing document and its collection lifecycle: what must be on the page for a tax authority to accept it, how it moves from draft to paid, and how to chase money politely-then-firmly without breaking the law.
12
12
 
13
13
  The whole job is three moves: **cut a valid document → run its lifecycle → get it paid.** Skip the validity step and the customer can't deduct the VAT. Skip the lifecycle and you lose track of who owes what. Skip the chase and you work for free.
14
14
 
@@ -39,7 +39,7 @@ Before anything, decide which document you are issuing — they use different nu
39
39
  | Proforma | A "please-pay-this" preview that is not yet a tax document | Not the invoice series | No — not a fiscal invoice |
40
40
  | Credit note / corrective (factura rectificativa) | To cancel or reduce an invoice already sent | Its own corrective series, **referencing the original number** | Reduces an existing obligation |
41
41
 
42
- Why it matters: you **never** delete or renumber a finalized invoice to fix it. You issue a corrective that points back at the original. A missing number in the invoice series is an audit flag.
42
+ Never delete or renumber a finalized invoice to fix it — issue a corrective that points back at the original (see the lifecycle rule below).
43
43
 
44
44
  ## The legally-valid invoice checklist
45
45
 
@@ -143,12 +143,3 @@ Quotes follow `draft → finalize (assigns number) → accept`, which auto-gener
143
143
  | Chasing payment with no statutory basis | Weak, easily ignored | From D+15 cite ECB+8pp interest + EUR 40 fixed cost |
144
144
  | Omitting the per-rate VAT breakdown | Customer can't deduct VAT; invalid invoice | Net + rate + VAT amount per rate, plus total |
145
145
  | Recording the payment in the books yourself | Wrong skill, double-entry not your job | Hand the paid invoice to `../bookkeeping/SKILL.md` |
146
-
147
- ## Hand-off
148
-
149
- - Invoice paid → record + reconcile it: `../bookkeeping/SKILL.md`.
150
- - Need the SDK / webhook plumbing: `../stripe/SKILL.md`, `../webhooks/SKILL.md`.
151
- - Deciding the amount before you bill: `../pricing/SKILL.md`.
152
- - The terms the invoice bills against: `../contracts/SKILL.md`.
153
- - The pre-sale pitch, not the bill: `../proposals/SKILL.md`.
154
- - Getting it signed: `../e-signature/SKILL.md`.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: linkedin-outreach
3
- description: "Use when running LinkedIn-native social selling as a repeatable motion: building Sales Navigator saved searches and trigger alerts, fixing a low connection-acceptance rate, designing a daily social-selling routine, turning profile views / post engagers / accepted connections into warm conversations, and logging every touch so the loop is measurable. Triggers: 'set up a Sales Nav saved search and alert me on job changes', 'how many connection requests per week without getting flagged', 'my acceptance rate is in the toilet', 'someone viewed my profile, what is the play', 'turn the people who liked my post into conversations', 'munta'm una rutina de social selling a LinkedIn', '¿cuántas invitaciones puedo enviar por semana'. This owns the loop and its ledger, NOT writing the cold connection note or DM copy (that is cold-outreach)."
3
+ description: "Use when running LinkedIn social selling as a repeatable motion — Sales Navigator saved searches and trigger alerts, weekly request budgets, fixing a low acceptance rate, turning profile views and post engagers into warm threads, logging every touch. NOT the note or DM copy (that is `cold-outreach`), NOT the deal after a reply (that is `sales-pipeline`)."
4
4
  tags: [linkedin, social-selling, sales-navigator, outreach, pipeline]
5
5
  recommends: [cold-outreach, lead-gen, sales-pipeline, linkedin-strategy, linkedin-content]
6
6
  origin: risco
@@ -8,46 +8,28 @@ origin: risco
8
8
 
9
9
  # Linkedin Outreach — The Loop and Its Ledger
10
10
 
11
- *You run the LinkedIn social-selling motion and keep its score. You decide **who** to touch, **when**, through **what** warm-up, and **how** the whole loop is run and logged. You do not write the cold message (`cold-outreach`), source the raw list (`lead-gen`), or run the deal after the reply (`sales-pipeline`). The thesis is warm-first: engagement before connection, signal before send, ledger before "I'll remember it."*
11
+ *You run the LinkedIn social-selling motion and keep its score: **who** to touch, **when**, through **what** warm-up, and **how** the loop is run and logged. The thesis is warm-first — engagement before connection, signal before send, ledger before "I'll remember it." The output is a running system plus a touch ledger under `02-DOCS/`, never a finished line of copy: when prose is needed you write the brief and hand it off, then stay in the loop.*
12
12
 
13
- This skill is a *motion*, not a message. Its output is a running system plus a touch ledger under `02-DOCS/`, not a finished line of copy. When prose is genuinely needed, you write the brief and hand it off — you stay in the loop.
13
+ ## Boundary
14
14
 
15
- ## When to use
15
+ The sharpest line is against `../cold-outreach/SKILL.md`, and it splits on message-vs-system:
16
16
 
17
- - "Set up a Sales Navigator saved search / lead list for [ICP] and the trigger alerts."
18
- - "How many connection requests can I send this week without getting my account flagged?"
19
- - "Build me a 30-min-a-day social-selling routine that turns LinkedIn into pipeline."
20
- - "My acceptance rate is ~15% — how do I run requests so people actually accept?"
21
- - "Turn everyone who engaged with my last post into a conversation."
22
- - "Someone viewed my profile / liked my post — what's the play?"
23
- - "Log my LinkedIn touches and show me what's converting."
24
- - "munta'm una rutina de social selling a LinkedIn", "¿cuántas invitaciones puedo enviar por semana?"
17
+ - **A single message** — the connection note (≤300 chars), the DM bump, its wording and per-inbox send cadence → cold-outreach. If the ask is "write this" or "fix this template," it is not yours.
18
+ - **The system** — who to touch, when, the warm-up, the budget, the ledger → here. When both are in play, this skill drives and delegates the copy.
25
19
 
26
- ## When NOT — the boundary that gets fought over
27
-
28
- The sharpest line is against **cold-outreach**. Hold it:
29
-
30
- - **A single message** — the connection note (≤300 chars), the DM bump, its wording and per-inbox send cadence → `../cold-outreach/SKILL.md`. If the ask is "write this" or "fix this template," it is not yours.
31
- - **The system** — who to touch, when, the warm-up, the budget, the ledger → here. When both are in play, **this skill drives and delegates the copy.**
32
-
33
- Other routes:
34
-
35
- - Sourcing / scoring the raw prospect list, ICP definition, dedupe → `../lead-gen/SKILL.md`.
36
- - Running the deal after a reply (stages, forecast, CRM tasks) → `../sales-pipeline/SKILL.md`.
37
- - Writing/scheduling LinkedIn *posts* → `../linkedin-content/SKILL.md`.
38
- - Brand growth/positioning strategy → `../linkedin-strategy/SKILL.md`.
20
+ Also not yours: sourcing / scoring the raw prospect list and ICP definition → `../lead-gen/SKILL.md`; the deal after a reply, i.e. stages, forecast, CRM tasks → `../sales-pipeline/SKILL.md`; writing or scheduling LinkedIn *posts* → `../linkedin-content/SKILL.md`; brand growth and positioning → `../linkedin-strategy/SKILL.md`.
39
21
 
40
22
  ## The loop
41
23
 
42
24
  Five phases, in order. Each has a *why* and yields one artifact; the artifact gates the next phase. Skipping a phase is how acceptance collapses.
43
25
 
44
26
  1. **Target** — *why:* outreach timed to a reason beats outreach timed to a calendar. → Yields a Sales Nav saved search + trigger alerts (job change, funding, recent post).
45
- 2. **Warm** — *why:* a cold context-free request accepts ~20–30%; engaging first lifts it past ~60%. → Yields a logged pre-touch (profile view + one genuine comment/like 1–2 days prior).
27
+ 2. **Warm** — *why:* a cold, context-free request is the worst-accepting move you can make; engaging first is what fixes it. → Yields a logged pre-touch (profile view + one genuine comment/like 1–2 days prior).
46
28
  3. **Connect** — *why:* the request is the smallest, most rate-limited move; spend it deliberately. → Yields a sent request inside the weekly budget, note-or-no-note chosen by goal.
47
29
  4. **Convert** — *why:* an accept is not a conversation; the choreography turns a signal into a warm 1:1. → Yields a thread with a real reply, copy delegated to cold-outreach when needed.
48
30
  5. **Log** — *why:* a motion you can't measure you can't repeat or fix. → Yields a row in the `02-DOCS/` ledger with the outcome.
49
31
 
50
- Each phase has its own section below. Run them as a daily checklist (last section).
32
+ Each phase gets a section below; the last one compresses all five into a day.
51
33
 
52
34
  ## Target with Sales Navigator
53
35
 
@@ -88,7 +70,7 @@ When you do send a note, you do **not** write it here — hand the brief (the ho
88
70
  | Free | ~100/wk | ~20/weekday, stay under ~80/wk | Pause and warm more if acceptance drops below ~30%. |
89
71
  | Premium / Sales Nav | up to ~200/wk | up to ~40/day | Only with strong SSI and acceptance >40%; otherwise treat as free. |
90
72
 
91
- Health rules: requests over the cap get throttled or flagged; acceptance below ~30% means you are spraying — go back to phase 2, don't push volume. Withdraw stale pending requests before they pile up.
73
+ Over the cap, requests get throttled or the account flagged. Below ~30% acceptance you are spraying — go back to phase 2 instead of pushing volume, and withdraw stale pending requests before they pile up.
92
74
 
93
75
  ## Engagement → conversation
94
76
 
@@ -123,9 +105,7 @@ Buying-signal tells in a thread: they ask about price/timeline, mention an activ
123
105
 
124
106
  1. Book the call or send the warm intro.
125
107
  2. Log the outcome (`call_booked`) in the ledger.
126
- 3. Hand the thread + context to `../sales-pipeline/SKILL.md`.
127
-
128
- **Explicit stop:** this skill never sets deal stages, forecasts, or runs follow-up CRM tasks. The moment a deal exists, it is sales-pipeline's.
108
+ 3. Hand the thread + context to `../sales-pipeline/SKILL.md` — the moment a deal exists it is theirs, and you set no stages or forecasts.
129
109
 
130
110
  ## The ledger (02-DOCS)
131
111
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: meeting-notes
3
- description: "Use when a meeting, standup, or call just ended and you have a transcript or rough notes to turn into a durable record — extract the decisions with their why, assign action items with an owner and a real due date, flag open questions, and ship a one-screen recap within 24–48h. Also when an AI-notetaker transcript hallucinated tasks or mixed up speakers and you must clean it before sending. Triggers: 'pull the action items out of this transcript and tell me who owns what by when', 'the Otter transcript mixed up who said what, clean it up so I can send it', 'resume la reunión de hoy y saca los próximos pasos con responsable y fecha límite', 'fes una acta de la reunió'. NOT the durable decision record with full alternatives and review cadence (that is decision-records)."
3
+ description: "Use when a meeting just ended and a transcript or rough notes must become a record the absent can act on — decisions with their why, actions with an owner and a real date, open questions, a recap inside 24–48h — or to clean an AI-notetaker draft that invented tasks or swapped speakers. NOT the durable ADR with alternatives weighed (that is decision-records)."
4
4
  tags: [meeting-notes, action-items, decisions, recap, transcript-cleanup, minutes, standup, business-ops]
5
5
  recommends: [decision-records, sop-builder, project-ops, calendar-scheduling, notion-connector, automation-flows, document-processing]
6
6
  origin: risco
@@ -12,16 +12,16 @@ origin: risco
12
12
 
13
13
  You own the **point-in-time meeting record**: take a transcript or raw notes, separate signal from noise, and emit a curated artifact — decisions (with rationale), action items (owner + due date), open questions, and a one-screen TL;DR. The output is human-readable judgment, not a code file.
14
14
 
15
- ## What this owns vs. what it does not
15
+ ## Not this skill
16
16
 
17
- - The **durable decision record** — full rationale, alternatives weighed, reversibility framing, review cadence → [`decision-records`](../decision-records/SKILL.md). This skill *captures* a decision in its meeting context and hands the heavy ADR off; it does not maintain the long-lived artifact.
18
- - A **reusable step-by-step procedure / runbook** → [`sop-builder`](../sop-builder/SKILL.md). A SOP is a repeatable how-to; meeting notes are a point-in-time record.
19
- - **Tracking the emitted tasks across a board / sprint** → [`project-ops`](../project-ops/SKILL.md). This skill *emits* action items; managing their lifecycle is project-ops.
20
- - **Scheduling the meeting, finding a slot, sending the invite** → [`calendar-scheduling`](../calendar-scheduling/SKILL.md).
21
- - **Building the integration that pushes notes into Notion/Slack/a tracker** → [`notion-connector`](../notion-connector/SKILL.md) / [`automation-flows`](../automation-flows/SKILL.md).
22
- - **Summarizing an arbitrary document that is not a meeting** → [`document-processing`](../document-processing/SKILL.md).
23
-
24
- Boundary in one line: the durable decision record with alternatives and review lives in `decision-records`; `meeting-notes` captures the decision in context and ships the actionable recap.
17
+ | If the ask is… | Route to |
18
+ |---|---|
19
+ | The **durable decision record** — full rationale, alternatives weighed, reversibility argued, review cadence | [`decision-records`](../decision-records/SKILL.md). This skill *captures* a decision in its meeting context and hands the heavy ADR off; it does not maintain the long-lived artifact |
20
+ | A **reusable step-by-step procedure / runbook** | [`sop-builder`](../sop-builder/SKILL.md). A SOP is a repeatable how-to; meeting notes are a point-in-time record |
21
+ | **Tracking the emitted tasks across a board / sprint** | [`project-ops`](../project-ops/SKILL.md). This skill *emits* action items; their lifecycle is not its job |
22
+ | **Scheduling the meeting, finding a slot, sending the invite** | [`calendar-scheduling`](../calendar-scheduling/SKILL.md) |
23
+ | **Building the integration that pushes notes into Notion/Slack/a tracker** | [`notion-connector`](../notion-connector/SKILL.md) / [`automation-flows`](../automation-flows/SKILL.md) |
24
+ | **Summarizing an arbitrary document that is not a meeting** | [`document-processing`](../document-processing/SKILL.md) |
25
25
 
26
26
  ## The capture loop
27
27
 
@@ -69,15 +69,11 @@ go/no-go by Jun 12, payments integration is still open.
69
69
  - Revisit pricing tiers next sync (not in scope today)
70
70
  ```
71
71
 
72
- Rule: every major decision gets **one sentence of context**. A decision with no why rots — six weeks later nobody remembers what trade-off it solved. (Umbrex / Fellow.app, accessed 2026-06-02.)
72
+ Four filled versions of this skeleton — decision meeting, standup/sync, retro, 1:1 — plus copy-paste action-item and decision rows are in [`references/templates.md`](references/templates.md).
73
73
 
74
74
  ## Action items done right
75
75
 
76
- A complete action item is **`verb, owner, by <real date>`** — never a vague "soon". Explicit dates and named owners raise completion and ownership. (Umbrex, accessed 2026-06-02.)
77
-
78
- - **Verb-first** — the task starts with what to do: "Draft…", "Spike…", "Send…", "Confirm…".
79
- - **One named owner** — a person, not "the team" or "we". Shared ownership means nobody owns it.
80
- - **A real date** — "by Tue Jun 9", not "next week", not "soon", not "ASAP".
76
+ A complete action item is **`verb, owner, by <real date>`**: verb-first ("Draft…", "Spike…", "Send…", "Confirm…"), **one named person** — not "the team", not "we", since shared ownership means nobody owns it — and **a real date** ("by Tue Jun 9", never "next week", "soon", or "ASAP"). Explicit dates and named owners raise completion and ownership. (Umbrex, accessed 2026-06-02.)
81
77
 
82
78
  Bad → Good:
83
79
 
@@ -98,7 +94,7 @@ Add **RACI only when ownership is genuinely contested** — a cross-team decisio
98
94
  For each real decision capture three things:
99
95
 
100
96
  1. **The decision** — what was decided, stated as a fact.
101
- 2. **One sentence of why** — the trade-off or context. (Umbrex / Fellow.app, accessed 2026-06-02.)
97
+ 2. **One sentence of why** — the trade-off or context. Every major decision gets one; a decision with no why rots, and six weeks later nobody remembers what trade-off it solved. (Umbrex / Fellow.app, accessed 2026-06-02.)
102
98
  3. **Dissent or unresolved issue** — if someone disagreed or it's conditional, note it. A record that hides dissent will be re-litigated.
103
99
 
104
100
  Tag each decision by **reversibility** — `reversible` / `partially-reversible` / `irreversible` — as a single field. Reversible calls can be made fast on imperfect info; irreversible ones warrant slowing down and recording more context, and the tag helps later review. (fs.blog / Reflect OS, accessed 2026-06-02.)
@@ -109,7 +105,7 @@ Bad → Good:
109
105
  |---|---|
110
106
  | "Decided to use Postgres." | "Adopt Postgres over DynamoDB for the events store. *Why:* relational queries we need; team already knows it. *Reversibility:* partially-reversible. Dissent: none." |
111
107
 
112
- When a decision needs the full ADR — alternatives weighed, reversibility argued, a review date — that is `decision-records`' job. Capture it here in context, then hand it off. Don't grow an ADR inside the meeting notes.
108
+ When a decision needs the full ADR — alternatives weighed, reversibility argued, a review date — that is [`decision-records`](../decision-records/SKILL.md)' job. Capture it here in context, then hand it off. Don't grow an ADR inside the meeting notes.
113
109
 
114
110
  ## Working with AI transcripts
115
111
 
@@ -129,14 +125,7 @@ Recording a conversation carries real legal and confidentiality exposure. (Justi
129
125
 
130
126
  - **Announce + get consent before recording.** Roughly a dozen US states require all-party (two-party) consent — per Justia's 50-state survey, CA, CT, DE, FL, IL, MD, MA, MT, NV, NH, PA, WA — but the canonical list is contested (some sources classify MI, OR, or NV differently). Verify the current rule for your jurisdiction; don't assert a fixed count. Under GDPR, recording is data processing — you need a basis and to inform attendees.
131
127
  - **A cloud AI notetaker grants a third party access** to the conversation, which can waive privilege. Don't auto-record sensitive or privileged meetings (legal, HR, M&A, incident reviews).
132
- - **Redact** names, secrets, and confidential details before distribution if the audience is wider than the room.
133
-
134
- Decision checklist before you record or distribute:
135
-
136
- - [ ] Is this being recorded? → announce it and get consent first.
137
- - [ ] Any all-party-consent jurisdiction or EU attendee? → explicit consent, on record.
138
- - [ ] Sensitive / privileged (legal, HR, M&A)? → don't auto-record; notes by hand, tighter distribution.
139
- - [ ] Distributing beyond the room? → redact names/secrets first.
128
+ - **Redact** names, secrets, and confidential details before distribution if the audience is wider than the room — and tighten distribution on anything sensitive.
140
129
 
141
130
  ## Distribution
142
131
 
@@ -162,7 +151,3 @@ Then route, don't fork. Action items → a tracker via [`project-ops`](../projec
162
151
  | Fork the notes into three places | Versions diverge; people act on the stale one | One canonical home, link don't copy |
163
152
  | Invent a missing owner or date | A fabricated commitment is worse than a flagged gap | Flag it as "needs confirmation" — never guess |
164
153
  | Bolt RACI onto a standup | Overhead nobody reads; slows a simple sync | RACI only when ownership is genuinely contested |
165
-
166
- ## References
167
-
168
- - [`references/templates.md`](references/templates.md) — four ready meeting-record templates (decision meeting, standup/sync, retro, 1:1), the full AI-transcript verification checklist, and copy-paste action-item and decision-row formats.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: no-code-app
3
- description: "Use when building an app on a no-code/low-code platform (Bubble, Softr, Glide, with Airtable/Xano backends) — picking the tool, modeling the data, taming usage/cost metering, or planning the exit before lock-in. Triggers: 'build a CRM without code', 'Bubble or Glide for my MVP', 'monta una app sin codi per reserves', 'my Bubble bill suddenly exploded' (workload-unit metering), 'Glide updates overage', 'how do I avoid getting locked into a no-code tool', 'when should I stop and write real code'. NOT a coded web app (that is nextjs)."
3
+ description: "Use when building an app on a no-code/low-code platform (Bubble, Softr, Glide over Airtable or Xano) — picking the platform, modeling the data, keeping usage-metered cost predictable, and planning the exit before lock-in. NOT a hand-written coded app (that is `nextjs`), NOT wiring SaaS tools together with no app UI (that is `automation-flows`)."
4
4
  tags: [no-code, low-code, bubble, glide, softr, app-builder, mvp]
5
5
  recommends: [nextjs, shopify, wordpress, automation-flows, spreadsheet-ops, notion-connector, stripe]
6
6
  origin: risco
@@ -10,13 +10,9 @@ origin: risco
10
10
 
11
11
  You are deciding whether to build an app on a visual platform, which platform, how to model it, and where the wall is. No-code is not "the easy way" — it is a trade: you buy speed-to-first-user and pay it back in logic ceilings and metered cost. Your job is to make that trade with eyes open.
12
12
 
13
- ## The one rule
13
+ **Decide the exit before you build the entrance.** If you cannot describe how you would leave, you are not building an MVP — you are building a hostage.
14
14
 
15
- Decide the exit before you build the entrance.
16
-
17
- - No-code wins on **speed-to-first-user** — a working app in days, no deploy pipeline. That is the only thing it reliably wins.
18
- - It dies on **deep conditional logic** and on **scale economics** — many-branch workflows get unmaintainable, and metering turns a $29 bill into a $400 one without warning.
19
- - ~25-30% of no-code projects get rewritten when they outgrow the tool, at $50K-$250K. ~68% of platforms offer no code export. If you cannot describe how you would leave, you are not building an MVP — you are building a hostage.
15
+ No-code wins on **speed-to-first-user** — a working app in days, no deploy pipeline. That is the only thing it reliably wins. It dies on **deep conditional logic** and on **scale economics**: many-branch workflows get unmaintainable, and metering turns a $29 bill into a $400 one without warning.
20
16
 
21
17
  ## Step 0: is no-code even the right tool?
22
18
 
@@ -24,9 +20,9 @@ Run this gate before touching any builder. If any line is a clear yes, route out
24
20
 
25
21
  | If the user really wants... | Stop and go to |
26
22
  | --- | --- |
27
- | A hand-written app, full control over code | [../nextjs/SKILL.md](../nextjs/SKILL.md) (or react) |
28
- | A commerce storefront, products + checkout | `shopify` |
29
- | A content site / blog / CMS | `wordpress` |
23
+ | A hand-written app, full control over code | [../nextjs/SKILL.md](../nextjs/SKILL.md) (or [../react/SKILL.md](../react/SKILL.md)) |
24
+ | A commerce storefront, products + checkout | [../shopify/SKILL.md](../shopify/SKILL.md) |
25
+ | A content site / blog / CMS | [../wordpress/SKILL.md](../wordpress/SKILL.md) |
30
26
  | To wire SaaS tools together, no app UI | [../automation-flows/SKILL.md](../automation-flows/SKILL.md) |
31
27
  | A spreadsheet as the deliverable itself | [../spreadsheet-ops/SKILL.md](../spreadsheet-ops/SKILL.md) |
32
28
  | A Notion workspace, not a published app | [../notion-connector/SKILL.md](../notion-connector/SKILL.md) |
@@ -89,6 +85,8 @@ bookings: { id, customer: ->customers, class: ->classes, status: [pending|paid|
89
85
  payments: { id, booking: ->bookings, amount, provider_ref } # via stripe
90
86
  ```
91
87
 
88
+ Payments in any of these flows: see [../stripe/SKILL.md](../stripe/SKILL.md).
89
+
92
90
  ## Build logic without footguns
93
91
 
94
92
  The metering model punishes the obvious-but-wrong way of doing things. Build defensively.
@@ -127,7 +125,7 @@ This is the section everyone skips and everyone regrets. Do it on day 1.
127
125
  - Logic outgrows the canvas — many-branch conditionals, custom algorithms.
128
126
  - Performance — it crawls at real row counts (the 10K-row test).
129
127
  - Cost — the metered bill crosses what a real backend + hosting would cost.
130
- 4. **Price the rewrite honestly.** Outgrowing the tool means a $50K-$250K rebuild. Knowing that number is what lets you decide *now* whether to start in code via [../nextjs/SKILL.md](../nextjs/SKILL.md) instead.
128
+ 4. **Price the rewrite honestly.** ~25-30% of no-code projects get rewritten when they outgrow the tool, at $50K-$250K. Knowing that number is what lets you decide *now* whether to start in code via [../nextjs/SKILL.md](../nextjs/SKILL.md) instead.
131
129
 
132
130
  When two of those triggers fire, stop adding features and start the migration plan — do not keep pouring work into a runtime you are about to leave.
133
131
 
@@ -145,9 +143,3 @@ When two of those triggers fire, stop adding features and start the migration pl
145
143
  | Testing only at demo scale (100 rows) | Load-test at 10x expected rows early | Snappy at 100 can crawl at 10,000 |
146
144
  | No export plan, hope you never leave | Export day 1, keep model portable | 68% offer no code export; rewrite is $50K-$250K |
147
145
  | Picking Bubble for a simple internal portal | Softr (flat-rate) for portals over data | Predictable cost, no per-write surprise |
148
-
149
- ## References
150
-
151
- - [references/platform-limits.md](references/platform-limits.md) — 2026 pricing/metering/record-cap cheatsheet (Bubble WU tiers, Glide updates, Softr flat tiers), backend comparison (native/Airtable/Xano), cost-estimation worked examples, and the migrate-off trigger list, with sources and access dates.
152
-
153
- Payments in any of these flows: see [../stripe/SKILL.md](../stripe/SKILL.md).
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: performance
3
- description: "Use when one page or route is slow for a single user and the fix has to start with a measurement — failing Core Web Vitals (LCP, INP, CLS), a bloated JS bundle, too many re-renders, slow hydration, or a profiler showing where the time actually goes. Triggers: 'my LCP is 4 seconds', 'the page feels janky, typing lags', 'First Load JS is huge', 'INP is failing in Search Console', the non-obvious 'we import the whole library for one function' and 'a use client boundary is shipping the server tree to the browser', and Catalan/Spanish 'la pàgina carrega lenta i no passa els Core Web Vitals' / 'el bundle pesa demasiado, hay que analizarlo antes de tocar nada'. NOT surviving a concurrent traffic spike with caches, replicas and load tests (that is scaling), NOT fixing the slow SQL query or N+1 itself (that is postgresdb)."
3
+ description: "Use when a page or interaction is slow for one user and the fix starts from a measurement — a failing Core Web Vital (LCP, INP, CLS), a heavy JS bundle, wasted re-renders, an over-broad client boundary: profile, attribute the cost to one phase, fix it, re-measure. NOT surviving concurrent load (that is `scaling`), NOT the slow query (that is `postgresdb`)."
4
4
  tags: [performance, core-web-vitals, lcp, inp, cls, bundle-size, profiling, react, web-vitals]
5
5
  recommends: [scaling, postgresdb, redis, nextjs, react, observability, monitoring]
6
6
  profiles: []
@@ -15,12 +15,7 @@ The whole job in one line: **measure with a profiler → attribute the cost to o
15
15
 
16
16
  **Prime directive: no fix without a profile first.** A waterfall, a flame chart, a bundle treemap, or a field CWV number comes before you touch code. The fix you guess is almost never the fix the measurement points at, and a "fast" change that moves a phase nobody was waiting on is wasted work that you then have to maintain.
17
17
 
18
- Where the deep fix lives elsewhere — cross-reference, don't duplicate:
19
-
20
- - TTFB is the bottleneck because of a slow query or an N+1 → name it here, fix it in `../postgresdb/SKILL.md`.
21
- - You decided *what* to cache to cut a phase, now make the cache race-free → `../redis/SKILL.md`.
22
- - The problem only appears under concurrent load → `../scaling/SKILL.md`.
23
- - You need the canonical App-Router / component data pattern, not the perf loop → `../nextjs/SKILL.md`, `../react/SKILL.md`.
18
+ Cross-reference, don't duplicate: the last column of the table below names where each deep fix lives. The one case it has no row for — you decided *what* to cache to cut a phase and now need that cache race-free — is `../redis/SKILL.md`.
24
19
 
25
20
  ## Decision table — symptom to first move
26
21
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: power-automate
3
- description: "Use when operating Microsoft Power Automate cloud flows programmatically — creating, enabling, updating, listing or deleting flows through the Dataverse Web API (the workflow table, category 5) with Entra ID / OAuth2 auth, or reading action-level run history via the third-party FlowStudio MCP. Triggers: 'create a Power Automate cloud flow with the Dataverse API', 'enable my flow by code / set statecode to 1', 'why can't I create or edit a My Flow programmatically', 'PATCH the workflow clientdata', 'automatizar el despliegue de un flujo de Power Automate desde código'. NOT designing the flow or authoring its definition (automation-flows), NOT choosing a platform by billing model (automation-strategy), NOT a generic typed REST client with auth/pagination/backoff (api-connector-builder), NOT the endpoint receiving an HTTP-trigger POST in your app (webhooks), NOT scripting Microsoft 365 / Graph mail & calendar directly (no first-party skill — api-connector-builder, or google-workspace)."
3
+ description: "Use when operating Microsoft Power Automate cloud flows from code — create, enable, update, list or delete via the Dataverse Web API (`workflow` table, category 5) with Entra ID OAuth2, plus run-history debugging. NOT designing the flow definition (that is `automation-flows`), NOT picking a platform by billing model (that is `automation-strategy`)."
4
4
  tags: [power-automate, dataverse, microsoft, flows, entra, oauth, mcp, m365, automation]
5
5
  recommends: [automation-flows, automation-strategy, api-connector-builder, webhooks]
6
6
  profiles: [full]
@@ -80,7 +80,7 @@ Two load-bearing parts:
80
80
  - **`definition`** — a Logic Apps workflow definition: `triggers` (exactly one) then `actions`. This is the *design* artifact. Do not invent it from scratch here — get the trigger→actions→branch→error shape from `../automation-flows/SKILL.md`, then drop it into `definition`. Fastest reliable way to get a real one: build the flow once in the maker portal, export the solution, and copy its `clientdata`.
81
81
  - **`connectionReferences`** — the map from the definition's connectors to actual connections. **A flow whose connection references are not authorized will not turn on.** In a solution these are connection-reference records the target environment must resolve; unresolved references are the #1 reason a `PATCH statecode=1` "succeeds" but the flow never runs.
82
82
 
83
- **The trap:** `clientdata` must be *escaped into a string* before it goes in the request body — a nested object is rejected. In a script, `JSON.stringify(clientDataObject)` and assign the result; do not paste the object raw. Full annotated example in `references/dataverse-web-api.md`.
83
+ **The trap:** `clientdata` must be *escaped into a string* before it goes in the request body — a nested object is rejected. In a script, `JSON.stringify(clientDataObject)` and assign the result; do not paste the object raw. Full annotated example — plus the endpoint cheat-sheet (token, list/filter, create, enable, update, delete, ExportSolution, share), OData headers and error handling — in `references/dataverse-web-api.md`.
84
84
 
85
85
  ## Dynamic lifecycle — token → create → validate → enable → manage → delete
86
86
 
@@ -128,13 +128,17 @@ curl -s -X DELETE "$PA_DATAVERSE_URL/api/data/v9.2/workflows(<workflowid>)" \
128
128
 
129
129
  **Debug a run** — Dataverse's `flowrun` table lists run records but not per-action I/O. To see *which action failed and with what payload*, use FlowStudio MCP: `list_live_flows` → `get_live_flow_runs` → `get_live_flow_run_action_outputs`. See `references/flowstudio-mcp-and-limits.md`.
130
130
 
131
- ## Microsoft 365 ecosystem fit
131
+ ## Boundaries — when it is not a flow you operate here
132
132
 
133
- Power Automate is Microsoft's iPaaS across M365 and Dynamics; flows live in **Dataverse** and glue Outlook, Teams, SharePoint, Dynamics, and hundreds of connectors. That means the boundary is sharp: if the ask is *"send this email / read this calendar via Microsoft Graph from my own backend code,"* that is not a flow at all — build a typed Graph client with `../api-connector-builder/SKILL.md` (there is no first-party MS-Graph skill). If the equivalent is on Google, that is `../google-workspace/SKILL.md`. This skill is for when the automation genuinely *is* a Power Automate flow you must operate by code.
133
+ Power Automate is Microsoft's iPaaS across M365 and Dynamics; flows live in **Dataverse** and glue Outlook, Teams, SharePoint, Dynamics, and hundreds of connectors. This skill is for when the automation genuinely *is* a Power Automate flow you must operate by code. When it isn't:
134
134
 
135
- ## Honesty / gotchas
135
+ - *"Send this email / read this calendar via Microsoft Graph from my own backend code"* — not a flow at all; build a typed Graph client with `../api-connector-builder/SKILL.md` (there is no first-party MS-Graph skill), or `../google-workspace/SKILL.md` for the Google equivalent. Same route for a general typed client with auth/pagination/backoff — this skill uses the Dataverse endpoints surgically, it does not build a client.
136
+ - *"Power Automate or n8n/Make/Zapier?"* — billing model and constraints decide that: `../automation-strategy/SKILL.md`, before you commit to operating here.
137
+ - *"Receive my flow's HTTP-trigger POST in my app"* — that inbound endpoint is `../webhooks/SKILL.md`; this skill triggers and operates flows, it does not build the receiver.
136
138
 
137
- | Trap | Why it bites | Do instead |
139
+ ## Anti-patterns
140
+
141
+ | Anti-pattern | Why it bites | Do instead |
138
142
  |---|---|---|
139
143
  | Trying to CRUD a **My Flow** by code | Unsupported — silently impossible, not a bug you can fix | Move it into a Dataverse solution, or drive it by hand |
140
144
  | `clientdata` sent as a nested object | Request rejected; the column expects an escaped **string** | Serialize (`JSON.stringify`) the definition+connectionReferences before sending |
@@ -144,13 +148,6 @@ Power Automate is Microsoft's iPaaS across M365 and Dynamics; flows live in **Da
144
148
  | Hardcoding the Dataverse URL / secret | Env-specific, leaks in source | `.env`: `PA_DATAVERSE_URL`, `PA_TENANT_ID`, `PA_CLIENT_ID`, `PA_CLIENT_SECRET` |
145
149
  | Assuming the Dataverse path is permanent | Power Platform API is superseding surfaces piecemeal | Re-check `api.powerplatform.com` coverage at author time; the split is fast-moving |
146
150
 
147
- ## Related skills
148
-
149
- - **`../automation-flows/SKILL.md`** — design side: what the trigger→actions→branch→error should be, the importable definition. This skill *consumes* that shape as `clientdata.definition`. Design there, operate here.
150
- - **`../automation-strategy/SKILL.md`** — choosing Power Automate vs n8n/Make/Zapier by billing and constraints. Decide there before you commit to operating here.
151
- - **`../api-connector-builder/SKILL.md`** — a generic typed REST client with auth/pagination/backoff (including a Dataverse or MS Graph client). This skill uses the Dataverse API surgically; it does not build a general client.
152
- - **`../webhooks/SKILL.md`** — building the inbound endpoint in *your* app that receives a flow's HTTP-trigger POST. This skill triggers/operates flows; it does not build the receiver.
153
-
154
151
  ## Checklist
155
152
 
156
153
  - [ ] `.env` set: `PA_DATAVERSE_URL` (no trailing slash), `PA_TENANT_ID`, `PA_CLIENT_ID`, `PA_CLIENT_SECRET`.
@@ -161,9 +158,3 @@ Power Automate is Microsoft's iPaaS across M365 and Dynamics; flows live in **Da
161
158
  - [ ] Flow enabled via `PATCH statecode=1` and verified on read-back.
162
159
  - [ ] Solution **exported** before any `DELETE`.
163
160
  - [ ] No secrets or org URLs hardcoded; FlowStudio MCP (if used) flagged as third-party.
164
-
165
- ## References
166
-
167
- - `references/dataverse-web-api.md` — endpoint cheat-sheet (token, list/filter, create, enable, update, delete, ExportSolution, share), the full annotated `clientdata`, OData headers, and error handling.
168
- - `references/entra-auth-setup.md` — app registration, service principal vs delegated user, the Dataverse application user + security role, `.default` vs `user_impersonation`, and common 401/403 causes.
169
- - `references/flowstudio-mcp-and-limits.md` — FlowStudio MCP tools and auth (third-party), what it exposes that Dataverse doesn't, and the platform limits (My Flows, `api.flow.microsoft.com`, Power Platform API evolution).
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: react-native
3
- description: "Use when writing the JS/TS code inside a React Native or Expo app — screens, navigation, lists, animation, platform-conditional UI, data/offline state, and native-module authoring — and when killing runtime jank or render bugs. Triggers: 'scaffold an Expo Router app', 'FlashList vs FlatList', 'auth-gated route groups', 'gesture reattaches every render', 're-render storm on every keystroke', 'deep link lands on the wrong screen', 'write an Expo Module wrapping a native SDK', 'la llista pateix lag quan faig scroll', 'mi app va fluida en iOS pero a tirones en Android'. NOT eas build/submit/OTA update/prebuild/config-plugin (that is expo), NOT a Dart app (that is flutter), NOT web React/DOM (that is react or nextjs)."
3
+ description: "Use when writing the JS/TS inside a React Native or Expo app — screens, Expo Router navigation, lists, Reanimated gestures, platform forks, offline state, native modules — or killing jank and render storms. NOT eas build/submit/OTA/config-plugin (that is `expo`), NOT a Dart app (that is `flutter`), NOT web React/DOM (that is `react` or `nextjs`)."
4
4
  tags: [react-native, expo, mobile, ios, android, navigation, performance]
5
5
  recommends: [expo, react, flutter, design, debug, performance]
6
6
  origin: risco
@@ -8,11 +8,7 @@ origin: risco
8
8
 
9
9
  # React Native (app code)
10
10
 
11
- You write the code that runs *inside* the app: render, navigate, animate, list, persist, and author native modules. The pipeline around it — building, signing, OTA, native config — is not yours.
12
-
13
- ## What this skill owns
14
-
15
- Mobile is split across two skills by **verb**. Run the verb test before doing anything:
11
+ You write the code that runs *inside* the app: render, navigate, animate, list, persist, and author native modules. Mobile is split across two skills by **verb** — run the verb test before doing anything:
16
12
 
17
13
  | Verb in the request | Skill |
18
14
  |---|---|
@@ -149,7 +145,7 @@ Use Reanimated 4 CSS animations for simple declarative cases (fades, simple tran
149
145
 
150
146
  - Small forks: `Platform.select({ ios: 12, android: 8 })` or `Platform.OS === 'ios'`.
151
147
  - Whole-component forks: `Button.ios.tsx` / `Button.android.tsx` — the bundler picks the right one; import `./Button` with no extension.
152
- - Safe area: use `react-native-safe-area-context` insets, not hardcoded notch padding. Why: insets differ per device and orientation.
148
+ - Safe area: use `react-native-safe-area-context` insets, not hardcoded notch padding. Why: insets differ per device and orientation. Palette, type scale and layout intent are not decided here → `../design/SKILL.md`.
153
149
  - `KeyboardAvoidingView` behaves differently per platform — `padding` on iOS, often `height` or nothing on Android; test both, don't assume the iOS behavior ports.
154
150
  - Set the status bar style explicitly per screen via `expo-status-bar`.
155
151
 
@@ -196,6 +192,7 @@ Full Expo Module (Swift + Kotlin + view), the Turbo Module codegen-spec walkthro
196
192
  - Read **Hermes** stack traces from the bottom up; the JS frame that matters is usually above the native bridge frames.
197
193
  - "Works on iOS, breaks on Android" (or vice versa) → run the platform-divergence checklist in `references/performance-debugging.md` before guessing.
198
194
  - A red screen citing the interop layer is usually an old-architecture lib running under Fabric — update the lib or find a New-Arch-ready replacement; do **not** disable New Arch.
195
+ - A fault that resists all of the above needs systematic isolation, not more guesses → `../debug/SKILL.md`.
199
196
 
200
197
  ## Anti-patterns
201
198
 
@@ -211,10 +208,3 @@ Full Expo Module (Swift + Kotlin + view), the Turbo Module codegen-spec walkthro
211
208
  | Index as list key | Breaks recycling, reorders rows on insert | Stable domain id |
212
209
  | Doing native config / `eas.json` / OTA here | Wrong skill; this is app code | `../expo/SKILL.md` |
213
210
  | Hardcoded notch/safe-area padding | Wrong on other devices/orientations | `react-native-safe-area-context` insets |
214
-
215
- ## Cross-references
216
-
217
- - Building, signing, OTA, native config → `../expo/SKILL.md`
218
- - Dart cross-platform alternative → `../flutter/SKILL.md`
219
- - Layout/visual design decisions → `../design/SKILL.md`
220
- - Systematic runtime fault isolation → `../debug/SKILL.md`
@@ -42,6 +42,7 @@ flag() { # message + matching lines
42
42
  findings=1
43
43
  printf '%s[finding]%s %s\n' "$YELLOW" "$RESET" "$1"
44
44
  [ -n "${2:-}" ] && printf '%s\n' "$2" | sed 's/^/ /'
45
+ return 0 # never let a message-only finding trip set -e and skip the remaining checks
45
46
  }
46
47
 
47
48
  md_files() { # SKILL.md + every references/*.md
@@ -86,11 +87,13 @@ if [ -n "$bare" ]; then
86
87
  done < "$SKILL"
87
88
  fi
88
89
 
89
- # 4) Description must carry the Triggers: label and a NOT-boundary.
90
+ # 4) Description shape: a "Use when/to" lead, a NOT-boundary, and no keyword trigger list
91
+ # (the model matches by meaning; a phrase list is per-turn cost for every install).
90
92
  desc="$(grep -m1 -E '^description:' "$SKILL" 2>/dev/null || true)"
91
93
  if [ -n "$desc" ]; then
92
- printf '%s' "$desc" | grep -q 'Triggers:' || flag "description missing 'Triggers:' label"
94
+ printf '%s' "$desc" | grep -qE 'Use (when|to) ' || flag "description does not open with 'Use when/to'"
93
95
  printf '%s' "$desc" | grep -qE 'NOT ' || flag "description missing a 'NOT <x> (that is <sibling>)' boundary"
96
+ printf '%s' "$desc" | grep -q 'Triggers:' && flag "description carries a 'Triggers:' keyword list -> delete it, the model matches by meaning" ""
94
97
  fi
95
98
 
96
99
  # 5) No cross-ref to a sibling that does not exist on disk next to this skill.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: roast-me
3
- description: "Use when you want honest, comedic feedback on how you prompt — analyzing your own past sessions to score prompt quality and compute efficiency, surface your worst habits, and generate a model-selection cheat sheet. Triggers: 'roast me', 'roast my prompting', 'audit my prompting habits', 'how good are my prompts', 'am I prompting well', 'what are my bad prompt habits', 'analiza mis prompts', 'puntua els meus prompts', 'how much am I wasting on model costs'. NOT reviewing your code or output quality (use code-review for that) and NOT a general prompt-engineering tutorial (use prompt-engineering for that)."
3
+ description: "Use when someone wants an honest, comedic audit of their own prompting — reads their past agent transcripts, scores prompt quality and compute efficiency, names their worst habits, builds a model-selection cheat sheet. NOT reviewing code an agent produced (that is `code-review`), NOT prompting technique in general (that is `prompt-engineering`)."
4
4
  tags: [prompting, self-audit, compute-efficiency, ai-hygiene, learning]
5
5
  recommends: [prompt-engineering, code-review, context-budget]
6
6
  profiles: [full]
@@ -9,7 +9,7 @@ origin: risco
9
9
 
10
10
  # roast-me — audit your prompting, score yourself, stop burning money
11
11
 
12
- You are the **prompt auditor**. Your target is not the user's code — it is their *prompting behaviour*. You read their recent agent transcripts, run structured analysis passes, produce dual scores (Prompt Quality + Compute Efficiency), name the worst habits with named techniques to fix them, and track the trend over time.
12
+ You are the **prompt auditor**. Your target is not the user's code — it is their *prompting behaviour*, read from their own recent agent transcripts.
13
13
 
14
14
  Every run follows five phases. Execute them in order.
15
15
 
@@ -115,9 +115,7 @@ Score History:
115
115
  2026-06-08 73/100 (C) +5↑ 35/100 (F) The 3W Rule
116
116
  ```
117
117
 
118
- Output the roast report as formatted markdown. If history exists, append the trend line.
119
-
120
- Done.
118
+ Output the roast report as formatted markdown.
121
119
 
122
120
  ## Orientación (siempre)
123
121
 
@@ -9,7 +9,7 @@ skill: roast-me
9
9
 
10
10
  should_trigger:
11
11
  - prompt: "Roast me."
12
- why: "Canonical verbatim invocation — the skill's own trigger phrase. Must fire immediately and run the five-phase pipeline."
12
+ why: "Canonical invocation — the shortest possible ask for exactly this skill's job. Must fire immediately and run the five-phase pipeline."
13
13
 
14
14
  - prompt: "Audit my prompting habits over the last two weeks."
15
15
  why: "Situation-first phrasing with a custom time window — roast-me owns both the 'audit prompting' job and the --days N parameter."
@@ -18,10 +18,10 @@ should_trigger:
18
18
  why: "Dual concern (prompt quality + cost) phrased as a question — maps directly to the two scores roast-me produces. No mention of 'roast' keyword."
19
19
 
20
20
  - prompt: "Analiza mis prompts de la última semana y dime dónde soy malo."
21
- why: "Spanish-language trigger — rsc users write Spanish; the description must fire on non-English phrasings. Tests the non-English trigger."
21
+ why: "Spanish-language request — rsc users write Spanish; routing must survive translation on meaning alone."
22
22
 
23
23
  - prompt: "Puntua els meus prompts i digue'm quins hàbits hauria de canviar."
24
- why: "Catalan-language trigger — a non-obvious language variant. The description lists this phrasing explicitly."
24
+ why: "Catalan-language request — a non-obvious language variant that must route on meaning, with no keyword resembling the skill id."
25
25
 
26
26
  - prompt: "How much am I burning on model costs? Show me where I overspend."
27
27
  why: "Compute-efficiency angle only, no prompting-quality framing — roast-me's compute score and cheat sheet are the direct answer."
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: shortform-strategy
3
- description: "Use when running the durable strategy layer of a TikTok and/or Instagram Reels account — positioning, posting cadence, format mix, which trends and sounds to ride, recurring series, and the what-worked learning loop — not making one video. Use for standing up a new account before posting; diagnosing a flat or declining account (positioning, cadence, or format?); deciding whether to ride a trend or sound now; designing a recurring series; the monthly strategy review; or choosing the Reels-vs-carousel mix. Triggers: 'starting a new TikTok account, what and how often should we post', 'we post every single day and our reach is going down' (cadence-dilution symptom, no strategy word), 'should we jump on this sound or is it dead', 'we want a weekly recurring series on Reels', 'muntar l''estratègia del compte de Reels: posicionament i cadència', '¿nos subimos a esta tendencia o ya pasó?'. NOT writing the single short script or hook variants (that is video-shorts)."
3
+ description: "Use when the unit of work is a TikTok/Reels account, not one clip: positioning, sustainable cadence and format mix, ride-or-skip on a trend or sound, recurring series, diagnosing a flat account, and the dated learning loop. NOT the single script or hook variants (that is `video-shorts`), NOT the idea backlog (that is `shortform-ideation`)."
4
4
  tags: [short-form-video, tiktok, instagram-reels, account-growth, positioning, posting-cadence, trends, series, algorithm-2026]
5
5
  recommends: [video-shorts, shortform-ideation, shortform-packaging, shortform-editing, social-publisher, content-engine, brand-voice, analytics]
6
6
  origin: risco
@@ -12,9 +12,9 @@ origin: risco
12
12
 
13
13
  Hand off downstream the moment the deliverable becomes *one video*:
14
14
  - The 15–60s script and hook variants → `../video-shorts/SKILL.md`.
15
- - The topic/angle backlog feeding the account → **shortform-ideation**.
16
- - The cover frame / on-screen title / first-frame packaging → **shortform-packaging**.
17
- - The cut, caption burn-in, sound sync → **shortform-editing**.
15
+ - The topic/angle backlog feeding the account → `../shortform-ideation/SKILL.md`.
16
+ - The cover frame / on-screen title / first-frame packaging → `../shortform-packaging/SKILL.md`.
17
+ - The cut, caption burn-in, sound sync → `../shortform-editing/SKILL.md`.
18
18
  - Cross-platform calendar/scheduler across X/LinkedIn/Threads → `../social-publisher/SKILL.md`.
19
19
  - The top-down editorial system across all content types → `../content-engine/SKILL.md`.
20
20
  - The durable tone the account speaks in → `../brand-voice/SKILL.md`.
@@ -101,7 +101,7 @@ Design it as a *contract with the viewer*:
101
101
  - **Fix a cadence** — same slot, same rhythm (e.g. every Tuesday). A series with no schedule is just a hashtag.
102
102
  - **Pilot before committing.** Use **Trial Reels** (public IG accounts, 1,000+ followers, available since July 2025) to publish the pilot to non-followers first and read the signal before showing your existing audience — a built-in A/B surface for a format bet (later.com; socialpilot.co — accessed 2026-06-02).
103
103
 
104
- The hand-off: you define the series *concept, cadence, and numbering*. The episodes get ideated (shortform-ideation), scripted (`../video-shorts/SKILL.md`), and packaged (shortform-packaging) elsewhere.
104
+ The hand-off: you define the series *concept, cadence, and numbering*. The episodes get ideated (`../shortform-ideation/SKILL.md`), scripted (`../video-shorts/SKILL.md`), and packaged (`../shortform-packaging/SKILL.md`) elsewhere.
105
105
 
106
106
  ## The learning loop — log, review, write back
107
107
 
@@ -152,21 +152,9 @@ timestamp: 2026-06-02T10:00:00Z
152
152
 
153
153
  ## Persist it
154
154
 
155
- Write the account's brain back so it compounds (mirrors the harness Karpathy-wiki convention). The `shortform/` wiki tree is an **OKF v0.1 bundle** shared with the `tiktok-api` and `shortform-packaging` siblings: every `.md` written here carries YAML frontmatter with a non-empty `type`, cross-references are standard markdown links (never `[[wikilinks]]`), and `decisions.md` follows the OKF newest-first append-log rule.
156
-
157
- - `02-DOCS/wiki/shortform/strategy.md` — positioning, cadence/mix, KPI, length bands, current series. Lead with frontmatter; the body keeps the H1 + sections the linter checks:
158
-
159
- ```markdown
160
- ---
161
- type: shortform-strategy
162
- title: Shortform account strategy
163
- tags: [shortform, strategy, positioning, cadence]
164
- timestamp: 2026-06-02T10:00:00Z
165
- ---
166
- # Shortform account strategy
167
- ...
168
- ```
155
+ Write the account's brain back so it compounds (mirrors the harness Karpathy-wiki convention). The `shortform/` wiki tree is an **OKF v0.1 bundle** shared with the `../tiktok-api/SKILL.md` and `../shortform-packaging/SKILL.md` siblings: every `.md` written here carries YAML frontmatter with a non-empty `type`, cross-references are standard markdown links (never `[[wikilinks]]`), and `decisions.md` follows the OKF newest-first append-log rule.
169
156
 
157
+ - `02-DOCS/wiki/shortform/strategy.md` — positioning, cadence/mix, KPI, length bands, current series. Same frontmatter shape as above with `type: shortform-strategy`, then the H1 (`# Shortform account strategy`) and the sections the linter checks.
170
158
  - `02-DOCS/wiki/shortform/decisions.md` — the dated decision log, OKF append-log (`type: shortform-decision-log`, newest block on top; format above).
171
159
  - `02-DOCS/raw/shortform/metrics.csv` — the per-post ledger (schema in `references/learning-loop-template.md`). This is `raw/`, not `wiki/` — a CSV, no frontmatter.
172
160