@ericrisco/rsc 0.1.55 → 0.1.57
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 +16 -16
- package/package.json +1 -1
- package/skills/github-actions/SKILL.md +15 -27
- package/skills/linkedin-outreach/SKILL.md +11 -31
- package/skills/market-research/SKILL.md +13 -22
- package/skills/market-research/evals/cases.yaml +3 -3
- package/skills/meeting-notes/SKILL.md +15 -30
- package/skills/nestjs/SKILL.md +2 -10
- package/skills/nodejs/SKILL.md +13 -26
- package/skills/power-automate/SKILL.md +10 -19
- package/skills/prisma-orm/SKILL.md +3 -10
- package/skills/prisma-orm/evals/cases.yaml +2 -2
- package/skills/procurement/SKILL.md +1 -6
- package/skills/procurement/evals/cases.yaml +2 -2
- package/skills/react-native/SKILL.md +4 -14
- package/skills/react-native/scripts/verify.sh +5 -2
- package/skills/reporting/SKILL.md +21 -23
- package/skills/roast-me/SKILL.md +3 -5
- package/skills/roast-me/evals/cases.yaml +3 -3
- package/skills/ruby/SKILL.md +10 -31
- package/skills/shortform-ideation/SKILL.md +12 -20
- package/skills/shortform-strategy/SKILL.md +7 -19
package/manifest.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.1.
|
|
2
|
+
"version": "0.1.57",
|
|
3
3
|
"counts": {
|
|
4
4
|
"skills": 258
|
|
5
5
|
},
|
|
@@ -2065,7 +2065,7 @@
|
|
|
2065
2065
|
},
|
|
2066
2066
|
{
|
|
2067
2067
|
"id": "github-actions",
|
|
2068
|
-
"description": "Use when authoring or fixing GitHub Actions CI/CD — workflows under .github/workflows,
|
|
2068
|
+
"description": "Use when authoring or fixing GitHub Actions CI/CD — workflows under .github/workflows, triggers, job matrix, caching, token permissions, OIDC cloud deploys, environment gates, reusable workflows. NOT the Dockerfile or image build strategy (that is `docker`), NOT the branching model (that is `git-workflow`), NOT release readiness (that is `ship`).",
|
|
2069
2069
|
"tags": [
|
|
2070
2070
|
"github-actions",
|
|
2071
2071
|
"ci-cd",
|
|
@@ -2654,7 +2654,7 @@
|
|
|
2654
2654
|
},
|
|
2655
2655
|
{
|
|
2656
2656
|
"id": "linkedin-outreach",
|
|
2657
|
-
"description": "Use when running LinkedIn
|
|
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",
|
|
@@ -2789,7 +2789,7 @@
|
|
|
2789
2789
|
},
|
|
2790
2790
|
{
|
|
2791
2791
|
"id": "market-research",
|
|
2792
|
-
"description": "Use when
|
|
2792
|
+
"description": "Use when a MARKET as a whole needs a defensible picture — TAM/SAM/SOM sized top-down AND bottom-up until the two converge, cut into reachable segments with one named beachhead, demand proven real, and a dated source behind every figure. NOT profiling named rivals and their moves (that is `competitor-watch`), NOT building a list of accounts to sell to (that is `lead-gen`).",
|
|
2793
2793
|
"tags": [
|
|
2794
2794
|
"market-research",
|
|
2795
2795
|
"tam-sam-som",
|
|
@@ -2888,7 +2888,7 @@
|
|
|
2888
2888
|
},
|
|
2889
2889
|
{
|
|
2890
2890
|
"id": "meeting-notes",
|
|
2891
|
-
"description": "Use when a meeting
|
|
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",
|
|
@@ -3033,7 +3033,7 @@
|
|
|
3033
3033
|
},
|
|
3034
3034
|
{
|
|
3035
3035
|
"id": "nestjs",
|
|
3036
|
-
"description": "Use when building or structuring a NestJS backend — feature modules, providers
|
|
3036
|
+
"description": "Use when building or structuring a NestJS backend — feature modules, providers and DI wiring, provider scopes and request-lifecycle order, where to bind guards/pipes/interceptors/filters, and testing with Test.createTestingModule. NOT a bare Express/Fastify service with no DI (that is `nodejs`), NOT framework-agnostic REST design (that is `api-design`).",
|
|
3037
3037
|
"tags": [
|
|
3038
3038
|
"nestjs",
|
|
3039
3039
|
"nodejs",
|
|
@@ -3158,7 +3158,7 @@
|
|
|
3158
3158
|
},
|
|
3159
3159
|
{
|
|
3160
3160
|
"id": "nodejs",
|
|
3161
|
-
"description": "Use when building or
|
|
3161
|
+
"description": "Use when building or operating a plain Node.js / Express 5 backend service: project layout, async correctness, central error middleware, fail-fast config, graceful shutdown on SIGTERM. NOT DI modules/providers/guards (that is `nestjs`), NOT the type system or tsconfig (that is `typescript`), NOT REST contract design (that is `api-design`).",
|
|
3162
3162
|
"tags": [
|
|
3163
3163
|
"nodejs",
|
|
3164
3164
|
"express",
|
|
@@ -3459,7 +3459,7 @@
|
|
|
3459
3459
|
},
|
|
3460
3460
|
{
|
|
3461
3461
|
"id": "power-automate",
|
|
3462
|
-
"description": "Use when operating Microsoft Power Automate cloud flows
|
|
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",
|
|
@@ -3546,7 +3546,7 @@
|
|
|
3546
3546
|
},
|
|
3547
3547
|
{
|
|
3548
3548
|
"id": "prisma-orm",
|
|
3549
|
-
"description": "Use when modeling data or writing type-safe queries with Prisma ORM in TypeScript
|
|
3549
|
+
"description": "Use when modeling data or writing type-safe queries with Prisma ORM in TypeScript — `schema.prisma`, `prisma.config.ts`, the generated Prisma Client, and Prisma Migrate, including the v6 to v7 upgrade. NOT schema-as-TS with a SQL builder (that is `drizzle-orm`), NOT ORM-agnostic zero-downtime migration (that is `db-migrations`), NOT Postgres engine tuning (that is `postgresdb`).",
|
|
3550
3550
|
"tags": [
|
|
3551
3551
|
"prisma",
|
|
3552
3552
|
"prisma-orm",
|
|
@@ -3571,7 +3571,7 @@
|
|
|
3571
3571
|
},
|
|
3572
3572
|
{
|
|
3573
3573
|
"id": "procurement",
|
|
3574
|
-
"description": "Use when a small operator must
|
|
3574
|
+
"description": "Use when a small operator must choose what to buy and from whom: pick a supplier, write an RFI/RFQ/RFP that returns comparable bids, score quotes on total cost of ownership, negotiate price and payment terms, or judge single-source risk. NOT redlining the purchase agreement (that is `contracts`), NOT the price you charge customers (that is `pricing`), NOT stock once it lands (that is `inventory`).",
|
|
3575
3575
|
"tags": [
|
|
3576
3576
|
"procurement",
|
|
3577
3577
|
"sourcing",
|
|
@@ -3750,7 +3750,7 @@
|
|
|
3750
3750
|
},
|
|
3751
3751
|
{
|
|
3752
3752
|
"id": "react-native",
|
|
3753
|
-
"description": "Use when writing the JS/TS
|
|
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",
|
|
@@ -3884,7 +3884,7 @@
|
|
|
3884
3884
|
},
|
|
3885
3885
|
{
|
|
3886
3886
|
"id": "reporting",
|
|
3887
|
-
"description": "Use when
|
|
3887
|
+
"description": "Use when a recurring report must ship itself on a cadence — weekly digest, monthly exec pack, board pack — via a fetch→narrate→render→deliver pipeline with a schedule and a freshness gate. NOT a live view people slice (that is `dashboard`), NOT picking which KPIs to track (that is `kpi-framework`), NOT a one-off investigation (that is `analytics`).",
|
|
3888
3888
|
"tags": [
|
|
3889
3889
|
"reporting",
|
|
3890
3890
|
"automated-reports",
|
|
@@ -3994,7 +3994,7 @@
|
|
|
3994
3994
|
},
|
|
3995
3995
|
{
|
|
3996
3996
|
"id": "roast-me",
|
|
3997
|
-
"description": "Use when
|
|
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",
|
|
@@ -4013,7 +4013,7 @@
|
|
|
4013
4013
|
},
|
|
4014
4014
|
{
|
|
4015
4015
|
"id": "ruby",
|
|
4016
|
-
"description": "Use when writing
|
|
4016
|
+
"description": "Use when writing or refactoring plain Ruby outside Rails — scripts, CLIs, gems, libraries: Enumerable chains and blocks, module mixins and value objects, Bundler/gemspec packaging, whether metaprogramming earns its keep, Minitest or RSpec, Ruby 3.4/4.0 frozen-string hygiene. NOT Rails, ActiveRecord, or ActiveSupport idioms (that is `rails`).",
|
|
4017
4017
|
"tags": [
|
|
4018
4018
|
"ruby",
|
|
4019
4019
|
"gems",
|
|
@@ -4273,7 +4273,7 @@
|
|
|
4273
4273
|
},
|
|
4274
4274
|
{
|
|
4275
4275
|
"id": "shortform-ideation",
|
|
4276
|
-
"description": "Use when
|
|
4276
|
+
"description": "Use when a Reels/TikTok/Shorts account needs its next video ideas scored into a ranked backlog, grounded in its own performance log plus dated trending sounds, each bet logged so its outcome feeds the next batch. NOT scripting a chosen idea (that is `video-shorts`), NOT pillars or cadence (that is `shortform-strategy`), NOT packaging a finished cut (that is `shortform-packaging`).",
|
|
4277
4277
|
"tags": [
|
|
4278
4278
|
"shortform",
|
|
4279
4279
|
"reels",
|
|
@@ -4322,7 +4322,7 @@
|
|
|
4322
4322
|
},
|
|
4323
4323
|
{
|
|
4324
4324
|
"id": "shortform-strategy",
|
|
4325
|
-
"description": "Use when
|
|
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: github-actions
|
|
3
|
-
description: "Use when authoring or fixing GitHub Actions CI/CD — workflows under .github/workflows,
|
|
3
|
+
description: "Use when authoring or fixing GitHub Actions CI/CD — workflows under .github/workflows, triggers, job matrix, caching, token permissions, OIDC cloud deploys, environment gates, reusable workflows. NOT the Dockerfile or image build strategy (that is `docker`), NOT the branching model (that is `git-workflow`), NOT release readiness (that is `ship`)."
|
|
4
4
|
tags: [github-actions, ci-cd, workflows, oidc, caching]
|
|
5
5
|
recommends: [docker, git-workflow, ship, deployment, secure-coding, aws-essentials, vercel]
|
|
6
6
|
origin: risco
|
|
@@ -10,26 +10,16 @@ origin: risco
|
|
|
10
10
|
|
|
11
11
|
A workflow is config that runs on an event. Before you write a single step, decide three things: **which events** fire the workflow, **what permissions** the token needs, and **where credentials come from**. Get those wrong and you have a fast pipeline that leaks secrets or a secure one nobody can trigger. Everything after that — checkout, install, test, build — is just steps.
|
|
12
12
|
|
|
13
|
-
This skill owns the workflow layer
|
|
13
|
+
This skill owns the workflow layer — the `.github/workflows/*.yml` files, their triggers, jobs, matrix, caching, secret/OIDC handling, environments and deploy gates. Route the rest out:
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
-
|
|
22
|
-
|
|
23
|
-
- Killing redundant runs with `concurrency`; SHA-pinning actions for supply-chain safety.
|
|
24
|
-
|
|
25
|
-
## Not this when
|
|
26
|
-
|
|
27
|
-
- Authoring the `Dockerfile` or deciding the image build strategy → docker. The workflow may *call* `docker build`; designing the image is not this skill.
|
|
28
|
-
- Branching model, PR hygiene, merge vs rebase, commit conventions → git-workflow.
|
|
29
|
-
- Release readiness checklist, changelog, the shipping decision → `../ship/SKILL.md`.
|
|
30
|
-
- Blue/green, canary, rollback *theory* → `../deployment/SKILL.md`. Actions triggers the deploy; the strategy is deployment's.
|
|
31
|
-
- Choosing the host and its deploy primitives → `../vercel/SKILL.md` / `../aws-essentials/SKILL.md` / the host skill. Actions *triggers* the deploy; the host owns the target.
|
|
32
|
-
- Triaging SAST/CVE findings or threat-modeling → `../secure-coding/SKILL.md`. This skill runs a scanner *as a job*; it does not interpret the report.
|
|
15
|
+
| Not this skill | Goes to | Because |
|
|
16
|
+
| --- | --- | --- |
|
|
17
|
+
| The `Dockerfile`, image build strategy | `../docker/SKILL.md` | The workflow may *call* `docker build`; designing the image is not this skill. |
|
|
18
|
+
| Branching model, PR hygiene, merge vs rebase, commit conventions | `../git-workflow/SKILL.md` | That is the source-control model, not the CI config layer. |
|
|
19
|
+
| Release readiness checklist, changelog, the shipping decision | `../ship/SKILL.md` | Whether to release is a decision; this skill only automates the mechanics. |
|
|
20
|
+
| Blue/green, canary, rollback *theory* | `../deployment/SKILL.md` | Actions triggers the deploy; the strategy is deployment's. |
|
|
21
|
+
| Choosing the host and its deploy primitives | `../vercel/SKILL.md`, `../aws-essentials/SKILL.md` | Actions *triggers* the deploy; the host owns the target. |
|
|
22
|
+
| Triaging SAST/CVE findings, threat modeling | `../secure-coding/SKILL.md` | This skill runs a scanner *as a job*; it does not interpret the report. |
|
|
33
23
|
|
|
34
24
|
## Decide the trigger first
|
|
35
25
|
|
|
@@ -74,16 +64,15 @@ jobs:
|
|
|
74
64
|
with:
|
|
75
65
|
node-version: 22
|
|
76
66
|
cache: npm # built-in lockfile-keyed cache
|
|
77
|
-
- run: npm ci #
|
|
67
|
+
- run: npm ci # not install — fails on a stale lockfile, reproducible
|
|
78
68
|
- run: npm run lint
|
|
79
69
|
- run: npm test
|
|
80
70
|
```
|
|
81
71
|
|
|
82
|
-
|
|
83
|
-
- `permissions: contents: read` at the top — **default token permissions may be write
|
|
84
|
-
- `concurrency` + `cancel-in-progress: true` — without it
|
|
85
|
-
- `
|
|
86
|
-
- `actions/checkout@v6`, `setup-node@v6` — current majors (checkout v6.0.2, setup-node v6.4.0). Old majors run on Node 20, removed from runners in **September 2026**; JS actions are forced onto **Node 24** by default since June 2026. Upgrade to silence deprecation warnings and stay supported.
|
|
72
|
+
Why those three lines are not optional:
|
|
73
|
+
- `permissions: contents: read` at the top — **default token permissions may be write**, and a leaked write token can push tags or publish packages. Widen per job and only to what that job needs (`packages: write` to publish, `id-token: write` for OIDC), never at the top.
|
|
74
|
+
- `concurrency` + `cancel-in-progress: true` — without it every push to an open PR leaves the old run finishing and billing. One group per ref keeps at most one running + one pending.
|
|
75
|
+
- `actions/checkout@v6`, `setup-node@v6` are the current majors (checkout v6.0.2, setup-node v6.4.0). Old majors run on Node 20, removed from runners in **September 2026**; JS actions are forced onto **Node 24** by default since June 2026.
|
|
87
76
|
|
|
88
77
|
## Caching
|
|
89
78
|
|
|
@@ -183,7 +172,6 @@ Per-cloud trust setup (AWS role, GCP Workload Identity Federation, Azure federat
|
|
|
183
172
|
```
|
|
184
173
|
|
|
185
174
|
First-party `actions/*` and `github/*` may stay on a major tag (GitHub controls them), but pinning everything is the stronger posture.
|
|
186
|
-
- **Keep `GITHUB_TOKEN` read-only by default**, widen per job. Set `permissions: contents: read` at the top, then grant exactly what a job needs (`packages: write` to publish, `id-token: write` for OIDC).
|
|
187
175
|
- **`pull_request_target` + checking out the PR head = remote code execution with your secrets.** That trigger runs in the *base* repo's trusted context. If you then `checkout` `github.event.pull_request.head.sha`, you execute a fork's code with full secret access. Never combine them.
|
|
188
176
|
|
|
189
177
|
## Reuse: workflow vs composite action
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: linkedin-outreach
|
|
3
|
-
description: "Use when running LinkedIn
|
|
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
|
|
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
|
-
|
|
13
|
+
## Boundary
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
The sharpest line is against `../cold-outreach/SKILL.md`, and it splits on message-vs-system:
|
|
16
16
|
|
|
17
|
-
-
|
|
18
|
-
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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: market-research
|
|
3
|
-
description: "Use when
|
|
3
|
+
description: "Use when a MARKET as a whole needs a defensible picture — TAM/SAM/SOM sized top-down AND bottom-up until the two converge, cut into reachable segments with one named beachhead, demand proven real, and a dated source behind every figure. NOT profiling named rivals and their moves (that is `competitor-watch`), NOT building a list of accounts to sell to (that is `lead-gen`)."
|
|
4
4
|
tags: [market-research, tam-sam-som, market-sizing, segmentation, demand-signals, jtbd, opportunity]
|
|
5
5
|
recommends: [competitor-watch, lead-gen, pitch-deck, financial-model, pricing, forecasting, content-engine]
|
|
6
6
|
origin: risco
|
|
@@ -14,22 +14,19 @@ The test of this work is not the number. It is **whether someone else can audit
|
|
|
14
14
|
|
|
15
15
|
## The hard stop: no named entities
|
|
16
16
|
|
|
17
|
-
This skill produces understanding of a market **as a whole** — never a named buyer you can call today, never a named competitor dossier. The moment the ask turns into "who specifically," stop and route:
|
|
18
|
-
|
|
19
|
-
- "Give me 200 fintech accounts with the VP Eng contact" → that is a sales list → `../lead-gen/SKILL.md`.
|
|
20
|
-
- "Profile Competitor X — their tiers, gaps, recent launches" → that is a rival dossier → `../competitor-watch/SKILL.md`.
|
|
17
|
+
This skill produces understanding of a market **as a whole** — never a named buyer you can call today, never a named competitor dossier. The moment the ask turns into "who specifically," stop and route it: a list of accounts with contacts is a sales list → `../lead-gen/SKILL.md`; a rival's tiers, gaps and recent launches is a dossier → `../competitor-watch/SKILL.md`.
|
|
21
18
|
|
|
22
19
|
Competition is **only a force that shrinks SOM** in this memo, never a per-company teardown. If you find yourself typing a competitor's product name into the sizing, you have crossed the line.
|
|
23
20
|
|
|
24
21
|
## The three jobs
|
|
25
22
|
|
|
26
|
-
| Job | One governing rule |
|
|
27
|
-
| --- | --- |
|
|
28
|
-
| **Size it** | Never ship a number without a second, independent method |
|
|
29
|
-
| **Segment it** | Cut by the *job buyers hire you for*, then prove the slice is reachable AND distinct |
|
|
30
|
-
| **Read demand** | Secondary to form the hypothesis, primary to decide it |
|
|
23
|
+
| Job | One governing rule |
|
|
24
|
+
| --- | --- |
|
|
25
|
+
| **Size it** | Never ship a number without a second, independent method |
|
|
26
|
+
| **Segment it** | Cut by the *job buyers hire you for*, then prove the slice is reachable AND distinct |
|
|
27
|
+
| **Read demand** | Secondary to form the hypothesis, primary to decide it |
|
|
31
28
|
|
|
32
|
-
Do them in order — sizing tells you what to segment, segments tell you where to read demand. The artifact at the end ties all three together with a sources table.
|
|
29
|
+
Do them in order — sizing tells you what to segment, segments tell you where to read demand. The artifact at the end ties all three together with a sources table.
|
|
33
30
|
|
|
34
31
|
## Job 1 — Size it (triangulate or it's a guess)
|
|
35
32
|
|
|
@@ -39,7 +36,6 @@ Two instruments, two different errors. Run **both** and force them to agree.
|
|
|
39
36
|
| --- | --- | --- | --- | --- |
|
|
40
37
|
| **Top-down** | A published industry figure (Gartner/IDC/Statista, e.g. "$70B CRM market") | `industry size × your segment share %` | Fast, anchors to a named source | Inherits and amplifies the report's error; easy to hand-wave the share % |
|
|
41
38
|
| **Bottom-up** | Your customers + price | `ACV × number of ICP-fitting accounts` | Grounded in your own pricing; survives investor scrutiny | Slow; needs a real ICP and a real account count |
|
|
42
|
-
| **Triangulation** | BOTH of the above | Run both, force them to agree | The actual credibility signal | Skipping it — a lone number is a guess |
|
|
43
39
|
|
|
44
40
|
### The triangulation gate
|
|
45
41
|
|
|
@@ -58,7 +54,7 @@ Good Bottom-up: 960 ICP accounts × $50K ACV = $48M
|
|
|
58
54
|
- **SAM** — the slice your business model + geography can actually serve.
|
|
59
55
|
- **SOM** — the slice you can realistically capture near-term, given competition and sales capacity.
|
|
60
56
|
|
|
61
|
-
The funnel `SAM ≈ 20% of TAM`, `SOM ≈ 10% of SAM` is an **illustrative example to defend, not a constant to assume.** Derive SAM from your real reach (model, geography, language) and SOM from the competitive pressure and your sales capacity — then state why. Worked top-down and bottom-up calculations, the convergence math, and the full memo template live in `references/sizing-playbook.md`.
|
|
57
|
+
The funnel `SAM ≈ 20% of TAM`, `SOM ≈ 10% of SAM` is an **illustrative example to defend, not a constant to assume.** Derive SAM from your real reach (model, geography, language) and SOM from the competitive pressure and your sales capacity — then state why. Worked top-down and bottom-up calculations, the convergence math, the SAM-then-SOM derivation logic, and the full memo template with its sources/provenance schema live in `references/sizing-playbook.md`.
|
|
62
58
|
|
|
63
59
|
## Job 2 — Segment it (reachable AND distinct, with a named beachhead)
|
|
64
60
|
|
|
@@ -108,15 +104,15 @@ This is exactly what `scripts/verify.sh` checks. Keep it Markdown so the linter
|
|
|
108
104
|
| "$50B market" with no source or year | Cite the report + access date for every figure | Undated/unsourced = a guess; markets move fast |
|
|
109
105
|
| Top-down and bottom-up are 4× apart, pick the bigger | Re-check inputs until they converge ≤~20% | 3–5× divergence means broken assumptions, not a choice |
|
|
110
106
|
| Convert a Google Trends curve into a market size | Pair with absolute-volume tools before sizing | Trends is RELATIVE interest, never absolute volume |
|
|
111
|
-
| Segment by demographics alone | Add JTBD/behavioral; name a reachable beachhead | Demographics miss *why* people
|
|
107
|
+
| Segment by demographics alone | Add JTBD/behavioral; name a reachable beachhead | Demographics miss *why* people buy, and a market with no beachhead is one you can't enter |
|
|
112
108
|
| Treat SAM/SOM as fixed 20%/10% of TAM | Derive SAM from reach, SOM from competition + capacity | Those ratios are illustrative, not constants |
|
|
113
109
|
| Name specific competitor products in the memo | Treat competition as a SOM-shrinking force | A dossier is scope creep — hand to competitor-watch |
|
|
114
110
|
| List named target accounts as "the market" | Hand the segment to lead-gen to build the list | That is a sales list, not market understanding |
|
|
115
|
-
| All secondary data, no primary check on the decisive question | Use interviews/survey to fill the gap that decides | Stale or misaligned reports mislead the call |
|
|
111
|
+
| All secondary data, no primary check on the decisive question | Use interviews/survey to fill the gap that decides | Stale or misaligned reports mislead the call — you just confirm your own bias |
|
|
116
112
|
|
|
117
113
|
## Verify
|
|
118
114
|
|
|
119
|
-
The memo is a checkable artifact, so `scripts/verify.sh` lints a produced memo file (read-only — it never edits) for the three things that keep "market sizing" honest:
|
|
115
|
+
The memo is a checkable artifact, so `scripts/verify.sh` lints a produced memo file (read-only — it never edits) for the three things above that keep "market sizing" honest: the numeric `SOM ≤ SAM ≤ TAM` nesting, **both** methods plus a stated convergence/divergence note (one method alone fails), and a citation **and** date on every load-bearing figure.
|
|
120
116
|
|
|
121
117
|
```bash
|
|
122
118
|
./scripts/verify.sh # scan ./ for *memo*/*market*.md
|
|
@@ -125,7 +121,7 @@ The memo is a checkable artifact, so `scripts/verify.sh` lints a produced memo f
|
|
|
125
121
|
./scripts/verify.sh --strict # treat warnings as failures (CI gate)
|
|
126
122
|
```
|
|
127
123
|
|
|
128
|
-
It
|
|
124
|
+
It exits `0` on a clean or empty target — a missing memo is a skip, never a false failure.
|
|
129
125
|
|
|
130
126
|
## Hand-offs
|
|
131
127
|
|
|
@@ -138,8 +134,3 @@ The memo is the start of a chain. When it is done, route:
|
|
|
138
134
|
- Set the ACV the bottom-up math depends on → `../pricing/SKILL.md`.
|
|
139
135
|
- Project the demand series forward from history → `../forecasting/SKILL.md`.
|
|
140
136
|
- Act on the keyword/topic demand signals → `../content-engine/SKILL.md`.
|
|
141
|
-
|
|
142
|
-
## references/
|
|
143
|
-
|
|
144
|
-
- `references/sizing-playbook.md` — worked top-down and bottom-up calculations side by side, the triangulation convergence math (≤~15–20% credible, 3–5× broken), the SAM-then-SOM derivation logic, and the full market-memo template including the mandatory sources/provenance table schema.
|
|
145
|
-
- `references/demand-signals.md` — the signal-source catalog (Google Trends + its relative-volume caveat, Exploding Topics, Statista, government/industry data, primary survey/interview design) and a source-grading rubric for vetting secondary data by recency and credibility.
|
|
@@ -2,7 +2,7 @@ skill: market-research
|
|
|
2
2
|
|
|
3
3
|
should_trigger:
|
|
4
4
|
- prompt: "How big is the market for AI legal-research tools in Spain?"
|
|
5
|
-
why: Core sizing request
|
|
5
|
+
why: Core sizing request for a whole market — Job 1, the central case for this skill.
|
|
6
6
|
- prompt: "Sanity-check this TAM before our seed raise — does $2B hold up?"
|
|
7
7
|
why: Non-obvious; cross-checking an existing number IS the triangulation core, not deck design or modeling.
|
|
8
8
|
- prompt: "Cut our addressable market into segments and tell me which one to attack first."
|
|
@@ -12,9 +12,9 @@ should_trigger:
|
|
|
12
12
|
- prompt: "Should we size this top-down from the industry report or bottom-up from our customers?"
|
|
13
13
|
why: Non-obvious; the top-down-vs-bottom-up choice and triangulation gate are this skill's method, not a generic data pull.
|
|
14
14
|
- prompt: "¿Qué tamaño tiene el mercado de software de reservas para restaurantes y cuál es el TAM/SAM/SOM?"
|
|
15
|
-
why: Spanish
|
|
15
|
+
why: Spanish-language ask for the full sizing job — TAM/SAM/SOM explicitly requested.
|
|
16
16
|
- prompt: "Quina mida té el mercat d'apps de reserves i hi ha demanda real?"
|
|
17
|
-
why: Catalan
|
|
17
|
+
why: Catalan-language ask combining market size and demand validation — both core jobs.
|
|
18
18
|
|
|
19
19
|
should_not_trigger:
|
|
20
20
|
- prompt: "Profile Competitor X — their pricing tiers, feature gaps, and recent product launches."
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: meeting-notes
|
|
3
|
-
description: "Use when a meeting
|
|
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
|
-
##
|
|
15
|
+
## Not this skill
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
-
|
|
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
|
|
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.
|