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-verify` 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-verify
|
|
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-verify --raw` -- the JSON `seen` field is `true` once the explainer has run before.
|
|
12
|
+
|
|
13
|
+
### Explainer for `/ttm-verify`
|
|
14
|
+
|
|
15
|
+
`/ttm-verify` runs every produced asset through the quality-gate wall:
|
|
16
|
+
positioning invariant, factual accuracy, brand-voice match, channel-format
|
|
17
|
+
compliance, and outcome-metric instrumentation. Failures are written as
|
|
18
|
+
structured findings the `/ttm-fix` skill can act on; passes get marked
|
|
19
|
+
ready-to-ship.
|
|
20
|
+
|
|
21
|
+
Why it matters: in marketing, "looks good" is the bug. Without an automated
|
|
22
|
+
gate wall, you ship assets that subtly contradict your positioning and only
|
|
23
|
+
discover it weeks later in analytics. Verify is the marketing equivalent of
|
|
24
|
+
CI: cheap to run, expensive to skip.
|
|
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
|
Verification workflow for /ttm-verify. Evaluates every produced asset against
|
|
3
32
|
10 base quality gates (per D-06) with structured PASS/WARN/FAIL output and
|
|
@@ -15,7 +44,7 @@ context:fork (per LIFE-09, D-10). Tier 1 failures prompt for deviation action
|
|
|
15
44
|
<constraints>
|
|
16
45
|
## POSITIONING.md is READ-ONLY
|
|
17
46
|
|
|
18
|
-
**Do NOT modify `.
|
|
47
|
+
**Do NOT modify `.taketomarket/POSITIONING.md` during this workflow.**
|
|
19
48
|
|
|
20
49
|
POSITIONING.md is an architectural invariant. If you detect positioning drift:
|
|
21
50
|
- In verify: use the Escalate option to launch /ttm-positioning-shift
|
|
@@ -65,33 +94,33 @@ SLUG=$(echo "$ARGUMENTS" | sed 's/--text//g' | xargs)
|
|
|
65
94
|
If SLUG is empty, error: "Usage: /ttm-verify [campaign-slug]. Provide a campaign slug." Exit.
|
|
66
95
|
|
|
67
96
|
**Load Tier 1 summaries** from all 9 reference files (lines 1 to `<!-- END_SUMMARY -->`):
|
|
68
|
-
- `.
|
|
69
|
-
- `.
|
|
70
|
-
- `.
|
|
71
|
-
- `.
|
|
72
|
-
- `.
|
|
73
|
-
- `.
|
|
74
|
-
- `.
|
|
75
|
-
- `.
|
|
76
|
-
- `.
|
|
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`
|
|
77
106
|
|
|
78
107
|
**Load Tier 2 (full content)** for gate evaluation:
|
|
79
|
-
- `.
|
|
80
|
-
- `.
|
|
81
|
-
- `.
|
|
82
|
-
- `.
|
|
83
|
-
- `.
|
|
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)
|
|
84
113
|
|
|
85
114
|
**Load campaign-specific files** (always full-load per context-loading.md rule 4):
|
|
86
|
-
- `.
|
|
87
|
-
- `.
|
|
115
|
+
- `.taketomarket/CAMPAIGNS/${SLUG}/STATE.md`
|
|
116
|
+
- `.taketomarket/CAMPAIGNS/${SLUG}/BRIEF.md` (needed for GATE-04, GATE-05)
|
|
88
117
|
|
|
89
118
|
**Load MANIFEST.json:**
|
|
90
119
|
```bash
|
|
91
|
-
MANIFEST_PATH=".
|
|
120
|
+
MANIFEST_PATH=".taketomarket/CAMPAIGNS/${SLUG}/MANIFEST.json"
|
|
92
121
|
```
|
|
93
122
|
|
|
94
|
-
Read `.
|
|
123
|
+
Read `.taketomarket/CAMPAIGNS/${SLUG}/MANIFEST.json`. If the file does not exist, error:
|
|
95
124
|
"No production manifest found for campaign '${SLUG}'. Run /ttm-produce first."
|
|
96
125
|
Exit.
|
|
97
126
|
|
|
@@ -140,7 +169,7 @@ for each derivative in manifest.derivatives:
|
|
|
140
169
|
ASSETS.push({ name: derivative.name, file: derivative.file, type: derivative.type })
|
|
141
170
|
```
|
|
142
171
|
|
|
143
|
-
For each asset, read the file from `.
|
|
172
|
+
For each asset, read the file from `.taketomarket/CAMPAIGNS/${SLUG}/${asset.file}`.
|
|
144
173
|
|
|
145
174
|
If any asset file is missing from disk:
|
|
146
175
|
- Display warning: "Asset file not found: ${asset.file} -- skipping this asset"
|
|
@@ -237,7 +266,7 @@ Load detailed evaluation instructions:
|
|
|
237
266
|
node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" campaign list --raw
|
|
238
267
|
```
|
|
239
268
|
2. Include the current campaign (${SLUG}) in the evaluation even if not yet in "active" list
|
|
240
|
-
3. Read `.
|
|
269
|
+
3. Read `.taketomarket/CALENDAR.md` for quarterly theme and launch dates
|
|
241
270
|
4. Evaluate each meta-gate per the criteria in meta-gate-evaluation.md:
|
|
242
271
|
- META-01: Portfolio Balance (funnel stage + channel diversity)
|
|
243
272
|
- META-02: Calendar Collision (launch date overlap + audience collision)
|
|
@@ -411,7 +440,7 @@ from Step 6.
|
|
|
411
440
|
|
|
412
441
|
## Step 8: Write Verification Report
|
|
413
442
|
|
|
414
|
-
Write VERIFICATION.md to `.
|
|
443
|
+
Write VERIFICATION.md to `.taketomarket/CAMPAIGNS/${SLUG}/VERIFICATION.md`.
|
|
415
444
|
|
|
416
445
|
Use the templates/verification-report.md format. Include:
|
|
417
446
|
- YAML frontmatter: campaign slug, run number, date, total assets, overall result
|
|
@@ -480,8 +509,8 @@ Assets verified: ${ASSET_COUNT}
|
|
|
480
509
|
Tier 1 failures: [count] ([count] corrected, [count] accepted, [count] escalated)
|
|
481
510
|
Tier 2 advisories: [count]
|
|
482
511
|
|
|
483
|
-
Report: .
|
|
484
|
-
Deviations: .
|
|
512
|
+
Report: .taketomarket/CAMPAIGNS/${SLUG}/VERIFICATION.md
|
|
513
|
+
Deviations: .taketomarket/CAMPAIGNS/${SLUG}/DEVIATIONS.md
|
|
485
514
|
|
|
486
515
|
Next: Run /ttm-review ${SLUG} to conduct human review
|
|
487
516
|
```
|
|
@@ -502,6 +531,23 @@ Next: Run /ttm-review ${SLUG} to conduct human review
|
|
|
502
531
|
</success_criteria>
|
|
503
532
|
|
|
504
533
|
<output>
|
|
505
|
-
- `.
|
|
506
|
-
- `.
|
|
534
|
+
- `.taketomarket/CAMPAIGNS/${SLUG}/VERIFICATION.md` (verification report -- overwritten per run)
|
|
535
|
+
- `.taketomarket/CAMPAIGNS/${SLUG}/DEVIATIONS.md` (deviation log -- append-only, created on first Accept+log)
|
|
507
536
|
</output>
|
|
537
|
+
|
|
538
|
+
---
|
|
539
|
+
|
|
540
|
+
## Step: Landing/pSEO verify gates (conditional)
|
|
541
|
+
|
|
542
|
+
If any asset being verified is a landing-page or pSEO asset (detect by path under `landing_path` config):
|
|
543
|
+
|
|
544
|
+
Read and follow `${CLAUDE_PLUGIN_ROOT}/workflows/site/quality-gates.md`. Run gates 3 (performance budget) and 4 (mobile responsiveness) against the deployed URL recorded at `last_deploy_url` in CONFIG.md.
|
|
545
|
+
|
|
546
|
+
For v2.3.0 P4 this gate is SOFT: Playwright MCP integration ships in P5. Until then, document the budgets in the verification report and prompt the user to record manual Lighthouse + screenshot results.
|
|
547
|
+
|
|
548
|
+
## What if this doesn't fit?
|
|
549
|
+
|
|
550
|
+
Looks like /ttm-verify can't do that yet.
|
|
551
|
+
|
|
552
|
+
- Want a new skill? /ttm-request-skill
|
|
553
|
+
- 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-brand-refresh` 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-brand-refresh
|
|
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-brand-refresh --raw` -- the JSON `seen` field is `true` once the explainer has run before.
|
|
12
|
+
|
|
13
|
+
### Explainer for `/ttm-brand-refresh`
|
|
14
|
+
|
|
15
|
+
`/ttm-brand-refresh` updates `.taketomarket/BRAND.md`, the brand colors,
|
|
16
|
+
and the logo set. It re-asks the brand questions from init, regenerates
|
|
17
|
+
the color tokens, and either regenerates the logo or imports a new one
|
|
18
|
+
you supply. Existing campaigns get flagged for re-verification on brand
|
|
19
|
+
gates only.
|
|
20
|
+
|
|
21
|
+
Why it matters: brand and positioning are different invariants. You can
|
|
22
|
+
refresh brand (palette, logo, voice tweaks) without a full positioning
|
|
23
|
+
shift, and this skill keeps that boundary clean. Use it for visual
|
|
24
|
+
refreshes and voice retunes; use positioning-shift for what you're
|
|
25
|
+
actually saying.
|
|
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
|
Update BRAND.md with new proof points, deprecate expired ones, and refresh voice
|
|
3
33
|
guidelines. Validates all changes against POSITIONING.md invariant before writing.
|
|
@@ -12,7 +42,7 @@ Single-pass workflow per D-06.
|
|
|
12
42
|
<constraints>
|
|
13
43
|
## POSITIONING.md is READ-ONLY
|
|
14
44
|
|
|
15
|
-
**Do NOT modify `.
|
|
45
|
+
**Do NOT modify `.taketomarket/POSITIONING.md` during this workflow.**
|
|
16
46
|
|
|
17
47
|
POSITIONING.md is an architectural invariant. If you detect positioning drift:
|
|
18
48
|
- Flag the issue and recommend running /ttm-positioning-check
|
|
@@ -46,20 +76,20 @@ takeToMarket > LOADING CONTEXT
|
|
|
46
76
|
```
|
|
47
77
|
|
|
48
78
|
**Load Tier 1 summaries** from all 9 reference files (lines 1 to `<!-- END_SUMMARY -->`):
|
|
49
|
-
- `.
|
|
50
|
-
- `.
|
|
51
|
-
- `.
|
|
52
|
-
- `.
|
|
53
|
-
- `.
|
|
54
|
-
- `.
|
|
55
|
-
- `.
|
|
56
|
-
- `.
|
|
57
|
-
- `.
|
|
79
|
+
- `.taketomarket/POSITIONING.md`
|
|
80
|
+
- `.taketomarket/BRAND.md`
|
|
81
|
+
- `.taketomarket/ICP.md`
|
|
82
|
+
- `.taketomarket/CHANNELS.md`
|
|
83
|
+
- `.taketomarket/STATE.md` (frontmatter only)
|
|
84
|
+
- `.taketomarket/CALENDAR.md`
|
|
85
|
+
- `.taketomarket/COMPETITORS.md`
|
|
86
|
+
- `.taketomarket/METRICS.md`
|
|
87
|
+
- `.taketomarket/LEARNINGS.md`
|
|
58
88
|
|
|
59
89
|
**Load Tier 2 (full content)** for the file being refreshed:
|
|
60
|
-
- `.
|
|
90
|
+
- `.taketomarket/BRAND.md`
|
|
61
91
|
|
|
62
|
-
If `.
|
|
92
|
+
If `.taketomarket/BRAND.md` does not exist, error:
|
|
63
93
|
"BRAND.md not found. Run /ttm-init first to set up your marketing system."
|
|
64
94
|
Exit.
|
|
65
95
|
|
|
@@ -144,7 +174,7 @@ Ask user to revise the conflicting item or skip it.
|
|
|
144
174
|
|
|
145
175
|
## Step 4: Write Updated BRAND.md
|
|
146
176
|
|
|
147
|
-
Apply validated changes to `.
|
|
177
|
+
Apply validated changes to `.taketomarket/BRAND.md`:
|
|
148
178
|
|
|
149
179
|
- **Deprecated proof points:** Mark with `[DEPRECATED: YYYY-MM-DD, reason]` suffix in
|
|
150
180
|
the Claim column. Do NOT delete rows -- preserve history.
|
|
@@ -191,3 +221,10 @@ Next: Run /ttm-positioning-check to verify alignment across recent assets
|
|
|
191
221
|
- [ ] Summary markers (<!-- _SUMMARY --> / <!-- END_SUMMARY -->) preserved
|
|
192
222
|
- [ ] Completion banner displayed with changed sections
|
|
193
223
|
</success_criteria>
|
|
224
|
+
|
|
225
|
+
## What if this doesn't fit?
|
|
226
|
+
|
|
227
|
+
Looks like /ttm-brand-refresh can't do that yet.
|
|
228
|
+
|
|
229
|
+
- Want a new skill? /ttm-request-skill
|
|
230
|
+
- 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-competitor-scan` 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-competitor-scan
|
|
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-competitor-scan --raw` -- the JSON `seen` field is `true` once the explainer has run before.
|
|
12
|
+
|
|
13
|
+
### Explainer for `/ttm-competitor-scan`
|
|
14
|
+
|
|
15
|
+
`/ttm-competitor-scan` surveys your declared competitors' positioning,
|
|
16
|
+
recent campaigns, and channel mix, then writes a structured comparison
|
|
17
|
+
into `.taketomarket/COMPETITORS.md`. Discover and brief consume this to
|
|
18
|
+
avoid sounding identical to whoever you're against.
|
|
19
|
+
|
|
20
|
+
Why it matters: differentiation is a verifiable property only if you
|
|
21
|
+
have an explicit competitor reference. Without one, your assets drift
|
|
22
|
+
toward the category mean because that's what the model has seen most.
|
|
23
|
+
Run this periodically -- competitor positioning is the input that
|
|
24
|
+
goes stalest fastest.
|
|
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
|
On-demand competitor analysis that updates COMPETITORS.md with new intelligence.
|
|
3
32
|
Detects WebSearch/WebFetch MCP tools for automated research; falls back to manual
|
|
@@ -13,7 +42,7 @@ differentiation gaps and opportunities. Single-pass workflow per D-06 and D-09.
|
|
|
13
42
|
<constraints>
|
|
14
43
|
## POSITIONING.md is READ-ONLY
|
|
15
44
|
|
|
16
|
-
**Do NOT modify `.
|
|
45
|
+
**Do NOT modify `.taketomarket/POSITIONING.md` during this workflow.**
|
|
17
46
|
|
|
18
47
|
POSITIONING.md is an architectural invariant. If you detect positioning drift:
|
|
19
48
|
- Flag the issue and recommend running /ttm-positioning-check
|
|
@@ -47,21 +76,21 @@ takeToMarket > LOADING CONTEXT
|
|
|
47
76
|
```
|
|
48
77
|
|
|
49
78
|
**Load Tier 1 summaries** from all 9 reference files (lines 1 to `<!-- END_SUMMARY -->`):
|
|
50
|
-
- `.
|
|
51
|
-
- `.
|
|
52
|
-
- `.
|
|
53
|
-
- `.
|
|
54
|
-
- `.
|
|
55
|
-
- `.
|
|
56
|
-
- `.
|
|
57
|
-
- `.
|
|
58
|
-
- `.
|
|
79
|
+
- `.taketomarket/POSITIONING.md`
|
|
80
|
+
- `.taketomarket/BRAND.md`
|
|
81
|
+
- `.taketomarket/ICP.md`
|
|
82
|
+
- `.taketomarket/CHANNELS.md`
|
|
83
|
+
- `.taketomarket/STATE.md` (frontmatter only)
|
|
84
|
+
- `.taketomarket/CALENDAR.md`
|
|
85
|
+
- `.taketomarket/COMPETITORS.md`
|
|
86
|
+
- `.taketomarket/METRICS.md`
|
|
87
|
+
- `.taketomarket/LEARNINGS.md`
|
|
59
88
|
|
|
60
89
|
**Load Tier 2 (full content)** for analysis:
|
|
61
|
-
- `.
|
|
62
|
-
- `.
|
|
90
|
+
- `.taketomarket/COMPETITORS.md`
|
|
91
|
+
- `.taketomarket/POSITIONING.md`
|
|
63
92
|
|
|
64
|
-
If `.
|
|
93
|
+
If `.taketomarket/COMPETITORS.md` does not exist, error:
|
|
65
94
|
"COMPETITORS.md not found. Run /ttm-init first to set up your marketing system."
|
|
66
95
|
Exit.
|
|
67
96
|
|
|
@@ -180,7 +209,7 @@ Validate all proposed updates:
|
|
|
180
209
|
- No update contradicts POSITIONING.md differentiator or must-not-say terms
|
|
181
210
|
- Gap opportunities align with our positioning scope
|
|
182
211
|
|
|
183
|
-
Write updated `.
|
|
212
|
+
Write updated `.taketomarket/COMPETITORS.md`:
|
|
184
213
|
- Update existing competitor entries with new findings (positioning, strengths, weaknesses)
|
|
185
214
|
- Add new competitors with full profiles (name, positioning, strength, weakness)
|
|
186
215
|
- Mark inactive competitors with `[INACTIVE: YYYY-MM-DD]` suffix in name column
|
|
@@ -207,7 +236,7 @@ Positioning overlaps detected: ${OVERLAP_COUNT}
|
|
|
207
236
|
Research method: ${SEARCH_MODE}
|
|
208
237
|
|
|
209
238
|
Next steps:
|
|
210
|
-
- Review updated .
|
|
239
|
+
- Review updated .taketomarket/COMPETITORS.md
|
|
211
240
|
- Run /ttm-positioning-check if overlaps concern you
|
|
212
241
|
```
|
|
213
242
|
|
|
@@ -226,3 +255,10 @@ Next steps:
|
|
|
226
255
|
- [ ] COMPETITORS.md updated with preserved structure and summary markers
|
|
227
256
|
- [ ] Completion banner displayed with scan results
|
|
228
257
|
</success_criteria>
|
|
258
|
+
|
|
259
|
+
## What if this doesn't fit?
|
|
260
|
+
|
|
261
|
+
Looks like /ttm-competitor-scan can't do that yet.
|
|
262
|
+
|
|
263
|
+
- Want a new skill? /ttm-request-skill
|
|
264
|
+
- 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-icp-refresh` 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-icp-refresh
|
|
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-icp-refresh --raw` -- the JSON `seen` field is `true` once the explainer has run before.
|
|
12
|
+
|
|
13
|
+
### Explainer for `/ttm-icp-refresh`
|
|
14
|
+
|
|
15
|
+
`/ttm-icp-refresh` updates `.taketomarket/ICP.md` -- the Ideal Customer
|
|
16
|
+
Profile reference. It asks updated questions about the audience: their
|
|
17
|
+
jobs, pains, sophistication level, channels, and the exact words they
|
|
18
|
+
use. The new ICP propagates to every brief written afterward.
|
|
19
|
+
|
|
20
|
+
Why it matters: ICPs drift as your real customer base shifts away from
|
|
21
|
+
who you thought you were selling to. If your last three campaigns
|
|
22
|
+
under-performed and you can't explain why, the ICP doc is usually six
|
|
23
|
+
months stale. Refresh is cheap insurance against marketing to a
|
|
24
|
+
customer who no longer exists.
|
|
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
|
Update ICP.md from new customer data (calls, reviews, feedback, surveys). Validates
|
|
3
32
|
all changes against POSITIONING.md target audience field before writing. Single-pass
|
|
@@ -12,7 +41,7 @@ workflow per D-06.
|
|
|
12
41
|
<constraints>
|
|
13
42
|
## POSITIONING.md is READ-ONLY
|
|
14
43
|
|
|
15
|
-
**Do NOT modify `.
|
|
44
|
+
**Do NOT modify `.taketomarket/POSITIONING.md` during this workflow.**
|
|
16
45
|
|
|
17
46
|
POSITIONING.md is an architectural invariant. If you detect positioning drift:
|
|
18
47
|
- Flag the issue and recommend running /ttm-positioning-check
|
|
@@ -46,20 +75,20 @@ takeToMarket > LOADING CONTEXT
|
|
|
46
75
|
```
|
|
47
76
|
|
|
48
77
|
**Load Tier 1 summaries** from all 9 reference files (lines 1 to `<!-- END_SUMMARY -->`):
|
|
49
|
-
- `.
|
|
50
|
-
- `.
|
|
51
|
-
- `.
|
|
52
|
-
- `.
|
|
53
|
-
- `.
|
|
54
|
-
- `.
|
|
55
|
-
- `.
|
|
56
|
-
- `.
|
|
57
|
-
- `.
|
|
78
|
+
- `.taketomarket/POSITIONING.md`
|
|
79
|
+
- `.taketomarket/BRAND.md`
|
|
80
|
+
- `.taketomarket/ICP.md`
|
|
81
|
+
- `.taketomarket/CHANNELS.md`
|
|
82
|
+
- `.taketomarket/STATE.md` (frontmatter only)
|
|
83
|
+
- `.taketomarket/CALENDAR.md`
|
|
84
|
+
- `.taketomarket/COMPETITORS.md`
|
|
85
|
+
- `.taketomarket/METRICS.md`
|
|
86
|
+
- `.taketomarket/LEARNINGS.md`
|
|
58
87
|
|
|
59
88
|
**Load Tier 2 (full content)** for the file being refreshed:
|
|
60
|
-
- `.
|
|
89
|
+
- `.taketomarket/ICP.md`
|
|
61
90
|
|
|
62
|
-
If `.
|
|
91
|
+
If `.taketomarket/ICP.md` does not exist, error:
|
|
63
92
|
"ICP.md not found. Run /ttm-init first to set up your marketing system."
|
|
64
93
|
Exit.
|
|
65
94
|
|
|
@@ -198,3 +227,10 @@ Next: Run /ttm-positioning-check to verify alignment across recent assets
|
|
|
198
227
|
- [ ] Summary markers (<!-- _SUMMARY --> / <!-- END_SUMMARY -->) preserved
|
|
199
228
|
- [ ] Completion banner displayed with changed sections
|
|
200
229
|
</success_criteria>
|
|
230
|
+
|
|
231
|
+
## What if this doesn't fit?
|
|
232
|
+
|
|
233
|
+
Looks like /ttm-icp-refresh can't do that yet.
|
|
234
|
+
|
|
235
|
+
- Want a new skill? /ttm-request-skill
|
|
236
|
+
- Existing skill needs work? /ttm-improve-skill
|
|
@@ -1,8 +1,36 @@
|
|
|
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-positioning-check` 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-positioning-check
|
|
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-positioning-check --raw` -- the JSON `seen` field is `true` once the explainer has run before.
|
|
12
|
+
|
|
13
|
+
### Explainer for `/ttm-positioning-check`
|
|
14
|
+
|
|
15
|
+
`/ttm-positioning-check` audits a campaign's brief and assets against the
|
|
16
|
+
positioning invariant declared in POSITIONING.md. Output is a drift report:
|
|
17
|
+
which claims diverge, by how much, and whether the drift is small enough to
|
|
18
|
+
correct in-place or large enough to require a positioning shift.
|
|
19
|
+
|
|
20
|
+
Why it matters: positioning drift is the single most common cause of
|
|
21
|
+
inconsistent marketing across a year. This skill is the linter for that --
|
|
22
|
+
run it after producing if anything feels off, and absolutely run it before
|
|
23
|
+
shipping a campaign that hits a new channel or audience.
|
|
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
|
Positioning drift audit workflow for /ttm-positioning-check. Samples recent assets
|
|
3
31
|
across all campaigns within a configurable time window (default 30 days per D-01),
|
|
4
32
|
evaluates each against GATE-01 positioning drift checks, generates a structured
|
|
5
|
-
audit report, and appends the results to .
|
|
33
|
+
audit report, and appends the results to .taketomarket/DRIFT-LOG.md.
|
|
6
34
|
|
|
7
35
|
This workflow can be invoked manually or auto-suggested by the ship workflow
|
|
8
36
|
after every 3rd campaign ships since the last audit (per D-02).
|
|
@@ -17,7 +45,7 @@ after every 3rd campaign ships since the last audit (per D-02).
|
|
|
17
45
|
<constraints>
|
|
18
46
|
## POSITIONING.md is READ-ONLY
|
|
19
47
|
|
|
20
|
-
**Do NOT modify `.
|
|
48
|
+
**Do NOT modify `.taketomarket/POSITIONING.md` during this workflow.**
|
|
21
49
|
|
|
22
50
|
POSITIONING.md is an architectural invariant. If you detect positioning drift:
|
|
23
51
|
- In verify: use the Escalate option to launch /ttm-positioning-shift
|
|
@@ -60,20 +88,20 @@ takeToMarket > LOADING CONTEXT FOR POSITIONING AUDIT
|
|
|
60
88
|
```
|
|
61
89
|
|
|
62
90
|
**Load Tier 1 summaries** from all 9 reference files (lines 1 to `<!-- END_SUMMARY -->`):
|
|
63
|
-
- `.
|
|
64
|
-
- `.
|
|
65
|
-
- `.
|
|
66
|
-
- `.
|
|
67
|
-
- `.
|
|
68
|
-
- `.
|
|
69
|
-
- `.
|
|
70
|
-
- `.
|
|
71
|
-
- `.
|
|
91
|
+
- `.taketomarket/POSITIONING.md`
|
|
92
|
+
- `.taketomarket/BRAND.md`
|
|
93
|
+
- `.taketomarket/ICP.md`
|
|
94
|
+
- `.taketomarket/CHANNELS.md`
|
|
95
|
+
- `.taketomarket/STATE.md` (frontmatter only)
|
|
96
|
+
- `.taketomarket/CALENDAR.md`
|
|
97
|
+
- `.taketomarket/COMPETITORS.md`
|
|
98
|
+
- `.taketomarket/METRICS.md`
|
|
99
|
+
- `.taketomarket/LEARNINGS.md`
|
|
72
100
|
|
|
73
101
|
**Load Tier 2 (full content)** for drift evaluation:
|
|
74
|
-
- `.
|
|
102
|
+
- `.taketomarket/POSITIONING.md` (needed for all 3 GATE-01 checks)
|
|
75
103
|
|
|
76
|
-
If `.
|
|
104
|
+
If `.taketomarket/POSITIONING.md` does not exist: Error:
|
|
77
105
|
"No POSITIONING.md found. Run /ttm-init first to set up your marketing workspace."
|
|
78
106
|
Exit.
|
|
79
107
|
|
|
@@ -125,10 +153,10 @@ Exit.
|
|
|
125
153
|
For each campaign in the result:
|
|
126
154
|
1. Read the campaign's ASSETS/ directory:
|
|
127
155
|
```
|
|
128
|
-
Glob: .
|
|
156
|
+
Glob: .taketomarket/CAMPAIGNS/${SLUG}/ASSETS/*
|
|
129
157
|
```
|
|
130
158
|
2. Collect all asset files found
|
|
131
|
-
3. Also read `.
|
|
159
|
+
3. Also read `.taketomarket/CAMPAIGNS/${SLUG}/DEVIATIONS.md` if it exists
|
|
132
160
|
- Filter for rows where Gate = `positioning_drift` (GATE-01 deviations per D-13)
|
|
133
161
|
- Store these as accepted deviations for the cross-reference section
|
|
134
162
|
|
|
@@ -238,7 +266,7 @@ These values feed into the Bleeding Analysis section of the report generated in
|
|
|
238
266
|
|
|
239
267
|
## Step 6: Trend Comparison
|
|
240
268
|
|
|
241
|
-
Read `.
|
|
269
|
+
Read `.taketomarket/DRIFT-LOG.md`. Find the most recent entry with Event = `audit`.
|
|
242
270
|
|
|
243
271
|
**If a prior audit entry exists (per D-03):**
|
|
244
272
|
1. Parse the Details column to extract the prior aggregate drift percentage
|
|
@@ -279,7 +307,7 @@ not scoped to a single campaign directory).
|
|
|
279
307
|
|
|
280
308
|
## Step 8: Log to DRIFT-LOG.md
|
|
281
309
|
|
|
282
|
-
Append the audit results to `.
|
|
310
|
+
Append the audit results to `.taketomarket/DRIFT-LOG.md` via CLI:
|
|
283
311
|
|
|
284
312
|
```bash
|
|
285
313
|
node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" drift-log append \
|
|
@@ -295,7 +323,7 @@ consistent formatting.
|
|
|
295
323
|
|
|
296
324
|
Display:
|
|
297
325
|
```
|
|
298
|
-
takeToMarket > AUDIT LOGGED TO .
|
|
326
|
+
takeToMarket > AUDIT LOGGED TO .taketomarket/DRIFT-LOG.md
|
|
299
327
|
```
|
|
300
328
|
|
|
301
329
|
---
|
|
@@ -311,7 +339,7 @@ Window: last ${WINDOW} | Assets audited: ${ASSET_COUNT}
|
|
|
311
339
|
Aggregate drift: ${AGGREGATE_DRIFT}% ${TREND_ARROW}
|
|
312
340
|
Campaigns covered: ${CAMPAIGN_COUNT}
|
|
313
341
|
|
|
314
|
-
Drift logged to: .
|
|
342
|
+
Drift logged to: .taketomarket/DRIFT-LOG.md
|
|
315
343
|
|
|
316
344
|
Next steps:
|
|
317
345
|
- Run /ttm-fix [campaign-slug] to address specific FAIL results
|
|
@@ -335,5 +363,12 @@ Next steps:
|
|
|
335
363
|
|
|
336
364
|
<output>
|
|
337
365
|
- Audit report displayed to stdout (cross-campaign, no file written)
|
|
338
|
-
- `.
|
|
366
|
+
- `.taketomarket/DRIFT-LOG.md` updated with audit entry via CLI
|
|
339
367
|
</output>
|
|
368
|
+
|
|
369
|
+
## What if this doesn't fit?
|
|
370
|
+
|
|
371
|
+
Looks like /ttm-positioning-check can't do that yet.
|
|
372
|
+
|
|
373
|
+
- Want a new skill? /ttm-request-skill
|
|
374
|
+
- Existing skill needs work? /ttm-improve-skill
|