@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.
Files changed (127) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +14 -0
  3. package/knowledge-slots/audience-icp.yaml +26 -0
  4. package/knowledge-slots/brand-voice.yaml +24 -0
  5. package/knowledge-slots/budget.yaml +18 -0
  6. package/knowledge-slots/channel-registry.yaml +20 -0
  7. package/knowledge-slots/data-access.yaml +26 -0
  8. package/knowledge-slots/design-surface.yaml +37 -0
  9. package/knowledge-slots/domain-playbook.yaml +23 -0
  10. package/knowledge-slots/flow-map.yaml +22 -0
  11. package/knowledge-slots/market-landscape.yaml +20 -0
  12. package/knowledge-slots/measurement-plan.yaml +28 -0
  13. package/knowledge-slots/metrics-catalog.yaml +28 -0
  14. package/knowledge-slots/offer-catalog.yaml +23 -0
  15. package/knowledge-slots/prior-findings.yaml +21 -0
  16. package/knowledge-slots/product-strategy.yaml +25 -0
  17. package/knowledge-slots/store-review.yaml +37 -0
  18. package/knowledge-slots/test-surface.yaml +29 -0
  19. package/knowledge-slots/tracker-surface.yaml +32 -0
  20. package/migrations.json +7 -0
  21. package/package.json +33 -0
  22. package/policies/decision-log.yaml +16 -0
  23. package/policies/english-identifiers.yaml +10 -0
  24. package/policies/github-account.yaml +19 -0
  25. package/policies/mcp-env-only.yaml +12 -0
  26. package/policies/no-gh-auth-switch.yaml +23 -0
  27. package/policies/no-product-code-edits.yaml +12 -0
  28. package/policies/worktree-discipline.yaml +14 -0
  29. package/profiles/marketing.yaml +24 -0
  30. package/profiles/software.yaml +31 -0
  31. package/roles/business-analyst.md +47 -0
  32. package/roles/business-analyst.yaml +43 -0
  33. package/roles/code-reviewer.md +28 -0
  34. package/roles/code-reviewer.yaml +29 -0
  35. package/roles/content-marketer.md +34 -0
  36. package/roles/content-marketer.yaml +39 -0
  37. package/roles/designer.md +48 -0
  38. package/roles/designer.yaml +48 -0
  39. package/roles/growth-marketer.md +42 -0
  40. package/roles/growth-marketer.yaml +44 -0
  41. package/roles/market-researcher.md +47 -0
  42. package/roles/market-researcher.yaml +41 -0
  43. package/roles/product-analyst.md +52 -0
  44. package/roles/product-analyst.yaml +40 -0
  45. package/roles/product-owner.md +57 -0
  46. package/roles/product-owner.yaml +46 -0
  47. package/roles/project-manager.md +44 -0
  48. package/roles/project-manager.yaml +44 -0
  49. package/roles/qa-engineer.md +40 -0
  50. package/roles/qa-engineer.yaml +48 -0
  51. package/skills/ab-testing/skill.yaml +13 -0
  52. package/skills/ad-creative/skill.yaml +13 -0
  53. package/skills/ads/skill.yaml +13 -0
  54. package/skills/ads-review/SKILL.md +70 -0
  55. package/skills/ads-review/references/channel-folders.md +28 -0
  56. package/skills/ads-review/skill.yaml +7 -0
  57. package/skills/ai-seo/skill.yaml +13 -0
  58. package/skills/analytics/skill.yaml +13 -0
  59. package/skills/app-store-compliance/SKILL.md +51 -0
  60. package/skills/app-store-compliance/references/review-checklist.md +46 -0
  61. package/skills/app-store-compliance/references/update-eligibility.md +23 -0
  62. package/skills/app-store-compliance/skill.yaml +9 -0
  63. package/skills/aso/skill.yaml +13 -0
  64. package/skills/aso-ops/SKILL.md +41 -0
  65. package/skills/aso-ops/references/field-rules.md +15 -0
  66. package/skills/aso-ops/skill.yaml +7 -0
  67. package/skills/attribution/skill.yaml +13 -0
  68. package/skills/churn-prevention/skill.yaml +13 -0
  69. package/skills/co-marketing/skill.yaml +13 -0
  70. package/skills/cold-email/skill.yaml +13 -0
  71. package/skills/community-marketing/skill.yaml +13 -0
  72. package/skills/competitor-profiling/skill.yaml +13 -0
  73. package/skills/competitors/skill.yaml +13 -0
  74. package/skills/content-pipeline/SKILL.md +39 -0
  75. package/skills/content-pipeline/skill.yaml +6 -0
  76. package/skills/content-strategy/skill.yaml +13 -0
  77. package/skills/conversion-audit/SKILL.md +67 -0
  78. package/skills/conversion-audit/references/funnel-playbook.md +80 -0
  79. package/skills/conversion-audit/references/journey-stations.md +57 -0
  80. package/skills/conversion-audit/references/report-template.md +60 -0
  81. package/skills/conversion-audit/skill.yaml +7 -0
  82. package/skills/copy-editing/skill.yaml +13 -0
  83. package/skills/copywriting/skill.yaml +13 -0
  84. package/skills/cro/skill.yaml +13 -0
  85. package/skills/cross-repo-contract-review/SKILL.md +39 -0
  86. package/skills/cross-repo-contract-review/skill.yaml +6 -0
  87. package/skills/customer-research/skill.yaml +13 -0
  88. package/skills/directory-submissions/skill.yaml +13 -0
  89. package/skills/emails/skill.yaml +13 -0
  90. package/skills/events/skill.yaml +12 -0
  91. package/skills/free-tools/skill.yaml +12 -0
  92. package/skills/growth-review/SKILL.md +44 -0
  93. package/skills/growth-review/skill.yaml +7 -0
  94. package/skills/image/skill.yaml +13 -0
  95. package/skills/influencer-marketing/skill.yaml +13 -0
  96. package/skills/launch/skill.yaml +13 -0
  97. package/skills/lead-magnets/skill.yaml +12 -0
  98. package/skills/lifecycle-campaign/SKILL.md +37 -0
  99. package/skills/lifecycle-campaign/references/campaign-design.md +35 -0
  100. package/skills/lifecycle-campaign/skill.yaml +6 -0
  101. package/skills/marketing-council/skill.yaml +13 -0
  102. package/skills/marketing-ideas/skill.yaml +13 -0
  103. package/skills/marketing-loops/skill.yaml +12 -0
  104. package/skills/marketing-plan/skill.yaml +13 -0
  105. package/skills/marketing-psychology/skill.yaml +12 -0
  106. package/skills/offers/skill.yaml +13 -0
  107. package/skills/onboarding/skill.yaml +13 -0
  108. package/skills/partner-outreach/SKILL.md +41 -0
  109. package/skills/partner-outreach/skill.yaml +6 -0
  110. package/skills/paywalls/skill.yaml +13 -0
  111. package/skills/popups/skill.yaml +13 -0
  112. package/skills/pricing/skill.yaml +13 -0
  113. package/skills/product-marketing/skill.yaml +13 -0
  114. package/skills/programmatic-seo/skill.yaml +13 -0
  115. package/skills/prospecting/skill.yaml +13 -0
  116. package/skills/public-relations/skill.yaml +13 -0
  117. package/skills/referrals/skill.yaml +12 -0
  118. package/skills/revops/skill.yaml +12 -0
  119. package/skills/sales-enablement/skill.yaml +13 -0
  120. package/skills/schema/skill.yaml +13 -0
  121. package/skills/seo-audit/skill.yaml +13 -0
  122. package/skills/signup/skill.yaml +13 -0
  123. package/skills/site-architecture/skill.yaml +13 -0
  124. package/skills/sms/skill.yaml +13 -0
  125. package/skills/social/skill.yaml +13 -0
  126. package/skills/video/skill.yaml +13 -0
  127. package/taxonomy.yaml +46 -0
