@twentylabs/ai-os-registry 1.0.0
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/LICENSE +21 -0
- package/README.md +14 -0
- package/knowledge-slots/audience-icp.yaml +26 -0
- package/knowledge-slots/brand-voice.yaml +24 -0
- package/knowledge-slots/budget.yaml +18 -0
- package/knowledge-slots/channel-registry.yaml +20 -0
- package/knowledge-slots/data-access.yaml +26 -0
- package/knowledge-slots/design-surface.yaml +37 -0
- package/knowledge-slots/domain-playbook.yaml +23 -0
- package/knowledge-slots/flow-map.yaml +22 -0
- package/knowledge-slots/market-landscape.yaml +20 -0
- package/knowledge-slots/measurement-plan.yaml +28 -0
- package/knowledge-slots/metrics-catalog.yaml +28 -0
- package/knowledge-slots/offer-catalog.yaml +23 -0
- package/knowledge-slots/prior-findings.yaml +21 -0
- package/knowledge-slots/product-strategy.yaml +25 -0
- package/knowledge-slots/store-review.yaml +37 -0
- package/knowledge-slots/test-surface.yaml +29 -0
- package/knowledge-slots/tracker-surface.yaml +32 -0
- package/migrations.json +7 -0
- package/package.json +33 -0
- package/policies/decision-log.yaml +16 -0
- package/policies/english-identifiers.yaml +10 -0
- package/policies/github-account.yaml +19 -0
- package/policies/mcp-env-only.yaml +12 -0
- package/policies/no-gh-auth-switch.yaml +23 -0
- package/policies/no-product-code-edits.yaml +12 -0
- package/policies/worktree-discipline.yaml +14 -0
- package/profiles/marketing.yaml +24 -0
- package/profiles/software.yaml +31 -0
- package/roles/business-analyst.md +47 -0
- package/roles/business-analyst.yaml +43 -0
- package/roles/code-reviewer.md +28 -0
- package/roles/code-reviewer.yaml +29 -0
- package/roles/content-marketer.md +34 -0
- package/roles/content-marketer.yaml +39 -0
- package/roles/designer.md +48 -0
- package/roles/designer.yaml +48 -0
- package/roles/growth-marketer.md +42 -0
- package/roles/growth-marketer.yaml +44 -0
- package/roles/market-researcher.md +47 -0
- package/roles/market-researcher.yaml +41 -0
- package/roles/product-analyst.md +52 -0
- package/roles/product-analyst.yaml +40 -0
- package/roles/product-owner.md +57 -0
- package/roles/product-owner.yaml +46 -0
- package/roles/project-manager.md +44 -0
- package/roles/project-manager.yaml +44 -0
- package/roles/qa-engineer.md +40 -0
- package/roles/qa-engineer.yaml +48 -0
- package/skills/ab-testing/skill.yaml +13 -0
- package/skills/ad-creative/skill.yaml +13 -0
- package/skills/ads/skill.yaml +13 -0
- package/skills/ads-review/SKILL.md +70 -0
- package/skills/ads-review/references/channel-folders.md +28 -0
- package/skills/ads-review/skill.yaml +7 -0
- package/skills/ai-seo/skill.yaml +13 -0
- package/skills/analytics/skill.yaml +13 -0
- package/skills/app-store-compliance/SKILL.md +51 -0
- package/skills/app-store-compliance/references/review-checklist.md +46 -0
- package/skills/app-store-compliance/references/update-eligibility.md +23 -0
- package/skills/app-store-compliance/skill.yaml +9 -0
- package/skills/aso/skill.yaml +13 -0
- package/skills/aso-ops/SKILL.md +41 -0
- package/skills/aso-ops/references/field-rules.md +15 -0
- package/skills/aso-ops/skill.yaml +7 -0
- package/skills/attribution/skill.yaml +13 -0
- package/skills/churn-prevention/skill.yaml +13 -0
- package/skills/co-marketing/skill.yaml +13 -0
- package/skills/cold-email/skill.yaml +13 -0
- package/skills/community-marketing/skill.yaml +13 -0
- package/skills/competitor-profiling/skill.yaml +13 -0
- package/skills/competitors/skill.yaml +13 -0
- package/skills/content-pipeline/SKILL.md +39 -0
- package/skills/content-pipeline/skill.yaml +6 -0
- package/skills/content-strategy/skill.yaml +13 -0
- package/skills/conversion-audit/SKILL.md +67 -0
- package/skills/conversion-audit/references/funnel-playbook.md +80 -0
- package/skills/conversion-audit/references/journey-stations.md +57 -0
- package/skills/conversion-audit/references/report-template.md +60 -0
- package/skills/conversion-audit/skill.yaml +7 -0
- package/skills/copy-editing/skill.yaml +13 -0
- package/skills/copywriting/skill.yaml +13 -0
- package/skills/cro/skill.yaml +13 -0
- package/skills/cross-repo-contract-review/SKILL.md +39 -0
- package/skills/cross-repo-contract-review/skill.yaml +6 -0
- package/skills/customer-research/skill.yaml +13 -0
- package/skills/directory-submissions/skill.yaml +13 -0
- package/skills/emails/skill.yaml +13 -0
- package/skills/events/skill.yaml +12 -0
- package/skills/free-tools/skill.yaml +12 -0
- package/skills/growth-review/SKILL.md +44 -0
- package/skills/growth-review/skill.yaml +7 -0
- package/skills/image/skill.yaml +13 -0
- package/skills/influencer-marketing/skill.yaml +13 -0
- package/skills/launch/skill.yaml +13 -0
- package/skills/lead-magnets/skill.yaml +12 -0
- package/skills/lifecycle-campaign/SKILL.md +37 -0
- package/skills/lifecycle-campaign/references/campaign-design.md +35 -0
- package/skills/lifecycle-campaign/skill.yaml +6 -0
- package/skills/marketing-council/skill.yaml +13 -0
- package/skills/marketing-ideas/skill.yaml +13 -0
- package/skills/marketing-loops/skill.yaml +12 -0
- package/skills/marketing-plan/skill.yaml +13 -0
- package/skills/marketing-psychology/skill.yaml +12 -0
- package/skills/offers/skill.yaml +13 -0
- package/skills/onboarding/skill.yaml +13 -0
- package/skills/partner-outreach/SKILL.md +41 -0
- package/skills/partner-outreach/skill.yaml +6 -0
- package/skills/paywalls/skill.yaml +13 -0
- package/skills/popups/skill.yaml +13 -0
- package/skills/pricing/skill.yaml +13 -0
- package/skills/product-marketing/skill.yaml +13 -0
- package/skills/programmatic-seo/skill.yaml +13 -0
- package/skills/prospecting/skill.yaml +13 -0
- package/skills/public-relations/skill.yaml +13 -0
- package/skills/referrals/skill.yaml +12 -0
- package/skills/revops/skill.yaml +12 -0
- package/skills/sales-enablement/skill.yaml +13 -0
- package/skills/schema/skill.yaml +13 -0
- package/skills/seo-audit/skill.yaml +13 -0
- package/skills/signup/skill.yaml +13 -0
- package/skills/site-architecture/skill.yaml +13 -0
- package/skills/sms/skill.yaml +13 -0
- package/skills/social/skill.yaml +13 -0
- package/skills/video/skill.yaml +13 -0
- package/taxonomy.yaml +46 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: Skill
|
|
3
|
+
metadata:
|
|
4
|
+
id: cro
|
|
5
|
+
spec:
|
|
6
|
+
capabilities: [ conversion-optimization ]
|
|
7
|
+
source:
|
|
8
|
+
github: coreyhaines31/marketingskills
|
|
9
|
+
path: skills/cro
|
|
10
|
+
ref: dda3841f0b294e01e93b1541486beefbfab0915e
|
|
11
|
+
hash: sha256-bd310ba737a84fbefd985164e2ad1f0cc49b4bcdd7b655e4abf597654ef2bfc2
|
|
12
|
+
license: MIT
|
|
13
|
+
description: When the user wants to optimize, improve, or increase conversions on any marketing page or form — including homepage, landing pages, pricing pages, feature pages, lead capture forms, or contact forms.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cross-repo-contract-review
|
|
3
|
+
description: "Use when a change touches something shared across repositories — an API payload, enum, event name, feature flag, deep link or schema — to check the other side exists and the deploy order is safe before a pull request. NOT for general code quality or changes confined to one repository."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Cross-repository contract review
|
|
7
|
+
|
|
8
|
+
One question: **does this change complete its cross-repository contract, or ship half of one?**
|
|
9
|
+
|
|
10
|
+
Continuous integration runs per repository and cannot see a sibling; a reviewer reads one diff. The failure is specific and always silent: a value the consumer has never heard of renders with the wrong fallback; a limit the client does not know degrades to a bundled default; a field nobody sends reads as empty forever. Nothing errors. The feature just quietly does something else.
|
|
11
|
+
|
|
12
|
+
## 1. Find the contracts the diff touches
|
|
13
|
+
|
|
14
|
+
Read the project's contract documentation if it exists (the flow-map knowledge file says where; a `docs/cross-repo-contracts.md` or similar). Then scan the diff for the usual shapes:
|
|
15
|
+
|
|
16
|
+
- request or response payloads, DTOs, GraphQL or protobuf schemas;
|
|
17
|
+
- enums and closed value sets shared with another side (statuses, plan ids, notification types);
|
|
18
|
+
- analytics event and property names — a shared namespace across clients and server;
|
|
19
|
+
- feature flags and remote-config keys;
|
|
20
|
+
- deep-link routes and push payloads;
|
|
21
|
+
- database tables read by another service, and migrations they depend on.
|
|
22
|
+
|
|
23
|
+
A change that touches none of these needs no contract review; say so in one line.
|
|
24
|
+
|
|
25
|
+
## 2. For each touched contract, answer in order
|
|
26
|
+
|
|
27
|
+
1. **Is the other side needed?** A rename of an internal helper needs nothing elsewhere; a new payload field or enum value does. Say which, and why.
|
|
28
|
+
2. **Does the other side exist yet?** Look in the sibling repository's trunk, its other branches and worktrees, and its open pull requests. Name what you found, with paths. If the sibling is not checked out locally, say so and name what would settle it.
|
|
29
|
+
3. **What is the deploy order?** Usually the producer must be live before the consumer that depends on it ships — the backend before the app build, the schema before the code that reads it. State which side lands first and what happens if the order is reversed ("the app falls back to the bundled default" is an answer; "unknown" is not). If one side ships through a store review, its timing is not under your control — say so.
|
|
30
|
+
|
|
31
|
+
## 3. Output
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
<contract> — complete | incomplete | one-sided by design
|
|
35
|
+
evidence: <one sentence, with paths>
|
|
36
|
+
deploy order: <which side first; what happens if reversed>
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
If everything is complete, say so in one line — do not manufacture findings. Do not review code style or anything a per-repository review already covers; this skill exists for the seam between repositories and nothing else.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: Skill
|
|
3
|
+
metadata:
|
|
4
|
+
id: customer-research
|
|
5
|
+
spec:
|
|
6
|
+
capabilities: [ customer-research ]
|
|
7
|
+
source:
|
|
8
|
+
github: coreyhaines31/marketingskills
|
|
9
|
+
path: skills/customer-research
|
|
10
|
+
ref: dda3841f0b294e01e93b1541486beefbfab0915e
|
|
11
|
+
hash: sha256-e490ee991f90111e86a355d5f9421679de45c07d7d749545e52ad104da457917
|
|
12
|
+
license: MIT
|
|
13
|
+
description: When the user wants to conduct, analyze, or synthesize customer research.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: Skill
|
|
3
|
+
metadata:
|
|
4
|
+
id: directory-submissions
|
|
5
|
+
spec:
|
|
6
|
+
capabilities: [ seo ]
|
|
7
|
+
source:
|
|
8
|
+
github: coreyhaines31/marketingskills
|
|
9
|
+
path: skills/directory-submissions
|
|
10
|
+
ref: dda3841f0b294e01e93b1541486beefbfab0915e
|
|
11
|
+
hash: sha256-0728a9d1a2bda534ebe8daabfeb36084f81283f7edcac2a7af22f0e7a022adc3
|
|
12
|
+
license: MIT
|
|
13
|
+
description: When the user wants to submit their product to startup, SaaS, AI, agent, MCP, no-code, or review directories for backlinks, domain rating, and discovery.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: Skill
|
|
3
|
+
metadata:
|
|
4
|
+
id: emails
|
|
5
|
+
spec:
|
|
6
|
+
capabilities: [ email-marketing, lifecycle-marketing ]
|
|
7
|
+
source:
|
|
8
|
+
github: coreyhaines31/marketingskills
|
|
9
|
+
path: skills/emails
|
|
10
|
+
ref: dda3841f0b294e01e93b1541486beefbfab0915e
|
|
11
|
+
hash: sha256-b4d684c0ac134be5daceb393006da587d8b40698dc692fbc6bf62b5741926b62
|
|
12
|
+
license: MIT
|
|
13
|
+
description: When the user wants to create or optimize an email sequence, drip campaign, automated email flow, or lifecycle email program.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: Skill
|
|
3
|
+
metadata:
|
|
4
|
+
id: events
|
|
5
|
+
spec:
|
|
6
|
+
source:
|
|
7
|
+
github: coreyhaines31/marketingskills
|
|
8
|
+
path: skills/events
|
|
9
|
+
ref: dda3841f0b294e01e93b1541486beefbfab0915e
|
|
10
|
+
hash: sha256-a899fc0c4ac64f947df3aee08f1d5a799fed867f1603a794193b33cbd7063b49
|
|
11
|
+
license: MIT
|
|
12
|
+
description: When the user wants to plan, run, sponsor, speak at, or get pipeline from events — webinars, conferences, trade shows, meetups, dinners, workshops, virtual summits, or user conferences.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: Skill
|
|
3
|
+
metadata:
|
|
4
|
+
id: free-tools
|
|
5
|
+
spec:
|
|
6
|
+
source:
|
|
7
|
+
github: coreyhaines31/marketingskills
|
|
8
|
+
path: skills/free-tools
|
|
9
|
+
ref: dda3841f0b294e01e93b1541486beefbfab0915e
|
|
10
|
+
hash: sha256-fa4972a940ffaeec405602839501e541029f22c9d3b20e54ba3b4429661b7513
|
|
11
|
+
license: MIT
|
|
12
|
+
description: When the user wants to plan, evaluate, or build a free tool for marketing purposes — lead generation, SEO value, or brand awareness.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: growth-review
|
|
3
|
+
description: "Use when the product has real users and the question is why they drop off, do not activate, do not pay or churn — reading funnels, cohorts, retention and session replays, or checking unit economics before spending more. NOT when there is no data yet (conversion-audit) or for ad platform decisions (ads-review)."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Growth review
|
|
7
|
+
|
|
8
|
+
Real behaviour, real funnels, issues backed by numbers. Read, never change: no product code, no analytics flags, no experiments started without the owner's approval. The output is a report and proposed issues for the code repository, each carrying its table of numbers.
|
|
9
|
+
|
|
10
|
+
**No data, stop.** Under roughly 50 users through the step in question, every rate is noise. Say "not enough sample" and switch to the conversion-audit skill, which reads the journey instead of the numbers.
|
|
11
|
+
|
|
12
|
+
## Funnels are defined, not invented
|
|
13
|
+
|
|
14
|
+
Use the funnels, event names and person properties the project's measurement plan (or analytics documentation) defines, with their exact step order. Respect the dates it marks as "do not compare across" — an event whose meaning changed in a release cannot be trended through that release. If no funnel is defined for the question, define it in the report first and propose adding it to the measurement plan.
|
|
15
|
+
|
|
16
|
+
Typical funnels to have defined: activation (first open → first value), account creation (before or after first value), core loop (unit → next unit), feature adoption (start → complete per feature), revenue (limit → paywall → tap → purchase), retention (message → open → return; day 1, day 7).
|
|
17
|
+
|
|
18
|
+
## Segment before concluding
|
|
19
|
+
|
|
20
|
+
An aggregate rate hides everything. Always break down by the registered segmentation properties — onboarding path, stated goal, plan, acquisition source, app version (to separate behaviour changes by release).
|
|
21
|
+
|
|
22
|
+
## Process
|
|
23
|
+
|
|
24
|
+
1. Read the measurement plan and the latest review in the repository.
|
|
25
|
+
2. Pick one funnel. Pull per-step numbers for about 30 days, segmented. Record the sample size at every step.
|
|
26
|
+
3. Find the **step that loses the most people** — by people lost, not by percentage.
|
|
27
|
+
4. Watch at least five session replays at that step before forming a hypothesis (humans watch replays; describe what was seen, not what you guess). Numbers say where; replays say why.
|
|
28
|
+
5. Read the code behind that screen so each hypothesis rests on what really exists.
|
|
29
|
+
6. Propose: one hypothesis per issue, with the numbers table, the segment, replay references, and how the fix will be measured after shipping. If the project enabled external skills such as `onboarding`, `paywalls`, `churn-prevention` or `ab-testing`, use them to shape the proposal.
|
|
30
|
+
|
|
31
|
+
## Unit economics — quarterly, or before any spend increase
|
|
32
|
+
|
|
33
|
+
Ad reviews look at acquisition cost; someone has to look at the variable cost of serving a user. Where usage has marginal cost (AI calls, media processing, messaging), compute per month and per cohort (free versus paid): the cost of serving an active user, revenue net of store fees, estimated lifetime value from renewal rates, and acquisition cost from the cross-channel ads review. End with one sentence: **is lifetime value greater than acquisition plus serving cost, and by what margin?** If free users cost more than expected, the lever is limits or caching — a product issue — not a price increase.
|
|
34
|
+
|
|
35
|
+
## Output
|
|
36
|
+
|
|
37
|
+
Conclusion in three sentences with sample sizes · funnel table by step × segment · the biggest loss and what the replays showed · findings ranked by people lost · **"not a problem — don't fix"** (behaviour that looks wrong but is understood) · proposed issues awaiting approval. Save reports that outlive the conversation as `docs/reviews/YYYY-MM-DD-growth.md`.
|
|
38
|
+
|
|
39
|
+
## Traps
|
|
40
|
+
|
|
41
|
+
- Events that count only when the app is open (a "notification received" event is not the number sent).
|
|
42
|
+
- Same event name, different meaning across a release.
|
|
43
|
+
- A paywall-viewed event is not a user who wants to buy — read its trigger property before computing rates.
|
|
44
|
+
- Retention is computed by install date, not calendar date.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: Skill
|
|
3
|
+
metadata:
|
|
4
|
+
id: image
|
|
5
|
+
spec:
|
|
6
|
+
capabilities: [ content-marketing ]
|
|
7
|
+
source:
|
|
8
|
+
github: coreyhaines31/marketingskills
|
|
9
|
+
path: skills/image
|
|
10
|
+
ref: dda3841f0b294e01e93b1541486beefbfab0915e
|
|
11
|
+
hash: sha256-07ab077c3b6d9265413b9e0bd069bf93df996c2706875d98ad3b856029810c24
|
|
12
|
+
license: MIT
|
|
13
|
+
description: When the user wants to create, generate, edit, or optimize images for marketing — blog heroes, social graphics, product mockups, profile banners, listing visuals, or brand assets.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: Skill
|
|
3
|
+
metadata:
|
|
4
|
+
id: influencer-marketing
|
|
5
|
+
spec:
|
|
6
|
+
capabilities: [ partnerships ]
|
|
7
|
+
source:
|
|
8
|
+
github: coreyhaines31/marketingskills
|
|
9
|
+
path: skills/influencer-marketing
|
|
10
|
+
ref: dda3841f0b294e01e93b1541486beefbfab0915e
|
|
11
|
+
hash: sha256-813f4b100b2004d75b7073d7ecaa424a1898fae4afa1e330f0354959c4a01236
|
|
12
|
+
license: MIT
|
|
13
|
+
description: When the user wants to run influencer, creator, or ambassador partnerships to promote their product — finding and vetting partners, structuring deals, briefing creators, disclosure compliance, and measuring ROI.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: Skill
|
|
3
|
+
metadata:
|
|
4
|
+
id: launch
|
|
5
|
+
spec:
|
|
6
|
+
capabilities: [ product-marketing ]
|
|
7
|
+
source:
|
|
8
|
+
github: coreyhaines31/marketingskills
|
|
9
|
+
path: skills/launch
|
|
10
|
+
ref: dda3841f0b294e01e93b1541486beefbfab0915e
|
|
11
|
+
hash: sha256-5ecfaad381803fe7a75d858ca5a9ccb9c7299f5f424e4c13d7ab0cbae3ec63b5
|
|
12
|
+
license: MIT
|
|
13
|
+
description: When the user wants to plan a product launch, feature announcement, or release strategy.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: Skill
|
|
3
|
+
metadata:
|
|
4
|
+
id: lead-magnets
|
|
5
|
+
spec:
|
|
6
|
+
source:
|
|
7
|
+
github: coreyhaines31/marketingskills
|
|
8
|
+
path: skills/lead-magnets
|
|
9
|
+
ref: dda3841f0b294e01e93b1541486beefbfab0915e
|
|
10
|
+
hash: sha256-d4dfad9fe953b737b2668c04f547c4724ab9c41d8bda599ec4b88dbfc86ebc42
|
|
11
|
+
license: MIT
|
|
12
|
+
description: When the user wants to create, plan, or optimize a lead magnet for email capture or lead generation.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: lifecycle-campaign
|
|
3
|
+
description: "Use when designing, launching or reading a lifecycle campaign — push, email, in-app message, personal offer, discount code, gift or win-back — as cohort, moment, message, kill switch and holdout measurement. NOT for paid ads or messages the product already sends by default."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Lifecycle campaign
|
|
7
|
+
|
|
8
|
+
A campaign = cohort · moment · message · kill switch · measurement. This skill joins the product's existing parts (push types, in-app messages, offers, discount codes, gifts, referrals) into campaigns with a cohort and a measurement — and it **sends nothing itself**: it writes the design, the owner switches it on.
|
|
9
|
+
|
|
10
|
+
If the project enabled external skills such as `emails`, `sms`, `churn-prevention` or `offers`, use them for message craft.
|
|
11
|
+
|
|
12
|
+
## Read what the product already does
|
|
13
|
+
|
|
14
|
+
Before designing, read the product's scheduled and triggered messages (reminder jobs, default push types, onboarding emails). A "campaign" that duplicates a default message — say, a day-2 reminder the product already sends every evening — is not a campaign; it is a default that is already running. Never message the same person twice about the same thing.
|
|
15
|
+
|
|
16
|
+
Know the plumbing's limits before promising anything: whether a message can deep-link to a specific screen, whether a message carries a campaign identifier (without it, opens cannot be separated from the default message of the same type), and whether any holdout mechanism exists. Missing plumbing is an issue for the code repository — written into the design as "pending", never pretended.
|
|
17
|
+
|
|
18
|
+
## The design — `docs/campaigns/YYYY-MM-DD-<slug>.md`
|
|
19
|
+
|
|
20
|
+
All six sections, or it is not a campaign yet. Template: [campaign design](references/campaign-design.md).
|
|
21
|
+
|
|
22
|
+
1. **Cohort** — defined with events and properties that really exist in the measurement plan, with its current size.
|
|
23
|
+
2. **Moment** — when it sends, counted from which event. One campaign, one moment.
|
|
24
|
+
3. **Channel and message** — which channel and message type, the copy in the project's locale, one call to action, the deep link.
|
|
25
|
+
4. **Kill switch** — what turns it off within minutes without a build (an active flag, an end date, a remote flag). No kill switch, no launch.
|
|
26
|
+
5. **Measurement** — the open event, the target behaviour, and a **holdout** (10–20% of the cohort, assigned by a stable hash of the user id) so the campaign is compared with doing nothing. Without a holdout, compare with the previous 14 days and call it weaker evidence.
|
|
27
|
+
6. **Limits** — frequency cap across all message types (for example at most one push per day in total), never upsell paid users on what they have, never send a discount to someone in a trial, never stack a new campaign on a cohort another campaign is running on.
|
|
28
|
+
|
|
29
|
+
Rank candidate campaigns by what needs no code first.
|
|
30
|
+
|
|
31
|
+
## launch
|
|
32
|
+
|
|
33
|
+
The owner switches it on. Record the launch date, the cohort size at launch and the readout date in the design file.
|
|
34
|
+
|
|
35
|
+
## review — after 14 days
|
|
36
|
+
|
|
37
|
+
Table: cohort size · sent · opened · target behaviour (treated) · target behaviour (holdout) · difference · sample size. Under about 100 per arm, call it a directional signal. A campaign that does not beat its holdout after two cycles is switched off, with the reason written into the design file.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Campaign — <slug>
|
|
2
|
+
|
|
3
|
+
Status: design | live | stopped (<reason>). Owner: <who switches it on>. Launched: <date>. Readout: <date>.
|
|
4
|
+
|
|
5
|
+
## 1. Cohort
|
|
6
|
+
Definition (events and properties from the measurement plan, with the exact names):
|
|
7
|
+
Size today (query and date):
|
|
8
|
+
Excluded (paid users, users in trial, users in another running campaign):
|
|
9
|
+
|
|
10
|
+
## 2. Moment
|
|
11
|
+
Sends when, counted from which event, in which timezone:
|
|
12
|
+
|
|
13
|
+
## 3. Channel and message
|
|
14
|
+
Channel and message type:
|
|
15
|
+
Copy (project locale), one call to action:
|
|
16
|
+
Deep link and where it lands:
|
|
17
|
+
Plumbing needed that does not exist yet (with the issue link), or "none":
|
|
18
|
+
|
|
19
|
+
## 4. Kill switch
|
|
20
|
+
What turns it off without a build, and who can flip it:
|
|
21
|
+
|
|
22
|
+
## 5. Measurement
|
|
23
|
+
Open event:
|
|
24
|
+
Target behaviour:
|
|
25
|
+
Holdout: <percent>, assigned by <hash of user id> — or "pending: <issue>", comparing with the previous 14 days instead:
|
|
26
|
+
|
|
27
|
+
## 6. Limits
|
|
28
|
+
Frequency cap across all messages:
|
|
29
|
+
Who never receives it:
|
|
30
|
+
|
|
31
|
+
## Readout
|
|
32
|
+
| Cohort | Sent | Opened | Target (treated) | Target (holdout) | Difference | N per arm |
|
|
33
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
34
|
+
|
|
35
|
+
Decision: keep / change one thing / stop — with the reason.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: Skill
|
|
3
|
+
metadata:
|
|
4
|
+
id: marketing-council
|
|
5
|
+
spec:
|
|
6
|
+
capabilities: [ marketing-strategy ]
|
|
7
|
+
source:
|
|
8
|
+
github: coreyhaines31/marketingskills
|
|
9
|
+
path: skills/marketing-council
|
|
10
|
+
ref: dda3841f0b294e01e93b1541486beefbfab0915e
|
|
11
|
+
hash: sha256-65e5e3d0a1ba684fe6c65582316813e4b58dfec4836a1ea6d4fa2aa2f34ef0c7
|
|
12
|
+
license: MIT
|
|
13
|
+
description: When the user wants multiple expert perspectives on a marketing question — a simulated board of advisors staffed by legendary marketers (Seth Godin, David Ogilvy, Eugene Schwartz, April Dunford, Rory Sutherland, Alex Hormozi, Byron Sharp, and more).
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: Skill
|
|
3
|
+
metadata:
|
|
4
|
+
id: marketing-ideas
|
|
5
|
+
spec:
|
|
6
|
+
capabilities: [ marketing-strategy ]
|
|
7
|
+
source:
|
|
8
|
+
github: coreyhaines31/marketingskills
|
|
9
|
+
path: skills/marketing-ideas
|
|
10
|
+
ref: dda3841f0b294e01e93b1541486beefbfab0915e
|
|
11
|
+
hash: sha256-db26167ed1c3a677cb3f68db89a08bd46a67d81395a3787573c88b11ea7595a8
|
|
12
|
+
license: MIT
|
|
13
|
+
description: When the user needs marketing ideas, inspiration, or strategies for their SaaS or software product.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: Skill
|
|
3
|
+
metadata:
|
|
4
|
+
id: marketing-loops
|
|
5
|
+
spec:
|
|
6
|
+
source:
|
|
7
|
+
github: coreyhaines31/marketingskills
|
|
8
|
+
path: skills/marketing-loops
|
|
9
|
+
ref: dda3841f0b294e01e93b1541486beefbfab0915e
|
|
10
|
+
hash: sha256-f2b7c7676df9a641c49f6220ea141da740f0f4f8a570ec673e19f48487535591
|
|
11
|
+
license: MIT
|
|
12
|
+
description: When the user wants to set up a recurring, self-running marketing workflow — a repeatable loop an AI agent runs on a cadence (weekly, daily, on a trigger) rather than a one-off task.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: Skill
|
|
3
|
+
metadata:
|
|
4
|
+
id: marketing-plan
|
|
5
|
+
spec:
|
|
6
|
+
capabilities: [ marketing-strategy ]
|
|
7
|
+
source:
|
|
8
|
+
github: coreyhaines31/marketingskills
|
|
9
|
+
path: skills/marketing-plan
|
|
10
|
+
ref: dda3841f0b294e01e93b1541486beefbfab0915e
|
|
11
|
+
hash: sha256-731799cf2adf6335018ed30034deea2764b46501a686d685da3b47283b05f22f
|
|
12
|
+
license: MIT
|
|
13
|
+
description: When the user needs a comprehensive marketing plan for a client, a company they advise, or their own product.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: Skill
|
|
3
|
+
metadata:
|
|
4
|
+
id: marketing-psychology
|
|
5
|
+
spec:
|
|
6
|
+
source:
|
|
7
|
+
github: coreyhaines31/marketingskills
|
|
8
|
+
path: skills/marketing-psychology
|
|
9
|
+
ref: dda3841f0b294e01e93b1541486beefbfab0915e
|
|
10
|
+
hash: sha256-0c6e9cd49c6273972995bad8d194ad1bf5d37cbbf1feec91f7b147b8489979f9
|
|
11
|
+
license: MIT
|
|
12
|
+
description: When the user wants to apply psychological principles, mental models, or behavioral science to marketing.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: Skill
|
|
3
|
+
metadata:
|
|
4
|
+
id: offers
|
|
5
|
+
spec:
|
|
6
|
+
capabilities: [ pricing ]
|
|
7
|
+
source:
|
|
8
|
+
github: coreyhaines31/marketingskills
|
|
9
|
+
path: skills/offers
|
|
10
|
+
ref: dda3841f0b294e01e93b1541486beefbfab0915e
|
|
11
|
+
hash: sha256-0ac599e8517969cc571f9b10403a8f9b100afe3facbb459ae481c61818cb5bf9
|
|
12
|
+
license: MIT
|
|
13
|
+
description: When the user wants to design, construct, or improve an offer — the thing they actually sell — including value framing, bonus stacking, guarantee design, scarcity/urgency, naming, and payment structure.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: Skill
|
|
3
|
+
metadata:
|
|
4
|
+
id: onboarding
|
|
5
|
+
spec:
|
|
6
|
+
capabilities: [ conversion-optimization ]
|
|
7
|
+
source:
|
|
8
|
+
github: coreyhaines31/marketingskills
|
|
9
|
+
path: skills/onboarding
|
|
10
|
+
ref: dda3841f0b294e01e93b1541486beefbfab0915e
|
|
11
|
+
hash: sha256-e2bf9a7fa3dd95af973e2b5ce72060f28620380c82fed9831e5e18ef9e2cb952
|
|
12
|
+
license: MIT
|
|
13
|
+
description: When the user wants to optimize post-signup onboarding, user activation, first-run experience, or time-to-value.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: partner-outreach
|
|
3
|
+
description: "Use when acquiring users through partners or communities — building a partner list, writing a pitch or follow-up for one partner, seeding a group with gifts or codes, and measuring what each partner brings. NOT for paid ads or mass email campaigns."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Partner outreach
|
|
7
|
+
|
|
8
|
+
Partners (schools, clubs, agencies, communities, complementary products, creators) can bring users that no paid channel can buy — people who arrive together and are nudged by someone they trust. This skill runs that channel: who to approach, what to say to each, how to seed them, and what each one brings.
|
|
9
|
+
|
|
10
|
+
It **drafts; the owner sends.** Never send a message, create a gift or code, or contact anyone on the owner's behalf without approval for that specific action. If the project enabled the external `cold-email`, `co-marketing` or `community-marketing` skills, use them for craft.
|
|
11
|
+
|
|
12
|
+
## Three jobs
|
|
13
|
+
|
|
14
|
+
| Job | Output | Recorded in |
|
|
15
|
+
| --- | --- | --- |
|
|
16
|
+
| **list** | prioritized partners with a status each | `outreach/partners.md` — a registry; rows are never deleted |
|
|
17
|
+
| **pitch / follow-up** | one message for one partner | `outreach/messages/<slug>-YYYY-MM-DD.md` |
|
|
18
|
+
| **seed** | a group given access (gift, code, trial), measured at day 7 and day 30 | `outreach/partners.md` and `outreach/seeds/<slug>.md` |
|
|
19
|
+
|
|
20
|
+
Build the list from sources the owner provides or public directories — never invent partners or contact details.
|
|
21
|
+
|
|
22
|
+
## Pitch
|
|
23
|
+
|
|
24
|
+
1. **Promise what the partner cares about**, not what end users care about — less work for them, results they can show, no cost, no disruption to what they already do.
|
|
25
|
+
2. **One call to action** — a short call, or "send me a list of N people to give access to". Never both.
|
|
26
|
+
3. **Say only what the product does today.** Check the offer catalog and the brand voice's allowed claims; never promise a dashboard, report or integration that does not exist.
|
|
27
|
+
4. **One message per recipient**, addressed to them, in the channel they actually use (email, messaging app, social, phone). No visible templates, no bulk sends.
|
|
28
|
+
|
|
29
|
+
## Seed a group
|
|
30
|
+
|
|
31
|
+
1. Create the partner's identifier (code, link, or group) so its users can be told apart — record it in the registry.
|
|
32
|
+
2. Prepare the gift or access for each person, tagged with the partner and group so redemptions join back. Check that delivery (email sending, links) works in that environment before creating anything.
|
|
33
|
+
3. Give the partner a one-paragraph instruction for their people.
|
|
34
|
+
4. **Measure at day 7 and day 30**: given, claimed, linked to the partner, activated, paid — from the ledger and analytics, with the queries saved in the seed file. Add the partner contact's own words; the first few groups are qualitative data worth more than any number.
|
|
35
|
+
|
|
36
|
+
## Rules
|
|
37
|
+
|
|
38
|
+
- Status ladder per partner: not contacted → sent → met → seeding → running → stopped (reason). One contact person per partner.
|
|
39
|
+
- Follow up after about five working days, at most twice.
|
|
40
|
+
- No revenue share or partner-specific discounts until the first groups show real use.
|
|
41
|
+
- If measuring a partner requires a product change (a missing property, a code field), open an issue in the code repository before the second seed.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: Skill
|
|
3
|
+
metadata:
|
|
4
|
+
id: paywalls
|
|
5
|
+
spec:
|
|
6
|
+
capabilities: [ conversion-optimization ]
|
|
7
|
+
source:
|
|
8
|
+
github: coreyhaines31/marketingskills
|
|
9
|
+
path: skills/paywalls
|
|
10
|
+
ref: dda3841f0b294e01e93b1541486beefbfab0915e
|
|
11
|
+
hash: sha256-30e22764b3a12a441ef4d8d63db3a00496ead2cf458f1affdd23fdaa06058068
|
|
12
|
+
license: MIT
|
|
13
|
+
description: When the user wants to create or optimize in-app paywalls, upgrade screens, upsell modals, or feature gates.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: Skill
|
|
3
|
+
metadata:
|
|
4
|
+
id: popups
|
|
5
|
+
spec:
|
|
6
|
+
capabilities: [ conversion-optimization ]
|
|
7
|
+
source:
|
|
8
|
+
github: coreyhaines31/marketingskills
|
|
9
|
+
path: skills/popups
|
|
10
|
+
ref: dda3841f0b294e01e93b1541486beefbfab0915e
|
|
11
|
+
hash: sha256-0cd007f3348d5f131d39231c50366afe73698e788de61ec9f28f5f9601a7d260
|
|
12
|
+
license: MIT
|
|
13
|
+
description: When the user wants to create or optimize popups, modals, overlays, slide-ins, or banners for conversion purposes.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: Skill
|
|
3
|
+
metadata:
|
|
4
|
+
id: pricing
|
|
5
|
+
spec:
|
|
6
|
+
capabilities: [ pricing ]
|
|
7
|
+
source:
|
|
8
|
+
github: coreyhaines31/marketingskills
|
|
9
|
+
path: skills/pricing
|
|
10
|
+
ref: dda3841f0b294e01e93b1541486beefbfab0915e
|
|
11
|
+
hash: sha256-65d09cb320f50db4d1d2a122cc98bc3a2e63e96d1c97fdfa30027afd5a8f0ef7
|
|
12
|
+
license: MIT
|
|
13
|
+
description: When the user wants help with pricing decisions, packaging, or monetization strategy.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: Skill
|
|
3
|
+
metadata:
|
|
4
|
+
id: product-marketing
|
|
5
|
+
spec:
|
|
6
|
+
capabilities: [ product-marketing ]
|
|
7
|
+
source:
|
|
8
|
+
github: coreyhaines31/marketingskills
|
|
9
|
+
path: skills/product-marketing
|
|
10
|
+
ref: dda3841f0b294e01e93b1541486beefbfab0915e
|
|
11
|
+
hash: sha256-6c7af501853ff47787d4f16a2e21abb6699cb7ad21696b43938735a299b920ff
|
|
12
|
+
license: MIT
|
|
13
|
+
description: When the user wants to create or update their product marketing context document.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: Skill
|
|
3
|
+
metadata:
|
|
4
|
+
id: programmatic-seo
|
|
5
|
+
spec:
|
|
6
|
+
capabilities: [ seo ]
|
|
7
|
+
source:
|
|
8
|
+
github: coreyhaines31/marketingskills
|
|
9
|
+
path: skills/programmatic-seo
|
|
10
|
+
ref: dda3841f0b294e01e93b1541486beefbfab0915e
|
|
11
|
+
hash: sha256-189f2d99eed46c3f1512327b39450e0706f3ce0f93acd597d517db2b9680574e
|
|
12
|
+
license: MIT
|
|
13
|
+
description: When the user wants to create SEO-driven pages at scale using templates and data.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: Skill
|
|
3
|
+
metadata:
|
|
4
|
+
id: prospecting
|
|
5
|
+
spec:
|
|
6
|
+
capabilities: [ outreach ]
|
|
7
|
+
source:
|
|
8
|
+
github: coreyhaines31/marketingskills
|
|
9
|
+
path: skills/prospecting
|
|
10
|
+
ref: dda3841f0b294e01e93b1541486beefbfab0915e
|
|
11
|
+
hash: sha256-e905a5fbbef91f7f277cd7244dcc1d3f71122a05a5e7d6a4cb817fadbff28cfa
|
|
12
|
+
license: MIT
|
|
13
|
+
description: When the user wants to find, qualify, and build a list of prospects to reach out to — across B2B SaaS, general B2B, or local small businesses.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: Skill
|
|
3
|
+
metadata:
|
|
4
|
+
id: public-relations
|
|
5
|
+
spec:
|
|
6
|
+
capabilities: [ public-relations ]
|
|
7
|
+
source:
|
|
8
|
+
github: coreyhaines31/marketingskills
|
|
9
|
+
path: skills/public-relations
|
|
10
|
+
ref: dda3841f0b294e01e93b1541486beefbfab0915e
|
|
11
|
+
hash: sha256-2e39ac345669dc024c306bc043986351567663d788085cc901f4efb708baf9ee
|
|
12
|
+
license: MIT
|
|
13
|
+
description: When the user wants help with public relations, earned media, press coverage, journalist outreach, or media strategy (not pull requests).
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: Skill
|
|
3
|
+
metadata:
|
|
4
|
+
id: referrals
|
|
5
|
+
spec:
|
|
6
|
+
source:
|
|
7
|
+
github: coreyhaines31/marketingskills
|
|
8
|
+
path: skills/referrals
|
|
9
|
+
ref: dda3841f0b294e01e93b1541486beefbfab0915e
|
|
10
|
+
hash: sha256-cbe4fc26bef22f34b75d7172e6e1e9c506c8c9b8980886b846c5cfedffe4f1ef
|
|
11
|
+
license: MIT
|
|
12
|
+
description: When the user wants to create, optimize, or analyze a referral program, affiliate program, or word-of-mouth strategy.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: Skill
|
|
3
|
+
metadata:
|
|
4
|
+
id: revops
|
|
5
|
+
spec:
|
|
6
|
+
source:
|
|
7
|
+
github: coreyhaines31/marketingskills
|
|
8
|
+
path: skills/revops
|
|
9
|
+
ref: dda3841f0b294e01e93b1541486beefbfab0915e
|
|
10
|
+
hash: sha256-92cd674be3dfb669aece6a840cb8c877c200bdca423c8cdf877decb061401036
|
|
11
|
+
license: MIT
|
|
12
|
+
description: When the user wants help with revenue operations, lead lifecycle management, or marketing-to-sales handoff processes.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: Skill
|
|
3
|
+
metadata:
|
|
4
|
+
id: sales-enablement
|
|
5
|
+
spec:
|
|
6
|
+
capabilities: [ sales-enablement ]
|
|
7
|
+
source:
|
|
8
|
+
github: coreyhaines31/marketingskills
|
|
9
|
+
path: skills/sales-enablement
|
|
10
|
+
ref: dda3841f0b294e01e93b1541486beefbfab0915e
|
|
11
|
+
hash: sha256-f3d559ed39b3925e743e9f773cea122197784e3451d258b9db8489c2e5d4700d
|
|
12
|
+
license: MIT
|
|
13
|
+
description: When the user wants to create sales collateral, pitch decks, one-pagers, objection handling docs, or demo scripts.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: Skill
|
|
3
|
+
metadata:
|
|
4
|
+
id: schema
|
|
5
|
+
spec:
|
|
6
|
+
capabilities: [ seo ]
|
|
7
|
+
source:
|
|
8
|
+
github: coreyhaines31/marketingskills
|
|
9
|
+
path: skills/schema
|
|
10
|
+
ref: dda3841f0b294e01e93b1541486beefbfab0915e
|
|
11
|
+
hash: sha256-a716b5e4c0874631e1bbd5ba3d0e4916617bf3f12f5dd295c5394f56992cfbac
|
|
12
|
+
license: MIT
|
|
13
|
+
description: When the user wants to add, fix, or optimize schema markup and structured data on their site.
|