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
@@ -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-brief` 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-brief
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-brief --raw` -- the JSON `seen` field is `true` once the explainer has run before.
12
+
13
+ ### Explainer for `/ttm-brief`
14
+
15
+ `/ttm-brief` is the spec-writing step. You describe the audience, the outcome
16
+ metric, the channel, and the angle; the skill writes a structured BRIEF.md that
17
+ the production wave will load. It also runs a positioning sanity check against
18
+ your `.taketomarket/POSITIONING.md` so the brief can't silently contradict the
19
+ invariant.
20
+
21
+ Why it matters: a brief is the request payload that fans out to multiple parallel
22
+ producer subagents. Vague briefs produce inconsistent assets that fail review.
23
+ The structured-question format is the equivalent of writing a typed function
24
+ signature before implementing the body.
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
  Campaign brief generation workflow with outcome metric enforcement (LIFE-04) and
3
32
  positioning check gate (LIFE-05). Collects all mandatory brief fields (D-07),
@@ -16,7 +45,7 @@ content production.
16
45
  <constraints>
17
46
  ## POSITIONING.md is READ-ONLY
18
47
 
19
- **Do NOT modify `.marketing/POSITIONING.md` during this workflow.**
48
+ **Do NOT modify `.taketomarket/POSITIONING.md` during this workflow.**
20
49
 
21
50
  POSITIONING.md is an architectural invariant. If you detect positioning drift:
22
51
  - In verify: use the Escalate option to launch /ttm-positioning-shift
@@ -66,27 +95,27 @@ SLUG=$(echo "$ARGUMENTS" | sed 's/--text//g' | xargs)
66
95
  ```
67
96
 
68
97
  Read Tier 1 summaries from all 9 reference files (lines 1 to `<!-- END_SUMMARY -->`):
69
- - `.marketing/POSITIONING.md`
70
- - `.marketing/BRAND.md`
71
- - `.marketing/ICP.md`
72
- - `.marketing/CHANNELS.md`
73
- - `.marketing/STATE.md` (frontmatter only)
74
- - `.marketing/CALENDAR.md`
75
- - `.marketing/COMPETITORS.md`
76
- - `.marketing/METRICS.md`
77
- - `.marketing/LEARNINGS.md`
98
+ - `.taketomarket/POSITIONING.md`
99
+ - `.taketomarket/BRAND.md`
100
+ - `.taketomarket/ICP.md`
101
+ - `.taketomarket/CHANNELS.md`
102
+ - `.taketomarket/STATE.md` (frontmatter only)
103
+ - `.taketomarket/CALENDAR.md`
104
+ - `.taketomarket/COMPETITORS.md`
105
+ - `.taketomarket/METRICS.md`
106
+ - `.taketomarket/LEARNINGS.md`
78
107
 
79
108
  Read Tier 2 (full content) for:
80
- - `.marketing/ICP.md`
81
- - `.marketing/CHANNELS.md`
82
- - `.marketing/METRICS.md`
83
- - `.marketing/CALENDAR.md`
109
+ - `.taketomarket/ICP.md`
110
+ - `.taketomarket/CHANNELS.md`
111
+ - `.taketomarket/METRICS.md`
112
+ - `.taketomarket/CALENDAR.md`
84
113
 
85
- Read full `.marketing/POSITIONING.md` (needed for positioning check gate in Step 6).
114
+ Read full `.taketomarket/POSITIONING.md` (needed for positioning check gate in Step 6).
86
115
 
87
116
  Read campaign-specific files (always full-load per context-loading.md rule 4):
88
- - `.marketing/CAMPAIGNS/${SLUG}/STATE.md`
89
- - `.marketing/CAMPAIGNS/${SLUG}/RESEARCH.md`
117
+ - `.taketomarket/CAMPAIGNS/${SLUG}/STATE.md`
118
+ - `.taketomarket/CAMPAIGNS/${SLUG}/RESEARCH.md`
90
119
 
91
120
  ---
92
121
 
@@ -103,7 +132,7 @@ Read campaign state. Check the `phase` field:
103
132
 
104
133
  - If phase is `"created"`:
105
134
  Warn the user:
106
- "Research not yet completed for this campaign. Brief quality will be limited without research data. Run `/ttm-research ${SLUG}` first for better results. Proceed without research?"
135
+ "Research not yet completed for this campaign. Brief quality will be limited without research data. Run `/ttm-discover ${SLUG}` first for better results. Proceed without research?"
107
136
  Wait for user confirmation. If user declines, exit.
108
137
 
109
138
  - If phase is NOT `"created"` and NOT `"researched"`:
@@ -112,8 +141,8 @@ Read campaign state. Check the `phase` field:
112
141
  Wait for user confirmation. If user declines, exit.
113
142
 
114
143
  Check if RESEARCH.md has actual content (not just template placeholders):
115
- - Read `.marketing/CAMPAIGNS/${SLUG}/RESEARCH.md`
116
- - If file contains only `[GENERATED BY /ttm-research]` placeholders: set `RESEARCH_AVAILABLE=false`
144
+ - Read `.taketomarket/CAMPAIGNS/${SLUG}/RESEARCH.md`
145
+ - If file contains only `[GENERATED BY /ttm-discover]` placeholders: set `RESEARCH_AVAILABLE=false`
117
146
  - If file has real content beyond placeholders: set `RESEARCH_AVAILABLE=true`
118
147
 
119
148
  ---
@@ -173,12 +202,12 @@ If the user provides an empty response or declines: set `OUTPUT_METRIC_MISSING=t
173
202
  ## Step 4: Collect Remaining Brief Fields (per D-07)