@@ -0,0 +1,46 @@
1
+ # Review checklist
2
+
3
+ Check what applies; report only applicable findings. Locate each item at the paths the store-review knowledge file records for this stack (native project, cross-platform config, plugin-generated manifests).
4
+
5
+ ## Privacy and data
6
+ - Every data type collected, by the app and by each SDK, is declared in the store's privacy disclosure (App Store privacy labels, Google Play Data safety).
7
+ - iOS privacy manifest present where the app or its SDKs use required-reason APIs; tracking declared and the tracking-permission prompt shown before any tracking.
8
+ - A privacy policy is linked in the listing and reachable in the app.
9
+ - No device fingerprinting; identifiers used only as declared.
10
+
11
+ ## Permissions
12
+ - Every permission the build requests (including those added by plugins) has a specific purpose string — not "needs camera".
13
+ - Permissions are requested in context, after the user understands why, not all at launch.
14
+ - Android: only permissions the app uses; sensitive ones (background location, SMS, call log, all-files access, exact alarms, accessibility) have an approved use case and declaration.
15
+
16
+ ## Purchases and subscriptions
17
+ - Digital goods and features are sold through the store's billing system; no links or prompts to pay elsewhere unless a current, applicable entitlement allows it.
18
+ - The paywall states price, billing period, renewal, trial length and what happens after the trial.
19
+ - Restore purchases is visible and works; entitlements are validated (preferably on the server) and survive reinstall.
20
+ - Nothing labelled "free" requires payment for its core function.
21
+
22
+ ## Accounts and sign-in
23
+ - If an account is required, the app explains why, and the reviewer has a working demo account or demo mode.
24
+ - If accounts can be created, they can be deleted from inside the app, and deletion really deletes (or the retention is explained).
25
+ - iOS: offering third-party social sign-in requires an equivalent privacy-preserving option such as Sign in with Apple; token revocation on deletion where applicable.
26
+
27
+ ## Content and safety
28
+ - User-generated content has filtering, reporting, blocking, published contact information and an effective removal path.
29
+ - Medical, financial, safety and other regulated claims are framed and substantiated.
30
+ - Age rating answers match the actual content.
31
+ - Messaging features (push, live activities, notifications) are not used for unsolicited promotion without consent and an off switch.
32
+
33
+ ## Technical quality
34
+ - No crash on launch or on the main paths; network errors and offline states are handled.
35
+ - No placeholder screens, dead ends or "coming soon" features in the build under review.
36
+ - Minimum OS and target API levels meet the store's current requirements (Google Play enforces a target SDK floor).
37
+
38
+ ## Reviewability
39
+ - The core value is reachable without special setup, or the review notes explain the setup.
40
+ - Review notes cover: steps to key features, account placeholders, unusual permissions, how to test purchases, any hardware or region dependency.
41
+
42
+ ## Severity
43
+ - **P0** — very likely rejection, or the app does not work for the reviewer.
44
+ - **P1** — a common rejection reason or serious reviewer friction.
45
+ - **P2** — risky pattern or unclear compliance.
46
+ - **P3** — polish.
@@ -0,0 +1,23 @@
1
+ # Over-the-air update eligibility
2
+
3
+ For each item headed for an over-the-air update (a code-push, a hot patch, a remotely loaded bundle), decide one of: **update-safe**, **store build required**, or **unclear** — with the reason.
4
+
5
+ ## Store build required
6
+ - A new screen, tab or feature, or a feature turned on that the reviewed build did not offer.
7
+ - A change to the app's primary purpose or how it is presented.
8
+ - New data collection, new tracking, or new sharing of data with a third party.
9
+ - New permissions, entitlements, SDKs or native code.
10
+ - Changes to purchase flows, prices shown, or what a plan includes.
11
+ - Anything that changes the answers in the store's privacy disclosure or age rating.
12
+
13
+ ## Usually update-safe
14
+ - Bug fixes that restore reviewed behaviour.
15
+ - Copy and translation fixes that do not change claims.
16
+ - Performance improvements.
17
+ - Content updates of the kind the reviewed build was designed to load.
18
+
19
+ ## Unclear — escalate to the owner
20
+ - Feature flags that reveal code present in the reviewed build but hidden at review time.
21
+ - Remote configuration that changes paywall behaviour or limits.
22
+
23
+ Measure each item against the project's own update policy (recorded in the store-review knowledge file) and both stores' rules on downloaded executable code. When the project's policy is stricter, it wins.
@@ -0,0 +1,9 @@
1
+ apiVersion: ai-os.twentylabs.dev/v1
2
+ kind: Skill
3
+ metadata:
4
+ id: app-store-compliance
5
+ spec:
6
+ capabilities: [ store-compliance, quality-assurance ]
7
+ domains: [ mobile-app ]
8
+ requiredKnowledge:
9
+ - store-review
@@ -0,0 +1,13 @@
1
+ apiVersion: ai-os.twentylabs.dev/v1
2
+ kind: Skill
3
+ metadata:
4
+ id: aso
5
+ spec:
6
+ capabilities: [ app-store-optimization ]
7
+ source:
8
+ github: coreyhaines31/marketingskills
9
+ path: skills/aso
10
+ ref: dda3841f0b294e01e93b1541486beefbfab0915e
11
+ hash: sha256-314414f430ca07494fd771bc24828ec5d1da79f643f0ee7b9f0d2004111da080
12
+ license: MIT
13
+ description: When the user wants to audit or optimize an App Store or Google Play listing.
@@ -0,0 +1,41 @@
1
+ ---
2
+ name: aso-ops
3
+ description: "Use when auditing, changing or reading the results of an App Store or Google Play listing — title, subtitle, keywords, descriptions, screenshots, preview video, listing experiments, ratings prompts. Keeps the live listing and a changelog in the repository. NOT for paid ads (ads-review) or in-app copy."
4
+ ---
5
+
6
+ # Store listing operations
7
+
8
+ The store keeps the numbers (impressions, product page views, conversion to install); the repository keeps **the copy that is live and the reason for every change**. Never change a listing without a changelog line, and never change two things at once on the same store — the result would be unreadable.
9
+
10
+ This skill has no access to store consoles and never signs in. It edits the repository's copy of the listing and the owner pastes the change into the console. If the project enabled the external `aso` skill, use it for the audit checklist; this skill runs the loop around it.
11
+
12
+ ## Repository layout — `aso/`
13
+
14
+ | Path | What it is |
15
+ | --- | --- |
16
+ | `appstore/<locale>.md` | title, subtitle, keywords, promotional text, description — **as live** |
17
+ | `play/<locale>.md` | title, short description, full description — **as live** |
18
+ | `screenshots/README.md` | order, caption and reason for each screenshot; sources in the assets folder |
19
+ | `changelog.md` | date · store · field · before → after · reason · readout date |
20
+ | `experiments.md` | listing experiments: hypothesis, variable, start date, result |
21
+ | `audits/ASO_YYYY-MM-DD.md` | dated audits |
22
+
23
+ ## Three modes
24
+
25
+ **audit** — If the live listing is not yet in the repository, capture it first: the repository must reflect what runs before anything is proposed. Some fields can be fetched from public pages; others (keywords, subtitle, promotional text, short description, screenshot captions) exist only in the console — ask the owner to copy them and record which fields were hand-copied and when. An empty changelog means "never audited", not "nothing to do". **Mandatory step: put the same field from both stores side by side** — a language or positioning mismatch between stores is a finding that per-store review never sees. A read-only audit is answered in chat; write the file when the owner wants to keep it.
26
+
27
+ **change** — one field at a time. Edit the live file, add the changelog line with its reason and a readout date at least 14 days out, and hand the new text to the owner to paste. Field rules: [field rules](references/field-rules.md).
28
+
29
+ **review** — on the readout date, compare conversion to install for the 14 days before and after, split by source (search, browse, referrals). Record the result on the changelog line. A difference under about one percentage point on a few hundred page views is noise — write "not yet readable", not "no effect".
30
+
31
+ ## Experiments
32
+
33
+ Use the stores' native experiments (Play store listing experiments; App Store product page optimization) — one variable per experiment, logged in `experiments.md`. Custom product pages can be matched to ad keywords or audiences; coordinate with ads-review.
34
+
35
+ ## Ratings
36
+
37
+ Ask for a rating in the product **after a moment of achievement**, never after an error, at most once per platform-recommended interval. If the product has no prompt, open an issue in the code repository — ratings volume is a ranking factor and social proof.
38
+
39
+ ## Not this skill
40
+
41
+ Paid ads (ads-review), landing pages (conversion-audit), in-app copy (designer).
@@ -0,0 +1,15 @@
1
+ # Field rules
2
+
3
+ | Field | Rule |
4
+ | --- | --- |
5
+ | Title and subtitle (App Store) | Do not repeat words across the two — each word is indexed once. Lead with the category term people search for. |
6
+ | Keywords (App Store, 100 characters) | No words already in title or subtitle; commas without spaces; no competitor brand names; singular or plural, not both. |
7
+ | Promotional text (App Store) | Not indexed; use it for timely messages — it can change without a new build. |
8
+ | Short description (Play, 80 characters) | Use all of it; include a commercial keyword; no slogans. |
9
+ | Full description (Play, 4000 characters) | The field Play indexes most strongly. Describe only features that exist in the current release; repeat the main terms naturally. |
10
+ | Screenshots | The first one states the outcome, never a login screen. Captions carry the words people search for (App Store indexes caption text). Show the real product. |
11
+ | Preview video | First seconds show the core action; it autoplays muted, so it must read without sound. |
12
+ | Age rating | Review the questionnaire before changing anything that touches it; a higher rating hides the app from filtered audiences. |
13
+ | Localization | The primary market's language is complete in both stores before secondary languages are polished. |
14
+
15
+ Every claim in a listing must be true of the current release; check the offer catalog and brand voice for what may be promised.
@@ -0,0 +1,7 @@
1
+ apiVersion: ai-os.twentylabs.dev/v1
2
+ kind: Skill
3
+ metadata:
4
+ id: aso-ops
5
+ spec:
6
+ capabilities: [app-store-optimization]
7
+ domains: [mobile-app]
@@ -0,0 +1,13 @@
1
+ apiVersion: ai-os.twentylabs.dev/v1
2
+ kind: Skill
3
+ metadata:
4
+ id: attribution
5
+ spec:
6
+ capabilities: [ measurement, growth-analytics ]
7
+ source:
8
+ github: coreyhaines31/marketingskills
9
+ path: skills/attribution
10
+ ref: dda3841f0b294e01e93b1541486beefbfab0915e
11
+ hash: sha256-6a10ba3a3211b3855919a318c4c86bc5d38c9719a8fd1aa94841b3fabed944d6
12
+ license: MIT
13
+ description: When the user wants to figure out which marketing actually drives conversions and revenue, choose or interpret an attribution model, or reconcile conflicting numbers across tools.
@@ -0,0 +1,13 @@
1
+ apiVersion: ai-os.twentylabs.dev/v1
2
+ kind: Skill
3
+ metadata:
4
+ id: churn-prevention
5
+ spec:
6
+ capabilities: [ lifecycle-marketing ]
7
+ source:
8
+ github: coreyhaines31/marketingskills
9
+ path: skills/churn-prevention
10
+ ref: dda3841f0b294e01e93b1541486beefbfab0915e
11
+ hash: sha256-1f31620b1dd963e4e5f05e1b679728fcafd27ee94e9e15fff7e873a024400fef
12
+ license: MIT
13
+ description: When the user wants to reduce churn, build cancellation flows, set up save offers, recover failed payments, or implement retention strategies.
@@ -0,0 +1,13 @@
1
+ apiVersion: ai-os.twentylabs.dev/v1
2
+ kind: Skill
3
+ metadata:
4
+ id: co-marketing
5
+ spec:
6
+ capabilities: [ partnerships ]
7
+ source:
8
+ github: coreyhaines31/marketingskills
9
+ path: skills/co-marketing
10
+ ref: dda3841f0b294e01e93b1541486beefbfab0915e
11
+ hash: sha256-df6eaf0ca1188c6aff00b9565f39b544dd28ecb670116feaba4207a21890625c
12
+ license: MIT
13
+ description: When the user wants to find co-marketing partners, plan joint campaigns, or brainstorm partnership opportunities.
@@ -0,0 +1,13 @@
1
+ apiVersion: ai-os.twentylabs.dev/v1
2
+ kind: Skill
3
+ metadata:
4
+ id: cold-email
5
+ spec:
6
+ capabilities: [ outreach, email-marketing ]
7
+ source:
8
+ github: coreyhaines31/marketingskills
9
+ path: skills/cold-email
10
+ ref: dda3841f0b294e01e93b1541486beefbfab0915e
11
+ hash: sha256-f01ed70cd8b0692f035d46c2e32e0b7c12f2ecebd11462edfa37a237fca02b07
12
+ license: MIT
13
+ description: Write B2B cold emails and follow-up sequences that get replies. Use when the user wants to write cold outreach emails, prospecting emails, cold email campaigns, sales development emails, or SDR emails.
@@ -0,0 +1,13 @@
1
+ apiVersion: ai-os.twentylabs.dev/v1
2
+ kind: Skill
3
+ metadata:
4
+ id: community-marketing
5
+ spec:
6
+ capabilities: [ community ]
7
+ source:
8
+ github: coreyhaines31/marketingskills
9
+ path: skills/community-marketing
10
+ ref: dda3841f0b294e01e93b1541486beefbfab0915e
11
+ hash: sha256-f2bd696508760504056a765c412d5a6e92ed7bf825bb3f14e3f42734a7e11c74
12
+ license: MIT
13
+ description: Build and leverage online communities to drive product growth and brand loyalty.
@@ -0,0 +1,13 @@
1
+ apiVersion: ai-os.twentylabs.dev/v1
2
+ kind: Skill
3
+ metadata:
4
+ id: competitor-profiling
5
+ spec:
6
+ capabilities: [ competitive-analysis ]
7
+ source:
8
+ github: coreyhaines31/marketingskills
9
+ path: skills/competitor-profiling
10
+ ref: dda3841f0b294e01e93b1541486beefbfab0915e
11
+ hash: sha256-c909983201a9a87721dfcec6191b8f540dfade9103feac8e2a1e3034467f50d9
12
+ license: MIT
13
+ description: When the user wants to research, profile, or analyze competitors from their URLs.
@@ -0,0 +1,13 @@
1
+ apiVersion: ai-os.twentylabs.dev/v1
2
+ kind: Skill
3
+ metadata:
4
+ id: competitors
5
+ spec:
6
+ capabilities: [ competitive-analysis, seo ]
7
+ source:
8
+ github: coreyhaines31/marketingskills
9
+ path: skills/competitors
10
+ ref: dda3841f0b294e01e93b1541486beefbfab0915e
11
+ hash: sha256-abbddb9ee2abc27960ac74d0ad74b6ca30a0166dbd2aff451b5e7da8aaa1c2b4
12
+ license: MIT
13
+ description: When the user wants to create competitor comparison or alternative pages for SEO and buyer-facing use.
@@ -0,0 +1,39 @@
1
+ ---
2
+ name: content-pipeline
3
+ description: "Use when producing or scheduling organic content — short video, social posts, long-form — from hook bank to script to publishing queue to weekly review, with a measurable link per piece. NOT for paid ad creatives (ads-review) or partner outreach (partner-outreach)."
4
+ ---
5
+
6
+ # Content pipeline
7
+
8
+ From hook to publishing queue, with a measurable link on every piece. Organic content is the cheapest early channel and the one that reveals **which message** the audience responds to before money is spent amplifying it. So every piece (1) ties to a real feature, (2) carries its own measurable link, and (3) is recorded with its hook and result so the hook bank grows from evidence.
9
+
10
+ If the project enabled external skills such as `social`, `video` or `content-strategy`, use them for the craft; this skill runs the pipeline.
11
+
12
+ ## Repository layout — `content/`
13
+
14
+ | Path | What it is |
15
+ | --- | --- |
16
+ | `hooks.md` | hook bank: hook · angle · feature · platform · results once published |
17
+ | `angles.md` | the content angles, each tied to a real feature and why it fits the audience |
18
+ | `scripts/YYYY-MM-DD-<slug>.md` | script: hook · body · call to action · caption · tags · link |
19
+ | `queue.md` | publishing queue: date · platform · script · link · status |
20
+ | `reviews/YYYY-MM-DD.md` | weekly review: top and bottom pieces by views and by attributed signups or installs |
21
+
22
+ ## Angles
23
+
24
+ Keep three to five angles, each tied to a feature the current release really has, with the reason it resonates with the audience (from the audience file). Before writing, check the release's real capabilities and feature flags, and the brand voice's allowed and forbidden claims: content may promise only what the current build does. Demo footage uses the real product and a demo account, on a build where the feature works — one frame is a promise.
25
+
26
+ ## Weekly loop
27
+
28
+ 1. **ideas** — new hooks into the hook bank, each on one angle. A hook states an outcome or a mistake in the first seconds and does not lead with the product name.
29
+ 2. **script** — choose a few; write short scripts: hook, one idea, the real product on screen, one call to action. Caption in the project's locale, a handful of relevant tags.
30
+ 3. **link** — every script gets its own tracking link (deferred deep link or UTM-tagged link with a campaign parameter equal to the slug), placed where the platform allows (bio, pinned comment, description). Never link straight to the store or homepage: the result lands in "organic" and teaches nothing.
31
+ 4. **queue** — add to `queue.md` at a fixed, sustainable cadence. If a scheduler exists, the queue is its input; its dry run is reviewed before anything publishes.
32
+ 5. **review** — weekly: views, early retention, link clicks, signups or installs per campaign parameter. Record results in the hook bank. A hook at two times the median or more earns two variants; one under half the median retires its angle for a month.
33
+
34
+ ## Rules
35
+
36
+ - At least one piece per week sells nothing — a tip that stands on its own.
37
+ - "What is this?" comments are buying signals: answer with the tracked link and note them in the review.
38
+ - Never publish on the owner's behalf until a scheduler exists and the owner approves each piece.
39
+ - Results are reported down to signups or installs, never views alone.
@@ -0,0 +1,6 @@
1
+ apiVersion: ai-os.twentylabs.dev/v1
2
+ kind: Skill
3
+ metadata:
4
+ id: content-pipeline
5
+ spec:
6
+ capabilities: [content-marketing, copywriting]
@@ -0,0 +1,13 @@
1
+ apiVersion: ai-os.twentylabs.dev/v1
2
+ kind: Skill
3
+ metadata:
4
+ id: content-strategy
5
+ spec:
6
+ capabilities: [ content-marketing ]
7
+ source:
8
+ github: coreyhaines31/marketingskills
9
+ path: skills/content-strategy
10
+ ref: dda3841f0b294e01e93b1541486beefbfab0915e
11
+ hash: sha256-4babb09488da1425367c1ce29a1f07a82d7980331177e74ed7307b08e5b08c1d
12
+ license: MIT
13
+ description: When the user wants to plan a content strategy, decide what content to create, or figure out what topics to cover.
@@ -0,0 +1,67 @@
1
+ ---
2
+ name: conversion-audit
3
+ description: "Use when auditing why a product does not convert — users not activating or paying, what to limit or gate, when the paywall should fire, which bugs cost money — or walking the journey before launch or ads. Produces a ranked, read-only diagnosis with one decided fix. NOT for a single metric question or building the fix."
4
+ ---
5
+
6
+ # Conversion audit
7
+
8
+ Find where the product loses users and money, decide what to do about it, and defend each recommendation with evidence. The value is the diagnosis: this skill never writes product code, not even a throwaway script. The only file it creates is the report. Production is read-only — query, never write, and never print a secret.
9
+
10
+ ## Pick the mode
11
+
12
+ | Situation | Mode | Evidence |
13
+ | --- | --- | --- |
14
+ | Real users pass through the funnel (roughly 50+ per step in the window) | **Data mode** — walk the value chain with numbers | code, data, users' own signals |
15
+ | No users yet, before launch or ads, or a flow just changed | **Journey mode** — walk the stations as a new user | code, the running product, external config |
16
+
17
+ Most audits of a young product are journey mode with a little data. Say which mode you are in and why.
18
+
19
+ ## Before anything: priors
20
+
21
+ Read the prior-findings and domain-playbook knowledge files if the project has them, the most recent previous audit (beat its baselines instead of rediscovering them), and what shipped lately — usually what moved the numbers. A decision recorded with its reason goes under "deliberate — don't fix", not under findings.
22
+
23
+ ## Scope the ask
24
+
25
+ | The ask | Lead with | But still do |
26
+ | --- | --- | --- |
27
+ | "how do we get people to pay" | gating and paywall placement | the value chain — the answer is usually upstream |
28
+ | "when should the paywall show" | trigger reachability and timing | check nothing fires before activation |
29
+ | "which limits should change" | gating design | read prior findings on gating first |
30
+ | "which bugs matter" | bug triage by money | rank by chain position, not crash volume |
31
+ | "audit the product" | the whole chain | everything |
32
+
33
+ Push back on exactly one framing: optimizing the paywall when users never reach it. Say so in a sentence, then deliver the requested analysis anyway, plus the upstream finding.
34
+
35
+ ## Data mode
36
+
37
+ 1. **Ground truth from code and live config** — what each plan actually gets (live tables, not constants), every paywall trigger and whether it is reachable, what is enforced on the server versus only displayed, what is deliberately disabled.
38
+ 2. **The numbers** — users not events, test accounts filtered, dual-emitted events swept before any total, zeros checked against never-fired lists, small-N rates labeled hypotheses.
39
+ 3. **Walk the value chain** ([funnel playbook](references/funnel-playbook.md) §1). Report both readings of "weakest": the step losing the most users absolutely and the step with the lowest pass-through. Name the steps you cannot measure — a blind spot is a finding, often the cheapest. Split the weakest step by at least one segment.
40
+ 4. **Interrogate each dimension** — gating, paywall timing, content or supply, bugs by money (playbook §3–§7). Parallel subagents are fine if each is briefed read-only, counts users, and returns claim · evidence · users per week · confidence.
41
+ 5. **Users' own signals** — replays (watched by humans), support threads, reviews, and walking the flow yourself as a new free user. Two independent signals on one screen is a finding; one is a hypothesis.
42
+
43
+ ## Journey mode
44
+
45
+ Walk every station in [the journey stations](references/journey-stations.md), from the store listing to the first renewal, as a new user. Every station gets a row in the report, including stations where nothing was found. Use all three evidence sources at each station: **code** (file and line), **the running product** (a screenshot per station), and **external config** (store listing, billing offerings, remote config). A station missing a source is capped at 3 of 5 and marked unconfirmed; if the product cannot be run, say "code only" for that station rather than skipping it silently.
46
+
47
+ At every station also check measurement: an event the project's analytics plan lists that does not fire, or fires without the property needed to segment it, is a finding — it would leave that step blind once users arrive.
48
+
49
+ ## Decide
50
+
51
+ Rank by expected value over effort, value in users per week or revenue per month, not adjectives. **Pick one top recommendation** — twelve unranked ideas is a way of making no decision — and state how you will know it worked. Fill "deliberately not recommended": rejecting obvious-looking ideas with reasons is what makes the rest credible. If the honest conclusion is "instrument X first", say that; never invent a finding to look useful.
52
+
53
+ ## Write it up
54
+
55
+ Use [the report template](references/report-template.md), saved as `docs/audits/<YYYY-MM-DD>-conversion-audit.md` (or the project's reviews folder if it has one). Chat gets the one thing, the weakest step and the finding count. Each product change becomes a proposed issue for the code repository, with its evidence and how it will be measured — opened only after the owner agrees. Correct prior findings where this audit proved them wrong.
56
+
57
+ ## The quality bar
58
+
59
+ | Weak | Strong |
60
+ | --- | --- |
61
+ | Percentages with no denominator | "37% (3 of 8) — hypothesis, small N" |
62
+ | A limit quoted from a document | The live row, with the date read |
63
+ | Twelve findings, unranked | One decided fix, the rest sequenced, the deciding metric named |
64
+ | Silent about what could not be measured | A blind-spots section with the cheapest fix for each |
65
+ | An average | The weakest step split by segment |
66
+
67
+ The subtlest failure is mistaking measurable for important. The instrumented parts of the funnel are the parts someone already thought about; the biggest leaks usually live in the unmeasured steps.
@@ -0,0 +1,80 @@
1
+ # Funnel playbook
2
+
3
+ Portable reasoning for a product that converts free users to paying ones. The category- and market-specific half lives in the project's domain-playbook knowledge file; where the two disagree, the domain playbook wins — it was written closer to the ground.
4
+
5
+ ## 1. The value chain, in order
6
+
7
+ ```
8
+ first contact → account → activation (first real value delivered)
9
+ → habit (returns unprompted) → limit felt → paywall seen with a reason
10
+ → purchase → renewal
11
+ ```
12
+
13
+ - **Fixing a step only helps users who reach it.** Paywall polish is worthless to users who never activated. Find the earliest step losing the most users per week.
14
+ - **Activation is delivering the core value once**, not completing signup. Proxies (a session opened, a screen viewed) are named as proxies.
15
+ - **Habit precedes monetization.** A user who has not returned unprompted has nothing to lose at a wall; a limit felt before habit converts nobody and churns somebody.
16
+ - **Renewal is part of the chain** — the cheapest revenue there is.
17
+
18
+ ## 2. Small-N discipline
19
+
20
+ - Under about 30 users in a denominator, rates are hypotheses; show absolute counts.
21
+ - At small scale one user's week moves weekly lines by double digits; movements inside that band are noise without a mechanism.
22
+ - Structural evidence — a trigger that cannot fire, a step with no instrumentation, a price shown wrong — outranks statistics and is decidable at any N. Prefer it.
23
+ - Natural experiments (a promotion ending, a forced update) beat A/B tests you lack the volume to run.
24
+
25
+ ## 3. Gating
26
+
27
+ Per limit:
28
+
29
+ - Is it hit **while wanting more** (engaged, mid-flow) or **while discovering less** (before value)? The first converts; the second churns.
30
+ - Is daily use still possible? A gate that blocks the habit starves the paywall.
31
+ - Is the limit legible before it bites? A visible meter converts; a surprise wall enrages.
32
+ - **Reach before scarcity** — tightening a gate helps only if users reach it. If few do, the problem is upstream.
33
+ - Server-enforced or display-only? A limit only the UI knows about is a suggestion.
34
+ - Consider value sampling — tastes of paid value inside the free flow — before a tighter limit. Free is an acquisition strategy, judged by the activated users it feeds the paywall.
35
+
36
+ ## 4. Paywall timing
37
+
38
+ - Map every trigger: reason, surface, and whether it can fire **before activation** (if it can, that is a bug).
39
+ - Strong moments: a limit reached mid-flow, a result worth keeping, progress about to be lost, an evident habit on day 2–3. Weak: app open, end of onboarding, random interstitials.
40
+ - **A strong moment with no trigger wired** usually beats any copy change on existing triggers.
41
+ - Every surface emits shown and dismissed events, or its conversion rate is fiction.
42
+ - Per-reason funnel (impression → call to action → purchase) by users. A reason with impressions and no purchases is mistimed, mispriced or mis-targeted — the split says which.
43
+
44
+ ## 5. Unit economics
45
+
46
+ Where usage has real marginal cost (AI inference, media, messaging):
47
+
48
+ - Know the monthly cost of one active free user and which feature drives it; watch the 95th percentile, not the mean.
49
+ - The free tier is a cost decision wearing a growth costume — price "more generous free" per user before judging it.
50
+ - Anything that grants the expensive resource (referrals, rewards, promotions) competes with its own paid product; check how much is given away versus sold.
51
+ - Before touching a price point: does the value metric scale with delivered value; is the debate at the right order of magnitude; is "underpricing" really too few tiers for the spread of willingness to pay?
52
+ - Churn ceiling ≈ new users per period ÷ churn rate. If the ceiling is near, the headline belongs to retention, not the paywall.
53
+
54
+ ## 6. Content and supply
55
+
56
+ When a content-shaped surface underperforms, four diagnoses — only one is answered by producing more:
57
+
58
+ - **Starvation** — engaged users exhaust what exists. More of the same.
59
+ - **Difficulty cliff** — entry works, the next step loses them. Fill the gap, not the end.
60
+ - **Wrong audience band** — supply aimed above or below the actual users. Re-aim.
61
+ - **Discovery** — the content is fine and unreachable. Surface it.
62
+
63
+ Count supply from the live store, not the repository: authored and published diverge.
64
+
65
+ ## 7. Bugs by money
66
+
67
+ Rank by **chain position × users per week × silence**, never by crash volume:
68
+
69
+ 1. The money path first — purchase, restore, renewal, entitlement resolution, discounts, grants. A silent restore failure churns payers who wanted to stay.
70
+ 2. Then the activation path — a broken first run loses everyone at the top.
71
+ 3. Silent failures outrank loud ones at equal position.
72
+ 4. Expired-but-live surfaces (a blocker for a disabled feature, an orphaned route) are bugs even though nothing crashes.
73
+
74
+ ## 8. Segment before you average
75
+
76
+ Split the weakest step at least once — lifecycle stage, entry path, platform, plan history. A mediocre average is often one healthy segment plus one broken one.
77
+
78
+ ## 9. Qualitative signal
79
+
80
+ Replays, reviews, support threads and walking the flow yourself carry the most information per minute at small N. Replays show layout and where a thumb went, never content — content questions need events or transcripts within the project's privacy rules.
@@ -0,0 +1,57 @@
1
+ # Journey stations
2
+
3
+ Journey mode walks these stations in order as a brand-new user. Adapt the names to the product (a web product's "store listing" is its landing page and search result), but never drop a station — every station is a row in the report.
4
+
5
+ **Scoring.** Each station's score = round(5 × questions answered "yes" ÷ questions asked). A red-flag sign caps the station at 2. A missing evidence source (code, running product, external config) caps it at 3 and marks it unconfirmed. Two audits with the same evidence must produce the same scores.
6
+
7
+ At every station also ask: **when real users arrive, will this step be measurable?** Name the event that must exist and check that it fires with the properties needed to segment it.
8
+
9
+ ## 1. Store listing or landing page
10
+ - Do the first three seconds say what the product does, for whom, with one reason to believe?
11
+ - Is the first screenshot or hero an outcome, not a login screen?
12
+ - Is there social proof (ratings volume, reviews) and nothing that contradicts the product?
13
+ - Red flag: the listing describes features that no longer exist, or is not in the audience's language.
14
+
15
+ ## 2. Landing to install or signup
16
+ - One primary call to action?
17
+ - Do campaign parameters survive into the product (tracking links, deferred deep links)?
18
+ - Is web analytics installed, with consent where required?
19
+ - Red flag: no measurement on the page — every ad that lands here is blind.
20
+
21
+ ## 3. First open to account
22
+ - Can value be tasted before an account is demanded?
23
+ - Is the fastest sign-in method first; does email verification have a resend and a way back in?
24
+ - Red flag: a hard wall at sign-in with no taste of value first.
25
+
26
+ ## 4. Onboarding and setup
27
+ - Does each step say why it asks? Can steps be skipped? Does progress never go backwards?
28
+ - Do permission requests come after value, with a fallback when refused?
29
+ - Red flag: an OS permission prompt before anything has been taught or shown; a mandatory step with no exit.
30
+
31
+ ## 5. First session
32
+ - Can the first session not fail? Is it short? Does it end with a concrete achievement and a one-tap next step?
33
+ - Is the first unit of content or work non-empty on the current build?
34
+ - Red flag: the first item opens empty, or the first session can end in failure.
35
+
36
+ ## 6. Day-2 return
37
+ - Is a reason to return planted on day 1 (progress, a goal, a specific promise for tomorrow)?
38
+ - Is notification permission asked after first value; do messages carry personal progress and deep-link to the right screen?
39
+ - Red flag: the same message for everyone, or a tap that goes nowhere.
40
+
41
+ ## 7. Limit reached → paywall
42
+ - Does the free tier let users taste the paid value a few times?
43
+ - Does the paywall appear at a moment of achievement more often than at a moment of frustration?
44
+ - Do users know the paid plan exists before they hit a limit?
45
+ - Red flag: the first time a user meets the paid plan is an error message.
46
+
47
+ ## 8. Paywall → purchase
48
+ - Does the headline state an outcome? Is the free-versus-paid comparison clear; are trial terms and the post-trial price printed?
49
+ - Is the annual plan's saving marked; is there an exit that is visible but not louder than the call to action?
50
+ - If the store or billing returns no products, does someone get alerted?
51
+ - Red flag: no purchasable products in the test environment, or a displayed price that does not match the store.
52
+
53
+ ## 9. After purchase
54
+ - Does the success screen lead straight back into the product?
55
+ - Does subscription management show the renewal date; does cancellation ask why?
56
+ - Are offers, gifts and win-back paths reachable and measured?
57
+ - Red flag: nothing changes in the product after paying.
@@ -0,0 +1,60 @@
1
+ # Conversion audit — <YYYY-MM-DD>
2
+
3
+ Mode: data | journey. Window: <from → to, plus comparison window> (data mode). Volumes: <active users, payers — absolute>. Status: draft | delivered.
4
+
5
+ ## 1. The one thing
6
+
7
+ The single decided fix: what, why this one first (expected value over effort, in users per week or revenue per month), and how we will know it worked (event or query, threshold, date).
8
+
9
+ ## 2. Where users are lost
10
+
11
+ Data mode — the value chain:
12
+
13
+ | Step | Definition used | Users in → out | vs prior window | Confidence |
14
+ | --- | --- | --- | --- | --- |
15
+ | first contact → account | | | | |
16
+ | account → activation | | | | |
17
+ | activation → habit | | | | |
18
+ | habit → limit felt | | | | |
19
+ | limit → paywall seen | | | | |
20
+ | paywall → purchase | | | | |
21
+ | purchase → renewal | | | | |
22
+
23
+ Journey mode — the stations:
24
+
25
+ | # | Station | Evidence used (code / product / config) | Score 1–5 | One-line reason |
26
+ | --- | --- | --- | --- | --- |
27
+
28
+ Unmeasurable steps, each with the cheapest instrumentation that would light it up. The weakest step, split by at least one segment, and the one-sentence conclusion.
29
+
30
+ ## 3. Findings
31
+
32
+ Ranked. Per finding:
33
+
34
+ ### F<n> — <short imperative title>
35
+ - **Claim:**
36
+ - **Evidence:** file and line, table row with the date read, screenshot, or query — never a document or memory
37
+ - **Users per week or revenue per month affected:**
38
+ - **Confidence:** verified | hypothesis (N=…)
39
+ - **Fix shape and effort:**
40
+ - **How it will be measured:**
41
+
42
+ ## 4. Bugs, ranked by money
43
+
44
+ Chain position × users per week × silence. The money path (purchase, restore, renewal, entitlement, grants) covered explicitly, even when clean.
45
+
46
+ ## 5. Deliberate — don't fix
47
+
48
+ Behaviour that looks wrong but was decided on purpose, with where the decision is recorded.
49
+
50
+ ## 6. What I could not determine
51
+
52
+ Each blind spot, why, and the cheapest way to remove it.
53
+
54
+ ## 7. Deliberately not recommended
55
+
56
+ Obvious-looking ideas rejected, each with the reason.
57
+
58
+ ## 8. Sequence and proposed issues
59
+
60
+ Ordered next steps after the one thing, each with its deciding metric. Proposed issues for the code repository (title, evidence, measurement), awaiting the owner's go-ahead.
@@ -0,0 +1,7 @@
1
+ apiVersion: ai-os.twentylabs.dev/v1
2
+ kind: Skill
3
+ metadata:
4
+ id: conversion-audit
5
+ spec:
6
+ capabilities: [conversion-optimization, product-analytics]
7
+ domains: [consumer-subscription, saas]
@@ -0,0 +1,13 @@
1
+ apiVersion: ai-os.twentylabs.dev/v1
2
+ kind: Skill
3
+ metadata:
4
+ id: copy-editing
5
+ spec:
6
+ capabilities: [ copywriting ]
7
+ source:
8
+ github: coreyhaines31/marketingskills
9
+ path: skills/copy-editing
10
+ ref: dda3841f0b294e01e93b1541486beefbfab0915e
11
+ hash: sha256-2d79dc653cc3c758ac33972358c27ae5233e6ab964b24ce60b840831a01691b3
12
+ license: MIT
13
+ description: When the user wants to edit, review, or improve existing marketing copy, or refresh outdated content.
@@ -0,0 +1,13 @@
1
+ apiVersion: ai-os.twentylabs.dev/v1
2
+ kind: Skill
3
+ metadata:
4
+ id: copywriting
5
+ spec:
6
+ capabilities: [ copywriting ]
7
+ source:
8
+ github: coreyhaines31/marketingskills
9
+ path: skills/copywriting
10
+ ref: dda3841f0b294e01e93b1541486beefbfab0915e
11
+ hash: sha256-e04e269ca6db314564d8d8760b7955d0f22f2ddb511978e9f64a9b65c30a482c
12
+ license: MIT
13
+ description: When the user wants to write, rewrite, or improve marketing copy for any page, including homepage, landing pages, pricing pages, feature pages, about pages, or product pages.