@ericrisco/rsc 0.1.37 → 0.1.39

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.
Files changed (43) hide show
  1. package/README.md +8 -2
  2. package/manifest.json +130 -4
  3. package/package.json +1 -1
  4. package/scripts/lib/domains.js +1 -0
  5. package/scripts/lib/recommend.js +5 -0
  6. package/skills/automation-flows/SKILL.md +1 -1
  7. package/skills/automation-strategy/SKILL.md +131 -0
  8. package/skills/automation-strategy/evals/README.md +16 -0
  9. package/skills/automation-strategy/evals/cases.yaml +48 -0
  10. package/skills/automation-strategy/references/automate-decision-and-roi.md +118 -0
  11. package/skills/automation-strategy/references/orchestration-and-antipatterns.md +107 -0
  12. package/skills/automation-strategy/references/platform-selection-matrix.md +86 -0
  13. package/skills/harness/references/providers.yaml +101 -0
  14. package/skills/make/SKILL.md +255 -0
  15. package/skills/make/evals/README.md +14 -0
  16. package/skills/make/evals/cases.yaml +45 -0
  17. package/skills/make/references/api-v2-cheatsheet.md +114 -0
  18. package/skills/make/references/blueprint-round-trip.md +128 -0
  19. package/skills/make/references/make-mcp-and-auth.md +101 -0
  20. package/skills/n8n/SKILL.md +205 -0
  21. package/skills/n8n/evals/README.md +14 -0
  22. package/skills/n8n/evals/cases.yaml +45 -0
  23. package/skills/n8n/references/auth-and-selfhost.md +62 -0
  24. package/skills/n8n/references/n8n-mcp-tools.md +84 -0
  25. package/skills/n8n/references/rest-api-cheatsheet.md +94 -0
  26. package/skills/power-automate/SKILL.md +169 -0
  27. package/skills/power-automate/evals/README.md +17 -0
  28. package/skills/power-automate/evals/cases.yaml +43 -0
  29. package/skills/power-automate/references/dataverse-web-api.md +187 -0
  30. package/skills/power-automate/references/entra-auth-setup.md +75 -0
  31. package/skills/power-automate/references/flowstudio-mcp-and-limits.md +62 -0
  32. package/skills/roast-me/tools/adapters/__pycache__/__init__.cpython-312.pyc +0 -0
  33. package/skills/roast-me/tools/adapters/__pycache__/base.cpython-312.pyc +0 -0
  34. package/skills/roast-me/tools/adapters/__pycache__/claude.cpython-312.pyc +0 -0
  35. package/skills/roast-me/tools/adapters/__pycache__/codex.cpython-312.pyc +0 -0
  36. package/skills/roast-me/tools/adapters/__pycache__/gemini.cpython-312.pyc +0 -0
  37. package/skills/roast-me/tools/adapters/__pycache__/registry.cpython-312.pyc +0 -0
  38. package/skills/zapier/SKILL.md +145 -0
  39. package/skills/zapier/evals/README.md +5 -0
  40. package/skills/zapier/evals/cases.yaml +50 -0
  41. package/skills/zapier/references/programmatic-limits-and-partner-api.md +48 -0
  42. package/skills/zapier/references/when-to-use-vs-n8n-make.md +44 -0
  43. package/skills/zapier/references/zapier-mcp-tools.md +72 -0
package/README.md CHANGED
@@ -12,7 +12,7 @@
12
12
  ██ ██ ███████ ███████
13
13
  ```
14
14
 
15
- # `rsc` — 243 agent skills, one CLI, zero bloat
15
+ # `rsc` — 248 agent skills, one CLI, zero bloat
16
16
 
17
17
  **A self-recommending skill catalog for 17 coding assistants** — Claude Code,
18
18
  Codex, GitHub Copilot, Cursor, Gemini, Windsurf, Cline, Antigravity, Zed and more.
@@ -243,7 +243,7 @@ just asks in plain language.
243
243
 
244
244
  ## The catalog
245
245
 
246
- 244 skills, grouped by what you're trying to do. Click any skill to read its
246
+ 249 skills, grouped by what you're trying to do. Click any skill to read its
247
247
  `SKILL.md`. It fires on its own when a task matches.
248
248
 
249
249
  ### 🧭 Core & control plane
@@ -306,6 +306,12 @@ Each with a `02-DOCS` feedback loop that learns from your own results. `remotion
306
306
 
307
307
  [stripe](skills/stripe/) · [email-connector](skills/email-connector/) · [google-workspace](skills/google-workspace/) · [notion-connector](skills/notion-connector/) · [whatsapp-telegram](skills/whatsapp-telegram/) · [automation-flows](skills/automation-flows/) · [api-connector-builder](skills/api-connector-builder/) · [webhooks](skills/webhooks/) · [data-scraper](skills/data-scraper/) · [spreadsheet-ops](skills/spreadsheet-ops/) · [calendar-scheduling](skills/calendar-scheduling/) · [document-processing](skills/document-processing/) · [e-signature](skills/e-signature/)
308
308
 
309
+ ### ⚙️ Automation
310
+
311
+ Operate the big automation platforms **programmatically or via MCP** — create and manage automations *dynamically*, not just design them on a canvas. `automation-strategy` decides whether / what / which platform; the platform skills drive the live REST API or MCP server (harness connectors ship for each). Complements `automation-flows` (visual design + importable workflow JSON).
312
+
313
+ [automation-strategy](skills/automation-strategy/) · [n8n](skills/n8n/) · [make](skills/make/) · [zapier](skills/zapier/) · [power-automate](skills/power-automate/)
314
+
309
315
  ### 📊 Data & analytics
310
316
 
311
317
  [analytics](skills/analytics/) · [dashboard](skills/dashboard/) · [kpi-framework](skills/kpi-framework/) · [reporting](skills/reporting/) · [ab-testing](skills/ab-testing/) · [forecasting](skills/forecasting/) · [data-cleaning](skills/data-cleaning/) · [business-intelligence](skills/business-intelligence/)
package/manifest.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
- "version": "0.1.37",
2
+ "version": "0.1.39",
3
3
  "counts": {
4
- "skills": 244
4
+ "skills": 249
5
5
  },