174
203
 
175
204
  **ICP Segment:**
176
- Read the primary segment from `.marketing/ICP.md` Tier 1 summary. Present it to the user:
205
+ Read the primary segment from `.taketomarket/ICP.md` Tier 1 summary. Present it to the user:
177
206
  "Your primary ICP segment is: [segment from ICP.md]. Is this correct for this campaign, or are you targeting a specific sub-segment?"
178
207
  Store the confirmed or adjusted segment as `ICP_SEGMENT`.
179
208
 
180
209
  **Channel Mix:**
181
- Read active channels from `.marketing/CHANNELS.md`.
210
+ Read active channels from `.taketomarket/CHANNELS.md`.
182
211
 
183
212
  Use AskUserQuestion (or text-mode numbered list) with `multiSelect=true`:
184
213
  - header: "Channel Selection"
@@ -195,7 +224,7 @@ Ask: "What is the opening angle or attention-capture strategy for this campaign?
195
224
  Store as `HOOK`.
196
225
 
197
226
  **Proof Points:**
198
- Read proof points from `.marketing/POSITIONING.md` Proof Point Library table.
227
+ Read proof points from `.taketomarket/POSITIONING.md` Proof Point Library table.
199
228
  Display the available proof points. Ask:
200
229
  "These are your approved proof points. Do you want to add any campaign-specific claims or evidence?"
201
230
  Store base proof points plus any additions as `PROOF_POINTS`.
@@ -287,7 +316,7 @@ Apply all 5 checks against `BRIEF_CONTENT`:
287
316
  !! POSITIONING DRIFT WARNING !!
288
317
  The following items may not align with your positioning:
289
318
  - [drift detail from each failing check, using format strings from brief-positioning-check.md]
290
- Review .marketing/POSITIONING.md and adjust the brief if needed.
319
+ Review .taketomarket/POSITIONING.md and adjust the brief if needed.
291
320
  Run /ttm-positioning-check for a full audit.
292
321
  -->
293
322
  ```
@@ -298,7 +327,7 @@ The brief is written unconditionally. NEVER block brief generation on positionin
298
327
 
299
328
  ## Step 7: Write BRIEF.md and Update State
300
329
 
301
- Write `BRIEF_CONTENT` to `.marketing/CAMPAIGNS/${SLUG}/BRIEF.md`.
330
+ Write `BRIEF_CONTENT` to `.taketomarket/CAMPAIGNS/${SLUG}/BRIEF.md`.
302
331
 
303
332
  Update campaign state:
304
333
  ```bash
