taketomarket 2.2.0 → 2.3.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 (180) hide show
  1. package/.claude-plugin/marketplace.json +4 -4
  2. package/.claude-plugin/plugin.json +2 -2
  3. package/README.md +34 -11
  4. package/bin/lib/campaign.cjs +12 -8
  5. package/bin/lib/codebase-scan.cjs +86 -0
  6. package/bin/lib/config.cjs +129 -0
  7. package/bin/lib/deploy.cjs +36 -0
  8. package/bin/lib/deviation.cjs +1 -1
  9. package/bin/lib/drift-log.cjs +4 -4
  10. package/bin/lib/health.cjs +32 -31
  11. package/bin/lib/install-detect.cjs +62 -0
  12. package/bin/lib/legacy-folder.cjs +100 -0
  13. package/bin/lib/playwright-check.cjs +26 -0
  14. package/bin/lib/site-location.cjs +22 -0
  15. package/bin/lib/state.cjs +3 -3
  16. package/bin/lib/svg-render.cjs +42 -0
  17. package/bin/ttm-tools.cjs +136 -4
  18. package/gates/base-gates.md +8 -8
  19. package/gates/gate-evaluation.md +8 -8
  20. package/install.js +37 -3
  21. package/package.json +10 -6
  22. package/playbooks/aeo.md +218 -114
  23. package/playbooks/affiliate.md +225 -160
  24. package/playbooks/email.md +236 -174
  25. package/playbooks/events.md +303 -213
  26. package/playbooks/landing-pages.md +305 -0
  27. package/playbooks/linkedin.md +264 -142
  28. package/playbooks/manifesto.md +322 -0
  29. package/playbooks/paid-ads.md +240 -189
  30. package/playbooks/positioning.md +340 -0
  31. package/playbooks/pr-media.md +308 -168
  32. package/playbooks/pseo.md +426 -0
  33. package/playbooks/seo.md +251 -158
  34. package/playbooks/social.md +253 -182
  35. package/playbooks/youtube.md +286 -181
  36. package/references/brand-color-theory.md +48 -0
  37. package/references/codex-image-gen-research.md +58 -0
  38. package/references/context-loading.md +6 -6
  39. package/references/humanizer-patterns.md +433 -0
  40. package/references/inline-education-blurbs.md +461 -0
  41. package/references/landing-page-anatomy.md +64 -0
  42. package/references/linkedin-post-patterns.md +174 -0
  43. package/references/logo-design-principles.md +55 -0
  44. package/references/meta-gate-evaluation.md +3 -3
  45. package/references/obra-superpowers-conventions.md +170 -0
  46. package/references/playbook-leaders.md +472 -0
  47. package/references/playwright-mcp-setup.md +164 -0
  48. package/references/positioning-check-report.md +2 -2
  49. package/references/pseo-page-anatomy.md +56 -0
  50. package/references/pseo-templates/alternative-anatomy.md +31 -0
  51. package/references/pseo-templates/alternative-content-playbook.md +32 -0
  52. package/references/pseo-templates/blog-anatomy.md +28 -0
  53. package/references/pseo-templates/blog-content-playbook.md +36 -0
  54. package/references/pseo-templates/comparison-anatomy.md +29 -0
  55. package/references/pseo-templates/comparison-content-playbook.md +35 -0
  56. package/references/pseo-templates/use-case-anatomy.md +28 -0
  57. package/references/pseo-templates/use-case-content-playbook.md +30 -0
  58. package/skills/ttm-101/SKILL.md +25 -0
  59. package/skills/ttm-aeo-check/SKILL.md +17 -12
  60. package/skills/ttm-affiliate-kit/SKILL.md +5 -0
  61. package/skills/ttm-archive/SKILL.md +5 -0
  62. package/skills/ttm-brand-refresh/SKILL.md +5 -0
  63. package/skills/ttm-brief/SKILL.md +5 -0
  64. package/skills/ttm-competitor-scan/SKILL.md +5 -0
  65. package/skills/ttm-deploy/SKILL.md +22 -0
  66. package/skills/ttm-discover/SKILL.md +17 -0
  67. package/skills/ttm-email-check/SKILL.md +17 -0
  68. package/skills/ttm-email-preflight/SKILL.md +17 -11
  69. package/skills/ttm-fix/SKILL.md +5 -0
  70. package/skills/ttm-health/SKILL.md +6 -1
  71. package/skills/ttm-humanize/SKILL.md +33 -0
  72. package/skills/ttm-icp-refresh/SKILL.md +5 -0
  73. package/skills/ttm-improve-skill/SKILL.md +18 -0
  74. package/skills/ttm-init/SKILL.md +10 -3
  75. package/skills/ttm-keyword-map/SKILL.md +17 -11
  76. package/skills/ttm-landing/SKILL.md +19 -0
  77. package/skills/ttm-learn/SKILL.md +5 -0
  78. package/skills/ttm-linkedin-post/SKILL.md +26 -0
  79. package/skills/ttm-measure/SKILL.md +5 -0
  80. package/skills/ttm-new-campaign/SKILL.md +5 -0
  81. package/skills/ttm-next/SKILL.md +5 -0
  82. package/skills/ttm-playwright-setup/SKILL.md +18 -0
  83. package/skills/ttm-positioning-check/SKILL.md +5 -0
  84. package/skills/ttm-positioning-shift/SKILL.md +5 -0
  85. package/skills/ttm-produce/SKILL.md +5 -0
  86. package/skills/ttm-pseo/SKILL.md +26 -0
  87. package/skills/ttm-repurpose/SKILL.md +5 -0
  88. package/skills/ttm-request-skill/SKILL.md +18 -0
  89. package/skills/ttm-research/SKILL.md +18 -6
  90. package/skills/ttm-resume/SKILL.md +5 -0
  91. package/skills/ttm-review/SKILL.md +5 -0
  92. package/skills/ttm-seo/SKILL.md +64 -0
  93. package/skills/ttm-seo-audit/SKILL.md +17 -12
  94. package/skills/ttm-ship/SKILL.md +5 -0
  95. package/skills/ttm-state/SKILL.md +5 -0
  96. package/skills/ttm-update/SKILL.md +152 -4
  97. package/skills/ttm-verify/SKILL.md +5 -0
  98. package/templates/agents-md.md +14 -4
  99. package/templates/campaign-research.md +6 -6
  100. package/templates/campaign-state.md +1 -1
  101. package/templates/claude-md.md +14 -4
  102. package/templates/linkedin-base-template.md +48 -0
  103. package/templates/next-step-footer.md +13 -0
  104. package/templates/production-manifest.json +4 -4
  105. package/templates/pseo/alternative-cms-schema.json +65 -0
  106. package/templates/pseo/blog-cms-schema.json +55 -0
  107. package/templates/pseo/comparison-cms-schema.json +56 -0
  108. package/templates/pseo/use-case-cms-schema.json +62 -0
  109. package/templates/reference-files/brand.md +51 -0
  110. package/templates/reference-files/product-dna.md +73 -0
  111. package/templates/site-scaffold/app/globals.css +2 -0
  112. package/templates/site-scaffold/app/layout.tsx +17 -0
  113. package/templates/site-scaffold/app/page.tsx +33 -0
  114. package/templates/site-scaffold/app/robots.ts +8 -0
  115. package/templates/site-scaffold/app/sitemap.ts +10 -0
  116. package/templates/site-scaffold/app/tokens.css +21 -0
  117. package/templates/site-scaffold/components/Comparison.tsx +14 -0
  118. package/templates/site-scaffold/components/Faq.tsx +14 -0
  119. package/templates/site-scaffold/components/Features.tsx +14 -0
  120. package/templates/site-scaffold/components/FinalCta.tsx +17 -0
  121. package/templates/site-scaffold/components/Footer.tsx +12 -0
  122. package/templates/site-scaffold/components/Hero.tsx +22 -0
  123. package/templates/site-scaffold/components/HowItWorks.tsx +14 -0
  124. package/templates/site-scaffold/components/PricingTeaser.tsx +14 -0
  125. package/templates/site-scaffold/components/Problem.tsx +14 -0
  126. package/templates/site-scaffold/components/SocialProof.tsx +14 -0
  127. package/templates/site-scaffold/components/Solution.tsx +14 -0
  128. package/templates/site-scaffold/components/Testimonials.tsx +14 -0
  129. package/templates/site-scaffold/components/UseCases.tsx +14 -0
  130. package/templates/site-scaffold/content/.gitkeep +0 -0
  131. package/templates/site-scaffold/lib/.gitkeep +0 -0
  132. package/templates/site-scaffold/next.config.mjs +10 -0
  133. package/templates/site-scaffold/package.json +25 -0
  134. package/templates/site-scaffold/postcss.config.mjs +3 -0
  135. package/templates/site-scaffold/public/llms.txt +9 -0
  136. package/templates/site-scaffold/tsconfig.json +21 -0
  137. package/templates/verification-report.md +1 -1
  138. package/workflows/channel/linkedin-post.md +178 -0
  139. package/workflows/discipline/affiliate-kit.md +65 -6
  140. package/workflows/discipline/{email-preflight.md → email-check.md} +39 -4
  141. package/workflows/discipline/repurpose.md +82 -31
  142. package/workflows/discipline/{aeo-check.md → seo/aeo.md} +13 -6
  143. package/workflows/discipline/{seo-audit.md → seo/audit.md} +13 -6
  144. package/workflows/discipline/{keyword-map.md → seo/keyword-map.md} +13 -6
  145. package/workflows/education/ttm-101.md +114 -0
  146. package/workflows/lifecycle/brief-positioning-check.md +1 -1
  147. package/workflows/lifecycle/brief.md +64 -28
  148. package/workflows/lifecycle/{research.md → discover.md} +61 -19
  149. package/workflows/lifecycle/fix.md +72 -37
  150. package/workflows/lifecycle/humanize.md +280 -0
  151. package/workflows/lifecycle/learn.md +72 -35
  152. package/workflows/lifecycle/measure.md +54 -18
  153. package/workflows/lifecycle/produce.md +88 -37
  154. package/workflows/lifecycle/review.md +71 -25
  155. package/workflows/lifecycle/ship.md +62 -18
  156. package/workflows/lifecycle/verify.md +72 -26
  157. package/workflows/reference-mgmt/brand-refresh.md +50 -13
  158. package/workflows/reference-mgmt/competitor-scan.md +51 -15
  159. package/workflows/reference-mgmt/icp-refresh.md +48 -12
  160. package/workflows/reference-mgmt/positioning-check.md +55 -20
  161. package/workflows/reference-mgmt/positioning-shift.md +53 -17
  162. package/workflows/setup/init-brand-colors.md +75 -0
  163. package/workflows/setup/init-logo.md +113 -0
  164. package/workflows/setup/init-product-dna.md +83 -0
  165. package/workflows/setup/init-questions.md +166 -30
  166. package/workflows/setup/init-validation.md +22 -0
  167. package/workflows/setup/init.md +144 -39
  168. package/workflows/setup/new-campaign.md +48 -12
  169. package/workflows/site/deploy.md +98 -0
  170. package/workflows/site/landing.md +156 -0
  171. package/workflows/site/pseo.md +96 -0
  172. package/workflows/site/quality-gates.md +88 -0
  173. package/workflows/utility/archive.md +45 -9
  174. package/workflows/utility/health.md +77 -3
  175. package/workflows/utility/improve-skill.md +233 -0
  176. package/workflows/utility/next.md +38 -2
  177. package/workflows/utility/playwright-setup.md +128 -0
  178. package/workflows/utility/request-skill.md +218 -0
  179. package/workflows/utility/resume.md +40 -3
  180. package/workflows/utility/state.md +42 -7