6
6
  "skills": [
7
7
  {
@@ -302,16 +302,49 @@
302
302
  "integrations"
303
303
  ],
304
304
  "recommends": [
305
+ "automation-strategy",
306
+ "n8n",
307
+ "make",
308
+ "zapier",
309
+ "power-automate",
305
310
  "webhooks",
306
311
  "api-connector-builder",
312
+ "error-handling",
307
313
  "stripe",
308
314
  "notion-connector",
309
315
  "google-workspace",
310
- "whatsapp-telegram",
311
- "error-handling"
316
+ "whatsapp-telegram"
312
317
  ],
313
318
  "profiles": []
314
319
  },
320
+ {
321
+ "id": "automation-strategy",
322
+ "description": "Use when deciding whether a process is worth automating, choosing an automation platform, sizing ROI / build-vs-buy, designing an automation strategy, or diagnosing why a fleet of automations keeps breaking — the discipline layer that runs BEFORE anyone builds. Triggers: 'should we automate this?', 'is this worth automating', 'n8n vs Make vs Zapier vs Power Automate — which do we pick', 'custom script or no-code platform', \\\"what's the ROI on automating X\\\", 'design our automation strategy', 'our automations keep breaking', 'automating this cost more than it saved', '¿merece la pena automatizar esto?', 'qué plataforma de automatización elegimos'. NOT building the flow on a platform (design + importable artifact is automation-flows; driving a live platform API/MCP is the n8n / make / zapier / power-automate skills), NOT a typed API client with auth/pagination/backoff (api-connector-builder), NOT the inbound endpoint that receives webhook events in your app (webhooks).",
323
+ "tags": [
324
+ "automation",
325
+ "strategy",
326
+ "roi",
327
+ "build-vs-buy",
328
+ "platform-selection",
329
+ "orchestration",
330
+ "idempotency",
331
+ "n8n",
332
+ "make",
333
+ "zapier",
334
+ "power-automate"
335
+ ],
336
+ "recommends": [
337
+ "automation-flows",
338
+ "n8n",
339
+ "make",
340
+ "zapier",
341
+ "power-automate"
342
+ ],
343
+ "profiles": [
344
+ "core",
345
+ "full"
346
+ ]
347
+ },
315
348
  {
316
349
  "id": "aws-essentials",
317
350
  "description": "Use when standing up the core AWS surface a small product needs — create a private S3 bucket for uploads, provision an encrypted RDS Postgres, choose ECS Fargate vs EC2 for a container, put CloudFront in front of S3, write or tighten an IAM policy, or harden a fresh account (root MFA, no long-lived keys). Triggers: 'set up an S3 bucket for user uploads', 'this role has AdministratorAccess, scope it down', 'spin up Multi-AZ Postgres on RDS', 'my bucket is public and I don't know why', 'this role can do everything', 'I can't encrypt RDS now', 'Fargate or EC2 for a low-traffic app', 'monta un bucket S3 privado', 'permisos mínims a IAM', 'posa CloudFront davant del bucket'. NOT the CI pipeline that ships your container (that is deployment), NOT app-code access-control review (that is secure-coding).",
@@ -2655,6 +2688,30 @@
2655
2688
  ],
2656
2689
  "profiles": []
2657
2690
  },
2691
+ {
2692
+ "id": "make",
2693
+ "description": "Use when operating Make.com (formerly Integromat) programmatically — driving its REST API v2 or the Make MCP server from code or an agent to create, read, update, activate, run, clone, or delete scenarios, connections, hooks, and data stores. Triggers: 'create a Make scenario via the API', 'export a scenario blueprint, mutate it, and push it back', 'start/stop/run a Make scenario from a script', 'clone this Integromat scenario into another team', 'connect the Make MCP server so an agent runs my scenarios as tools', 'my valid Make API token returns an auth error' (zone trap), 'automatiza escenarios de Make.com desde la API'. NOT designing what the flow should do — trigger, branching, mapping, dedup, error path (automation-flows), NOT choosing Make vs n8n vs Zapier by billing model (automation-strategy), NOT operating n8n / Zapier / Power Automate (their skills), NOT a generic typed REST client with pagination/backoff (api-connector-builder) or an inbound webhook receiver in your own app (webhooks).",
2694
+ "tags": [
2695
+ "make",
2696
+ "integromat",
2697
+ "automation",
2698
+ "scenarios",
2699
+ "blueprint",
2700
+ "mcp",
2701
+ "no-code",
2702
+ "api",
2703
+ "workflows"
2704
+ ],
2705
+ "recommends": [
2706
+ "automation-flows",
2707
+ "automation-strategy",
2708
+ "api-connector-builder",
2709
+ "webhooks"
2710
+ ],
2711
+ "profiles": [
2712
+ "full"
2713
+ ]
2714
+ },
2658
2715
  {
2659
2716
  "id": "market-research",
2660
2717
  "description": "Use when you need a defensible picture of a MARKET as a whole — sizing it with TAM/SAM/SOM, cutting it into reachable segments, and proving demand is real and moving — with a dated source behind every number. Triggers: 'how big is the market for X', 'size this market', 'what's our TAM', 'is there real demand for this', 'who are the segments', 'where's the beachhead', 'sanity-check this TAM before the raise', 'top-down or bottom-up', '¿qué tamaño tiene el mercado de X', 'calcula el TAM', 'hay demanda real para esto', 'quina mida té aquest mercat'. NOT profiling specific named rivals and their moves (that is competitor-watch), NOT building a named list of accounts to sell to (that is lead-gen).",
@@ -2858,6 +2915,28 @@
2858
2915
  ],
2859
2916
  "profiles": []
2860
2917
  },