@@ -321,7 +350,7 @@ Replace `[pass|warn]` with the actual gate result from Step 6.
321
350
  ```
322
351
  takeToMarket > BRIEF COMPLETE
323
352
 
324
- Brief saved to .marketing/CAMPAIGNS/${SLUG}/BRIEF.md
353
+ Brief saved to .taketomarket/CAMPAIGNS/${SLUG}/BRIEF.md
325
354
 
326
355
  Outcome metric: [OUTCOME_METRIC]
327
356
  Positioning check: [pass|warn]
@@ -331,7 +360,7 @@ Assets: [count] planned
331
360
 
332
361
  [If positioning_check=warn:]
333
362
  !! Positioning drift detected -- see warning in BRIEF.md
334
- Review .marketing/POSITIONING.md and adjust if needed.
363
+ Review .taketomarket/POSITIONING.md and adjust if needed.
335
364
 
336
365
  Next: Run /ttm-produce ${SLUG}
337
366
  ```
@@ -351,5 +380,12 @@ Next: Run /ttm-produce ${SLUG}
351
380
  </success_criteria>
352
381
 
353
382
  <output>
354
- - `.marketing/CAMPAIGNS/<slug>/BRIEF.md` (populated with all mandatory fields)
383
+ - `.taketomarket/CAMPAIGNS/<slug>/BRIEF.md` (populated with all mandatory fields)
355
384
  </output>
385
+
386
+ ## What if this doesn't fit?
387
+
388
+ Looks like /ttm-brief can't do that yet.
389
+
390
+ - Want a new skill? /ttm-request-skill
391
+ - Existing skill needs work? /ttm-improve-skill
@@ -1,3 +1,38 @@
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-discover` 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-discover
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-discover --raw` -- the JSON `seen` field is `true` once the explainer has run before.
12
+
13
+ ### Explainer for `/ttm-discover`
14
+
15
+ `/ttm-discover` is the research phase. It scans your competitors, your category,
16
+ and your ICP's actual language to surface angles, claims, and proof points
17
+ worth building campaigns around. Output is a structured discovery doc with
18
+ candidate hooks, ranked by confidence, that feed into `/ttm-brief`.
19
+
20
+ Why it matters: without discovery, briefs come from your own head -- which is
21
+ how positioning drifts and how every campaign starts to sound the same. This
22
+ step is the marketing equivalent of profiling before you optimize: do not skip
23
+ to production until you know what's actually resonating.
24
+
25
+ (Canonical source: `references/inline-education-blurbs.md`. Embedded verbatim because workflows do not @-resolve files at runtime.)
26
+
27
+ ---
28
+
29
+ <!--
30
+ NOTE: This workflow was renamed `research.md` -> `discover.md` in v2.3.0.
31
+ The artifact filename (`RESEARCH.md`) and state-machine identifier
32
+ (`phase: researched`) are intentionally preserved for backward compatibility
33
+ with existing campaigns. Full literal rename is scheduled for v2.4.0.
34
+ -->
35
+
1
36
  <purpose>
2
37
  Market and audience research workflow that generates a structured RESEARCH.md for a
3
38
  campaign. Detects WebSearch tool availability at runtime and falls back to manual paste