@@ -0,0 +1,96 @@
1
+ # pSEO Workflow
2
+
3
+ ## Step 0: First-run inline education
4
+
5
+ Read `.taketomarket/CONFIG.md`. Parse `first_run_seen` (object) and `inline_education` (boolean, default true).
6
+
7
+ If `inline_education` is false: skip this step. Else if `first_run_seen.ttm-pseo` is not `true`, print the explainer below verbatim, then mark this skill as seen:
8
+
9
+ ```bash
10
+ node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run mark ttm-pseo
11
+ ```
12
+
13
+ Use this exact check (bash) to decide whether to print: `node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run check ttm-pseo --raw` -- the JSON `seen` field is `true` once the explainer has run before.
14
+
15
+ ### Explainer for `/ttm-pseo`
16
+
17
+ `/ttm-pseo` is programmatic SEO: given a template and a dataset
18
+ (competitors-vs-you, alternatives, integrations, etc.), it generates
19
+ N landing pages with consistent positioning across all of them. Each
20
+ page passes the same gate wall as a single landing page, but in bulk.
21
+
22
+ Why it matters: pSEO is one of the few SEO plays still worth running
23
+ in the AI-search era because the long tail of "X vs Y" queries doesn't
24
+ get cannibalized as quickly. The catch is that ungoverned pSEO produces
25
+ thousands of near-duplicate, positioning-drifted pages. The gate wall
26
+ is what makes pSEO defensible at scale.
27
+
28
+ (Canonical source: `references/inline-education-blurbs.md`. Embedded verbatim because workflows do not @-resolve files at runtime.)
29
+
30
+ ---
31
+
32
+ **Required reading:**
33
+ - `${CLAUDE_PLUGIN_ROOT}/references/pseo-page-anatomy.md`
34
+ - `${CLAUDE_PLUGIN_ROOT}/references/pseo-templates/[template]-anatomy.md`
35
+ - `${CLAUDE_PLUGIN_ROOT}/references/pseo-templates/[template]-content-playbook.md`
36
+ - `${CLAUDE_PLUGIN_ROOT}/templates/pseo/[template]-cms-schema.json`
37
+ - `${CLAUDE_PLUGIN_ROOT}/playbooks/pseo.md` (delivered in P6)
38
+ - `.taketomarket/POSITIONING.md`, `BRAND.md`, `PRODUCT-DNA.md`, `ICP.md`
39
+
40
+ ---
41
+
42
+ ## Step 1: Verify /ttm-landing is run
43
+
44
+ Read `.taketomarket/CONFIG.md` for `landing_path`. If not set: print "Run /ttm-landing first" and exit.
45
+
46
+ ## Step 2: Parse args
47
+
48
+ `<template>` must be one of: blog, use-case, comparison, alternative.
49
+ `<sub>` is either `new`, `from-json`, or `list`.
50
+
51
+ ## Step 3 (new): Generate one page
52
+
53
+ Read appropriate anatomy + content playbook + CMS schema.
54
+
55
+ AskUserQuestion to gather CMS-schema-required fields, or:
56
+ - For blog: title, tldr, key sections (h2 list), takeaways, FAQ.
57
+ - For use-case: useCase name, problem, feature pillars, walkthrough steps.
58
+ - For comparison: competitor, comparison table rows, when-we-win, when-they-win.
59
+ - For alternative: competitor, why-people-leave, why-we-are-alternative, migration steps.
60
+
61
+ Validate against CMS schema. If invalid: prompt to fix.
62
+
63
+ Generate page using content playbook guidance.
64
+
65
+ Render as Next.js page at `[landing_path]/app/[route]/[slug]/page.tsx`:
66
+ - `/blog/[slug]` for blog
67
+ - `/use-cases/[slug]` for use-case
68
+ - `/vs/[slug]` for comparison
69
+ - `/alternatives/[slug]` for alternative
70
+
71
+ Include Schema.org markup (Article + FAQPage + BreadcrumbList).
72
+
73
+ Mandatory humanize step on the generated copy.
74
+
75
+ Update `sitemap.ts` and `public/llms.txt` to include new route.
76
+
77
+ ## Step 4 (from-json): Batch generate
78
+
79
+ Parse JSON file. Validate each entry against schema. For each: same as Step 3 but skip user-question phase.
80
+
81
+ ## Step 5 (list): Just enumerate
82
+
83
+ List all existing pSEO routes by scanning `[landing_path]/app/{blog,use-cases,vs,alternatives}/`.
84
+
85
+ ## Step 6: Quality gates
86
+
87
+ Run gates from quality-gates.md on each new page.
88
+
89
+ ## Step 7: Print next steps
90
+
91
+ ## What if this doesn't fit?
92
+
93
+ Looks like /ttm-pseo can't do that yet.
94
+
95
+ - Want a new skill? /ttm-request-skill
96
+ - Existing skill needs work? /ttm-improve-skill
@@ -0,0 +1,88 @@
1
+ # Landing Quality Gates
2
+
3
+ Called by `/ttm-landing`, `/ttm-pseo`, `/ttm-review`, `/ttm-verify` for landing/pSEO assets.
4
+
5
+ ## Gate 1: Positioning integrity
6
+
7
+ For each generated HTML/TSX file:
8
+ 1. Extract visible text (strip tags).
9
+ 2. Confirm POSITIONING.md primary differentiator is present (or its key phrasing).
10
+ 3. Confirm no banned words from BRAND.md `## Banned words`.
11
+ 4. Confirm no must-not-say from POSITIONING.md.
12
+
13
+ Fail any file that violates.
14
+
15
+ ## Gate 2: Schema.org markup
16
+
17
+ For each page file:
18
+ 1. Confirm a `<script type="application/ld+json">` block exists.
19
+ 2. Parse the JSON-LD.
20
+ 3. Validate against expected schema type (Article, Product, FAQPage, etc.).
21
+
22
+ ## Gate 3: Performance budget (Playwright)
23
+
24
+ Requires Playwright MCP. Check before running:
25
+
26
+ ```bash
27
+ node ${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs playwright-check --raw
28
+ ```
29
+
30
+ If not detected: skip with WARN (don't fail). Otherwise:
31
+
32
+ For each deployed landing/pSEO URL (from CONFIG.md `last_deploy_url`):
33
+ 1. Use Playwright MCP to run a Lighthouse audit at the URL.
34
+ 2. Extract LCP, CLS, INP from the report.
35
+ 3. Compare against budget:
36
+ - LCP < 2.5s → PASS, else FAIL.
37
+ - CLS < 0.1 → PASS, else FAIL.
38
+ - INP < 200ms → PASS, else FAIL.
39
+
40
+ Output:
41
+ ```
42
+ [PASS|FAIL] Gate 3: Performance
43
+ LCP: 1.8s [PASS]
44
+ CLS: 0.05 [PASS]
45
+ INP: 150ms [PASS]
46
+ ```
47
+
48
+ ## Gate 4: Mobile responsiveness (Playwright)
49
+
50
+ Requires Playwright MCP. If not detected: skip with WARN.
51
+
52
+ For each deployed URL:
53
+ 1. Take screenshots at 375px (mobile), 768px (tablet), 1024px (laptop), 1440px (desktop).
54
+ 2. AI vision review each screenshot:
55
+ - No horizontal scroll on mobile.
56
+ - All CTAs visible without scroll on desktop above-fold.
57
+ - Text legible at smallest viewport.
58
+ - No clipped images or overflowing buttons.
59
+ 3. Score each viewport PASS/FAIL.
60
+
61
+ Output:
62
+ ```
63
+ [PASS|FAIL] Gate 4: Mobile responsiveness
64
+ 375px: PASS
65
+ 768px: PASS
66
+ 1024px: PASS
67
+ 1440px: PASS
68
+ ```
69
+
70
+ ## Gate 5: Internal linking
71
+
72
+ For each pSEO page:
73
+ - Confirm at least 3 internal links to other pSEO or top-level pages.
74
+ - Confirm at least 1-2 external links to authoritative sources.
75
+
76
+ ## Gate 6: llms.txt
77
+
78
+ Confirm `public/llms.txt` has been updated to reflect the new route(s).
79
+
80
+ ## Gate result format
81
+
82
+ For each gate, output:
83
+ ```
84
+ [PASS|FAIL] Gate N: <name>
85
+ Details: <message>
86
+ ```
87
+
88
+ If any FAIL: route caller to /ttm-fix with the gate output as context.
@@ -1,3 +1,32 @@
1
+ ## Step 0: First-run inline education
2
+
3
+ Read `.taketomarket/CONFIG.md`. Parse `first_run_seen` (object) and `inline_education` (boolean, default true).
4
+
5
+ If `inline_education` is false: skip this step. Else if `first_run_seen.ttm-archive` is not `true`, print the explainer below verbatim, then mark this skill as seen:
6
+
7
+ ```bash
8
+ node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run mark ttm-archive
9
+ ```
10
+
11
+ Use this exact check (bash) to decide whether to print: `node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run check ttm-archive --raw` -- the JSON `seen` field is `true` once the explainer has run before.
12
+
13
+ ### Explainer for `/ttm-archive`
14
+
15
+ `/ttm-archive` moves a finished campaign out of the active set into
16
+ `.taketomarket/archive/`. It freezes STATE.md, preserves the gate
17
+ results and ship records, and removes the campaign from the
18
+ `/ttm-next` queue. Archived campaigns still feed `/ttm-learn`.
19
+
20
+ Why it matters: campaigns that should be done but stay marked active
21
+ pollute scheduling and waste cognitive budget every time you run
22
+ `/ttm-state`. Archive is the marketing equivalent of merging and
23
+ deleting a branch -- the work is preserved, but it's out of your
24
+ active workspace.
25
+
26
+ (Canonical source: `references/inline-education-blurbs.md`. Embedded verbatim because workflows do not @-resolve files at runtime.)
27
+
28
+ ---
29
+
1
30
  <purpose>
2
31
  Archive workflow for /ttm-archive. Validates campaign is shipped or learned (only
3
32
  shipped or learned campaigns can be archived per D-08), extracts structured learnings from campaign
@@ -17,7 +46,7 @@ as cautionary records (D-08).
17
46
  <constraints>
18
47
  ## POSITIONING.md is READ-ONLY
19
48
 
20
- **Do NOT modify `.marketing/POSITIONING.md` during this workflow.**
49
+ **Do NOT modify `.taketomarket/POSITIONING.md` during this workflow.**
21
50
 
22
51
  POSITIONING.md is an architectural invariant. If you detect positioning drift:
23
52
  - In verify: use the Escalate option to launch /ttm-positioning-shift
@@ -124,9 +153,9 @@ Following the learnings-extraction.md reference guide, scan campaign artifacts.
124
153
 
125
154
  **Read these files from the campaign directory:**
126
155
 
127
- 1. `.marketing/CAMPAIGNS/${SLUG}/STATE.md` (full file -- frontmatter and body)
128
- 2. `.marketing/CAMPAIGNS/${SLUG}/MANIFEST.json` (if exists -- per-asset gate results)
129
- 3. `.marketing/CAMPAIGNS/${SLUG}/BRIEF.md` (if exists -- original strategy)
156
+ 1. `.taketomarket/CAMPAIGNS/${SLUG}/STATE.md` (full file -- frontmatter and body)
157
+ 2. `.taketomarket/CAMPAIGNS/${SLUG}/MANIFEST.json` (if exists -- per-asset gate results)
158
+ 3. `.taketomarket/CAMPAIGNS/${SLUG}/BRIEF.md` (if exists -- original strategy)
130
159
  4. `VERIFICATION.md` in the campaign directory (gate details)
131
160
  5. Any `FIX-BRIEF-*.md` files (fix attempts and outcomes)
132
161
  6. Any `REVIEW-FEEDBACK-*.md` files (human review feedback)
@@ -242,7 +271,7 @@ If the command returns an error:
242
271
  - Exit with the error context
243
272
 
244
273
  The CLI command handles:
245
- - Moving the campaign directory to `.marketing/CAMPAIGNS/ARCHIVE/${SLUG}/`
274
+ - Moving the campaign directory to `.taketomarket/CAMPAIGNS/ARCHIVE/${SLUG}/`
246
275
  - Updating the campaign state to "archived"
247
276
  - Validating the campaign is in "shipped" or "learned" phase before allowing archive
248
277
 
@@ -258,7 +287,7 @@ takeToMarket > UPDATING LEARNINGS
258
287
  The campaign is now in ARCHIVE/ with phase set to "archived". Writing learnings after
259
288
  archive confirmation prevents data-loss on retry (duplicate rows) if archive were to fail.
260
289
 
261
- Read `.marketing/LEARNINGS.md`.
290
+ Read `.taketomarket/LEARNINGS.md`.
262
291
 
263
292
  **Duplicate guard:** Before inserting rows, scan existing LEARNINGS.md content for
264
293
  any row containing `| ${SLUG} |` with today's date. If matching rows already exist
@@ -305,7 +334,7 @@ Display completion summary:
305
334
  |------|----------|----------|--------|-------------|
306
335
  ${extracted_rows}
307
336
 
308
- Campaign directory moved to `.marketing/CAMPAIGNS/ARCHIVE/${SLUG}/`
337
+ Campaign directory moved to `.taketomarket/CAMPAIGNS/ARCHIVE/${SLUG}/`
309
338
 
310
339
  ### Next Steps
311
340
  - Lessons are now available in LEARNINGS.md for future campaigns
@@ -329,6 +358,13 @@ Campaign directory moved to `.marketing/CAMPAIGNS/ARCHIVE/${SLUG}/`
329
358
  </success_criteria>
330
359
 
331
360
  <output>
332
- - `.marketing/LEARNINGS.md` (updated with extracted lessons)
333
- - `.marketing/CAMPAIGNS/ARCHIVE/${SLUG}/STATE.md` (phase set to archived, via CLI)
361
+ - `.taketomarket/LEARNINGS.md` (updated with extracted lessons)
362
+ - `.taketomarket/CAMPAIGNS/ARCHIVE/${SLUG}/STATE.md` (phase set to archived, via CLI)
334
363
  </output>
364
+
365
+ ## What if this doesn't fit?
366
+
367
+ Looks like /ttm-archive can't do that yet.
368
+
369
+ - Want a new skill? /ttm-request-skill
370
+ - Existing skill needs work? /ttm-improve-skill
@@ -1,5 +1,35 @@
1
+ ## Step 0: First-run inline education
2
+
3
+ Read `.taketomarket/CONFIG.md`. Parse `first_run_seen` (object) and `inline_education` (boolean, default true).
4
+
5
+ If `inline_education` is false: skip this step. Else if `first_run_seen.ttm-health` is not `true`, print the explainer below verbatim, then mark this skill as seen:
6
+
7
+ ```bash
8
+ node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run mark ttm-health
9
+ ```
10
+
11
+ Use this exact check (bash) to decide whether to print: `node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run check ttm-health --raw` -- the JSON `seen` field is `true` once the explainer has run before.
12
+
13
+ ### Explainer for `/ttm-health`
14
+
15
+ `/ttm-health` audits the integrity of your `.taketomarket/` directory.
16
+ It checks that reference files exist and aren't suspiciously empty,
17
+ flags stale references, validates per-campaign STATE.md against the
18
+ file system, surfaces DRIFT-LOG anomalies, and reports gate-result
19
+ inconsistencies. It only reports -- it does not self-heal.
20
+
21
+ Why it matters: state corruption in a long-running multi-campaign
22
+ project is silent until something breaks. Running health periodically
23
+ (or letting it auto-trigger on detected issues) catches drift like a
24
+ filesystem fsck -- before it forces a manual rebuild of a campaign's
25
+ state.
26
+
27
+ (Canonical source: `references/inline-education-blurbs.md`. Embedded verbatim because workflows do not @-resolve files at runtime.)
28
+
29
+ ---
30
+
1
31
  <purpose>
2
- Health audit workflow for /ttm-health. Validates .marketing/ directory integrity,
32
+ Health audit workflow for /ttm-health. Validates .taketomarket/ directory integrity,
3
33
  reference file completeness, per-campaign state consistency, reference file staleness,
4
34
  campaign velocity, DRIFT-LOG integrity, and gate result consistency. Reports text
5
35
  output with pass/warn/fail per check category. Does NOT self-heal -- only reports.
@@ -12,7 +42,7 @@ output with pass/warn/fail per check category. Does NOT self-heal -- only report
12
42
  <constraints>
13
43
  ## POSITIONING.md is READ-ONLY
14
44
 
15
- **Do NOT modify `.marketing/POSITIONING.md` during this workflow.**
45
+ **Do NOT modify `.taketomarket/POSITIONING.md` during this workflow.**
16
46
 
17
47
  POSITIONING.md is an architectural invariant. If you detect positioning drift:
18
48
  - In verify: use the Escalate option to launch /ttm-positioning-shift
@@ -29,6 +59,43 @@ commands or manual actions the user should take.
29
59
 
30
60
  <process>
31
61
 
62
+ ## Step: Legacy folder check
63
+
64
+ Before running the main audit, detect whether the project still uses the legacy
65
+ `.marketing/` state directory and offer migration to the canonical `.taketomarket/`.
66
+
67
+ Run the legacy-folder check:
68
+
69
+ ```bash
70
+ node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" legacy-folder check --raw
71
+ ```
72
+
73
+ Parse the JSON `state` field:
74
+
75
+ - **legacy**: print `WARN: Legacy '.marketing/' folder detected. Migration will rename it to '.taketomarket/'. Recommend committing or backing up first (the rename is fast but not reversible from inside the workflow).` Then use `AskUserQuestion`:
76
+ - question: "Migrate `.marketing/` to `.taketomarket/` now?"
77
+ - options: "Yes, migrate now" / "Skip for now"
78
+ - On Yes:
79
+ ```bash
80
+ node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" legacy-folder migrate --raw
81
+ ```
82
+ Then verify `.taketomarket/` exists.
83
+ - On Skip: continue to Step 1 with a note that the audit will report `.marketing/` paths.
84
+ - **conflict**: print the error below, then halt the workflow:
85
+ ```
86
+ ERROR: Both .marketing/ and .taketomarket/ exist. Manual resolution required.
87
+
88
+ To resolve:
89
+ 1. Compare contents: diff -r .marketing .taketomarket
90
+ 2. Merge any unique files from .marketing/ into .taketomarket/.
91
+ 3. Once .taketomarket/ has everything you need, remove the legacy folder:
92
+ rm -rf .marketing
93
+ 4. Re-run /ttm-health to confirm.
94
+ ```
95
+ - **current** or **none**: continue silently to Step 1.
96
+
97
+ ---
98
+
32
99
  ## Step 1: Run Health Audit
33
100
 
34
101
  ```
@@ -80,7 +147,7 @@ Group checks by category based on their `name` prefix or type:
80
147
  ## Health Report
81
148
 
82
149
  ### Structural Integrity
83
- [PASS] .marketing/ directory exists
150
+ [PASS] .taketomarket/ directory exists
84
151
  [PASS] CAMPAIGNS/ directory exists
85
152
  [PASS] Required subdirectories present
86
153
 
@@ -164,3 +231,10 @@ All systems healthy. No action needed.
164
231
  <output>
165
232
  No files modified (diagnostic command).
166
233
  </output>
234
+
235
+ ## What if this doesn't fit?
236
+
237
+ Looks like /ttm-health can't do that yet.
238
+
239
+ - Want a new skill? /ttm-request-skill
240
+ - Existing skill needs work? /ttm-improve-skill
@@ -0,0 +1,233 @@
1
+ ## Step 0: First-run inline education
2
+
3
+ Read `.taketomarket/CONFIG.md`. Parse `first_run_seen` (object) and `inline_education` (boolean, default true).
4
+
5
+ If `inline_education` is false: skip this step. Else if `first_run_seen.ttm-improve-skill` is not `true`, print the explainer below verbatim, then mark this skill as seen:
6
+
7
+ ```bash
8
+ node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run mark ttm-improve-skill
9
+ ```
10
+
11
+ Use this exact check (bash) to decide whether to print: `node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run check ttm-improve-skill --raw` -- the JSON `seen` field is `true` once the explainer has run before.
12
+
13
+ ### Explainer for `/ttm-improve-skill`
14
+
15
+ `/ttm-improve-skill` opens a feedback loop on a specific takeToMarket
16
+ skill. It diffs your last few invocations of a skill, asks what felt
17
+ wrong or missing, and either drafts a local skill override or files a
18
+ structured issue against the takeToMarket repo so the change can land
19
+ upstream.
20
+
21
+ Why it matters: takeToMarket is opinionated, which means it'll be
22
+ wrong about your context sometimes. This skill is the structured
23
+ escape hatch -- instead of fighting the skill in-conversation, you
24
+ record the friction, get a fix, and avoid that friction permanently.
25
+ Treat it like filing a linter rule exemption.
26
+
27
+ (Canonical source: `references/inline-education-blurbs.md`. Embedded verbatim because workflows do not @-resolve files at runtime.)
28
+
29
+ ---
30
+
31
+ <purpose>
32
+ Skill improvement workflow for /ttm-improve-skill. Gathers details about an
33
+ EXISTING skill that needs changes and files a GitHub issue at
34
+ ranjanrishikesh/taketomarket. Prefers the `gh` CLI when installed and
35
+ authenticated; falls back to opening a pre-filled GitHub issue URL in the
36
+ browser.
37
+ </purpose>
38
+
39
+ <constraints>
40
+ ## Read-Only on the Local Project
41
+
42
+ This workflow does NOT modify any files in the user's project. It only creates
43
+ a remote GitHub issue (via `gh`) or prints a URL for the user to open.
44
+
45
+ ## Repo Identity
46
+
47
+ Always file issues at `ranjanrishikesh/taketomarket` (lowercase). Do not infer
48
+ a different repo from local git remotes.
49
+
50
+ ## No Secrets in Issue Body
51
+
52
+ Do NOT include API keys, tokens, file paths containing credentials, or any
53
+ content from `.taketomarket/` reference files in the issue body. Only echo the
54
+ user's freeform answers verbatim.
55
+ </constraints>
56
+
57
+ <process>
58
+
59
+ ## Step 1: Enumerate existing skills
60
+
61
+ ```
62
+ takeToMarket > REPORT A SKILL IMPROVEMENT
63
+ ```
64
+
65
+ List installed ttm-* skills so the user can pick one:
66
+
67
+ ```bash
68
+ ls -1 "${CLAUDE_PLUGIN_ROOT}/skills" | grep '^ttm-' | sort
69
+ ```
70
+
71
+ Present the list to the user.
72
+
73
+ ---
74
+
75
+ ## Step 2: Gather details
76
+
77
+ Use `AskUserQuestion` (priority: critical) to collect:
78
+
79
+ 1. **Which skill?** — "Which skill needs improvement?"
80
+ - `multiSelect` from the enumerated `ttm-*` skill list.
81
+ - Allow a freeform fallback in case the user wants to name a skill not yet
82
+ visible locally.
83
+ 2. **What's not working?** — "What's not working with this skill?"
84
+ - Freeform, multi-line allowed.
85
+ 3. **Expected behavior** — "What's the expected behavior?"
86
+ - Freeform, multi-line allowed.
87
+ 4. **Steps to reproduce** — "Steps to reproduce (if a bug)."
88
+ - Freeform, multi-line allowed. Optional — accept an empty answer.
89
+
90
+ Store the answers as `WHICH_SKILL`, `NOT_WORKING`, `EXPECTED`, `REPRO_STEPS`.
91
+
92
+ If the user selected multiple skills, join them with `, ` for the issue title
93
+ and body.
94
+
95
+ ---
96
+
97
+ ## Step 3: Detect gh CLI
98
+
99
+ ```bash
100
+ GH_STATE="no-gh"
101
+ if command -v gh >/dev/null 2>&1; then
102
+ if gh auth status >/dev/null 2>&1; then
103
+ GH_STATE="gh-ready"
104
+ fi
105
+ fi
106
+ echo "$GH_STATE"
107
+ ```
108
+
109
+ If `GH_STATE` is `gh-ready`, proceed to Step 4.
110
+ Otherwise, proceed to Step 5.
111
+
112
+ ---
113
+
114
+ ## Step 4: If gh-ready, file issue via gh CLI
115
+
116
+ Build the issue body from the gathered answers, then run:
117
+
118
+ ```bash
119
+ gh issue create \
120
+ --repo ranjanrishikesh/taketomarket \
121
+ --title "[Skill improvement] ${WHICH_SKILL}" \
122
+ --body "$(cat <<'EOF'
123
+ **Which skill:** ${WHICH_SKILL}
124
+ **What's not working:** ${NOT_WORKING}
125
+ **Expected behavior:** ${EXPECTED}
126
+ **Steps to reproduce:** ${REPRO_STEPS}
127
+
128
+ ---
129
+ Filed via /ttm-improve-skill
130
+ EOF
131
+ )"
132
+ ```
133
+
134
+ (Substitute the variables before passing to the heredoc — the heredoc above is
135
+ quoted to prevent shell expansion of literal `${...}` placeholders. Build the
136
+ body string first and pass the resolved text via `--body`.)
137
+
138
+ Capture the resulting issue URL printed by `gh issue create`. Display it to
139
+ the user:
140
+
141
+ ```
142
+ takeToMarket > SKILL IMPROVEMENT FILED
143
+
144
+ Issue: <issue-url>
145
+
146
+ Thanks for the report. You can track it at the URL above.
147
+ ```
148
+
149
+ Done — exit successfully.
150
+
151
+ ---
152
+
153
+ ## Step 5: If no-gh, generate pre-filled URL
154
+
155
+ When `gh` is not installed or not authenticated, build a pre-filled GitHub
156
+ issue URL pointing at the `skill-improvement.yml` template.
157
+
158
+ URL-encode the title and body. The body fields map to template field IDs:
159
+ `which-skill`, `not-working`, `expected`, `repro-steps`.
160
+
161
+ Construct (conceptually):
162
+
163
+ ```
164
+ https://github.com/ranjanrishikesh/taketomarket/issues/new
165
+ ?template=skill-improvement.yml
166
+ &title=<urlencoded "[Skill improvement] WHICH_SKILL">
167
+ &which-skill=<urlencoded WHICH_SKILL>
168
+ &not-working=<urlencoded NOT_WORKING>
169
+ &expected=<urlencoded EXPECTED>
170
+ &repro-steps=<urlencoded REPRO_STEPS>
171
+ ```
172
+
173
+ You can generate the encoded URL with:
174
+
175
+ ```bash
176
+ python3 - <<'PY'
177
+ import urllib.parse
178
+ import os
179
+ title = f"[Skill improvement] {os.environ['WHICH_SKILL']}"
180
+ params = {
181
+ "template": "skill-improvement.yml",
182
+ "title": title,
183
+ "which-skill": os.environ["WHICH_SKILL"],
184
+ "not-working": os.environ["NOT_WORKING"],
185
+ "expected": os.environ["EXPECTED"],
186
+ "repro-steps": os.environ.get("REPRO_STEPS", ""),
187
+ }
188
+ qs = urllib.parse.urlencode(params)
189
+ print(f"https://github.com/ranjanrishikesh/taketomarket/issues/new?{qs}")
190
+ PY
191
+ ```
192
+
193
+ (Export `WHICH_SKILL`, `NOT_WORKING`, `EXPECTED`, `REPRO_STEPS` to the
194
+ environment before running the snippet.)
195
+
196
+ Print the URL and instruct the user:
197
+
198
+ ```
199
+ takeToMarket > OPEN IN BROWSER
200
+
201
+ gh CLI not detected (or not authenticated). Open this URL to file the issue:
202
+
203
+ <url>
204
+
205
+ Tip: install `gh` (https://cli.github.com) and run `gh auth login` to file
206
+ issues directly next time.
207
+ ```
208
+
209
+ Done — exit successfully.
210
+
211
+ </process>
212
+
213
+ <success_criteria>
214
+ - [ ] Installed ttm-* skills listed for user selection
215
+ - [ ] Four questions asked via AskUserQuestion (which-skill, not-working, expected, repro)
216
+ - [ ] gh CLI detection performed (command + auth status)
217
+ - [ ] If gh ready: issue created at ranjanrishikesh/taketomarket with `[Skill improvement]` prefix
218
+ - [ ] If no gh: pre-filled URL printed with template=skill-improvement.yml and encoded title/body fields
219
+ - [ ] No local files modified
220
+ </success_criteria>
221
+
222
+ <output>
223
+ No local files modified. Either a GitHub issue is created remotely (gh path)
224
+ or a URL is printed for the user to open (browser path).
225
+ </output>
226
+
227
+ ## What if this doesn't fit?
228
+
229
+ Looks like /ttm-improve-skill can't do that yet. Try one of:
230
+
231
+ - Want a brand-new skill instead? /ttm-request-skill
232
+ - Need an overview of the system first? /ttm-101
233
+ - Otherwise file a free-form issue: https://github.com/ranjanrishikesh/taketomarket/issues/new
@@ -1,3 +1,32 @@
1
+ ## Step 0: First-run inline education
2
+
3
+ Read `.taketomarket/CONFIG.md`. Parse `first_run_seen` (object) and `inline_education` (boolean, default true).
4
+
5
+ If `inline_education` is false: skip this step. Else if `first_run_seen.ttm-next` is not `true`, print the explainer below verbatim, then mark this skill as seen:
6
+
7
+ ```bash
8
+ node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run mark ttm-next
9
+ ```
10
+
11
+ Use this exact check (bash) to decide whether to print: `node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run check ttm-next --raw` -- the JSON `seen` field is `true` once the explainer has run before.
12
+
13
+ ### Explainer for `/ttm-next`
14
+
15
+ `/ttm-next` scans every active campaign in the project and proposes
16
+ the single highest-priority next move across the whole portfolio.
17
+ Output is a ranked list with one top recommendation plus up to
18
+ three alternatives, each as a runnable `/ttm-*` command.
19
+
20
+ Why it matters: when more than two campaigns are active, "what
21
+ should I do next" becomes a meaningful decision that depends on
22
+ which campaigns are stuck, which are about to lose momentum, and
23
+ which have the soonest measurable outcome. This skill is the
24
+ scheduler for your marketing pipeline.
25
+
26
+ (Canonical source: `references/inline-education-blurbs.md`. Embedded verbatim because workflows do not @-resolve files at runtime.)
27
+
28
+ ---
29
+
1
30
  <purpose>
2
31
  Next-command routing workflow for /ttm-next. Looks across ALL active campaigns,
3
32
  prioritizes which needs attention most, and suggests the specific /ttm-* command
@@ -13,7 +42,7 @@ in created and researched phases.
13
42
  <constraints>
14
43
  ## POSITIONING.md is READ-ONLY
15
44
 
16
- **Do NOT modify `.marketing/POSITIONING.md` during this workflow.**
45
+ **Do NOT modify `.taketomarket/POSITIONING.md` during this workflow.**
17
46
 
18
47
  POSITIONING.md is an architectural invariant. If you detect positioning drift:
19
48
  - In verify: use the Escalate option to launch /ttm-positioning-shift
@@ -67,7 +96,7 @@ the phase-to-command mapping:
67
96
 
68
97
  | Current Phase | Next Command | Notes |
69
98
  |---------------|--------------|-------|
70
- | `created` | `/ttm-research <slug>` | New campaign needs research |
99
+ | `created` | `/ttm-discover <slug>` | New campaign needs research |
71
100
  | `researched` | `/ttm-brief <slug>` | Research done, needs brief |
72
101
  | `briefed` | `/ttm-produce <slug>` | Brief ready, produce content |
73
102
  | `produced` | `/ttm-verify <slug>` | Content ready, verify quality |
@@ -185,3 +214,10 @@ append a note: "(Note: this command is not yet available -- coming in Phase 9)"
185
214
  <output>
186
215
  No files modified (read-only command).
187
216
  </output>
217
+
218
+ ## What if this doesn't fit?
219
+
220
+ Looks like /ttm-next can't do that yet.
221
+
222
+ - Want a new skill? /ttm-request-skill
223
+ - Existing skill needs work? /ttm-improve-skill