taketomarket 0.1.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/plugin.json +10 -0
- package/LICENSE +21 -0
- package/README.md +419 -0
- package/agents/ttm-producer.md +53 -0
- package/bin/lib/campaign.cjs +553 -0
- package/bin/lib/commit.cjs +105 -0
- package/bin/lib/core.cjs +172 -0
- package/bin/lib/deviation.cjs +149 -0
- package/bin/lib/drift-log.cjs +219 -0
- package/bin/lib/health.cjs +438 -0
- package/bin/lib/slug.cjs +59 -0
- package/bin/lib/state.cjs +96 -0
- package/bin/ttm-tools.cjs +157 -0
- package/gates/base-gates.md +266 -0
- package/gates/discipline/.gitkeep +0 -0
- package/gates/gate-evaluation.md +341 -0
- package/gates/meta-gates.md +19 -0
- package/install.js +307 -0
- package/package.json +53 -0
- package/playbooks/.gitkeep +0 -0
- package/playbooks/aeo.md +223 -0
- package/playbooks/affiliate.md +272 -0
- package/playbooks/base.md +110 -0
- package/playbooks/email.md +306 -0
- package/playbooks/events.md +320 -0
- package/playbooks/linkedin.md +263 -0
- package/playbooks/paid-ads.md +318 -0
- package/playbooks/pr-media.md +296 -0
- package/playbooks/seo.md +284 -0
- package/playbooks/social.md +305 -0
- package/playbooks/youtube.md +325 -0
- package/references/context-loading.md +107 -0
- package/references/learnings-extraction.md +94 -0
- package/references/measurement-template.md +48 -0
- package/references/meta-gate-evaluation.md +169 -0
- package/references/positioning-check-report.md +197 -0
- package/references/review-checklist.md +78 -0
- package/references/ship-checklist-items.md +94 -0
- package/settings.json +4 -0
- package/skills/ttm-aeo-check/SKILL.md +20 -0
- package/skills/ttm-affiliate-kit/SKILL.md +19 -0
- package/skills/ttm-archive/SKILL.md +13 -0
- package/skills/ttm-brand-refresh/SKILL.md +19 -0
- package/skills/ttm-brief/SKILL.md +14 -0
- package/skills/ttm-competitor-scan/SKILL.md +19 -0
- package/skills/ttm-email-preflight/SKILL.md +19 -0
- package/skills/ttm-fix/SKILL.md +13 -0
- package/skills/ttm-health/SKILL.md +12 -0
- package/skills/ttm-icp-refresh/SKILL.md +19 -0
- package/skills/ttm-init/SKILL.md +12 -0
- package/skills/ttm-keyword-map/SKILL.md +19 -0
- package/skills/ttm-learn/SKILL.md +14 -0
- package/skills/ttm-measure/SKILL.md +14 -0
- package/skills/ttm-new-campaign/SKILL.md +13 -0
- package/skills/ttm-next/SKILL.md +12 -0
- package/skills/ttm-positioning-check/SKILL.md +19 -0
- package/skills/ttm-positioning-shift/SKILL.md +19 -0
- package/skills/ttm-produce/SKILL.md +14 -0
- package/skills/ttm-repurpose/SKILL.md +20 -0
- package/skills/ttm-research/SKILL.md +13 -0
- package/skills/ttm-resume/SKILL.md +13 -0
- package/skills/ttm-review/SKILL.md +13 -0
- package/skills/ttm-seo-audit/SKILL.md +20 -0
- package/skills/ttm-ship/SKILL.md +13 -0
- package/skills/ttm-state/SKILL.md +13 -0
- package/skills/ttm-verify/SKILL.md +14 -0
- package/templates/agents-md.md +65 -0
- package/templates/campaign-brief.md +74 -0
- package/templates/campaign-research.md +39 -0
- package/templates/campaign-state.md +40 -0
- package/templates/claude-md.md +65 -0
- package/templates/deviation-log.md +12 -0
- package/templates/drift-log.md +17 -0
- package/templates/fix-brief.md +59 -0
- package/templates/fix-log.md +22 -0
- package/templates/measurement-report.md +75 -0
- package/templates/migration-plan.md +24 -0
- package/templates/production-manifest.json +20 -0
- package/templates/reference-files/brand.md +45 -0
- package/templates/reference-files/calendar.md +30 -0
- package/templates/reference-files/channels.md +40 -0
- package/templates/reference-files/competitors.md +40 -0
- package/templates/reference-files/icp.md +50 -0
- package/templates/reference-files/learnings.md +40 -0
- package/templates/reference-files/metrics.md +42 -0
- package/templates/reference-files/positioning.md +38 -0
- package/templates/reference-files/state.md +27 -0
- package/templates/verification-report.md +59 -0
- package/workflows/discipline/.gitkeep +0 -0
- package/workflows/discipline/aeo-check.md +180 -0
- package/workflows/discipline/affiliate-kit.md +147 -0
- package/workflows/discipline/email-preflight.md +150 -0
- package/workflows/discipline/keyword-map.md +125 -0
- package/workflows/discipline/repurpose.md +329 -0
- package/workflows/discipline/seo-audit.md +169 -0
- package/workflows/lifecycle/.gitkeep +0 -0
- package/workflows/lifecycle/brief-positioning-check.md +90 -0
- package/workflows/lifecycle/brief.md +355 -0
- package/workflows/lifecycle/fix.md +495 -0
- package/workflows/lifecycle/learn.md +405 -0
- package/workflows/lifecycle/measure.md +379 -0
- package/workflows/lifecycle/produce.md +383 -0
- package/workflows/lifecycle/research.md +264 -0
- package/workflows/lifecycle/review.md +432 -0
- package/workflows/lifecycle/ship.md +521 -0
- package/workflows/lifecycle/verify.md +507 -0
- package/workflows/reference-mgmt/.gitkeep +0 -0
- package/workflows/reference-mgmt/brand-refresh.md +193 -0
- package/workflows/reference-mgmt/competitor-scan.md +228 -0
- package/workflows/reference-mgmt/icp-refresh.md +200 -0
- package/workflows/reference-mgmt/positioning-check.md +339 -0
- package/workflows/reference-mgmt/positioning-shift.md +368 -0
- package/workflows/setup/.gitkeep +0 -0
- package/workflows/setup/init-questions.md +225 -0
- package/workflows/setup/init-validation.md +155 -0
- package/workflows/setup/init.md +449 -0
- package/workflows/setup/new-campaign.md +134 -0
- package/workflows/utility/.gitkeep +0 -0
- package/workflows/utility/archive.md +334 -0
- package/workflows/utility/health.md +166 -0
- package/workflows/utility/next.md +187 -0
- package/workflows/utility/resume.md +249 -0
- package/workflows/utility/state.md +207 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
<!-- _SUMMARY: Tier 1 context (loaded universally, <200 words) -->
|
|
2
|
+
## Summary
|
|
3
|
+
**Primary segment:** [GENERATED BY /ttm-init]
|
|
4
|
+
**JTBD:** [GENERATED BY /ttm-init]
|
|
5
|
+
**Top 3 pains:**
|
|
6
|
+
- [GENERATED BY /ttm-init]
|
|
7
|
+
- [GENERATED BY /ttm-init]
|
|
8
|
+
- [GENERATED BY /ttm-init]
|
|
9
|
+
**Anti-ICP:** [GENERATED BY /ttm-init]
|
|
10
|
+
<!-- END_SUMMARY -->
|
|
11
|
+
|
|
12
|
+
## Primary Segment
|
|
13
|
+
|
|
14
|
+
### Demographics
|
|
15
|
+
[GENERATED BY /ttm-init -- Role, company size, industry, geography]
|
|
16
|
+
|
|
17
|
+
### Psychographics
|
|
18
|
+
[GENERATED BY /ttm-init -- Motivations, fears, aspirations, values]
|
|
19
|
+
|
|
20
|
+
## Jobs-to-Be-Done
|
|
21
|
+
|
|
22
|
+
| Job | Priority | Current Solution |
|
|
23
|
+
|-----|----------|-----------------|
|
|
24
|
+
| [GENERATED BY /ttm-init] | [high/medium/low] | [what they use today] |
|
|
25
|
+
|
|
26
|
+
## Pains and Triggers
|
|
27
|
+
|
|
28
|
+
### Pain Points
|
|
29
|
+
| Pain | Severity | Frequency |
|
|
30
|
+
|------|----------|-----------|
|
|
31
|
+
| [GENERATED BY /ttm-init] | [high/medium/low] | [daily/weekly/monthly] |
|
|
32
|
+
|
|
33
|
+
### Buying Triggers
|
|
34
|
+
[GENERATED BY /ttm-init -- Events that trigger purchase consideration]
|
|
35
|
+
|
|
36
|
+
## Anti-ICP Profile
|
|
37
|
+
|
|
38
|
+
[GENERATED BY /ttm-init -- Who we explicitly do NOT target and why]
|
|
39
|
+
|
|
40
|
+
| Characteristic | Why Excluded |
|
|
41
|
+
|---------------|-------------|
|
|
42
|
+
| [GENERATED BY /ttm-init] | [GENERATED BY /ttm-init] |
|
|
43
|
+
|
|
44
|
+
## Customer Language Library
|
|
45
|
+
|
|
46
|
+
[GENERATED BY /ttm-init -- Exact phrases customers use to describe their problems]
|
|
47
|
+
|
|
48
|
+
| Context | Phrase | Source |
|
|
49
|
+
|---------|--------|--------|
|
|
50
|
+
| [GENERATED BY /ttm-init] | [exact quote] | [interview/review/support ticket] |
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
<!-- _SUMMARY: Tier 1 context (loaded universally, <200 words) -->
|
|
2
|
+
## Summary
|
|
3
|
+
**Total lessons:** [GENERATED BY /ttm-init -- starts at 0]
|
|
4
|
+
**Last lesson date:** [GENERATED BY /ttm-init -- none until first Learn phase]
|
|
5
|
+
**Top pattern:** [GENERATED BY /ttm-init -- none until enough data]
|
|
6
|
+
<!-- END_SUMMARY -->
|
|
7
|
+
|
|
8
|
+
## Root-Cause Taxonomy
|
|
9
|
+
|
|
10
|
+
Every lesson is categorized into one of these root causes:
|
|
11
|
+
|
|
12
|
+
| Category | Description | Example |
|
|
13
|
+
|----------|-------------|---------|
|
|
14
|
+
| positioning-drift | Asset deviated from POSITIONING.md | "Used competitor's language instead of ours" |
|
|
15
|
+
| weak-hook | Opening failed to capture attention | "Blog intro was generic, no specific pain addressed" |
|
|
16
|
+
| wrong-channel | Content published on ineffective channel | "Technical deep-dive posted on Instagram" |
|
|
17
|
+
| bad-timing | Published at wrong time or wrong cadence | "Product launch email sent during holiday weekend" |
|
|
18
|
+
| unverifiable-claim | Claim lacked proof point or source | "Said 'industry-leading' with no data backing" |
|
|
19
|
+
| broken-funnel | CTA or conversion path was broken | "Landing page linked to wrong signup form" |
|
|
20
|
+
| creative-fatigue | Repeated format/angle with diminishing returns | "Fifth 'how-to' post in a row, engagement dropped 40%" |
|
|
21
|
+
|
|
22
|
+
## Lessons Log
|
|
23
|
+
|
|
24
|
+
| Date | Campaign | Category | Lesson | Action Taken |
|
|
25
|
+
|------|----------|----------|--------|-------------|
|
|
26
|
+
<!-- LESSONS BELOW THIS LINE -->
|
|
27
|
+
|
|
28
|
+
## Pattern Extraction
|
|
29
|
+
|
|
30
|
+
### Winning Hooks
|
|
31
|
+
[Populated after 3+ campaigns -- patterns in high-performing openings]
|
|
32
|
+
|
|
33
|
+
### Winning Angles
|
|
34
|
+
[Populated after 3+ campaigns -- recurring themes that resonate]
|
|
35
|
+
|
|
36
|
+
### Winning Formats
|
|
37
|
+
[Populated after 3+ campaigns -- content formats with best ROI]
|
|
38
|
+
|
|
39
|
+
### Anti-Patterns
|
|
40
|
+
[Populated after 3+ campaigns -- approaches that consistently underperform]
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
<!-- _SUMMARY: Tier 1 context (loaded universally, <200 words) -->
|
|
2
|
+
## Summary
|
|
3
|
+
**Primary outcome metric:** [GENERATED BY /ttm-init]
|
|
4
|
+
**Secondary metrics:** [GENERATED BY /ttm-init]
|
|
5
|
+
**Attribution model:** [GENERATED BY /ttm-init]
|
|
6
|
+
<!-- END_SUMMARY -->
|
|
7
|
+
|
|
8
|
+
## Primary Outcome Metric
|
|
9
|
+
|
|
10
|
+
**Metric:** [GENERATED BY /ttm-init]
|
|
11
|
+
**Target:** [GENERATED BY /ttm-init]
|
|
12
|
+
**Measurement window:** [GENERATED BY /ttm-init]
|
|
13
|
+
**Data source:** [GENERATED BY /ttm-init]
|
|
14
|
+
|
|
15
|
+
## Secondary Metrics
|
|
16
|
+
|
|
17
|
+
| Metric | Target | Window | Source |
|
|
18
|
+
|--------|--------|--------|--------|
|
|
19
|
+
| [GENERATED BY /ttm-init] | [target] | [window] | [source] |
|
|
20
|
+
|
|
21
|
+
## Leading Indicators
|
|
22
|
+
|
|
23
|
+
| Indicator | Correlation | Lag Time | Threshold |
|
|
24
|
+
|-----------|------------|----------|-----------|
|
|
25
|
+
| [GENERATED BY /ttm-init] | [strong/moderate/weak] | [days] | [alert threshold] |
|
|
26
|
+
|
|
27
|
+
## Baselines
|
|
28
|
+
|
|
29
|
+
| Metric | Current Value | Date Measured | Source |
|
|
30
|
+
|--------|--------------|---------------|--------|
|
|
31
|
+
| [GENERATED BY /ttm-init] | [value] | [date] | [source] |
|
|
32
|
+
|
|
33
|
+
## Attribution Model Configuration
|
|
34
|
+
|
|
35
|
+
**Model type:** [GENERATED BY /ttm-init -- first-touch/last-touch/multi-touch/custom]
|
|
36
|
+
|
|
37
|
+
### Rules
|
|
38
|
+
[GENERATED BY /ttm-init -- How credit is assigned across touchpoints]
|
|
39
|
+
|
|
40
|
+
| Touchpoint | Weight | Notes |
|
|
41
|
+
|-----------|--------|-------|
|
|
42
|
+
| [GENERATED BY /ttm-init] | [%] | [reasoning] |
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<!-- _SUMMARY: Tier 1 context (loaded universally, <200 words) -->
|
|
2
|
+
## Summary
|
|
3
|
+
**Category:** [GENERATED BY /ttm-init]
|
|
4
|
+
**Target audience:** [GENERATED BY /ttm-init]
|
|
5
|
+
**Primary differentiator:** [GENERATED BY /ttm-init]
|
|
6
|
+
**Proof points:**
|
|
7
|
+
- [GENERATED BY /ttm-init]
|
|
8
|
+
- [GENERATED BY /ttm-init]
|
|
9
|
+
- [GENERATED BY /ttm-init]
|
|
10
|
+
**Must-not-say:** [GENERATED BY /ttm-init]
|
|
11
|
+
<!-- END_SUMMARY -->
|
|
12
|
+
|
|
13
|
+
## Detailed Positioning
|
|
14
|
+
|
|
15
|
+
### Category Definition
|
|
16
|
+
[GENERATED BY /ttm-init -- Full category analysis with market context]
|
|
17
|
+
|
|
18
|
+
### Competitive Frame
|
|
19
|
+
[GENERATED BY /ttm-init -- How we position against alternatives]
|
|
20
|
+
|
|
21
|
+
### Proof Point Library
|
|
22
|
+
[GENERATED BY /ttm-init -- Complete proof points with sources and expiry dates]
|
|
23
|
+
|
|
24
|
+
| Proof Point | Source | Verified Date | Expiry |
|
|
25
|
+
|-------------|--------|---------------|--------|
|
|
26
|
+
| [GENERATED BY /ttm-init] | [source] | [date] | [date] |
|
|
27
|
+
|
|
28
|
+
### Must-Not-Say Terms
|
|
29
|
+
[GENERATED BY /ttm-init -- Banned terms with reasoning for each]
|
|
30
|
+
|
|
31
|
+
| Term | Reasoning |
|
|
32
|
+
|------|-----------|
|
|
33
|
+
| [GENERATED BY /ttm-init] | [GENERATED BY /ttm-init] |
|
|
34
|
+
|
|
35
|
+
### Positioning History
|
|
36
|
+
| Date | Change | Reasoning |
|
|
37
|
+
|------|--------|-----------|
|
|
38
|
+
| [init date] | Initial positioning | Created via /ttm-init |
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
status: initialized
|
|
3
|
+
current_phase: none
|
|
4
|
+
current_campaign: none
|
|
5
|
+
last_updated: [GENERATED BY /ttm-init]
|
|
6
|
+
campaigns: []
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Active Campaigns
|
|
10
|
+
|
|
11
|
+
No active campaigns. Use `/ttm-new-campaign` to create one.
|
|
12
|
+
|
|
13
|
+
## Decisions in Flight
|
|
14
|
+
|
|
15
|
+
No pending decisions.
|
|
16
|
+
|
|
17
|
+
## Blockers
|
|
18
|
+
|
|
19
|
+
No current blockers.
|
|
20
|
+
|
|
21
|
+
## Experiments
|
|
22
|
+
|
|
23
|
+
No active experiments.
|
|
24
|
+
|
|
25
|
+
## Recent Lessons
|
|
26
|
+
|
|
27
|
+
No lessons recorded yet. Lessons are captured automatically during the Learn phase of each campaign.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
campaign: [SLUG]
|
|
3
|
+
run_number: [RUN_NUMBER]
|
|
4
|
+
date: [ISO_DATE]
|
|
5
|
+
total_assets: [TOTAL_ASSETS]
|
|
6
|
+
overall_result: [pass|warn|fail]
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Verification Report: [SLUG]
|
|
10
|
+
|
|
11
|
+
**Run:** [RUN_NUMBER] | **Date:** [ISO_DATE] | **Assets:** [TOTAL_ASSETS]
|
|
12
|
+
|
|
13
|
+
## Summary
|
|
14
|
+
|
|
15
|
+
| # | Gate | Tier | [ASSET_COLUMNS] |
|
|
16
|
+
|---|------|------|-----------------|
|
|
17
|
+
| 1 | Positioning Drift (GATE-01) | T1 | [RESULTS] |
|
|
18
|
+
| 2 | Claim Accuracy (GATE-02) | T1 | [RESULTS] |
|
|
19
|
+
| 3 | Voice Drift (GATE-03) | T2 | [RESULTS] |
|
|
20
|
+
| 4 | Outcome Alignment (GATE-04) | T1 | [RESULTS] |
|
|
21
|
+
| 5 | Funnel Integrity (GATE-05) | T2 | [RESULTS] |
|
|
22
|
+
| 6 | UTM Hygiene (GATE-06) | T2 | [RESULTS] |
|
|
23
|
+
| 7 | Compliance (GATE-07) | T2 | [RESULTS] |
|
|
24
|
+
| 8 | Competitor Collision (GATE-08) | T2 | [RESULTS] |
|
|
25
|
+
| 9 | ICP Fit (GATE-09) | T2 | [RESULTS] |
|
|
26
|
+
| 10 | Format Correctness (GATE-10) | T2 | [RESULTS] |
|
|
27
|
+
|
|
28
|
+
**Result:** [FAIL_COUNT] FAIL (Tier 1), [WARN_COUNT] WARN -- [ACTION_SUMMARY]
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Detail Findings
|
|
33
|
+
|
|
34
|
+
### [ASSET_NAME] -- [GATE_NAME] ([RESULT])
|
|
35
|
+
|
|
36
|
+
**Line [LINE_NUMBER]:** "[EXACT_TEXT_FROM_ASSET]"
|
|
37
|
+
|
|
38
|
+
**Issue:** [DESCRIPTION_OF_WHAT_TRIGGERED_THE_FINDING]
|
|
39
|
+
|
|
40
|
+
**Reference:** [QUOTE_FROM_REFERENCE_FILE_BEING_CHECKED_AGAINST]
|
|
41
|
+
|
|
42
|
+
**Recommendation:** [SPECIFIC_CHANGE_TO_RESOLVE_THE_FINDING]
|
|
43
|
+
|
|
44
|
+
**Action required:**
|
|
45
|
+
1. **Correct** -- rewrite the flagged section to resolve the finding
|
|
46
|
+
2. **Accept+log** -- document exception in DEVIATIONS.md and proceed
|
|
47
|
+
3. **Escalate** -- trigger /ttm-positioning-shift to update positioning
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
<!-- Repeat the detail finding block above for each WARN or FAIL finding.
|
|
52
|
+
PASS results do not need detail entries. -->
|
|
53
|
+
|
|
54
|
+
## Run Metadata
|
|
55
|
+
|
|
56
|
+
- **Verify command:** `/ttm-verify [SLUG]`
|
|
57
|
+
- **Manifest:** `.marketing/CAMPAIGNS/[SLUG]/MANIFEST.json`
|
|
58
|
+
- **Gate definitions:** `gates/base-gates.md`
|
|
59
|
+
- **Previous runs:** [PREVIOUS_RUN_COUNT]
|
|
File without changes
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
<purpose>
|
|
2
|
+
Check AI citation status and citability score for content against a target query.
|
|
3
|
+
Evaluates whether content is structured for AI engine extraction and citation using
|
|
4
|
+
AEO playbook gate definitions. Optionally checks live citation status via web search.
|
|
5
|
+
Single-pass analysis workflow per D-07.
|
|
6
|
+
</purpose>
|
|
7
|
+
|
|
8
|
+
<required_reading>
|
|
9
|
+
@${CLAUDE_PLUGIN_ROOT}/references/context-loading.md
|
|
10
|
+
@${CLAUDE_PLUGIN_ROOT}/playbooks/aeo.md
|
|
11
|
+
</required_reading>
|
|
12
|
+
|
|
13
|
+
<constraints>
|
|
14
|
+
## POSITIONING.md is READ-ONLY
|
|
15
|
+
|
|
16
|
+
**Do NOT modify `.marketing/POSITIONING.md` during this workflow.**
|
|
17
|
+
|
|
18
|
+
POSITIONING.md is an architectural invariant. If you detect positioning drift:
|
|
19
|
+
- Flag the issue and recommend running /ttm-positioning-check
|
|
20
|
+
|
|
21
|
+
Only /ttm-positioning-shift and /ttm-init may modify POSITIONING.md.
|
|
22
|
+
</constraints>
|
|
23
|
+
|
|
24
|
+
<process>
|
|
25
|
+
|
|
26
|
+
## Text-Mode Detection
|
|
27
|
+
|
|
28
|
+
**Text mode (`--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS`
|
|
29
|
+
or if the runtime is not Claude Code. When TEXT_MODE is active, replace every
|
|
30
|
+
`AskUserQuestion` call with a plain-text numbered list.
|
|
31
|
+
|
|
32
|
+
Detection:
|
|
33
|
+
```bash
|
|
34
|
+
if echo "$ARGUMENTS" | grep -q -- '--text'; then TEXT_MODE=true; fi
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
If `AskUserQuestion` tool is not available in the current runtime, set `TEXT_MODE=true`.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Step 1: Load Context
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
takeToMarket > LOADING CONTEXT FOR AEO CHECK
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**Tier 1 summaries** (lines 1 to `<!-- END_SUMMARY -->`) from all 9 `.marketing/` reference files.
|
|
48
|
+
**Tier 2 (full):** `.marketing/POSITIONING.md` (differentiator alignment check).
|
|
49
|
+
**Playbook gates:** @${CLAUDE_PLUGIN_ROOT}/playbooks/aeo.md
|
|
50
|
+
|
|
51
|
+
If `.marketing/POSITIONING.md` does not exist: Error and exit.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Step 2: Get Target Query and Content
|
|
56
|
+
|
|
57
|
+
Ask the user:
|
|
58
|
+
1. "What query do you want to check AI citation status for?"
|
|
59
|
+
2. "Paste the content you want evaluated (URL, file path, or raw content)."
|
|
60
|
+
|
|
61
|
+
Store query as `TARGET_QUERY`. Parse content input:
|
|
62
|
+
- **URL:** Attempt WebFetch. If unavailable (SEARCH_MODE=manual), ask user to paste.
|
|
63
|
+
- **File path:** Read directly.
|
|
64
|
+
- **Pasted content:** Use directly.
|
|
65
|
+
|
|
66
|
+
Store as `CHECK_CONTENT`.
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Step 3: Evaluate Citability (AEO Gates)
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
takeToMarket > EVALUATING CITABILITY
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Evaluate `CHECK_CONTENT` against 6 AEO discipline gates:
|
|
77
|
+
|
|
78
|
+
**1. Quote-Worthy Sentences (DISC-AEO-01)**
|
|
79
|
+
- PASS: 3+ sentences quotable verbatim as standalone answers
|
|
80
|
+
- WARN: 1-2 quotable sentences
|
|
81
|
+
- FAIL: 0 quotable sentences -- all require surrounding context
|
|
82
|
+
|
|
83
|
+
**2. FAQ/HowTo Schema (DISC-AEO-02)**
|
|
84
|
+
- PASS: FAQPage or HowTo schema with complete Q&A pairs or steps
|
|
85
|
+
- WARN: Schema present but incomplete (missing answers, <3 pairs)
|
|
86
|
+
- FAIL: No FAQ/HowTo schema on content with Q&A or instructions
|
|
87
|
+
|
|
88
|
+
**3. Author/Expert Markup (DISC-AEO-03)**
|
|
89
|
+
- PASS: Author name, credentials, expertise; references specific experience
|
|
90
|
+
- WARN: Author name present but no credentials
|
|
91
|
+
- FAIL: No author attribution
|
|
92
|
+
|
|
93
|
+
**4. Cross-Domain Fact Consistency (DISC-AEO-04)**
|
|
94
|
+
- PASS: All numeric and positioning claims consistent and verifiable
|
|
95
|
+
- WARN: Minor phrasing differences that could be misinterpreted
|
|
96
|
+
- FAIL: Direct contradictions in claims
|
|
97
|
+
|
|
98
|
+
**5. Direct Answer Formatting (DISC-AEO-05)**
|
|
99
|
+
- PASS: Each H2 opens with 1-2 sentence definitive answer before elaboration
|
|
100
|
+
- WARN: Most sections open directly but 1-2 start with context first
|
|
101
|
+
- FAIL: Sections consistently open with preamble instead of answers
|
|
102
|
+
|
|
103
|
+
**6. Entity Authority**
|
|
104
|
+
- PASS: References authoritative entities, domain terminology, linked concepts
|
|
105
|
+
- WARN: Some entity coverage but surface-level
|
|
106
|
+
- FAIL: Generic content with no entity depth
|
|
107
|
+
|
|
108
|
+
Per check: assign PASS / WARN / FAIL with specific evidence.
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Step 4: Citation Status (if WebSearch available)
|
|
113
|
+
|
|
114
|
+
Attempt WebSearch to detect tool availability.
|
|
115
|
+
|
|
116
|
+
### SEARCH_MODE=web
|
|
117
|
+
```
|
|
118
|
+
takeToMarket > CHECKING LIVE CITATION STATUS
|
|
119
|
+
```
|
|
120
|
+
Search `TARGET_QUERY` conversationally. Analyze: Is content being cited? Which competitors cited? What format do AI engines prefer?
|
|
121
|
+
|
|
122
|
+
### SEARCH_MODE=manual
|
|
123
|
+
```
|
|
124
|
+
takeToMarket > SEARCH MODE: MANUAL -- SKIPPING LIVE CITATION CHECK
|
|
125
|
+
```
|
|
126
|
+
Skip live check. Tell user to manually search in ChatGPT, Perplexity, Gemini, Copilot.
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## Step 5: Generate Report
|
|
131
|
+
|
|
132
|
+
Citability score: (PASS count / 6) * 100, rounded.
|
|
133
|
+
|
|
134
|
+
```
|
|
135
|
+
========================================
|
|
136
|
+
takeToMarket > AEO CITABILITY REPORT
|
|
137
|
+
========================================
|
|
138
|
+
Query: "${TARGET_QUERY}"
|
|
139
|
+
Content: [URL, filename, or "pasted content"]
|
|
140
|
+
Date: [current date]
|
|
141
|
+
Citability Score: [score]% ([X/6 PASS] [Y/6 WARN] [Z/6 FAIL])
|
|
142
|
+
|
|
143
|
+
| # | Gate | Result | Evidence |
|
|
144
|
+
|---|-------------------------|--------|-----------------------|
|
|
145
|
+
| 1 | Quote-Worthy Sentences | [P/W/F] | [brief evidence] |
|
|
146
|
+
| 2 | FAQ/HowTo Schema | [P/W/F] | [brief evidence] |
|
|
147
|
+
| 3 | Author/Expert Markup | [P/W/F] | [brief evidence] |
|
|
148
|
+
| 4 | Fact Consistency | [P/W/F] | [brief evidence] |
|
|
149
|
+
| 5 | Direct Answer Format | [P/W/F] | [brief evidence] |
|
|
150
|
+
| 6 | Entity Authority | [P/W/F] | [brief evidence] |
|
|
151
|
+
|
|
152
|
+
[If SEARCH_MODE=web:]
|
|
153
|
+
CITATION STATUS:
|
|
154
|
+
- Currently cited: [yes/no/partial]
|
|
155
|
+
- Competing citations: [competitors being cited]
|
|
156
|
+
- Preferred format: [format AI engines favor]
|
|
157
|
+
|
|
158
|
+
FINDINGS (WARN/FAIL details):
|
|
159
|
+
- [Gate]: [Issue and recommendation]
|
|
160
|
+
|
|
161
|
+
RECOMMENDATIONS (priority-ordered):
|
|
162
|
+
1. [Highest-impact citability improvement]
|
|
163
|
+
2. [Next priority]
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## Step 6: Completion
|
|
169
|
+
|
|
170
|
+
```
|
|
171
|
+
========================================
|
|
172
|
+
takeToMarket > AEO CHECK COMPLETE
|
|
173
|
+
========================================
|
|
174
|
+
Query: ${TARGET_QUERY} | Citability Score: [score]%
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
Offer: "Save this report to .marketing/AUDITS/aeo-check-[date].md? (yes/no)"
|
|
178
|
+
If yes: create `.marketing/AUDITS/` directory if needed and write the report.
|
|
179
|
+
|
|
180
|
+
</process>
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
<purpose>
|
|
2
|
+
Generate a creative kit for affiliate partners including approved messaging, banner specs,
|
|
3
|
+
email swipes, and tracking requirements. Uses affiliate playbook constraints for quality.
|
|
4
|
+
Single-pass analysis workflow per D-07.
|
|
5
|
+
</purpose>
|
|
6
|
+
|
|
7
|
+
<required_reading>
|
|
8
|
+
@${CLAUDE_PLUGIN_ROOT}/references/context-loading.md
|
|
9
|
+
@${CLAUDE_PLUGIN_ROOT}/playbooks/affiliate.md
|
|
10
|
+
</required_reading>
|
|
11
|
+
|
|
12
|
+
<constraints>
|
|
13
|
+
## POSITIONING.md is READ-ONLY
|
|
14
|
+
|
|
15
|
+
**Do NOT modify `.marketing/POSITIONING.md` during this workflow.**
|
|
16
|
+
|
|
17
|
+
POSITIONING.md is an architectural invariant. If you detect positioning drift:
|
|
18
|
+
- Flag the issue and recommend running /ttm-positioning-check
|
|
19
|
+
|
|
20
|
+
Only /ttm-positioning-shift and /ttm-init may modify POSITIONING.md.
|
|
21
|
+
</constraints>
|
|
22
|
+
|
|
23
|
+
<process>
|
|
24
|
+
|
|
25
|
+
## Text-Mode Detection
|
|
26
|
+
|
|
27
|
+
**Text mode (`--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS`
|
|
28
|
+
or if the runtime is not Claude Code. When TEXT_MODE is active, replace every
|
|
29
|
+
`AskUserQuestion` call with a plain-text numbered list.
|
|
30
|
+
|
|
31
|
+
Detection:
|
|
32
|
+
```bash
|
|
33
|
+
if echo "$ARGUMENTS" | grep -q -- '--text'; then TEXT_MODE=true; fi
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
If `AskUserQuestion` tool is not available in the current runtime, set `TEXT_MODE=true`.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Step 1: Load Context
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
takeToMarket > LOADING CONTEXT FOR AFFILIATE KIT
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
**Tier 1 summaries** (lines 1 to `<!-- END_SUMMARY -->`) from all 9 `.marketing/` reference files.
|
|
47
|
+
**Tier 2 (full):** `.marketing/POSITIONING.md`, `.marketing/BRAND.md`, `.marketing/ICP.md`, `.marketing/METRICS.md`
|
|
48
|
+
**Playbook gates:** @${CLAUDE_PLUGIN_ROOT}/playbooks/affiliate.md
|
|
49
|
+
|
|
50
|
+
If `.marketing/POSITIONING.md` does not exist: Error and exit.
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Step 2: Gather Kit Parameters
|
|
55
|
+
|
|
56
|
+
Ask the user:
|
|
57
|
+
1. "What product/offer is this affiliate kit for?"
|
|
58
|
+
2. "Commission structure? (percentage, flat fee, tiered)"
|
|
59
|
+
3. "Cookie/attribution window? (e.g., 30 days, 90 days)"
|
|
60
|
+
4. "Landing page URL for affiliates to link to?"
|
|
61
|
+
5. "Target affiliate types? (content creators, email marketers, comparison sites, coupon sites)"
|
|
62
|
+
|
|
63
|
+
Store responses as `PRODUCT_NAME`, `COMMISSION`, `COOKIE_WINDOW`, `LANDING_URL`, `AFFILIATE_TYPES`.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Step 3: Generate Creative Kit
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
takeToMarket > GENERATING AFFILIATE CREATIVE KIT
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Produce a complete kit with these sections:
|
|
74
|
+
|
|
75
|
+
### Approved Messaging
|
|
76
|
+
- 3 headline variations aligned with POSITIONING.md differentiator
|
|
77
|
+
- 3 description variations using BRAND.md voice
|
|
78
|
+
- Approved claims list from BRAND.md proof points only
|
|
79
|
+
- Banned claims/language from BRAND.md banned words + POSITIONING.md must-not-say
|
|
80
|
+
|
|
81
|
+
### Email Swipes
|
|
82
|
+
- 3 email templates (short/medium/long) targeting ICP pain points
|
|
83
|
+
- Subject line options per template (30-60 chars, no spam triggers per email playbook)
|
|
84
|
+
- FTC affiliate disclosure included in each template
|
|
85
|
+
|
|
86
|
+
### Banner Specs
|
|
87
|
+
- Recommended sizes: 300x250, 728x90, 160x600 (per affiliate playbook format rules)
|
|
88
|
+
- Brand color codes and logo usage from BRAND.md
|
|
89
|
+
- Max 20% text area, visible CTA, product name
|
|
90
|
+
|
|
91
|
+
### Tracking Requirements
|
|
92
|
+
- UTM format: `utm_source=affiliate&utm_medium=[affiliate-name]&utm_campaign=[campaign-slug]`
|
|
93
|
+
- Cookie window: ${COOKIE_WINDOW}
|
|
94
|
+
- Attribution model from METRICS.md (first-touch or last-touch)
|
|
95
|
+
- Commission structure: ${COMMISSION}
|
|
96
|
+
- Payout terms (schedule, minimum threshold, payment method)
|
|
97
|
+
|
|
98
|
+
### Compliance Rules
|
|
99
|
+
- FTC disclosure template: "This post contains affiliate links. I may earn a commission if you make a purchase."
|
|
100
|
+
- Prohibited promotion methods (spam, misleading claims, trademark bidding)
|
|
101
|
+
- Brand usage guidelines from BRAND.md
|
|
102
|
+
- No income or results guarantees
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Step 4: Write Kit File
|
|
107
|
+
|
|
108
|
+
Generate a URL-safe slug from `PRODUCT_NAME`.
|
|
109
|
+
Write to `.marketing/AFFILIATE-KIT-[product-slug].md`.
|
|
110
|
+
|
|
111
|
+
Kit file structure:
|
|
112
|
+
```markdown
|
|
113
|
+
# Affiliate Creative Kit: [Product Name]
|
|
114
|
+
Generated: [date]
|
|
115
|
+
Commission: [structure]
|
|
116
|
+
Cookie Window: [duration]
|
|
117
|
+
|
|
118
|
+
## Approved Messaging
|
|
119
|
+
[headlines, descriptions, claims, banned language]
|
|
120
|
+
|
|
121
|
+
## Email Swipes
|
|
122
|
+
[3 templates with subject lines]
|
|
123
|
+
|
|
124
|
+
## Banner Specs
|
|
125
|
+
[sizes, brand guidelines, requirements]
|
|
126
|
+
|
|
127
|
+
## Tracking Requirements
|
|
128
|
+
[UTM format, attribution, commission, payouts]
|
|
129
|
+
|
|
130
|
+
## Compliance Rules
|
|
131
|
+
[FTC disclosure, prohibited methods, brand guidelines]
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## Step 5: Completion
|
|
137
|
+
|
|
138
|
+
```
|
|
139
|
+
========================================
|
|
140
|
+
takeToMarket > AFFILIATE KIT COMPLETE
|
|
141
|
+
========================================
|
|
142
|
+
Product: ${PRODUCT_NAME} | Sections: 5 | File: .marketing/AFFILIATE-KIT-[slug].md
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Display summary of kit contents and confirm file location.
|
|
146
|
+
|
|
147
|
+
</process>
|