@@ -19,20 +54,20 @@ takeToMarket > LOADING CONTEXT
19
54
  ```
20
55
 
21
56
  Read Tier 1 summary blocks (content between `<!-- _SUMMARY -->` and `<!-- END_SUMMARY -->`)
22
- from all 9 `.marketing/` reference files:
23
-
24
- - `.marketing/POSITIONING.md` (lines 1 to `<!-- END_SUMMARY -->`)
25
- - `.marketing/BRAND.md` (lines 1 to `<!-- END_SUMMARY -->`)
26
- - `.marketing/ICP.md` (lines 1 to `<!-- END_SUMMARY -->`)
27
- - `.marketing/CHANNELS.md` (lines 1 to `<!-- END_SUMMARY -->`)
28
- - `.marketing/STATE.md` (frontmatter only)
29
- - `.marketing/CALENDAR.md` (lines 1 to `<!-- END_SUMMARY -->`)
30
- - `.marketing/COMPETITORS.md` (lines 1 to `<!-- END_SUMMARY -->`)
31
- - `.marketing/METRICS.md` (lines 1 to `<!-- END_SUMMARY -->`)
32
- - `.marketing/LEARNINGS.md` (lines 1 to `<!-- END_SUMMARY -->`)
57
+ from all 9 `.taketomarket/` reference files:
58
+
59
+ - `.taketomarket/POSITIONING.md` (lines 1 to `<!-- END_SUMMARY -->`)
60
+ - `.taketomarket/BRAND.md` (lines 1 to `<!-- END_SUMMARY -->`)
61
+ - `.taketomarket/ICP.md` (lines 1 to `<!-- END_SUMMARY -->`)
62
+ - `.taketomarket/CHANNELS.md` (lines 1 to `<!-- END_SUMMARY -->`)
63
+ - `.taketomarket/STATE.md` (frontmatter only)
64
+ - `.taketomarket/CALENDAR.md` (lines 1 to `<!-- END_SUMMARY -->`)
65
+ - `.taketomarket/COMPETITORS.md` (lines 1 to `<!-- END_SUMMARY -->`)
66
+ - `.taketomarket/METRICS.md` (lines 1 to `<!-- END_SUMMARY -->`)
67
+ - `.taketomarket/LEARNINGS.md` (lines 1 to `<!-- END_SUMMARY -->`)
33
68
 
34
69
  Read Tier 2 (full content) for:
35
- - `.marketing/COMPETITORS.md` (per context-loading.md loading matrix -- research loads Tier 2 COMPETITORS.md)
70
+ - `.taketomarket/COMPETITORS.md` (per context-loading.md loading matrix -- research loads Tier 2 COMPETITORS.md)
36
71
 
37
72
  ---
38
73
 
@@ -47,7 +82,7 @@ If `$SLUG` is empty: ask the user "Which campaign should I research? Provide the
47
82
 
48
83
  Check the campaign exists:
49
84
  ```bash
50
- ls ".marketing/CAMPAIGNS/${SLUG}/STATE.md" 2>/dev/null && echo "exists" || echo "missing"
85
+ ls ".taketomarket/CAMPAIGNS/${SLUG}/STATE.md" 2>/dev/null && echo "exists" || echo "missing"
51
86
  ```
52
87
 
53
88
  **If "missing":**
@@ -61,7 +96,7 @@ node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" campaign state "${SLUG}" --raw
61
96
  ```
62
97
 
63
98
  Read the full campaign STATE.md (campaign files are always full-loaded per context-loading.md rule 4):
64
- - `.marketing/CAMPAIGNS/${SLUG}/STATE.md`
99
+ - `.taketomarket/CAMPAIGNS/${SLUG}/STATE.md`
65
100
 
66
101
  Store the campaign name from the state for use in RESEARCH.md generation.
67
102
 
@@ -109,7 +144,7 @@ takeToMarket > RESEARCH MODE: WEB
109
144
  - Use WebSearch for SERP queries based on `RESEARCH_TOPIC` and campaign keywords
110
145
  - Search for: market trends, competitor content, audience discussions, content gaps
111
146
  - Use WebFetch for competitor page content extraction when specific URLs are found
112
- - Cross-reference findings against `.marketing/COMPETITORS.md` (already loaded in Tier 2)
147
+ - Cross-reference findings against `.taketomarket/COMPETITORS.md` (already loaded in Tier 2)
113
148
  - Tag insights with confidence levels:
114
149
  - **HIGH**: verified source URL or cited data from web search results
115
150
  - **MEDIUM**: indirect evidence or partial match from search results
@@ -209,7 +244,7 @@ opportunity, the key audience insight, and the competitive angle.
209
244
 
210
245
  Write the completed research to:
