taketomarket 2.2.0 → 2.3.1

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 (181) hide show
  1. package/.claude-plugin/marketplace.json +13 -17
  2. package/.claude-plugin/plugin.json +2 -2
  3. package/README.md +35 -12
  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 +309 -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 +65 -0
  42. package/references/landing-page-headline-examples.md +190 -0
  43. package/references/linkedin-post-patterns.md +174 -0
  44. package/references/logo-design-principles.md +55 -0
  45. package/references/meta-gate-evaluation.md +3 -3
  46. package/references/obra-superpowers-conventions.md +170 -0
  47. package/references/playbook-leaders.md +472 -0
  48. package/references/playwright-mcp-setup.md +164 -0
  49. package/references/positioning-check-report.md +2 -2
  50. package/references/pseo-page-anatomy.md +56 -0
  51. package/references/pseo-templates/alternative-anatomy.md +31 -0
  52. package/references/pseo-templates/alternative-content-playbook.md +32 -0
  53. package/references/pseo-templates/blog-anatomy.md +28 -0
  54. package/references/pseo-templates/blog-content-playbook.md +36 -0
  55. package/references/pseo-templates/comparison-anatomy.md +29 -0
  56. package/references/pseo-templates/comparison-content-playbook.md +35 -0
  57. package/references/pseo-templates/use-case-anatomy.md +28 -0
  58. package/references/pseo-templates/use-case-content-playbook.md +30 -0
  59. package/skills/ttm-101/SKILL.md +25 -0
  60. package/skills/ttm-aeo-check/SKILL.md +17 -12
  61. package/skills/ttm-affiliate-kit/SKILL.md +5 -0
  62. package/skills/ttm-archive/SKILL.md +5 -0
  63. package/skills/ttm-brand-refresh/SKILL.md +5 -0
  64. package/skills/ttm-brief/SKILL.md +5 -0
  65. package/skills/ttm-competitor-scan/SKILL.md +5 -0
  66. package/skills/ttm-deploy/SKILL.md +22 -0
  67. package/skills/ttm-discover/SKILL.md +17 -0
  68. package/skills/ttm-email-check/SKILL.md +17 -0
  69. package/skills/ttm-email-preflight/SKILL.md +17 -11
  70. package/skills/ttm-fix/SKILL.md +5 -0
  71. package/skills/ttm-health/SKILL.md +6 -1
  72. package/skills/ttm-humanize/SKILL.md +33 -0
  73. package/skills/ttm-icp-refresh/SKILL.md +5 -0
  74. package/skills/ttm-improve-skill/SKILL.md +18 -0
  75. package/skills/ttm-init/SKILL.md +10 -3
  76. package/skills/ttm-keyword-map/SKILL.md +17 -11
  77. package/skills/ttm-landing/SKILL.md +19 -0
  78. package/skills/ttm-learn/SKILL.md +5 -0
  79. package/skills/ttm-linkedin-post/SKILL.md +26 -0
  80. package/skills/ttm-measure/SKILL.md +5 -0
  81. package/skills/ttm-new-campaign/SKILL.md +5 -0
  82. package/skills/ttm-next/SKILL.md +5 -0
  83. package/skills/ttm-playwright-setup/SKILL.md +18 -0
  84. package/skills/ttm-positioning-check/SKILL.md +5 -0
  85. package/skills/ttm-positioning-shift/SKILL.md +5 -0
  86. package/skills/ttm-produce/SKILL.md +5 -0
  87. package/skills/ttm-pseo/SKILL.md +26 -0
  88. package/skills/ttm-repurpose/SKILL.md +5 -0
  89. package/skills/ttm-request-skill/SKILL.md +18 -0
  90. package/skills/ttm-research/SKILL.md +18 -6
  91. package/skills/ttm-resume/SKILL.md +5 -0
  92. package/skills/ttm-review/SKILL.md +5 -0
  93. package/skills/ttm-seo/SKILL.md +64 -0
  94. package/skills/ttm-seo-audit/SKILL.md +17 -12
  95. package/skills/ttm-ship/SKILL.md +5 -0
  96. package/skills/ttm-state/SKILL.md +5 -0
  97. package/skills/ttm-update/SKILL.md +152 -4
  98. package/skills/ttm-verify/SKILL.md +5 -0
  99. package/templates/agents-md.md +14 -4
  100. package/templates/campaign-research.md +6 -6
  101. package/templates/campaign-state.md +1 -1
  102. package/templates/claude-md.md +14 -4
  103. package/templates/linkedin-base-template.md +48 -0
  104. package/templates/next-step-footer.md +13 -0
  105. package/templates/production-manifest.json +4 -4
  106. package/templates/pseo/alternative-cms-schema.json +65 -0
  107. package/templates/pseo/blog-cms-schema.json +55 -0
  108. package/templates/pseo/comparison-cms-schema.json +56 -0
  109. package/templates/pseo/use-case-cms-schema.json +62 -0
  110. package/templates/reference-files/brand.md +51 -0
  111. package/templates/reference-files/product-dna.md +73 -0
  112. package/templates/site-scaffold/app/globals.css +2 -0
  113. package/templates/site-scaffold/app/layout.tsx +17 -0
  114. package/templates/site-scaffold/app/page.tsx +33 -0
  115. package/templates/site-scaffold/app/robots.ts +8 -0
  116. package/templates/site-scaffold/app/sitemap.ts +10 -0
  117. package/templates/site-scaffold/app/tokens.css +21 -0
  118. package/templates/site-scaffold/components/Comparison.tsx +14 -0
  119. package/templates/site-scaffold/components/Faq.tsx +14 -0
  120. package/templates/site-scaffold/components/Features.tsx +14 -0
  121. package/templates/site-scaffold/components/FinalCta.tsx +17 -0
  122. package/templates/site-scaffold/components/Footer.tsx +12 -0
  123. package/templates/site-scaffold/components/Hero.tsx +22 -0
  124. package/templates/site-scaffold/components/HowItWorks.tsx +14 -0
  125. package/templates/site-scaffold/components/PricingTeaser.tsx +14 -0
  126. package/templates/site-scaffold/components/Problem.tsx +14 -0
  127. package/templates/site-scaffold/components/SocialProof.tsx +14 -0
  128. package/templates/site-scaffold/components/Solution.tsx +14 -0
  129. package/templates/site-scaffold/components/Testimonials.tsx +14 -0
  130. package/templates/site-scaffold/components/UseCases.tsx +14 -0
  131. package/templates/site-scaffold/content/.gitkeep +0 -0
  132. package/templates/site-scaffold/lib/.gitkeep +0 -0
  133. package/templates/site-scaffold/next.config.mjs +10 -0
  134. package/templates/site-scaffold/package.json +25 -0
  135. package/templates/site-scaffold/postcss.config.mjs +3 -0
  136. package/templates/site-scaffold/public/llms.txt +9 -0
  137. package/templates/site-scaffold/tsconfig.json +21 -0
  138. package/templates/verification-report.md +1 -1
  139. package/workflows/channel/linkedin-post.md +178 -0
  140. package/workflows/discipline/affiliate-kit.md +65 -6
  141. package/workflows/discipline/{email-preflight.md → email-check.md} +39 -4
  142. package/workflows/discipline/repurpose.md +82 -31
  143. package/workflows/discipline/{aeo-check.md → seo/aeo.md} +13 -6
  144. package/workflows/discipline/{seo-audit.md → seo/audit.md} +13 -6
  145. package/workflows/discipline/{keyword-map.md → seo/keyword-map.md} +13 -6
  146. package/workflows/education/ttm-101.md +114 -0
  147. package/workflows/lifecycle/brief-positioning-check.md +1 -1
  148. package/workflows/lifecycle/brief.md +64 -28
  149. package/workflows/lifecycle/{research.md → discover.md} +61 -19
  150. package/workflows/lifecycle/fix.md +72 -37
  151. package/workflows/lifecycle/humanize.md +280 -0
  152. package/workflows/lifecycle/learn.md +72 -35
  153. package/workflows/lifecycle/measure.md +54 -18
  154. package/workflows/lifecycle/produce.md +88 -37
  155. package/workflows/lifecycle/review.md +71 -25
  156. package/workflows/lifecycle/ship.md +62 -18
  157. package/workflows/lifecycle/verify.md +72 -26
  158. package/workflows/reference-mgmt/brand-refresh.md +50 -13
  159. package/workflows/reference-mgmt/competitor-scan.md +51 -15
  160. package/workflows/reference-mgmt/icp-refresh.md +48 -12
  161. package/workflows/reference-mgmt/positioning-check.md +55 -20
  162. package/workflows/reference-mgmt/positioning-shift.md +53 -17
  163. package/workflows/setup/init-brand-colors.md +75 -0
  164. package/workflows/setup/init-logo.md +113 -0
  165. package/workflows/setup/init-product-dna.md +83 -0
  166. package/workflows/setup/init-questions.md +166 -30
  167. package/workflows/setup/init-validation.md +22 -0
  168. package/workflows/setup/init.md +144 -39
  169. package/workflows/setup/new-campaign.md +48 -12
  170. package/workflows/site/deploy.md +98 -0
  171. package/workflows/site/landing.md +156 -0
  172. package/workflows/site/pseo.md +96 -0
  173. package/workflows/site/quality-gates.md +88 -0
  174. package/workflows/utility/archive.md +45 -9
  175. package/workflows/utility/health.md +77 -3
  176. package/workflows/utility/improve-skill.md +233 -0
  177. package/workflows/utility/next.md +38 -2
  178. package/workflows/utility/playwright-setup.md +128 -0
  179. package/workflows/utility/request-skill.md +218 -0
  180. package/workflows/utility/resume.md +40 -3
  181. package/workflows/utility/state.md +42 -7