2918
+ {
2919
+ "id": "n8n",
2920
+ "description": "Use when operating a live n8n instance programmatically — driving its public REST API (`{host}/api/v1`, `X-N8N-API-KEY`) or the n8n-mcp server to create, validate, test, activate/deactivate, list, update, or delete workflows and read executions, on self-host or `*.app.n8n.cloud`. Triggers: 'deploy this workflow to my n8n over the API', 'push my workflow JSON to n8n with curl', 'I set active:true in the create call but it stays inactive', 'connect n8n-mcp / n8n_create_workflow to Claude', 'validate and autofix my n8n workflow', 'run an n8n workflow by id from a script', 'delete a workflow via the API', 'automatiza n8n por API', 'desplega el workflow a n8n.cloud'. NOT designing the flow's trigger-step-error logic or hand-building the importable workflow JSON (that is automation-flows), NOT operating Make / Zapier / Power Automate (their own skills), NOT a typed API client with auth+pagination+retry (api-connector-builder), NOT the inbound webhook receiver in your own app (webhooks).",
2921
+ "tags": [
2922
+ "n8n",
2923
+ "automation",
2924
+ "workflows",
2925
+ "mcp",
2926
+ "rest-api",
2927
+ "no-code",
2928
+ "integrations"
2929
+ ],
2930
+ "recommends": [
2931
+ "automation-flows",
2932
+ "automation-strategy",
2933
+ "api-connector-builder",
2934
+ "webhooks"
2935
+ ],
2936
+ "profiles": [
2937
+ "full"
2938
+ ]
2939
+ },
2861
2940
  {
2862
2941
  "id": "neon",
2863
2942
  "description": "Use when you picked Neon (serverless Postgres) and need to connect it correctly from a serverless/edge runtime, wire database branching into dev/preview/CI, or stop getting burned by scale-to-zero cold starts and pooler limits — code imports @neondatabase/serverless, DATABASE_URL points at *.neon.tech, or you must choose HTTP neon() vs WebSocket Pool. Triggers: 'connect to Neon from a Cloudflare Worker / Vercel edge', 'too many connections from my serverless function', 'first request after idle is slow' (scale-to-zero cold start), 'which connection string for migrations vs app queries', 'a database branch per pull request', 'pooled vs direct -pooler endpoint', 'conexión serverless a Postgres en Neon', 'branca de base de dades per cada PR'. NOT generic Postgres schema/index/EXPLAIN/RLS/migration engine work (that is postgresdb).",
@@ -3262,6 +3341,30 @@
3262
3341
  ],
3263
3342
  "profiles": []
3264
3343
  },
3344
+ {
3345
+ "id": "power-automate",
3346
+ "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).",
3347
+ "tags": [
3348
+ "power-automate",
3349
+ "dataverse",
3350
+ "microsoft",
3351
+ "flows",
3352
+ "entra",
3353
+ "oauth",
3354
+ "mcp",
3355
+ "m365",
3356
+ "automation"
3357
+ ],
3358
+ "recommends": [
3359
+ "automation-flows",
3360
+ "automation-strategy",
3361
+ "api-connector-builder",
3362
+ "webhooks"
3363
+ ],
3364
+ "profiles": [
3365
+ "full"
3366
+ ]
3367
+ },
3265
3368
  {
3266
3369
  "id": "presentations",
3267
3370
  "description": "Use when building a presentation deck — a pitch deck, sales deck, product/keynote talk, investor deck, board/QBR review, or a leave-behind one-pager — and you need a stunning, on-brand result exported to PDF and/or an editable PPTX. Covers two production pipelines: design-led Markdown decks (Marp/Slidev themed from the project's design tokens, exported to PDF + PPTX) and native editable PowerPoint via python-pptx (masters, layouts, native charts, tables, speaker notes). Grounds copy in the brand study and visuals in the design tokens; defers the WORDS to `marketing` and the visual system to `design`. Triggers: 'make a deck', 'build a pitch/sales/investor deck', 'slides for my talk', 'turn this doc into slides', 'export to PowerPoint/PPTX', 'Marp', 'Slidev', 'python-pptx', 'keynote deck', 'one-pager'. NOT a video skill (motion is used with restraint, not as the medium).",
@@ -5037,6 +5140,29 @@
5037
5140
  "design"
5038
5141
  ],
5039
5142
  "profiles": []
5143
+ },
5144
+ {
5145
+ "id": "zapier",
5146
+ "description": "Use when operating Zapier from an agent through the official hosted Zapier MCP server — Bearer-key connect, then discover an app's actions, enable one, and invoke a read or write action (or fire a Zap Catch Hook trigger) across 9,000+ apps like Slack, Gmail, Notion, HubSpot by natural language. Triggers: 'connect Zapier MCP to Claude/Cursor', 'run a Zapier action to post to Slack / create a HubSpot contact', 'let my agent search my Gmail through Zapier', 'invoke Zapier actions from my tool', 'how many tasks does a Zapier MCP call cost', 'ejecuta una acción de Zapier desde el agente', 'connecta Zapier MCP al meu agent'. NOT programmatically creating/reading/updating/deleting your own Zaps — Zapier has NO public API for that on a normal account, so say so and route to n8n or make, which have full workflow CRUD APIs. NOT deciding what a flow should be or its error/dedup design (that is automation-flows). NOT a SaaS vendor embedding Zapier via the Partner/Workflow API (rare; see references).",
5147
+ "tags": [
5148
+ "zapier",
5149
+ "mcp",
5150
+ "automation",
5151
+ "integrations",
5152
+ "no-code",
5153
+ "actions",
5154
+ "workflows"
5155
+ ],
5156
+ "recommends": [
5157
+ "automation-flows",
5158
+ "automation-strategy",
5159
+ "n8n",
5160
+ "make",
5161
+ "api-connector-builder"
5162
+ ],
5163
+ "profiles": [
5164
+ "full"
5165
+ ]
5040
5166
  }
5041
5167
  ]
5042
5168
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ericrisco/rsc",
3
- "version": "0.1.37",
3
+ "version": "0.1.39",
4
4
  "description": "Eric Risco's agent-skills catalog as a granular, self-recommending CLI installer.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -12,6 +12,7 @@ export const DOMAINS = [
12
12
  { title: 'Market & brand', ids: ['marketing', 'seo-geo', 'content-engine', 'social-publisher', 'brand-voice', 'brand-identity', 'newsletter', 'landing-copy', 'ads', 'article-writing', 'case-studies', 'video-shorts', 'podcast', 'market-research', 'competitor-watch', 'press-kit', 'community', 'webinar', 'review-management'] },