211
246
  ```
212
- .marketing/CAMPAIGNS/${SLUG}/RESEARCH.md
247
+ .taketomarket/CAMPAIGNS/${SLUG}/RESEARCH.md
213
248
  ```
214
249
 
215
250
  ---
@@ -233,9 +268,9 @@ Count the total insights generated across all sections.
233
268
 
234
269
  Display summary:
235
270
  ```
236
- takeToMarket > RESEARCH COMPLETE
271
+ takeToMarket > DISCOVER COMPLETE
237
272
 
238
- Research saved to .marketing/CAMPAIGNS/${SLUG}/RESEARCH.md
273
+ Research saved to .taketomarket/CAMPAIGNS/${SLUG}/RESEARCH.md
239
274
  Method: [web-search|manual-paste|hybrid]
240
275
  Insights: [count] with confidence breakdown
241
276
  HIGH: [count]
@@ -260,5 +295,12 @@ Next: Run /ttm-brief ${SLUG}
260
295
  </success_criteria>
261
296
 
262
297
  <output>
263
- - `.marketing/CAMPAIGNS/<slug>/RESEARCH.md` (populated with research)
298
+ - `.taketomarket/CAMPAIGNS/<slug>/RESEARCH.md` (populated with research)
264
299
  </output>
300
+
301
+ ## What if this doesn't fit?
302
+
303
+ Looks like /ttm-discover can't do that yet.
304
+
305
+ - Want a new skill? /ttm-request-skill
306
+ - Existing skill needs work? /ttm-improve-skill
@@ -1,3 +1,31 @@
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-fix` 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-fix
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-fix --raw` -- the JSON `seen` field is `true` once the explainer has run before.
12
+
13
+ ### Explainer for `/ttm-fix`
14
+
15
+ `/ttm-fix` reads the verification findings, opens the offending asset, applies
16
+ targeted corrections, and re-runs only the affected gates. It's deliberately
17
+ narrow -- it does not regenerate from scratch, it patches. The fix-verify loop
18
+ continues until either all gates pass or you escalate.
19
+
20
+ Why it matters: regenerating an asset for a small drift wastes context and
21
+ loses good prose that was almost right. Fix is the surgical tool; produce is
22
+ the hammer. Most assets need one or two fix passes before shipping, and that
23
+ loop is where positioning drift gets caught before it leaves the repo.
24
+
25
+ (Canonical source: `references/inline-education-blurbs.md`. Embedded verbatim because workflows do not @-resolve files at runtime.)
26
+
27
+ ---
28
+
1
29
  <purpose>
2
30
  Fix workflow for /ttm-fix. Performs root cause analysis on assets marked
3
31
  "needs-fix" during review, generates targeted fix briefs, re-produces in
@@ -16,7 +44,7 @@ Auto-approves to ship-ready on successful fix (D-14).
16
44
  <constraints>
17
45
  ## POSITIONING.md is READ-ONLY
18
46
 
19
- **Do NOT modify `.marketing/POSITIONING.md` during this workflow.**
47
+ **Do NOT modify `.taketomarket/POSITIONING.md` during this workflow.**
20
48
 
21
49
  POSITIONING.md is an architectural invariant. If you detect positioning drift:
22
50
  - In verify: use the Escalate option to launch /ttm-positioning-shift
@@ -66,37 +94,37 @@ SLUG=$(echo "$ARGUMENTS" | sed 's/--text//g' | xargs)
66
94
  If SLUG is empty, error: "Usage: /ttm-fix [campaign-slug]. Provide a campaign slug." Exit.
67
95
 
68
96
  **Load Tier 1 summaries** from all 9 reference files (lines 1 to `<!-- END_SUMMARY -->`):
69
- - `.marketing/POSITIONING.md`
70
- - `.marketing/BRAND.md`
71
- - `.marketing/ICP.md`
72
- - `.marketing/CHANNELS.md`
73
- - `.marketing/STATE.md` (frontmatter only)
74
- - `.marketing/CALENDAR.md`
75
- - `.marketing/COMPETITORS.md`
76
- - `.marketing/METRICS.md`
77
- - `.marketing/LEARNINGS.md`
97
+ - `.taketomarket/POSITIONING.md`
98
+ - `.taketomarket/BRAND.md`
99
+ - `.taketomarket/ICP.md`
100
+ - `.taketomarket/CHANNELS.md`
101
+ - `.taketomarket/STATE.md` (frontmatter only)
102
+ - `.taketomarket/CALENDAR.md`
103
+ - `.taketomarket/COMPETITORS.md`
104
+ - `.taketomarket/METRICS.md`
105
+ - `.taketomarket/LEARNINGS.md`
78
106
 
79
107
  **Load Tier 2 (full content)** for gate evaluation (same as verify per context-loading.md):
80
- - `.marketing/POSITIONING.md` (needed for GATE-01 Positioning Drift)
81
- - `.marketing/BRAND.md` (needed for GATE-02 Claim Accuracy, GATE-03 Voice Drift)
82
- - `.marketing/ICP.md` (needed for GATE-09 ICP Fit)
83
- - `.marketing/COMPETITORS.md` (needed for GATE-08 Competitor Collision)
84
- - `.marketing/CHANNELS.md` (needed for GATE-06 UTM Hygiene)
108
+ - `.taketomarket/POSITIONING.md` (needed for GATE-01 Positioning Drift)
109
+ - `.taketomarket/BRAND.md` (needed for GATE-02 Claim Accuracy, GATE-03 Voice Drift)
110
+ - `.taketomarket/ICP.md` (needed for GATE-09 ICP Fit)
111
+ - `.taketomarket/COMPETITORS.md` (needed for GATE-08 Competitor Collision)
112
+ - `.taketomarket/CHANNELS.md` (needed for GATE-06 UTM Hygiene)
85
113
 
86
114
  **Load campaign-specific files** (always full-load per context-loading.md rule 4):
87
- - `.marketing/CAMPAIGNS/${SLUG}/STATE.md`
88
- - `.marketing/CAMPAIGNS/${SLUG}/BRIEF.md`
115
+ - `.taketomarket/CAMPAIGNS/${SLUG}/STATE.md`
116
+ - `.taketomarket/CAMPAIGNS/${SLUG}/BRIEF.md`
89
117
 
90
118
  **Load MANIFEST.json:**
91
- Read `.marketing/CAMPAIGNS/${SLUG}/MANIFEST.json`. If the file does not exist, error:
119
+ Read `.taketomarket/CAMPAIGNS/${SLUG}/MANIFEST.json`. If the file does not exist, error:
92
120
  "No production manifest found for campaign '${SLUG}'. Run /ttm-produce first." Exit.
93
121
 
94
122
  **Load VERIFICATION.md:**
95
- Read `.marketing/CAMPAIGNS/${SLUG}/VERIFICATION.md`. If the file does not exist, error:
123
+ Read `.taketomarket/CAMPAIGNS/${SLUG}/VERIFICATION.md`. If the file does not exist, error:
96
124
  "No verification report found for campaign '${SLUG}'. Run /ttm-verify first." Exit.
97
125
 
98
126
  **Load LEARNINGS.md Tier 2** (for root-cause taxonomy categories):
99
- - `.marketing/LEARNINGS.md` (full content -- needed for root-cause category matching)
127
+ - `.taketomarket/LEARNINGS.md` (full content -- needed for root-cause category matching)
100
128
 
101
129
  ---
102
130
 
@@ -136,7 +164,7 @@ Parse MANIFEST.json for assets where `review_status == "needs-fix"`.
136
164
 
137
165
  Collect from both `hero` and `derivatives` entries. For each matching asset, record:
138
166
  - `asset_id`, `name`, `file`, `type`, `channel`, `playbook`
139
- - Load its review feedback file: `.marketing/CAMPAIGNS/${SLUG}/REVIEW-FEEDBACK-${NAME}.md`
167
+ - Load its review feedback file: `.taketomarket/CAMPAIGNS/${SLUG}/REVIEW-FEEDBACK-${NAME}.md`
140
168
  If the feedback file does not exist, log warning and use VERIFICATION.md failures only.
141
169
 
142
170
  If no assets need fix:
@@ -157,7 +185,7 @@ Assets needing fix: ${COUNT}
157
185
  ## Step 4: Initialize Fix Log
158
186
 
159
187
  Check if FIX-LOG.md exists in campaign directory:
160
- `.marketing/CAMPAIGNS/${SLUG}/FIX-LOG.md`
188
+ `.taketomarket/CAMPAIGNS/${SLUG}/FIX-LOG.md`
161
189
 
162
190
  If not, create it from `${CLAUDE_PLUGIN_ROOT}/templates/fix-log.md` template:
163
191
  - Replace `[SLUG]` with campaign slug
@@ -209,7 +237,7 @@ Initialize `attempt_count` from prior attempts in FIX-LOG.md (0 if no prior atte
209
237
  - `[ATTEMPT_NUMBER]` -> current attempt (1, 2, or 3)
210
238
  - `[ROOT_CAUSE_CATEGORY]` -> confirmed root cause category
211
239
  - `[ROOT_CAUSE_EXPLANATION]` -> explanation text
212
- - `[BRIEF_PATH]` -> `.marketing/CAMPAIGNS/${SLUG}/BRIEF.md`
240
+ - `[BRIEF_PATH]` -> `.taketomarket/CAMPAIGNS/${SLUG}/BRIEF.md`
213
241
  - `[FAILURE_LIST]` -> extract all WARN/FAIL findings for this asset from VERIFICATION.md,
214
242
  plus review feedback items from REVIEW-FEEDBACK-${NAME}.md
215
243
  - `[PASSING_LIST]` -> extract all PASS findings for this asset from VERIFICATION.md
@@ -217,19 +245,19 @@ Initialize `attempt_count` from prior attempts in FIX-LOG.md (0 if no prior atte
217
245
  - `[CORRECTIONS_LIST]` -> derive specific corrections from root cause + review feedback
218
246
  - `[ISO_TIMESTAMP]` -> current timestamp
219
247
 
220
- Write fix brief to: `.marketing/CAMPAIGNS/${SLUG}/FIX-BRIEF-${ASSET_ID}-attempt-${N}.md`
248
+ Write fix brief to: `.taketomarket/CAMPAIGNS/${SLUG}/FIX-BRIEF-${ASSET_ID}-attempt-${N}.md`
221
249
 
222
250
  ### 5c. Re-Produce Asset (Task() subagent)
223
251
 
224
252
  Read agent prompt template from `${CLAUDE_PLUGIN_ROOT}/agents/ttm-producer.md`.
225
253
  Fill placeholders -- **CRITICAL: use the FIX BRIEF path as `[BRIEF_PATH]`**, NOT the
226
254
  original BRIEF.md:
227
- - `[BRIEF_PATH]` -> `.marketing/CAMPAIGNS/${SLUG}/FIX-BRIEF-${ASSET_ID}-attempt-${N}.md`
228
- - `[POSITIONING_PATH]` -> `.marketing/POSITIONING.md`
229
- - `[BRAND_PATH]` -> `.marketing/BRAND.md`
230
- - `[ICP_PATH]` -> `.marketing/ICP.md`
255
+ - `[BRIEF_PATH]` -> `.taketomarket/CAMPAIGNS/${SLUG}/FIX-BRIEF-${ASSET_ID}-attempt-${N}.md`
256
+ - `[POSITIONING_PATH]` -> `.taketomarket/POSITIONING.md`
257
+ - `[BRAND_PATH]` -> `.taketomarket/BRAND.md`
258
+ - `[ICP_PATH]` -> `.taketomarket/ICP.md`
231
259
  - `[PLAYBOOK_PATH]` -> playbook path from MANIFEST.json or `"none"`
232
- - `[OUTPUT_PATH]` -> `.marketing/CAMPAIGNS/${SLUG}/${ASSET_FILE}` (overwrite failing version)
260
+ - `[OUTPUT_PATH]` -> `.taketomarket/CAMPAIGNS/${SLUG}/${ASSET_FILE}` (overwrite failing version)
233
261
  - `[ASSET_TYPE]` -> from MANIFEST.json
234
262
  - `[CHANNEL]` -> from MANIFEST.json
235
263
  - `[HERO_PATH]` -> hero asset path if this is a derivative, else `"none"`
@@ -238,7 +266,7 @@ Initialize `attempt_count` from prior attempts in FIX-LOG.md (0 if no prior atte
238
266
 
239
267
  Verify the re-produced file exists and has content:
240
268
  ```bash
