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.
- package/.claude-plugin/marketplace.json +4 -4
- package/.claude-plugin/plugin.json +2 -2
- package/README.md +34 -11
- package/bin/lib/campaign.cjs +12 -8
- package/bin/lib/codebase-scan.cjs +86 -0
- package/bin/lib/config.cjs +129 -0
- package/bin/lib/deploy.cjs +36 -0
- package/bin/lib/deviation.cjs +1 -1
- package/bin/lib/drift-log.cjs +4 -4
- package/bin/lib/health.cjs +32 -31
- package/bin/lib/install-detect.cjs +62 -0
- package/bin/lib/legacy-folder.cjs +100 -0
- package/bin/lib/playwright-check.cjs +26 -0
- package/bin/lib/site-location.cjs +22 -0
- package/bin/lib/state.cjs +3 -3
- package/bin/lib/svg-render.cjs +42 -0
- package/bin/ttm-tools.cjs +136 -4
- package/gates/base-gates.md +8 -8
- package/gates/gate-evaluation.md +8 -8
- package/install.js +37 -3
- package/package.json +10 -6
- package/playbooks/aeo.md +218 -114
- package/playbooks/affiliate.md +225 -160
- package/playbooks/email.md +236 -174
- package/playbooks/events.md +303 -213
- package/playbooks/landing-pages.md +305 -0
- package/playbooks/linkedin.md +264 -142
- package/playbooks/manifesto.md +322 -0
- package/playbooks/paid-ads.md +240 -189
- package/playbooks/positioning.md +340 -0
- package/playbooks/pr-media.md +308 -168
- package/playbooks/pseo.md +426 -0
- package/playbooks/seo.md +251 -158
- package/playbooks/social.md +253 -182
- package/playbooks/youtube.md +286 -181
- package/references/brand-color-theory.md +48 -0
- package/references/codex-image-gen-research.md +58 -0
- package/references/context-loading.md +6 -6
- package/references/humanizer-patterns.md +433 -0
- package/references/inline-education-blurbs.md +461 -0
- package/references/landing-page-anatomy.md +64 -0
- package/references/linkedin-post-patterns.md +174 -0
- package/references/logo-design-principles.md +55 -0
- package/references/meta-gate-evaluation.md +3 -3
- package/references/obra-superpowers-conventions.md +170 -0
- package/references/playbook-leaders.md +472 -0
- package/references/playwright-mcp-setup.md +164 -0
- package/references/positioning-check-report.md +2 -2
- package/references/pseo-page-anatomy.md +56 -0
- package/references/pseo-templates/alternative-anatomy.md +31 -0
- package/references/pseo-templates/alternative-content-playbook.md +32 -0
- package/references/pseo-templates/blog-anatomy.md +28 -0
- package/references/pseo-templates/blog-content-playbook.md +36 -0
- package/references/pseo-templates/comparison-anatomy.md +29 -0
- package/references/pseo-templates/comparison-content-playbook.md +35 -0
- package/references/pseo-templates/use-case-anatomy.md +28 -0
- package/references/pseo-templates/use-case-content-playbook.md +30 -0
- package/skills/ttm-101/SKILL.md +25 -0
- package/skills/ttm-aeo-check/SKILL.md +17 -12
- package/skills/ttm-affiliate-kit/SKILL.md +5 -0
- package/skills/ttm-archive/SKILL.md +5 -0
- package/skills/ttm-brand-refresh/SKILL.md +5 -0
- package/skills/ttm-brief/SKILL.md +5 -0
- package/skills/ttm-competitor-scan/SKILL.md +5 -0
- package/skills/ttm-deploy/SKILL.md +22 -0
- package/skills/ttm-discover/SKILL.md +17 -0
- package/skills/ttm-email-check/SKILL.md +17 -0
- package/skills/ttm-email-preflight/SKILL.md +17 -11
- package/skills/ttm-fix/SKILL.md +5 -0
- package/skills/ttm-health/SKILL.md +6 -1
- package/skills/ttm-humanize/SKILL.md +33 -0
- package/skills/ttm-icp-refresh/SKILL.md +5 -0
- package/skills/ttm-improve-skill/SKILL.md +18 -0
- package/skills/ttm-init/SKILL.md +10 -3
- package/skills/ttm-keyword-map/SKILL.md +17 -11
- package/skills/ttm-landing/SKILL.md +19 -0
- package/skills/ttm-learn/SKILL.md +5 -0
- package/skills/ttm-linkedin-post/SKILL.md +26 -0
- package/skills/ttm-measure/SKILL.md +5 -0
- package/skills/ttm-new-campaign/SKILL.md +5 -0
- package/skills/ttm-next/SKILL.md +5 -0
- package/skills/ttm-playwright-setup/SKILL.md +18 -0
- package/skills/ttm-positioning-check/SKILL.md +5 -0
- package/skills/ttm-positioning-shift/SKILL.md +5 -0
- package/skills/ttm-produce/SKILL.md +5 -0
- package/skills/ttm-pseo/SKILL.md +26 -0
- package/skills/ttm-repurpose/SKILL.md +5 -0
- package/skills/ttm-request-skill/SKILL.md +18 -0
- package/skills/ttm-research/SKILL.md +18 -6
- package/skills/ttm-resume/SKILL.md +5 -0
- package/skills/ttm-review/SKILL.md +5 -0
- package/skills/ttm-seo/SKILL.md +64 -0
- package/skills/ttm-seo-audit/SKILL.md +17 -12
- package/skills/ttm-ship/SKILL.md +5 -0
- package/skills/ttm-state/SKILL.md +5 -0
- package/skills/ttm-update/SKILL.md +152 -4
- package/skills/ttm-verify/SKILL.md +5 -0
- package/templates/agents-md.md +14 -4
- package/templates/campaign-research.md +6 -6
- package/templates/campaign-state.md +1 -1
- package/templates/claude-md.md +14 -4
- package/templates/linkedin-base-template.md +48 -0
- package/templates/next-step-footer.md +13 -0
- package/templates/production-manifest.json +4 -4
- package/templates/pseo/alternative-cms-schema.json +65 -0
- package/templates/pseo/blog-cms-schema.json +55 -0
- package/templates/pseo/comparison-cms-schema.json +56 -0
- package/templates/pseo/use-case-cms-schema.json +62 -0
- package/templates/reference-files/brand.md +51 -0
- package/templates/reference-files/product-dna.md +73 -0
- package/templates/site-scaffold/app/globals.css +2 -0
- package/templates/site-scaffold/app/layout.tsx +17 -0
- package/templates/site-scaffold/app/page.tsx +33 -0
- package/templates/site-scaffold/app/robots.ts +8 -0
- package/templates/site-scaffold/app/sitemap.ts +10 -0
- package/templates/site-scaffold/app/tokens.css +21 -0
- package/templates/site-scaffold/components/Comparison.tsx +14 -0
- package/templates/site-scaffold/components/Faq.tsx +14 -0
- package/templates/site-scaffold/components/Features.tsx +14 -0
- package/templates/site-scaffold/components/FinalCta.tsx +17 -0
- package/templates/site-scaffold/components/Footer.tsx +12 -0
- package/templates/site-scaffold/components/Hero.tsx +22 -0
- package/templates/site-scaffold/components/HowItWorks.tsx +14 -0
- package/templates/site-scaffold/components/PricingTeaser.tsx +14 -0
- package/templates/site-scaffold/components/Problem.tsx +14 -0
- package/templates/site-scaffold/components/SocialProof.tsx +14 -0
- package/templates/site-scaffold/components/Solution.tsx +14 -0
- package/templates/site-scaffold/components/Testimonials.tsx +14 -0
- package/templates/site-scaffold/components/UseCases.tsx +14 -0
- package/templates/site-scaffold/content/.gitkeep +0 -0
- package/templates/site-scaffold/lib/.gitkeep +0 -0
- package/templates/site-scaffold/next.config.mjs +10 -0
- package/templates/site-scaffold/package.json +25 -0
- package/templates/site-scaffold/postcss.config.mjs +3 -0
- package/templates/site-scaffold/public/llms.txt +9 -0
- package/templates/site-scaffold/tsconfig.json +21 -0
- package/templates/verification-report.md +1 -1
- package/workflows/channel/linkedin-post.md +178 -0
- package/workflows/discipline/affiliate-kit.md +65 -6
- package/workflows/discipline/{email-preflight.md → email-check.md} +39 -4
- package/workflows/discipline/repurpose.md +82 -31
- package/workflows/discipline/{aeo-check.md → seo/aeo.md} +13 -6
- package/workflows/discipline/{seo-audit.md → seo/audit.md} +13 -6
- package/workflows/discipline/{keyword-map.md → seo/keyword-map.md} +13 -6
- package/workflows/education/ttm-101.md +114 -0
- package/workflows/lifecycle/brief-positioning-check.md +1 -1
- package/workflows/lifecycle/brief.md +64 -28
- package/workflows/lifecycle/{research.md → discover.md} +61 -19
- package/workflows/lifecycle/fix.md +72 -37
- package/workflows/lifecycle/humanize.md +280 -0
- package/workflows/lifecycle/learn.md +72 -35
- package/workflows/lifecycle/measure.md +54 -18
- package/workflows/lifecycle/produce.md +88 -37
- package/workflows/lifecycle/review.md +71 -25
- package/workflows/lifecycle/ship.md +62 -18
- package/workflows/lifecycle/verify.md +72 -26
- package/workflows/reference-mgmt/brand-refresh.md +50 -13
- package/workflows/reference-mgmt/competitor-scan.md +51 -15
- package/workflows/reference-mgmt/icp-refresh.md +48 -12
- package/workflows/reference-mgmt/positioning-check.md +55 -20
- package/workflows/reference-mgmt/positioning-shift.md +53 -17
- package/workflows/setup/init-brand-colors.md +75 -0
- package/workflows/setup/init-logo.md +113 -0
- package/workflows/setup/init-product-dna.md +83 -0
- package/workflows/setup/init-questions.md +166 -30
- package/workflows/setup/init-validation.md +22 -0
- package/workflows/setup/init.md +144 -39
- package/workflows/setup/new-campaign.md +48 -12
- package/workflows/site/deploy.md +98 -0
- package/workflows/site/landing.md +156 -0
- package/workflows/site/pseo.md +96 -0
- package/workflows/site/quality-gates.md +88 -0
- package/workflows/utility/archive.md +45 -9
- package/workflows/utility/health.md +77 -3
- package/workflows/utility/improve-skill.md +233 -0
- package/workflows/utility/next.md +38 -2
- package/workflows/utility/playwright-setup.md +128 -0
- package/workflows/utility/request-skill.md +218 -0
- package/workflows/utility/resume.md +40 -3
- 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 `.
|
|
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
|
-
- `.
|
|
70
|
-
- `.
|
|
71
|
-
- `.
|
|
72
|
-
- `.
|
|
73
|
-
- `.
|
|
74
|
-
- `.
|
|
75
|
-
- `.
|
|
76
|
-
- `.
|
|
77
|
-
- `.
|
|
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
|
-
- `.
|
|
81
|
-
- `.
|
|
82
|
-
- `.
|
|
83
|
-
- `.
|
|
109
|
+
- `.taketomarket/ICP.md`
|
|
110
|
+
- `.taketomarket/CHANNELS.md`
|
|
111
|
+
- `.taketomarket/METRICS.md`
|
|
112
|
+
- `.taketomarket/CALENDAR.md`
|
|
84
113
|
|
|
85
|
-
Read full `.
|
|
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
|
-
- `.
|
|
89
|
-
- `.
|
|
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-
|
|
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 `.
|
|
116
|
-
- If file contains only `[GENERATED BY /ttm-
|
|
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 `.
|
|
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 `.
|
|
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 `.
|
|
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 .
|
|
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 `.
|
|
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 .
|
|
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 .
|
|
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
|
-
- `.
|
|
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 `.
|
|
23
|
-
|
|
24
|
-
- `.
|
|
25
|
-
- `.
|
|
26
|
-
- `.
|
|
27
|
-
- `.
|
|
28
|
-
- `.
|
|
29
|
-
- `.
|
|
30
|
-
- `.
|
|
31
|
-
- `.
|
|
32
|
-
- `.
|
|
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
|
-
- `.
|
|
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 ".
|
|
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
|
-
- `.
|
|
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 `.
|
|
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
|
-
.
|
|
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 >
|
|
271
|
+
takeToMarket > DISCOVER COMPLETE
|
|
237
272
|
|
|
238
|
-
Research saved to .
|
|
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
|
-
- `.
|
|
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 `.
|
|
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
|
-
- `.
|
|
70
|
-
- `.
|
|
71
|
-
- `.
|
|
72
|
-
- `.
|
|
73
|
-
- `.
|
|
74
|
-
- `.
|
|
75
|
-
- `.
|
|
76
|
-
- `.
|
|
77
|
-
- `.
|
|
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
|
-
- `.
|
|
81
|
-
- `.
|
|
82
|
-
- `.
|
|
83
|
-
- `.
|
|
84
|
-
- `.
|
|
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
|
-
- `.
|
|
88
|
-
- `.
|
|
115
|
+
- `.taketomarket/CAMPAIGNS/${SLUG}/STATE.md`
|
|
116
|
+
- `.taketomarket/CAMPAIGNS/${SLUG}/BRIEF.md`
|
|
89
117
|
|
|
90
118
|
**Load MANIFEST.json:**
|
|
91
|
-
Read `.
|
|
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 `.
|
|
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
|
-
- `.
|
|
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: `.
|
|
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
|
-
`.
|
|
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]` -> `.
|
|
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: `.
|
|
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]` -> `.
|
|
228
|
-
- `[POSITIONING_PATH]` -> `.
|
|
229
|
-
- `[BRAND_PATH]` -> `.
|
|
230
|
-
- `[ICP_PATH]` -> `.
|
|
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]` -> `.
|
|
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 ".
|
|
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 `.
|
|
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 `.
|
|
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: .
|
|
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
|
-
- `.
|
|
492
|
-
- `.
|
|
493
|
-
- `.
|
|
494
|
-
- `.
|
|
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
|