13
13
  { title: 'Grow a channel (YouTube / TikTok / Reels / LinkedIn / Medium)', ids: ['youtube-api', 'youtube-strategy', 'youtube-ideation', 'youtube-thumbnails', 'youtube-packaging', 'remotion-video', 'tiktok-api', 'instagram-api', 'shortform-strategy', 'shortform-ideation', 'shortform-packaging', 'shortform-editing', 'linkedin-api', 'linkedin-strategy', 'linkedin-content', 'linkedin-carousels', 'linkedin-outreach', 'medium-writing', 'medium-publishing', 'medium-strategy'] },
14
14
  { title: 'Connect & automate', ids: ['stripe', 'email-connector', 'google-workspace', 'notion-connector', 'whatsapp-telegram', 'automation-flows', 'api-connector-builder', 'webhooks', 'data-scraper', 'spreadsheet-ops', 'calendar-scheduling', 'document-processing', 'e-signature'] },
15
+ { title: 'Automation platforms', ids: ['automation-strategy', 'n8n', 'make', 'zapier', 'power-automate'] },
15
16
  { title: 'Data & analytics', ids: ['analytics', 'dashboard', 'kpi-framework', 'reporting', 'ab-testing', 'forecasting', 'data-cleaning', 'business-intelligence'] },
16
17
  { title: 'AI — build it in', ids: ['building-agents', 'rag', 'embeddings-search', 'prompt-engineering', 'llm-pipeline', 'agent-eval', 'chatbot', 'ai-media', 'replicate-images', 'structured-extraction', 'agent-safety', 'cost-tracking'] },
17
18
  { title: 'AI — run it on', ids: ['replicate', 'runpod', 'modal', 'huggingface', 'ollama', 'together-fireworks', 'fal'] },
@@ -21,6 +21,11 @@ const OUTCOMES = {
21
21
  unreal: 'Your game (Unreal)',
22
22
  'game-design': "Design a game that's fun",
23
23
  'fable-operator': 'Reason it through, reliably',
24
+ 'automation-strategy': 'Decide what to automate',
25
+ n8n: 'Automate with n8n (API/MCP)',
26
+ make: 'Automate with Make (API/MCP)',
27
+ zapier: 'Automate with Zapier (MCP)',
28
+ 'power-automate': 'Automate with Power Automate',
24
29
  };
25
30
 