241
- test -s ".marketing/CAMPAIGNS/${SLUG}/${ASSET_FILE}"
269
+ test -s ".taketomarket/CAMPAIGNS/${SLUG}/${ASSET_FILE}"
242
270
  ```
243
271
  If file missing/empty: log as failed attempt in FIX-LOG.md, continue loop.
244
272
 
@@ -306,7 +334,7 @@ Initialize `attempt_count` from prior attempts in FIX-LOG.md (0 if no prior atte
306
334
 
307
335
  ### 5f. Log Attempt to FIX-LOG.md
308
336
 
309
- Append to `.marketing/CAMPAIGNS/${SLUG}/FIX-LOG.md`:
337
+ Append to `.taketomarket/CAMPAIGNS/${SLUG}/FIX-LOG.md`:
310
338
  ```markdown
311
339
  ## Asset: [ASSET_NAME]
312
340
 
@@ -373,7 +401,7 @@ Set asset `review_status` to `"needs-human-fix"` in memory.
373
401
 
374
402
  ## Step 7: Update MANIFEST.json
375
403
 
376
- Read MANIFEST.json from `.marketing/CAMPAIGNS/${SLUG}/MANIFEST.json`.
404
+ Read MANIFEST.json from `.taketomarket/CAMPAIGNS/${SLUG}/MANIFEST.json`.
377
405
 