@@ -0,0 +1,280 @@
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-humanize` 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-humanize
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-humanize --raw` -- the JSON `seen` field is `true` once the explainer has run before.
12
+
13
+ ### Explainer for `/ttm-humanize`
14
+
15
+ `/ttm-humanize` rewrites AI-flavored prose into something that sounds like a
16
+ person wrote it: varied sentence rhythm, fewer hedges, specific verbs, no
17
+ "furthermore" or "in today's fast-paced." It runs after verify, before review,
18
+ and only on assets flagged for tone tuning.
19
+
20
+ Why it matters: detection models and human readers both pattern-match on the
21
+ same tells, and AI-fingerprinted copy converts worse and damages trust. Think
22
+ of humanize as a code formatter that targets the LLM-prose anti-patterns the
23
+ way Prettier targets whitespace.
24
+
25
+ (Canonical source: `references/inline-education-blurbs.md`. Embedded verbatim because workflows do not @-resolve files at runtime.)
26
+
27
+ ---
28
+
29
+ <purpose>
30
+ Humanization workflow for /ttm-humanize. Detects and rewrites the AI-writing patterns
31
+ cataloged in references/humanizer-patterns.md against an audience-facing asset, calibrated
32
+ to the brand voice declared in .taketomarket/BRAND.md and constrained by the positioning
33
+ invariant in .taketomarket/POSITIONING.md. Every audience-facing asset in takeToMarket
34
+ passes through this workflow before write -- no asset ships with the AI fingerprint intact.
35
+ </purpose>
36
+
37
+ <required_reading>
38
+ @${CLAUDE_PLUGIN_ROOT}/references/humanizer-patterns.md
39
+ @${CLAUDE_PLUGIN_ROOT}/references/context-loading.md
40
+ </required_reading>
41
+
42
+ <constraints>
43
+ ## POSITIONING.md is READ-ONLY
44
+
45
+ **Do NOT modify `.taketomarket/POSITIONING.md` during this workflow.**
46
+
47
+ Humanization rewrites style and rhythm. It must not change positioning anchors, proof
48
+ points, ICP framing, or any must-not-say term enforcement. If a humanization rewrite would
49
+ contradict POSITIONING.md, abort the rewrite for that span and flag it instead.
50
+
51
+ ## BRAND.md voice is authoritative
52
+
53
+ The asset's voice MUST match `.taketomarket/BRAND.md`. If the source asset already deviates
54
+ from BRAND.md, humanization is not the place to fix it -- flag the deviation and recommend
55
+ `/ttm-positioning-check` or a manual brand review.
56
+
57
+ ## Meaning is preserved
58
+
59
+ Humanization rewrites the surface. Claims, numbers, proper nouns, citations, and CTAs are
60
+ preserved verbatim unless they are themselves AI-pattern instances (vague attribution,
61
+ knowledge-cutoff disclaimer, sycophantic opener).
62
+ </constraints>
63
+
64
+ <process>
65
+
66
+ ## Text-Mode Detection
67
+
68
+ **Text mode (`--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS`
69
+ or if the runtime is not Claude Code. When TEXT_MODE is active, replace every
70
+ `AskUserQuestion` call with a plain-text numbered list.
71
+
72
+ ```bash
73
+ if echo "$ARGUMENTS" | grep -q -- '--text'; then TEXT_MODE=true; fi
74
+ ```
75
+
76
+ If `AskUserQuestion` tool is not available in the current runtime, set `TEXT_MODE=true`.
77
+
78
+ ---
79
+
80
+ ## Step 1: Resolve Target Asset
81
+
82
+ ```
83
+ takeToMarket > LOADING ASSET
84
+ ```
85
+
86
+ Parse `$ARGUMENTS`. Strip the `--text` flag if present. The remaining token is the target:
87
+
88
+ - A file path (absolute or repo-relative ending in `.md`): treat as `TARGET_PATH`. Read it.
89
+ - A campaign slug followed by an asset id (e.g., `pricing-q2 02`): resolve to
90
+ `.taketomarket/CAMPAIGNS/${SLUG}/ASSETS/${NN}-*.md`.
91
+ - A bare campaign slug: read `.taketomarket/CAMPAIGNS/${SLUG}/MANIFEST.json` and humanize
92
+ every asset listed. Process the hero first, then derivatives.
93
+ - No argument and stdin/clipboard text present: treat as inline mode -- humanize the pasted
94
+ text and print the result; do not write to disk.
95
+
96
+ Store the source text as `DRAFT`. Store the resolution mode as `MODE` (`file` | `campaign` |
97
+ `inline`).
98
+
99
+ ---
100
+
101
+ ## Step 2: Load Voice Context
102
+
103
+ ```
104
+ takeToMarket > CALIBRATING VOICE
105
+ ```
106
+
107
+ Read full content (Tier 2 per context-loading.md):
108
+
109
+ - `.taketomarket/BRAND.md` -- voice, tone, vocabulary, must-not-say terms
110
+ - `.taketomarket/POSITIONING.md` -- anchors, proof points, must-not-say terms (positioning)
111
+
112
+ If the asset belongs to a campaign (MODE is `file` under `CAMPAIGNS/${SLUG}/ASSETS/` or
113
+ MODE is `campaign`), also read:
114
+
115
+ - `.taketomarket/CAMPAIGNS/${SLUG}/BRIEF.md` -- campaign-specific hook, proof points,
116
+ channel constraints
117
+
118
+ From BRAND.md, extract a **voice profile**:
119
+
120
+ - Sentence length pattern (short/punchy, long/flowing, mixed)
121
+ - Word-choice register (casual, technical, formal, mixed)
122
+ - Paragraph openers (jump straight in vs. set context first)
123
+ - Punctuation habits (dashes, parentheticals, semicolons, fragments)
124
+ - Recurring phrases or verbal tics declared in BRAND.md
125
+ - Transition style (explicit connectors vs. abrupt cuts)
126
+ - First-person stance (uses "I"/"we" vs. third-person only)
127
+
128
+ If BRAND.md does not declare these explicitly, infer them from any sample passages it
129
+ contains. If no samples exist, set `VOICE_PROFILE=default` (varied rhythm, opinionated,
130
+ first-person allowed, no AI tells -- see "Signs of soulless writing" in
131
+ `references/humanizer-patterns.md`).
132
+
133
+ ---
134
+
135
+ ## Step 3: Scan for AI Patterns
136
+
137
+ ```
138
+ takeToMarket > SCANNING FOR AI PATTERNS
139
+ ```
140
+
141
+ Walk `DRAFT` against every section in `${CLAUDE_PLUGIN_ROOT}/references/humanizer-patterns.md`:
142
+
143
+ 1. CONTENT PATTERNS (sections 1-6) -- significance inflation, notability puffery,
144
+ superficial -ing analyses, promotional language, vague attributions, formulaic
145
+ challenges sections.
146
+ 2. LANGUAGE AND GRAMMAR PATTERNS (sections 7-13) -- AI vocabulary, copula avoidance,
147
+ negative parallelism, rule of three, elegant variation, false ranges, passive voice.
148
+ 3. STYLE PATTERNS (sections 14-19) -- em-dash overuse, boldface overuse, inline-header
149
+ lists, title-case headings, emojis, curly quotes.
150
+ 4. COMMUNICATION PATTERNS (sections 20-22) -- chatbot artifacts, knowledge-cutoff
151
+ disclaimers, sycophantic tone.
152
+ 5. FILLER AND HEDGING (sections 23-29) -- filler phrases, excessive hedging, generic
153
+ positive conclusions, hyphenated word-pair overuse, persuasive authority tropes,
154
+ signposting, fragmented headers.
155
+
156
+ For each hit, record:
157
+
158
+ - Section number from the reference (e.g., `7`, `14`)
159
+ - The offending span (a short quote)
160
+ - The rewrite shape suggested by the section's Before/After pair
161
+
162
+ Store the list as `HITS`. If `HITS` is empty AND the draft does not fail the "soulless
163
+ writing" check from the reference, skip to Step 6 -- the asset is already clean.
164
+
165
+ ---
166
+
167
+ ## Step 4: Rewrite
168
+
169
+ ```
170
+ takeToMarket > REWRITING (${N} pattern hits)
171
+ ```
172
+
173
+ For each hit in `HITS`, rewrite the offending span using:
174
+
175
+ - The Before/After template from the matching section of `humanizer-patterns.md`
176
+ - The voice profile from Step 2 -- match the asset's brand cadence, not a generic
177
+ "natural" tone
178
+
179
+ Rules:
180
+
181
+ - Preserve claims, numbers, proper nouns, citations, and CTAs verbatim.
182
+ - Do NOT introduce new claims or facts. If a vague attribution cannot be replaced with
183
+ a real source from POSITIONING.md proof points or the campaign brief, delete the
184
+ attribution rather than inventing one.
185
+ - Do NOT remove a span that is load-bearing for positioning (anchor phrase, proof point,
186
+ differentiator) even if it pattern-matches. Flag it and leave it.
187
+ - If the brand voice is itself terse and bullet-heavy, don't rewrite inline-header lists
188
+ into prose paragraphs -- match the brand.
189
+ - Soulless output is a failure mode. After mechanical fixes, do one personality pass
190
+ using the "How to add voice" guidance in the reference: vary rhythm, allow opinion,
191
+ let some mess in, be specific.
192
+
193
+ Store the rewritten text as `DRAFT_V2`.
194
+
195
+ ---
196
+
197
+ ## Step 5: Final Anti-AI Audit
198
+
199
+ ```
200
+ takeToMarket > FINAL AUDIT
201
+ ```
202
+
203
+ Run one more pass against `DRAFT_V2`:
204
+
205
+ 1. Re-scan against `humanizer-patterns.md`. Record any remaining tells as a short bulleted
206
+ list `REMAINING_TELLS` (cap at 5 items -- the goal is signal, not exhaustiveness).
207
+ 2. Apply one more revision targeting `REMAINING_TELLS` specifically. Most often this means
208
+ tightening rhythm, breaking up tidy parallel structure, or replacing a remaining
209
+ abstract noun with a concrete one.
210
+
211
+ Store the result as `DRAFT_FINAL`.
212
+
213
+ ---
214
+
215
+ ## Step 6: Output
216
+
217
+ Behavior depends on `MODE`:
218
+
219
+ ### MODE = `file` or `campaign` (write back)
220
+
221
+ Write `DRAFT_FINAL` to the original asset path. Overwrite without prompting -- the previous
222
+ draft is recoverable via git.
223
+
224
+ For campaign mode, after writing the asset, append a line to
225
+ `.taketomarket/CAMPAIGNS/${SLUG}/MANIFEST.json` under the asset's entry:
226
+ `"humanized_at": "${ISO_TIMESTAMP}"` (use `node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs"
227
+ timestamp --raw`).
228
+
229
+ ### MODE = `inline` (print only)
230
+
231
+ Print `DRAFT_FINAL` to the conversation. Do not write to disk.
232
+
233
+ ---
234
+
235
+ ## Step 7: Display Summary
236
+
237
+ ```
238
+ takeToMarket > HUMANIZATION COMPLETE
239
+
240
+ Asset: ${TARGET_PATH or "inline"}
241
+ Pattern hits found: ${HITS.length}
242
+ Top patterns rewritten: ${top 3 section numbers from HITS}
243
+ Remaining tells after audit: ${REMAINING_TELLS.length}
244
+
245
+ [If MODE = file or campaign:]
246
+ Asset rewritten in place. Diff is visible via `git diff`.
247
+
248
+ [If MODE = campaign:]
249
+ Manifest annotated with humanized_at timestamp.
250
+
251
+ [If any positioning-load-bearing spans were flagged-but-not-rewritten:]
252
+ WARNING: ${N} span(s) pattern-matched but were preserved because they carry positioning
253
+ or proof-point load. Review manually if voice still feels off.
254
+ ```
255
+
256
+ </process>
257
+
258
+ <success_criteria>
259
+ - [ ] Source asset resolved (file, campaign asset, or inline text)
260
+ - [ ] BRAND.md voice profile loaded and applied to rewrites
261
+ - [ ] POSITIONING.md anchors and proof points preserved verbatim
262
+ - [ ] Every hit from the pattern scan addressed -- rewritten or flagged with reason
263
+ - [ ] Final anti-AI audit completed with remaining tells listed (or empty)
264
+ - [ ] Soulless-writing check passed (rhythm varied, voice present, not just clean)
265
+ - [ ] Output written to disk (file/campaign mode) or printed (inline mode)
266
+ - [ ] Manifest updated with humanized_at when in campaign mode
267
+ </success_criteria>
268
+
269
+ <output>
270
+ - File/campaign mode: rewritten asset at the original path
271
+ - Campaign mode: `humanized_at` timestamp added to MANIFEST.json asset entry
272
+ - Inline mode: rewritten text printed to the conversation
273
+ </output>
274
+
275
+ ## What if this doesn't fit?
276
+
277
+ Looks like /ttm-humanize can't do that yet.
278
+
279
+ - Want a new skill? /ttm-request-skill
280
+ - Existing skill needs work? /ttm-improve-skill
@@ -1,3 +1,33 @@
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-learn` 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-learn
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-learn --raw` -- the JSON `seen` field is `true` once the explainer has run before.
12
+
13
+ ### Explainer for `/ttm-learn`
14
+
15
+ `/ttm-learn` reads finished campaigns -- briefs, gate results, ship records,
16
+ measurement output -- and extracts compound learnings into
17
+ `.taketomarket/LEARNINGS.md`: what positioning angles converted, which
18
+ channels under- or over-delivered, which playbook variants worked. Future
19
+ briefs auto-load this file.
20
+
21
+ Why it matters: marketing learnings without a structured store dissolve into
22
+ folklore inside three months. Learn turns each campaign's data into a
23
+ versioned doc that biases the next brief toward what actually worked --
24
+ the marketing equivalent of a postmortem doc plus a regression suite of
25
+ tactics.
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
32
  Learn workflow for /ttm-learn. Extracts lessons from campaign measurement data
3
33
  and campaign history. Proposes reference file edits as narratives with per-edit
@@ -19,7 +49,7 @@ better. LEARNINGS.md is already loaded as Tier 1 context in the brief workflow
19
49
  <constraints>
20
50
  ## POSITIONING.md is READ-ONLY
21
51
 
22
- **Do NOT modify `.marketing/POSITIONING.md` during this workflow.**
52
+ **Do NOT modify `.taketomarket/POSITIONING.md` during this workflow.**
23
53
 
24
54
  POSITIONING.md is an architectural invariant. If you identify a lesson that implies
25
55
  a POSITIONING.md edit:
@@ -34,12 +64,12 @@ POSITIONING.md edits directly even if the user approves. Instead, display:
34
64
  ## Reference File Edit Targets
35
65
 
36
66
  Only the following files may be edited via this workflow (per D-09):
37
- - `.marketing/BRAND.md`
38
- - `.marketing/ICP.md`
39
- - `.marketing/CHANNELS.md`
40
- - `.marketing/POSITIONING.md` (via /ttm-positioning-shift only -- never directly)
41
- - `.marketing/METRICS.md`
42
- - `.marketing/COMPETITORS.md`
67
+ - `.taketomarket/BRAND.md`
68
+ - `.taketomarket/ICP.md`
69
+ - `.taketomarket/CHANNELS.md`
70
+ - `.taketomarket/POSITIONING.md` (via /ttm-positioning-shift only -- never directly)
71
+ - `.taketomarket/METRICS.md`
72
+ - `.taketomarket/COMPETITORS.md`
43
73
 
44
74
  ## Append-Only LEARNINGS.md
45
75
 
@@ -89,36 +119,36 @@ SLUG=$(echo "$ARGUMENTS" | sed 's/--text//g' | xargs)
89
119
  If SLUG is empty, error: "Usage: /ttm-learn [campaign-slug]. Provide a campaign slug." Exit.
90
120
 
91
121
  **Load Tier 1 summaries** from all 9 reference files (lines 1 to `<!-- END_SUMMARY -->`):
92
- - `.marketing/POSITIONING.md`
93
- - `.marketing/BRAND.md`
94
- - `.marketing/ICP.md`
95
- - `.marketing/CHANNELS.md`
96
- - `.marketing/STATE.md` (frontmatter only)
97
- - `.marketing/CALENDAR.md`
98
- - `.marketing/COMPETITORS.md`
99
- - `.marketing/METRICS.md`
100
- - `.marketing/LEARNINGS.md`
122
+ - `.taketomarket/POSITIONING.md`
123
+ - `.taketomarket/BRAND.md`
124
+ - `.taketomarket/ICP.md`
125
+ - `.taketomarket/CHANNELS.md`
126
+ - `.taketomarket/STATE.md` (frontmatter only)
127
+ - `.taketomarket/CALENDAR.md`
128
+ - `.taketomarket/COMPETITORS.md`
129
+ - `.taketomarket/METRICS.md`
130
+ - `.taketomarket/LEARNINGS.md`
101
131
 
102
132
  **Load Tier 2 (full content)** for learning analysis:
103
- - `.marketing/LEARNINGS.md` (existing lessons and patterns)
104
- - `.marketing/METRICS.md` (metric definitions for delta interpretation)
105
- - `.marketing/BRAND.md` (brand guidelines for edit proposals)
106
- - `.marketing/ICP.md` (ICP data for edit proposals)
107
- - `.marketing/CHANNELS.md` (channel data for edit proposals)
108
- - `.marketing/COMPETITORS.md` (competitor data for edit proposals)
109
- - `.marketing/POSITIONING.md` (read-only -- for positioning drift detection)
133
+ - `.taketomarket/LEARNINGS.md` (existing lessons and patterns)
134
+ - `.taketomarket/METRICS.md` (metric definitions for delta interpretation)
135
+ - `.taketomarket/BRAND.md` (brand guidelines for edit proposals)
136
+ - `.taketomarket/ICP.md` (ICP data for edit proposals)
137
+ - `.taketomarket/CHANNELS.md` (channel data for edit proposals)
138
+ - `.taketomarket/COMPETITORS.md` (competitor data for edit proposals)
139
+ - `.taketomarket/POSITIONING.md` (read-only -- for positioning drift detection)
110
140
 
111
141
  **Load campaign artifacts** per the scan order from learnings-extraction.md:
112
- - `.marketing/CAMPAIGNS/${SLUG}/STATE.md` (frontmatter for gate results, run counts)
113
- - `.marketing/CAMPAIGNS/${SLUG}/MEASUREMENT.md` (measurement report with outcome data)
114
- - `.marketing/CAMPAIGNS/${SLUG}/BRIEF.md` (original strategy and targets)
115
- - `.marketing/CAMPAIGNS/${SLUG}/VERIFICATION.md` (gate details if it exists)
116
- - `.marketing/CAMPAIGNS/${SLUG}/FIX-BRIEF-*.md` (fix details if they exist)
117
- - `.marketing/CAMPAIGNS/${SLUG}/REVIEW-FEEDBACK-*.md` (reviewer comments if they exist)
142
+ - `.taketomarket/CAMPAIGNS/${SLUG}/STATE.md` (frontmatter for gate results, run counts)
143
+ - `.taketomarket/CAMPAIGNS/${SLUG}/MEASUREMENT.md` (measurement report with outcome data)
144
+ - `.taketomarket/CAMPAIGNS/${SLUG}/BRIEF.md` (original strategy and targets)
145
+ - `.taketomarket/CAMPAIGNS/${SLUG}/VERIFICATION.md` (gate details if it exists)
146
+ - `.taketomarket/CAMPAIGNS/${SLUG}/FIX-BRIEF-*.md` (fix details if they exist)
147
+ - `.taketomarket/CAMPAIGNS/${SLUG}/REVIEW-FEEDBACK-*.md` (reviewer comments if they exist)
118
148
 
119
- If `.marketing/CAMPAIGNS/${SLUG}/` does not exist, error: "Campaign '${SLUG}' not found. Check the slug and try again." Exit.
149
+ If `.taketomarket/CAMPAIGNS/${SLUG}/` does not exist, error: "Campaign '${SLUG}' not found. Check the slug and try again." Exit.
120
150
 
121
- If `.marketing/CAMPAIGNS/${SLUG}/MEASUREMENT.md` does not exist, error: "No measurement data found for '${SLUG}'. Run /ttm-measure first." Exit.
151
+ If `.taketomarket/CAMPAIGNS/${SLUG}/MEASUREMENT.md` does not exist, error: "No measurement data found for '${SLUG}'. Run /ttm-measure first." Exit.
122
152
 
123
153
  ---
124
154
 
@@ -226,7 +256,7 @@ Based on campaign "${SLUG}" results, [specific observation from measurement data
226
256
  [Reasoning derived from the data and campaign artifacts].
227
257
  Therefore, [specific edit proposal describing the change].
228
258
 
229
- File: .marketing/${TARGET_FILE}.md
259
+ File: .taketomarket/${TARGET_FILE}.md
230
260
  Section: [section name where the edit applies]
231
261
  Change: [specific addition, modification, or removal]
232
262
  ```
@@ -243,7 +273,7 @@ Use AskUserQuestion with options:
243
273
 
244
274
  **If TEXT_MODE=true:**
245
275
  ```
246
- Apply this edit to .marketing/${TARGET_FILE}.md?
276
+ Apply this edit to .taketomarket/${TARGET_FILE}.md?
247
277
  1. Apply -- Update ${TARGET_FILE}.md with this change
248
278
  2. Skip -- Keep ${TARGET_FILE}.md unchanged, log lesson only
249
279
  3. Modify -- Edit the proposed change before applying
@@ -284,7 +314,7 @@ Track counts: `edits_proposed` (total proposed), `edits_applied` (Apply + Modify
284
314
 
285
315
  ## Step 6: Append Lessons to LEARNINGS.md (per LRNG-01, LIFE-17)
286
316
 
287
- 1. Read `.marketing/LEARNINGS.md`
317
+ 1. Read `.taketomarket/LEARNINGS.md`
288
318
  2. Find the marker line: `<!-- LESSONS BELOW THIS LINE -->`
289
319
  3. Insert new lesson rows immediately after the marker, one row per lesson from Step 4:
290
320
  ```
@@ -379,7 +409,7 @@ Reference edits proposed: ${PROPOSED_COUNT}
379
409
  Reference edits applied: ${APPLIED_COUNT}
380
410
  Pattern extraction: ${PATTERN_STATUS}
381
411
 
382
- Lessons appended to: .marketing/LEARNINGS.md
412
+ Lessons appended to: .taketomarket/LEARNINGS.md
383
413
 
384
414
  Next: Run /ttm-archive ${SLUG} to finalize the campaign, or start a new campaign.
385
415
  Future campaigns will load these lessons via /ttm-brief to prevent repeating mistakes.
@@ -403,3 +433,10 @@ Where `${PATTERN_STATUS}` is one of:
403
433
  - [ ] Pattern extraction runs only if 3+ campaign slugs in lessons log
404
434
  - [ ] Campaign state updated with learn.* fields
405
435
  </checklist>
436
+
437
+ ## What if this doesn't fit?
438
+
439
+ Looks like /ttm-learn can't do that yet.
440
+
441
+ - Want a new skill? /ttm-request-skill
442
+ - Existing skill needs work? /ttm-improve-skill
@@ -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-measure` 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-measure
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-measure --raw` -- the JSON `seen` field is `true` once the explainer has run before.
12
+
13
+ ### Explainer for `/ttm-measure`
14
+
15
+ `/ttm-measure` ingests analytics data (pasted in manually for the MVP) and
16
+ matches it against the outcome metric declared in the brief. Output is a
17
+ pass/fail per campaign plus a per-asset performance summary written to
18
+ MEASURE.md.
19
+
20
+ Why it matters: every brief committed to an outcome metric, and measure is
21
+ where that commitment gets checked. Skipping measure means you never learn
22
+ which positioning angles, channels, or hooks actually moved the number --
23
+ the production loop becomes vibes-driven. This is the closing parenthesis on
24
+ the spec-driven cycle.
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
  Measurement workflow for /ttm-measure. Accepts analytics data via 3 pathways
3
32
  (MCP tools, CSV/Markdown paste, structured batch questions). Applies 3 attribution
@@ -16,7 +45,7 @@ data is available for the measurement window.
16
45
 
17
46
  ## Positioning Constraint (Read-Only)
18
47
 
19
- `.marketing/POSITIONING.md` is loaded for context only. This workflow MUST NOT modify
48
+ `.taketomarket/POSITIONING.md` is loaded for context only. This workflow MUST NOT modify
20
49
  POSITIONING.md. Positioning changes require `/ttm-positioning` -- never alter positioning
21
50
  as a side effect of measurement.
22
51
 
@@ -61,25 +90,25 @@ SLUG=$(echo "$ARGUMENTS" | sed 's/--text//g' | xargs)
61
90
  If SLUG is empty, error: "Usage: /ttm-measure [campaign-slug]. Provide a campaign slug." Exit.
62
91
 
63
92
  Read Tier 1 summary blocks (content between `<!-- _SUMMARY -->` and `<!-- END_SUMMARY -->`)
64
- from all 9 `.marketing/` reference files:
65
-
66
- - `.marketing/POSITIONING.md` (lines 1 to `<!-- END_SUMMARY -->`)
67
- - `.marketing/BRAND.md` (lines 1 to `<!-- END_SUMMARY -->`)
68
- - `.marketing/ICP.md` (lines 1 to `<!-- END_SUMMARY -->`)
69
- - `.marketing/CHANNELS.md` (lines 1 to `<!-- END_SUMMARY -->`)
70
- - `.marketing/STATE.md` (frontmatter only)
71
- - `.marketing/CALENDAR.md` (lines 1 to `<!-- END_SUMMARY -->`)
72
- - `.marketing/COMPETITORS.md` (lines 1 to `<!-- END_SUMMARY -->`)
73
- - `.marketing/METRICS.md` (lines 1 to `<!-- END_SUMMARY -->`)
74
- - `.marketing/LEARNINGS.md` (lines 1 to `<!-- END_SUMMARY -->`)
93
+ from all 9 `.taketomarket/` reference files:
94
+
95
+ - `.taketomarket/POSITIONING.md` (lines 1 to `<!-- END_SUMMARY -->`)
96
+ - `.taketomarket/BRAND.md` (lines 1 to `<!-- END_SUMMARY -->`)
97
+ - `.taketomarket/ICP.md` (lines 1 to `<!-- END_SUMMARY -->`)
98
+ - `.taketomarket/CHANNELS.md` (lines 1 to `<!-- END_SUMMARY -->`)
99
+ - `.taketomarket/STATE.md` (frontmatter only)
100
+ - `.taketomarket/CALENDAR.md` (lines 1 to `<!-- END_SUMMARY -->`)
101
+ - `.taketomarket/COMPETITORS.md` (lines 1 to `<!-- END_SUMMARY -->`)
102
+ - `.taketomarket/METRICS.md` (lines 1 to `<!-- END_SUMMARY -->`)
103
+ - `.taketomarket/LEARNINGS.md` (lines 1 to `<!-- END_SUMMARY -->`)
75
104
 
76
105
  Read Tier 2 (full content) for:
77
- - `.marketing/METRICS.md` (needed for metric definitions and outcome/output classification)
78
- - `.marketing/CHANNELS.md` (needed for channel attribution mapping)
106
+ - `.taketomarket/METRICS.md` (needed for metric definitions and outcome/output classification)
107
+ - `.taketomarket/CHANNELS.md` (needed for channel attribution mapping)
79
108
 
80
109
  Read campaign-specific files (always full-load per context-loading.md rule 4):
81
- - `.marketing/CAMPAIGNS/${SLUG}/STATE.md`
82
- - `.marketing/CAMPAIGNS/${SLUG}/BRIEF.md`
110
+ - `.taketomarket/CAMPAIGNS/${SLUG}/STATE.md`
111
+ - `.taketomarket/CAMPAIGNS/${SLUG}/BRIEF.md`
83
112
 
84
113
  Extract from brief:
85
114
  - **Outcome metric:** name, target value, measurement window, data source
@@ -322,7 +351,7 @@ Preserve the original pasted/collected data for audit trail.
322
351
 
323
352
  Write completed report to:
324
353
  ```
325
- .marketing/CAMPAIGNS/${SLUG}/MEASUREMENT.md
354
+ .taketomarket/CAMPAIGNS/${SLUG}/MEASUREMENT.md
326
355
  ```
327
356
 
328
357
  ---
@@ -359,7 +388,7 @@ Display the Outcome Assessment section inline (the metrics table from Step 6).
359
388
  ```
360
389
  takeToMarket > MEASUREMENT COMPLETE
361
390
 
362
- Report written to: .marketing/CAMPAIGNS/${SLUG}/MEASUREMENT.md
391
+ Report written to: .taketomarket/CAMPAIGNS/${SLUG}/MEASUREMENT.md
363
392
  Analytics source: ${ANALYTICS_MODE}
364
393
  Outcome metric: ${OUTCOME_METRIC_NAME}
365
394
  Result: ${OUTCOME_MET} (${OUTCOME_DELTA} from target)
@@ -377,3 +406,10 @@ Next: Run /ttm-learn ${SLUG} to extract lessons and improve future campaigns.
377
406
  - [ ] MEASUREMENT.md written with outcome-first ordering
378
407
  - [ ] Campaign state updated with measure.* fields
379
408
  </checklist>
409
+
410
+ ## What if this doesn't fit?
411
+
412
+ Looks like /ttm-measure can't do that yet.
413
+
414
+ - Want a new skill? /ttm-request-skill
415
+ - Existing skill needs work? /ttm-improve-skill