26
31
  export function hasOutcome(id) {
@@ -2,7 +2,7 @@
2
2
  name: automation-flows
3
3
  description: "Use when building or fixing a no-code automation on n8n, Make, or Zapier — wiring a trigger to multi-app steps with branching, data mapping, retries, and an error path, or choosing the platform by its billing model. Triggers: 'wire up a Zap / Make scenario / n8n workflow that does X when Y happens', 'new Stripe payment → Notion row → Slack message in n8n', 'my Zap keeps failing silently, add error handling and retries', 'should I use Make or Zapier for 50k runs a month', 'my automation bill exploded', 'give me the JSON to import into n8n', 'automatiza esto en Make sin código', 'munta un workflow a n8n amb gestió d'errors', 'por qué se me dispara el Zap dos veces'. NOT writing a typed API client in code with auth/pagination/backoff (that is api-connector-builder), NOT building the inbound endpoint that receives and verifies webhook events in your own app (that is webhooks), NOT scripting one vendor's SDK directly (that is stripe / notion-connector / google-workspace / whatsapp-telegram)."
4
4
  tags: [automation, n8n, make, zapier, no-code, workflows, error-handling, integrations]
5
- recommends: [webhooks, api-connector-builder, stripe, notion-connector, google-workspace, whatsapp-telegram, error-handling]
5
+ recommends: [automation-strategy, n8n, make, zapier, power-automate, webhooks, api-connector-builder, error-handling, stripe, notion-connector, google-workspace, whatsapp-telegram]
6
6
  profiles: []
7
7
  origin: risco
8
8
  ---
@@ -0,0 +1,131 @@
1
+ ---
2
+ name: automation-strategy
3
+ description: "Use when deciding whether a process is worth automating, choosing an automation platform, sizing ROI / build-vs-buy, designing an automation strategy, or diagnosing why a fleet of automations keeps breaking — the discipline layer that runs BEFORE anyone builds. Triggers: 'should we automate this?', 'is this worth automating', 'n8n vs Make vs Zapier vs Power Automate — which do we pick', 'custom script or no-code platform', \"what's the ROI on automating X\", 'design our automation strategy', 'our automations keep breaking', 'automating this cost more than it saved', '¿merece la pena automatizar esto?', 'qué plataforma de automatización elegimos'. NOT building the flow on a platform (design + importable artifact is automation-flows; driving a live platform API/MCP is the n8n / make / zapier / power-automate skills), NOT a typed API client with auth/pagination/backoff (api-connector-builder), NOT the inbound endpoint that receives webhook events in your app (webhooks)."
4
+ tags: [automation, strategy, roi, build-vs-buy, platform-selection, orchestration, idempotency, n8n, make, zapier, power-automate]
5
+ recommends: [automation-flows, n8n, make, zapier, power-automate]
6
+ profiles: [core, full]
7
+ origin: risco
8
+ ---
9
+
10
+ # Automation strategy — decide whether, where, and how before anyone builds
11
+
12
+ This is the discipline layer of the automation suite. It answers three questions that come *before* the first node is wired: **should this be automated at all?**, **on what platform, and is a platform even the right tool vs code?**, and **what orchestration guarantees does every automation have to meet so the fleet doesn't rot?** No platform API, no importable JSON, no code lives here — the moment the decision is made, you route to the skill that builds it.
13
+
14
+ Building the flow (design + importable artifact) → `../automation-flows/SKILL.md`. Driving a specific platform's live API/MCP → `../n8n/SKILL.md`, `../make/SKILL.md`, `../zapier/SKILL.md`, `../power-automate/SKILL.md`. A typed API client in code → `../api-connector-builder/SKILL.md`. Receiving webhooks in your own app → `../webhooks/SKILL.md`.
15
+
16
+ Every fact about pricing and platform capability below moves fast. Treat the `≈` figures as hedges and re-check the vendor page at author time; the honest limits (Zapier can't create Zaps via public API; Power Automate can't create end-user "My flows" cleanly via API) are called out where they matter and expanded in the references.
17
+
18
+ ## 1. Should you automate at all?
19
+
20
+ Most "we should automate this" instincts are wrong — not because automation is bad, but because the process underneath isn't ready, or the payoff isn't there. Gate on four factors, all of them, before writing a line:
21
+
22
+ - **Frequency** — how many times per week/month does this run? A once-a-quarter task rarely earns its maintenance cost.
23
+ - **Time saved per run** — minutes of human toil removed each time. Two minutes × 1,000 runs beats an hour × 3.
24
+ - **Error rate of doing it by hand** — high manual error rate (typos, missed steps, missed SLAs) is often a bigger win than the time saved. Automation's real product is *consistency*, not just speed.
25
+ - **Stability of the process** — how often do the steps, the systems, or the rules change? An unstable process is the one thing that turns automation into a liability.
26
+
27
+ Rough gate: automate when it is **frequent AND stable AND** either saves meaningful time-per-run *or* removes a costly manual error rate. If it's frequent but unstable, or high-value but requires judgment on every run, do not automate yet — see below. Full scoring rubric with worked numbers: `references/automate-decision-and-roi.md`.
28
+
29
+ ### The trap: automating a broken or unstable process
30
+
31
+ Automating a bad process just makes you produce bad output faster, and now nobody can see the badness because a machine hides it. **Fix and standardize the process first, then automate the standardized version.** If the steps aren't written down the same way twice, if it "depends", if three people do it three ways — you are not ready. Standardize on paper, run it manually a few times against the written steps, *then* encode it. Automating chaos gives you automated chaos with a maintenance bill.
32
+
33
+ ### Human-in-the-loop: what you deliberately do NOT fully automate
34
+
35
+ Some steps should stay manual by design, wrapped in an approval gate rather than removed:
36
+
37
+ - **Judgment calls** — pricing exceptions, hiring decisions, content that carries brand/legal risk, anything where "usually right" isn't good enough.
38
+ - **Irreversible or high-blast-radius actions** — sending money, deleting data, emailing your whole list, publishing publicly, terminating accounts. Automate the *preparation*, require a human click for the *commit*.
39
+ - **Low-frequency, high-stakes** — the payoff is small and the cost of a silent wrong run is huge.
40
+
41
+ The pattern is *assisted*, not autonomous: the automation gathers, drafts, and stages; a human approves the commit. Cheap insurance against the day the automation is confidently wrong at scale.
42
+
43
+ ## 2. ROI and build-vs-buy
44
+
45
+ ### Payback math
46
+
47
+ ```text
48
+ build cost = hours to build × loaded hourly rate
49
+ monthly saving = (runs/month × time saved per run × loaded rate)
50
+ − monthly platform/run cost
51
+ − monthly maintenance cost ← the line people forget
52
+ payback (months)= build cost / monthly saving
53
+ ```
54
+
55
+ Two rules of thumb: if **payback > ~12 months**, the process is probably too rare or too cheap to bother; if **maintenance eats > ~30–50% of the gross saving**, you've built a pet, not a tool. Maintenance is not optional — APIs change, auth expires, edge cases surface. Budget it explicitly or the ROI is fiction. Worked examples: `references/automate-decision-and-roi.md`.
56
+
57
+ ### No/low-code platform vs custom code
58
+
59
+ | Choose a no/low-code platform when… | Choose custom code when… |
60
+ | --- | --- |
61
+ | Gluing 2–8 SaaS apps with pre-built connectors | Logic is genuinely complex, algorithmic, or stateful |
62
+ | Business owner needs to read/edit the flow | High volume where per-run platform billing dominates TCO |
63
+ | Speed to first version matters more than control | You need version control, tests, code review, CI on the logic |
64
+ | Volume is modest and connectors exist | The vendor has no connector and you need deep API control |
65
+
66
+ The honest middle: platforms win on **time-to-first-version and readability**; code wins on **complex logic, testability, and cost at scale**. Many mature setups are hybrid — a platform orchestrates and a small custom service (or `api-connector-builder` client) does the hard part.
67
+
68
+ ### Total cost of ownership
69
+
70
+ TCO is not the sticker price. Count: the **platform bill under your real volume and its billing unit** (this is where surprises live — see §3), build time, ongoing maintenance, the cost of an outage when it fails silently, and the switching cost if you outgrow the platform. A "free" automation that a senior engineer babysits monthly is not free.
71
+
72
+ ## 3. Platform selection
73
+
74
+ Pick on **billing unit first** — it's the axis that dictates cost at scale, and choosing on familiarity instead is the classic 10× mistake. Then filter on data residency, ecosystem, programmatic maturity, and portability. This is a routing decision: once chosen, hand off to that platform's skill.
75
+
76
+ | Axis | n8n | Make | Zapier | Power Automate |
77
+ | --- | --- | --- | --- | --- |
78
+ | **Billing unit** | per **execution** (whole run = 1, any # of steps); self-host = $0 | per **credit** (each module action = 1; was "operations", renamed 2025-08-27) | per **task** (every action counts) | per **user** or per **flow** (premium); bundled with many M365 plans |
79
+ | **Best cost shape** | few long/complex flows, high volume | moderate multi-step flows | many short simple flows | teams already paying for M365 |
80
+ | **Self-host / data residency** | **yes** — your infra, your data | no (EU/US regions only) | no | Microsoft cloud / Dataverse regions |
81
+ | **Ecosystem fit** | technical teams, raw HTTP, code nodes | mid-market, deep per-app modules | widest app catalog (~9,000+) | **native to Microsoft 365** — Teams, SharePoint, Outlook, Dataverse |
82
+ | **Programmatic + MCP maturity** | public REST API to CRUD workflows; community MCP; strongest for code-driven ops | management API + MCP support maturing | rich API for actions + Zapier MCP to expose actions to agents — **but no public API to create Zaps** | Flow management APIs + solutions/ARM — **but no clean public API to create end-user "My flows"** |
83
+ | **Portability** | high — export/import JSON + self-hostable runtime | medium — blueprint export/import, but runs only on Make | low — no portable export | low — tied to MS solutions |
84
+
85
+ **Routing shortcuts:** already living in Microsoft 365 → **Power Automate** (`../power-automate/SKILL.md`). Data must stay on your own infra, or high volume where execution-billing wins → **n8n** (`../n8n/SKILL.md`). Obscure app, non-technical owner → **Zapier** (`../zapier/SKILL.md`). Deep per-app modules, mid volume → **Make** (`../make/SKILL.md`).
86
+
87
+ **Two capability limits to state honestly, not paper over:** you can drive Zapier's actions programmatically and via MCP, but you **cannot create a Zap through a public API** — Zap authoring is UI-only. Power Automate exposes flow *management* and solution deployment, but there is **no clean public API to author an end-user's personal "My flows"**. If a plan depends on API-creating either, the plan is wrong. Full matrix, MCP notes, and caveats: `references/platform-selection-matrix.md`.
88
+
89
+ ## 4. Orchestration strategy (engine-agnostic)
90
+
91
+ These are the guarantees every automation must meet regardless of platform. This is the *policy*; the per-platform *recipe* lives in `../automation-flows/SKILL.md` and the platform skills. Deep dive: `references/orchestration-and-antipatterns.md`.
92
+
93
+ - **Idempotency & dedup.** Delivery is at-least-once and retries replay; assume every event can arrive twice. Require a **stable dedup key** (event id / external id) checked *before* any non-idempotent write (charge, email, insert). No dedup on a non-idempotent write = duplicate charges waiting to happen.
94
+ - **Error paths, retries & backoff.** Every automation has a defined destination for failure. Retry **transient** errors (timeouts, 429/5xx) with backoff and a cap; do **not** retry **permanent** errors (400/validation) — route them out. A flow with no error path isn't finished.
95
+ - **Dead-letter.** After retries are exhausted, the failed item lands in a durable place a human can inspect and replay — a queue, a table, an "incomplete executions" store. Dropped-on-the-floor failures are invisible data loss.
96
+ - **Observability & alerting.** Emit success/failure counts; put a **heartbeat on scheduled jobs and alert on silence** (a cron that stops firing is the failure you never hear about). Route alerts to a named owner, not a dead inbox.
97
+ - **Secrets handling.** Credentials in the platform's credential store / a vault, referenced by name — never pasted inline where an export leaks them. Least privilege, and a rotation plan. Engineering detail → `../secure-coding/SKILL.md`.
98
+ - **Versioning & environments.** Separate **dev/staging from prod**; export before you edit; keep a rollback. Changes to a live automation are production changes and deserve the same care.
99
+ - **Avoid fan-out storms.** Cap concurrency, batch, and rate-limit. Watch for **echo loops** (flow A writes a record that triggers flow B that triggers flow A) and for a single event fanning out into thousands of downstream calls that trip rate limits or blow the bill.
100
+
101
+ ## 5. Anti-patterns
102
+
103
+ | Anti-pattern | Why it bites | Do instead |
104
+ | --- | --- | --- |
105
+ | **No error path** | First API hiccup, the run dies; you learn from an angry customer | Define a failure destination + alert before shipping |
106
+ | **Silent failure** | Failures that don't alert erode trust worse than no automation — everyone assumes it worked | Alert on failure *and* on silence (heartbeat) |
107
+ | **No kill-switch** | When it misfires at scale, there's no fast way to stop the bleeding | Every outward-writing automation gets a documented pause/disable toggle |
108
+ | **Over-automation** | Automating rare / low-value / judgment work costs more to maintain than doing it by hand | Gate on §1; leave judgment steps human-in-the-loop |
109
+ | **Automating a broken process** | You produce bad output faster and hide the badness behind a machine | Standardize the process first, then encode it |
110
+ | **Hidden single point of failure** | One personal token / one undocumented flow everyone depends on | Service accounts, documented dependencies, no personal-account glue |
111
+ | **No owner** | Orphaned automations rot; nobody notices the break or knows how it works | Name an owner + a one-page runbook per automation |
112
+ | **Choosing platform by familiarity** | Bill 10× higher than the right billing unit; "our automation bill exploded" | Pick by billing unit for your run shape (§3) |
113
+
114
+ ## Related skills
115
+
116
+ - `../automation-flows/SKILL.md` — **build layer**: designs the flow and emits the importable artifact once this skill has decided *whether* and *where*. Strategy decides; automation-flows designs.
117
+ - `../n8n/SKILL.md`, `../make/SKILL.md`, `../zapier/SKILL.md`, `../power-automate/SKILL.md` — **operate layer**: drive that platform's live API/MCP to CRUD, activate, and run. Route here after §3.
118
+ - `../api-connector-builder/SKILL.md` — when the answer is custom code, not a platform: typed client with auth/pagination/backoff.
119
+ - `../webhooks/SKILL.md` — when you need to *receive* events in your own app (this skill treats webhooks as triggers, it doesn't build the receiver).
120
+ - `../secure-coding/SKILL.md` — secrets/rotation engineering behind the orchestration policy in §4.
121
+
122
+ ## Checklist
123
+
124
+ - [ ] Ran the §1 gate: frequency × time-saved × error-rate × **stability** — and confirmed the process is standardized, not chaos being paved.
125
+ - [ ] Identified any judgment / irreversible / high-blast-radius step and kept it human-in-the-loop with an approval gate.
126
+ - [ ] Computed payback including **maintenance**, and confirmed it's under the rule-of-thumb ceiling.
127
+ - [ ] Decided platform vs custom code on the build-vs-buy criteria, not on what's familiar.
128
+ - [ ] Chose the platform by **billing unit for the real run shape**, then data residency / ecosystem / portability — and did NOT assume a capability the platform lacks (Zap creation, PA "My flows").
129
+ - [ ] Specified the orchestration guarantees §4 requires (idempotency key, error path, dead-letter, heartbeat/alert, secrets store, dev/prod split, fan-out caps) as requirements handed to the build skill.
130
+ - [ ] Every automation has a named owner, a runbook, and a kill-switch.
131
+ - [ ] Routed the actual build to `automation-flows` / the chosen platform skill — no flow was built inside this skill.
@@ -0,0 +1,16 @@
1
+ # Evals — automation-strategy
2
+
3
+ `cases.yaml` holds three groups. `should_trigger` covers the decisions this skill owns: whether to
4
+ automate (with the stability trap), four-way platform selection, ROI / build-vs-buy, fleet-health
5
+ "our automations keep breaking", ecosystem-fit selection, and TCO/over-automation post-mortems, with
6
+ Spanish phrasing. `should_not_trigger` lists adjacent prompts routed to the sibling that owns them —
7
+ concrete builds/artifacts → automation-flows, driving a live platform → the n8n/make skills, code
8
+ clients → api-connector-builder, webhook receipt → webhooks, secrets engineering → secure-coding.
9
+ `capability` is one end-to-end strategy scenario whose `must_include` rubric checks the §1 gate,
10
+ human-in-the-loop on the irreversible step, maintenance-inclusive payback, billing-unit + ecosystem
11
+ platform routing, the honest Zapier/Power-Automate API-creation limits, the orchestration guarantees,
12
+ and that it defers the build (no JSON/API code emitted here).
13
+
14
+ No automated runner. Score by judgement: feed each prompt to the routing layer and confirm it
15
+ activates or routes to the listed sibling; for `capability`, have the skill produce the strategy
16
+ recommendation and check every `must_include` item by hand.
@@ -0,0 +1,48 @@
1
+ skill: automation-strategy
2
+
3
+ should_trigger:
4
+ - prompt: "Should we automate our weekly invoice-reconciliation process? It changes a bit every month."
5
+ why: The core whether-to-automate decision — and the "changes every month" signals the stability trap this skill exists to catch.
6
+ - prompt: "n8n vs Make vs Zapier vs Power Automate — which one should we standardize on as a company?"
7
+ why: Platform selection across all four engines by billing model and ecosystem fit; a strategy/routing decision, not a build.
8
+ - prompt: "What's the ROI on automating this task, and should we build a custom script or use a no-code platform?"
9
+ why: Payback math plus build-vs-buy — squarely §2, before anyone builds.
10
+ - prompt: "Our automations keep breaking and nobody knows why. Help us design a proper automation strategy."
11
+ why: Fleet-health / orchestration-discipline diagnosis — missing error paths, ownership, observability across a fleet.
12
+ - prompt: "We're a Microsoft 365 shop. Does it even make sense to pay for Zapier, or use what we have?"
13
+ why: Ecosystem-fit selection (MS 365 → Power Automate) and TCO reasoning; a platform-choice decision.
14
+ - prompt: "¿Merece la pena automatizar esto o me sale más caro de mantener que hacerlo a mano?"
15
+ why: Spanish; ROI / maintenance-cost gate — the "pet not a tool" payback question.
16
+ - prompt: "Automating this last quarter cost us more than it saved. What did we get wrong?"
17
+ why: TCO / over-automation post-mortem — the maintenance-eats-the-ROI and over-automation anti-patterns.
18
+
19
+ should_not_trigger:
20
+ - prompt: "Give me the importable n8n JSON for a webhook → Notion → Slack flow with error handling."
21
+ route_to: automation-flows
22
+ why: A concrete build/artifact request; automation-flows owns design and the importable workflow JSON.
23
+ - prompt: "Use the n8n API to create and activate this workflow on my instance."
24
+ route_to: n8n
25
+ why: Driving a specific platform's live API to CRUD/activate — the n8n platform skill, not the strategy layer.
26
+ - prompt: "Write a TypeScript client for the Acme REST API with OAuth, pagination, and exponential backoff."
27
+ route_to: api-connector-builder
28
+ why: Generic typed API client in code; that is api-connector-builder, not automation strategy.
29
+ - prompt: "Build the Express endpoint that receives and verifies Stripe webhook signatures."
30
+ route_to: webhooks
31
+ why: Building the inbound receiver in your own app; webhooks owns receipt, this skill treats webhooks only as triggers.
32
+ - prompt: "Set up the Make scenario: on new HubSpot deal, create a Trello card and email the owner."
33
+ route_to: automation-flows
34
+ why: A specific flow to build on a named platform — design goes to automation-flows, operation to the make skill; not a strategy question.
35
+ - prompt: "How do I rotate and store the API keys my flow uses securely in code?"
36
+ route_to: secure-coding
37
+ why: Secrets-engineering implementation detail; §4 sets the policy but secure-coding owns the how.
38
+
39
+ capability:
40
+ - scenario: "A 30-person Microsoft 365 company asks: 'We do a manual monthly vendor-payment run — pull approved invoices, pay them, notify finance. Should we automate it, on what platform, and how do we not screw it up?' Produce the strategy recommendation."
41
+ must_include:
42
+ - "Runs the §1 gate on frequency × time-saved × error-rate × stability before recommending automation."
43
+ - "Flags the payment/commit step as irreversible/high-blast-radius and keeps it human-in-the-loop behind an approval gate (automate prep, human clicks to pay)."
44
+ - "Payback math that explicitly includes ongoing maintenance cost, not just time saved."
45
+ - "Recommends a platform by billing unit and ecosystem fit — notes Microsoft 365 fit points to Power Automate — and routes the build to that platform skill / automation-flows rather than building here."
46
+ - "States the honest limit that Power Automate has no clean public API to author end-user 'My flows' (and Zapier can't create Zaps via API), so a plan can't depend on API-creating them."
47
+ - "Specifies orchestration guarantees as requirements: idempotency/dedup key, error path + retry/backoff, dead-letter, heartbeat/alert to a named owner, secrets in a vault, dev/prod split, and a kill-switch."
48
+ - "Does NOT emit importable workflow JSON or platform API code — defers the build to automation-flows / the platform skill."
@@ -0,0 +1,118 @@
1
+ # Automate decision & ROI — the numbers behind §1–§2
2
+
3
+ Depth for "should we automate this, and does it pay back?" Engine-agnostic. Once the answer is
4
+ yes, route the build to `../../automation-flows/SKILL.md` or the chosen platform skill.
5
+
6
+ ## The decision scorecard
7
+
8
+ Score each factor honestly. None of these is a magic threshold — they're a forcing function to
9
+ stop you automating on vibes.
10
+
11
+ | Factor | Ask | Weak signal (lean NO) | Strong signal (lean YES) |
12
+ | --- | --- | --- | --- |
13
+ | **Frequency** | runs per week/month | a handful per quarter | dozens+ per week |
14
+ | **Time saved / run** | minutes of human toil removed | seconds, or "it's quick anyway" | many minutes, or a context-switch tax |
15
+ | **Manual error rate** | how often a human gets it wrong | near-zero, low stakes | frequent, or costly when wrong |
16
+ | **Stability** | how often steps/systems/rules change | changes most months | unchanged for many months |
17
+ | **Toil / morale** | is it soul-crushing repetitive work | mildly annoying | actively burning out a person |
18
+
19
+ **The gate:** automate when **frequent AND stable AND (meaningful time-per-run OR costly manual
20
+ error rate)**. Instability vetoes everything else — a high-value process that changes monthly will
21
+ cost more in rework than it saves. When in doubt, the tie-breaker is stability, then frequency.
22
+
23
+ ### Why stability is the veto
24
+
25
+ Automation encodes *today's* process. Every change to the underlying process is now a change to
26
+ code/config someone has to make, test, and redeploy. On a stable process that's rare. On a churning
27
+ process it's a second job. If the process is still being figured out, keep it manual and cheap until
28
+ it stops moving.
29
+
30
+ ## The unstable / broken-process trap
31
+
32
+ Automating a broken process gives you **automated brokenness at higher throughput**, plus a machine
33
+ that now obscures the brokenness from the humans who used to feel it.
34
+
35
+ Sequence to do it right:
36
+
37
+ 1. **Write the process down** — the exact steps, inputs, decision rules, outputs.
38
+ 2. **Standardize** — if three people do it three ways, pick one way. Remove the "it depends" branches
39
+ or make them explicit rules.
40
+ 3. **Run it manually against the written steps** a few times. Fix the doc where reality diverges.
41
+ 4. **Only now automate** the standardized version.
42
+
43
+ Smell tests that you're not ready: the steps can't be written without "usually" or "it depends";
44
+ different people produce different outputs from the same input; the systems involved are mid-migration.
45
+
46
+ ## Human-in-the-loop taxonomy
47
+
48
+ Keep these steps assisted, not autonomous. The automation stages the work; a human commits it.
49
+
50
+ | Step type | Example | Pattern |
51
+ | --- | --- | --- |
52
+ | **Judgment** | pricing exception, hiring, brand/legal-sensitive content | draft + route for approval |
53
+ | **Irreversible** | send money, delete data, terminate an account | prepare automatically, require a human click to commit |
54
+ | **High blast radius** | email the whole list, publish publicly, mass update | stage + preview + explicit go |
55
+ | **Low-freq / high-stakes** | quarterly filing, contract renewal | checklist-assist, human executes |
56
+
57
+ Rule of thumb: if a wrong autonomous run would be expensive *and* hard to undo, insert an approval
58
+ gate. It costs one click and buys you the day the automation is confidently wrong.
59
+
60
+ ## Payback math (worked)
61
+
62
+ ```text
63
+ build cost = build hours × loaded hourly rate
64
+ gross saving/mo = runs/month × time saved per run (hrs) × loaded hourly rate
65
+ net saving/mo = gross saving/mo − platform cost/mo − maintenance cost/mo
66
+ payback (months)= build cost / net saving/mo
67
+ ```
68
+
69
+ **Loaded rate** = salary + overhead (benefits, tooling, management), not the bare wage — usually
70
+ 1.3–2× the wage. Use it for both build cost and time saved so the comparison is fair.
71
+
72
+ ### Example A — clear win
73
+
74
+ - Task runs 800×/month, saves 4 min each → 53.3 hrs/month saved.
75
+ - Loaded rate $60/hr → gross saving ≈ $3,200/month.
76
+ - Build = 20 hrs × $60 = $1,200. Platform ≈ $30/month. Maintenance ≈ 1 hr/month = $60.
77
+ - Net saving ≈ $3,200 − $90 = $3,110/month. **Payback ≈ 0.4 months.** Build it.
78
+
79
+ ### Example B — a pet, not a tool
80
+
81
+ - Task runs 6×/month, saves 15 min each → 1.5 hrs/month.
82
+ - Gross saving ≈ $90/month. Build = 25 hrs × $60 = $1,500. Maintenance ≈ 1.5 hrs/month = $90.
83
+ - Net saving ≈ $90 − $90 = **~$0/month.** Payback = never. Don't automate; write a checklist.
84
+
85
+ ### The two rules of thumb
86
+
87
+ - **Payback > ~12 months** → the process is probably too rare or too cheap. Reconsider.
88
+ - **Maintenance > ~30–50% of gross saving** → you've built something that eats its own ROI. The
89
+ fragile-integration tax (auth expiry, API changes, edge cases) is real; if it's this high, either
90
+ simplify the flow or question whether it should exist.
91
+
92
+ Maintenance is the line people omit and the reason ROI projections lie. Budget it explicitly.
93
+
94
+ ## Build vs buy (platform vs custom code)
95
+
96
+ | Dimension | No/low-code platform | Custom code |
97
+ | --- | --- | --- |
98
+ | Time to first version | hours | days+ |
99
+ | Readable by non-engineers | yes | no |
100
+ | Complex/stateful/algorithmic logic | awkward, hits ceilings | natural |
101
+ | Testability, review, CI | weak | strong |
102
+ | Cost at high volume | per-run billing can dominate | marginal cost near zero |
103
+ | Vendor/connector coverage | huge | you build each integration |
104
+ | Portability / lock-in | often locked in | yours |
105
+
106
+ **Hybrid is normal and often best:** a platform orchestrates the glue and human-readable flow; a
107
+ small custom service or an `api-connector-builder` client does the one hard, high-volume, or
108
+ algorithmic part. Don't force either extreme.
109
+
110
+ ## Total cost of ownership checklist
111
+
112
+ - Platform bill **at your real volume, in the platform's billing unit** (tasks vs credits vs
113
+ executions vs seats — see the platform matrix; this is where the surprise lives).
114
+ - Build hours (loaded).
115
+ - Ongoing maintenance hours/month (loaded) — the honest number, not the hopeful one.
116
+ - Cost of a silent outage: what does one undetected failure cost, and how likely is it?
117
+ - Switching cost if you outgrow the platform (low portability = high later pain).
118
+ - The babysitting tax: a "free" flow a senior engineer nurses monthly is not free.