378
406
  Update `review_status` for each processed asset:
379
407
  - `"ship-ready"` if fix succeeded or user approved anyway
@@ -457,7 +485,7 @@ Assets processed: ${TOTAL}
457
485
  Fixed (ship-ready): ${FIXED_COUNT}
458
486
  Needs human fix: ${ESCALATED_COUNT}
459
487
 
460
- Fix log: .marketing/CAMPAIGNS/${SLUG}/FIX-LOG.md
488
+ Fix log: .taketomarket/CAMPAIGNS/${SLUG}/FIX-LOG.md
461
489
  ```
462
490
 
463
491
  **If any ship-ready assets:**
@@ -488,8 +516,15 @@ Edit the flagged files manually, then run /ttm-verify ${SLUG} to re-check
488
516
  </success_criteria>
489
517
 
490
518
  <output>
491
- - `.marketing/CAMPAIGNS/${SLUG}/FIX-LOG.md` (fix attempt history -- append-only)
492
- - `.marketing/CAMPAIGNS/${SLUG}/FIX-BRIEF-*-attempt-*.md` (fix briefs per attempt -- persistent)
493
- - `.marketing/CAMPAIGNS/${SLUG}/MANIFEST.json` (updated with fix results per asset)
494
- - `.marketing/CAMPAIGNS/${SLUG}/VERIFICATION.md` (updated with latest gate results)
519
+ - `.taketomarket/CAMPAIGNS/${SLUG}/FIX-LOG.md` (fix attempt history -- append-only)
520
+ - `.taketomarket/CAMPAIGNS/${SLUG}/FIX-BRIEF-*-attempt-*.md` (fix briefs per attempt -- persistent)
521
+ - `.taketomarket/CAMPAIGNS/${SLUG}/MANIFEST.json` (updated with fix results per asset)
522
+ - `.taketomarket/CAMPAIGNS/${SLUG}/VERIFICATION.md` (updated with latest gate results)
495
523
  </output>
524
+
525
+ ## What if this doesn't fit?
526
+
527
+ Looks like /ttm-fix can't do that yet.
528
+
529
+ - Want a new skill? /ttm-request-skill
530
+ - Existing skill needs work? /ttm-improve-skill