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,228 @@
|
|
|
1
|
+
<purpose>
|
|
2
|
+
On-demand competitor analysis that updates COMPETITORS.md with new intelligence.
|
|
3
|
+
Detects WebSearch/WebFetch MCP tools for automated research; falls back to manual
|
|
4
|
+
paste when tools unavailable. Validates findings against POSITIONING.md to identify
|
|
5
|
+
differentiation gaps and opportunities. Single-pass workflow per D-06 and D-09.
|
|
6
|
+
</purpose>
|
|
7
|
+
|
|
8
|
+
<required_reading>
|
|
9
|
+
@${CLAUDE_PLUGIN_ROOT}/references/context-loading.md
|
|
10
|
+
@${CLAUDE_PLUGIN_ROOT}/templates/reference-files/competitors.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
|
+
- Recommend /ttm-positioning-shift if a deliberate change is needed
|
|
21
|
+
|
|
22
|
+
Only /ttm-positioning-shift and /ttm-init may modify POSITIONING.md.
|
|
23
|
+
</constraints>
|
|
24
|
+
|
|
25
|
+
<process>
|
|
26
|
+
|
|
27
|
+
## Text-Mode Detection
|
|
28
|
+
|
|
29
|
+
**Text mode (`--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS`
|
|
30
|
+
or if the runtime is not Claude Code. When TEXT_MODE is active, replace every
|
|
31
|
+
`AskUserQuestion` call with a plain-text numbered list.
|
|
32
|
+
|
|
33
|
+
Detection:
|
|
34
|
+
```bash
|
|
35
|
+
if echo "$ARGUMENTS" | grep -q -- '--text'; then TEXT_MODE=true; fi
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
If `AskUserQuestion` tool is not available in the current runtime, set `TEXT_MODE=true`.
|
|
39
|
+
When TEXT_MODE is active, replace each AskUserQuestion with a plain-text numbered list.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Step 1: Load Context
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
takeToMarket > LOADING CONTEXT
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
**Load Tier 1 summaries** from all 9 reference files (lines 1 to `<!-- END_SUMMARY -->`):
|
|
50
|
+
- `.marketing/POSITIONING.md`
|
|
51
|
+
- `.marketing/BRAND.md`
|
|
52
|
+
- `.marketing/ICP.md`
|
|
53
|
+
- `.marketing/CHANNELS.md`
|
|
54
|
+
- `.marketing/STATE.md` (frontmatter only)
|
|
55
|
+
- `.marketing/CALENDAR.md`
|
|
56
|
+
- `.marketing/COMPETITORS.md`
|
|
57
|
+
- `.marketing/METRICS.md`
|
|
58
|
+
- `.marketing/LEARNINGS.md`
|
|
59
|
+
|
|
60
|
+
**Load Tier 2 (full content)** for analysis:
|
|
61
|
+
- `.marketing/COMPETITORS.md`
|
|
62
|
+
- `.marketing/POSITIONING.md`
|
|
63
|
+
|
|
64
|
+
If `.marketing/COMPETITORS.md` does not exist, error:
|
|
65
|
+
"COMPETITORS.md not found. Run /ttm-init first to set up your marketing system."
|
|
66
|
+
Exit.
|
|
67
|
+
|
|
68
|
+
Parse POSITIONING.md for: category, primary differentiator, target audience, must-not-say terms.
|
|
69
|
+
Parse COMPETITORS.md for: existing competitor list, positioning map, SOV baselines.
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Step 2: Tool Detection
|
|
74
|
+
|
|
75
|
+
Attempt a WebSearch call with a minimal test query related to the user's category
|
|
76
|
+
(from POSITIONING.md category field): `"${CATEGORY} competitors ${CURRENT_YEAR}"`.
|
|
77
|
+
|
|
78
|
+
### When WebSearch is available (SEARCH_MODE=web)
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
takeToMarket > COMPETITOR SCAN MODE: WEB
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Proceed to Step 3 with automated research capabilities.
|
|
85
|
+
|
|
86
|
+
### When WebSearch is NOT available (SEARCH_MODE=manual)
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
takeToMarket > COMPETITOR SCAN MODE: MANUAL
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Tell the user:
|
|
93
|
+
```
|
|
94
|
+
Web search tools are not available in this session.
|
|
95
|
+
To run a competitor scan, please paste any of the following:
|
|
96
|
+
|
|
97
|
+
1. Competitor websites or landing page content
|
|
98
|
+
2. Competitor social media posts or ad creative
|
|
99
|
+
3. Industry reports or market analysis
|
|
100
|
+
4. Search results for your category keywords
|
|
101
|
+
5. Any other competitive intelligence you have gathered
|
|
102
|
+
|
|
103
|
+
Paste your findings below and I will analyze them.
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Wait for the user to paste content.
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Step 3: Research Competitors
|
|
111
|
+
|
|
112
|
+
### If SEARCH_MODE=web:
|
|
113
|
+
|
|
114
|
+
For each competitor already listed in COMPETITORS.md:
|
|
115
|
+
- WebSearch: `"${COMPETITOR_NAME} ${CATEGORY}"` for latest positioning
|
|
116
|
+
- WebFetch on competitor homepage URL if known (from COMPETITORS.md)
|
|
117
|
+
|
|
118
|
+
Search for new entrants:
|
|
119
|
+
- WebSearch: `"${CATEGORY} alternatives ${CURRENT_YEAR}"`
|
|
120
|
+
- WebSearch: `"${CATEGORY} new tools ${CURRENT_YEAR}"`
|
|
121
|
+
|
|
122
|
+
Tag all findings with confidence levels:
|
|
123
|
+
- **HIGH**: verified from competitor URL or cited data from web search
|
|
124
|
+
- **MEDIUM**: indirect evidence or partial match from search results
|
|
125
|
+
- **LOW**: inference drawn from patterns without direct evidence
|
|
126
|
+
|
|
127
|
+
### If SEARCH_MODE=manual:
|
|
128
|
+
|
|
129
|
+
Analyze pasted content for:
|
|
130
|
+
- Positioning claims and messaging themes
|
|
131
|
+
- Channel presence and content strategy signals
|
|
132
|
+
- Pricing signals or packaging changes
|
|
133
|
+
- New competitors not in current COMPETITORS.md
|
|
134
|
+
|
|
135
|
+
Tag all pasted insights as **MEDIUM** confidence (user-provided, not independently verified).
|
|
136
|
+
Insights cross-referenced against existing COMPETITORS.md data may be elevated to **HIGH**.
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Step 4: Analyze and Compare
|
|
141
|
+
|
|
142
|
+
For each competitor (existing and newly discovered):
|
|
143
|
+
|
|
144
|
+
1. **Current positioning claim:** What they say they are/do
|
|
145
|
+
2. **Differentiator comparison:** Compare against our POSITIONING.md primary differentiator
|
|
146
|
+
3. **Overlap areas:** Where competitor messaging is similar to ours (risk zones)
|
|
147
|
+
4. **Gap opportunities:** Areas competitors are not covering that we could own
|
|
148
|
+
5. **SOV signals:** Any share-of-voice indicators (content volume, social presence, ad spend)
|
|
149
|
+
|
|
150
|
+
Summarize findings:
|
|
151
|
+
```
|
|
152
|
+
takeToMarket > ANALYSIS COMPLETE
|
|
153
|
+
|
|
154
|
+
Competitors analyzed: ${TOTAL_COUNT}
|
|
155
|
+
New competitors found: ${NEW_COUNT}
|
|
156
|
+
Positioning overlaps: ${OVERLAP_COUNT}
|
|
157
|
+
Gap opportunities: ${GAP_COUNT}
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## Step 5: Validate and Update
|
|
163
|
+
|
|
164
|
+
Ask user to confirm via AskUserQuestion (or text-mode freeform):
|
|
165
|
+
|
|
166
|
+
**Question 1:**
|
|
167
|
+
- header: "Confirm New Competitors"
|
|
168
|
+
- question: "New competitors found: [list names]. Add all to COMPETITORS.md? Or specify which to include/exclude."
|
|
169
|
+
|
|
170
|
+
**Question 2:**
|
|
171
|
+
- header: "Update Existing Competitors"
|
|
172
|
+
- question: "Updated intelligence for: [list names with change summary]. Accept all updates? Or specify which to accept/reject."
|
|
173
|
+
|
|
174
|
+
**Question 3:**
|
|
175
|
+
- header: "Inactive Competitors"
|
|
176
|
+
- question: "Any competitors to mark as inactive/irrelevant? List names or type 'none'."
|
|
177
|
+
|
|
178
|
+
Validate all proposed updates:
|
|
179
|
+
- No update suggests user adopt a competitor's positioning
|
|
180
|
+
- No update contradicts POSITIONING.md differentiator or must-not-say terms
|
|
181
|
+
- Gap opportunities align with our positioning scope
|
|
182
|
+
|
|
183
|
+
Write updated `.marketing/COMPETITORS.md`:
|
|
184
|
+
- Update existing competitor entries with new findings (positioning, strengths, weaknesses)
|
|
185
|
+
- Add new competitors with full profiles (name, positioning, strength, weakness)
|
|
186
|
+
- Mark inactive competitors with `[INACTIVE: YYYY-MM-DD]` suffix in name column
|
|
187
|
+
- Update `## Positioning Map` section with new/changed positions
|
|
188
|
+
- Update `## Share of Voice Baseline` with new SOV signals
|
|
189
|
+
- Update `## Competitor Content Analysis` for analyzed competitors
|
|
190
|
+
|
|
191
|
+
**CRITICAL:** Preserve `<!-- _SUMMARY -->` and `<!-- END_SUMMARY -->` delimiters exactly.
|
|
192
|
+
Update summary block if top competitors or positioning-vs-them changed.
|
|
193
|
+
Preserve all existing file structure and section ordering.
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## Step 6: Completion Banner
|
|
198
|
+
|
|
199
|
+
```
|
|
200
|
+
========================================
|
|
201
|
+
takeToMarket > COMPETITOR SCAN COMPLETE
|
|
202
|
+
========================================
|
|
203
|
+
|
|
204
|
+
Competitors analyzed: ${COUNT}
|
|
205
|
+
New competitors found: ${NEW_COUNT}
|
|
206
|
+
Positioning overlaps detected: ${OVERLAP_COUNT}
|
|
207
|
+
Research method: ${SEARCH_MODE}
|
|
208
|
+
|
|
209
|
+
Next steps:
|
|
210
|
+
- Review updated .marketing/COMPETITORS.md
|
|
211
|
+
- Run /ttm-positioning-check if overlaps concern you
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
</process>
|
|
215
|
+
|
|
216
|
+
<success_criteria>
|
|
217
|
+
- [ ] Tier 1 summaries loaded from all 9 reference files
|
|
218
|
+
- [ ] Tier 2 full content loaded for COMPETITORS.md and POSITIONING.md
|
|
219
|
+
- [ ] WebSearch tool detection attempted before research
|
|
220
|
+
- [ ] SEARCH_MODE=web path uses WebSearch and WebFetch for automated research
|
|
221
|
+
- [ ] SEARCH_MODE=manual path prompts user to paste competitive intelligence
|
|
222
|
+
- [ ] All findings tagged with confidence levels (HIGH/MEDIUM/LOW)
|
|
223
|
+
- [ ] Analysis compares each competitor against POSITIONING.md differentiator
|
|
224
|
+
- [ ] User confirms new additions and updates before writing
|
|
225
|
+
- [ ] No update contradicts POSITIONING.md
|
|
226
|
+
- [ ] COMPETITORS.md updated with preserved structure and summary markers
|
|
227
|
+
- [ ] Completion banner displayed with scan results
|
|
228
|
+
</success_criteria>
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
<purpose>
|
|
2
|
+
Update ICP.md from new customer data (calls, reviews, feedback, surveys). Validates
|
|
3
|
+
all changes against POSITIONING.md target audience field before writing. Single-pass
|
|
4
|
+
workflow per D-06.
|
|
5
|
+
</purpose>
|
|
6
|
+
|
|
7
|
+
<required_reading>
|
|
8
|
+
@${CLAUDE_PLUGIN_ROOT}/references/context-loading.md
|
|
9
|
+
@${CLAUDE_PLUGIN_ROOT}/templates/reference-files/icp.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
|
+
- Recommend /ttm-positioning-shift if a deliberate change is needed
|
|
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
|
+
When TEXT_MODE is active, replace each AskUserQuestion with a plain-text numbered list.
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Step 1: Load Context
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
takeToMarket > LOADING CONTEXT
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
**Load Tier 1 summaries** from all 9 reference files (lines 1 to `<!-- END_SUMMARY -->`):
|
|
49
|
+
- `.marketing/POSITIONING.md`
|
|
50
|
+
- `.marketing/BRAND.md`
|
|
51
|
+
- `.marketing/ICP.md`
|
|
52
|
+
- `.marketing/CHANNELS.md`
|
|
53
|
+
- `.marketing/STATE.md` (frontmatter only)
|
|
54
|
+
- `.marketing/CALENDAR.md`
|
|
55
|
+
- `.marketing/COMPETITORS.md`
|
|
56
|
+
- `.marketing/METRICS.md`
|
|
57
|
+
- `.marketing/LEARNINGS.md`
|
|
58
|
+
|
|
59
|
+
**Load Tier 2 (full content)** for the file being refreshed:
|
|
60
|
+
- `.marketing/ICP.md`
|
|
61
|
+
|
|
62
|
+
If `.marketing/ICP.md` does not exist, error:
|
|
63
|
+
"ICP.md not found. Run /ttm-init first to set up your marketing system."
|
|
64
|
+
Exit.
|
|
65
|
+
|
|
66
|
+
Parse the current ICP.md into structured sections:
|
|
67
|
+
- `CURRENT_PRIMARY_SEGMENT` -- from `## Primary Segment`
|
|
68
|
+
- `CURRENT_JTBD` -- from `## Jobs-to-Be-Done` table rows
|
|
69
|
+
- `CURRENT_PAINS` -- from `### Pain Points` table rows
|
|
70
|
+
- `CURRENT_TRIGGERS` -- from `### Buying Triggers`
|
|
71
|
+
- `CURRENT_ANTI_ICP` -- from `## Anti-ICP Profile` table rows
|
|
72
|
+
- `CURRENT_LANGUAGE` -- from `## Customer Language Library` table rows
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Step 2: Present Current State and Gather Updates
|
|
77
|
+
|
|
78
|
+
Display current ICP.md sections to the user:
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
takeToMarket > ICP REFRESH
|
|
82
|
+
|
|
83
|
+
Primary Segment: ${CURRENT_PRIMARY_SEGMENT summary}
|
|
84
|
+
Jobs-to-Be-Done: ${count} entries
|
|
85
|
+
Pain Points: ${count} entries
|
|
86
|
+
Anti-ICP: ${count} entries
|
|
87
|
+
Customer Language: ${count} phrases
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Ask user via AskUserQuestion (or text-mode freeform) -- collect responses:
|
|
91
|
+
|
|
92
|
+
**Question 1:**
|
|
93
|
+
- header: "New Customer Data"
|
|
94
|
+
- question: "What new customer data do you have? Paste call notes, reviews, feedback, survey results, or describe your findings."
|
|
95
|
+
|
|
96
|
+
**Question 2:**
|
|
97
|
+
- header: "New Jobs-to-Be-Done or Pain Points"
|
|
98
|
+
- question: "Any new JTBD or pain points discovered from this data? Describe each, or type 'none'."
|
|
99
|
+
|
|
100
|
+
**Question 3:**
|
|
101
|
+
- header: "New Trigger Events"
|
|
102
|
+
- question: "Any new buying trigger events identified? Describe each, or type 'none'."
|
|
103
|
+
|
|
104
|
+
**Question 4:**
|
|
105
|
+
- header: "Customer Language"
|
|
106
|
+
- question: "New customer language phrases to add to the library? Provide exact quotes with context and source, or type 'none'."
|
|
107
|
+
|
|
108
|
+
**Question 5:**
|
|
109
|
+
- header: "Anti-ICP Updates"
|
|
110
|
+
- question: "Any new segments to add to anti-ICP? Describe people who are NOT your target and why, or type 'none'."
|
|
111
|
+
|
|
112
|
+
If Question 1 is "none" AND all other answers are "none": display "No new data provided. ICP.md is unchanged." Exit.
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## Step 3: Validate Against Positioning
|
|
117
|
+
|
|
118
|
+
Load the target audience, primary differentiator, and must-not-say terms from
|
|
119
|
+
the POSITIONING.md Tier 1 summary (already loaded in Step 1).
|
|
120
|
+
|
|
121
|
+
For each proposed change, validate:
|
|
122
|
+
|
|
123
|
+
**New segments/JTBD:**
|
|
124
|
+
- Check new segment descriptions align with POSITIONING.md target audience definition
|
|
125
|
+
- Check new JTBD do not describe jobs outside the positioning scope
|
|
126
|
+
|
|
127
|
+
**New customer language:**
|
|
128
|
+
- Check phrases do not include must-not-say terms from POSITIONING.md
|
|
129
|
+
- Check language aligns with the positioning category and differentiator
|
|
130
|
+
|
|
131
|
+
**Anti-ICP additions:**
|
|
132
|
+
- Check anti-ICP entries do not exclude groups that overlap with the POSITIONING.md
|
|
133
|
+
target audience (would create a contradiction)
|
|
134
|
+
|
|
135
|
+
If conflict detected:
|
|
136
|
+
```
|
|
137
|
+
takeToMarket > POSITIONING CONFLICT DETECTED
|
|
138
|
+
|
|
139
|
+
Conflict: [specific description]
|
|
140
|
+
Affected field: [which ICP.md section]
|
|
141
|
+
POSITIONING.md reference: [the conflicting positioning element]
|
|
142
|
+
|
|
143
|
+
Please resolve this conflict before proceeding.
|
|
144
|
+
Recommendation: Adjust the proposed change, or run /ttm-positioning-shift if the
|
|
145
|
+
positioning itself needs updating.
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Ask user to revise the conflicting item or skip it.
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## Step 4: Write Updated ICP.md
|
|
153
|
+
|
|
154
|
+
Analyze raw customer data from Question 1 alongside specific additions from Questions 2-5.
|
|
155
|
+
Extract structured insights and apply to ICP.md sections:
|
|
156
|
+
|
|
157
|
+
- **New JTBD:** Add rows to `## Jobs-to-Be-Done` table (job, priority, current solution)
|
|
158
|
+
- **New pain points:** Add rows to `### Pain Points` table (pain, severity, frequency)
|
|
159
|
+
- **New triggers:** Add to `### Buying Triggers` section
|
|
160
|
+
- **New anti-ICP entries:** Add rows to `## Anti-ICP Profile` table (characteristic, reason)
|
|
161
|
+
- **New language phrases:** Add rows to `## Customer Language Library` table (context, phrase, source)
|
|
162
|
+
|
|
163
|
+
**CRITICAL:** Preserve `<!-- _SUMMARY -->` and `<!-- END_SUMMARY -->` delimiters exactly.
|
|
164
|
+
Update the summary block if primary segment, top pains, or anti-ICP changed.
|
|
165
|
+
Preserve all existing structure and ordering. Do NOT remove existing entries.
|
|
166
|
+
|
|
167
|
+
Write the updated file via the Write tool.
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## Step 5: Completion Banner
|
|
172
|
+
|
|
173
|
+
```
|
|
174
|
+
========================================
|
|
175
|
+
takeToMarket > ICP REFRESH COMPLETE
|
|
176
|
+
========================================
|
|
177
|
+
|
|
178
|
+
Updated sections:
|
|
179
|
+
- [list of changed sections, e.g., "Pain Points (2 added)"]
|
|
180
|
+
- [e.g., "Customer Language (4 new phrases)"]
|
|
181
|
+
- [e.g., "Anti-ICP (1 new exclusion)"]
|
|
182
|
+
|
|
183
|
+
Data source: [brief description of input data type]
|
|
184
|
+
|
|
185
|
+
Next: Run /ttm-positioning-check to verify alignment across recent assets
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
</process>
|
|
189
|
+
|
|
190
|
+
<success_criteria>
|
|
191
|
+
- [ ] Tier 1 summaries loaded from all 9 reference files
|
|
192
|
+
- [ ] Tier 2 full content loaded for ICP.md
|
|
193
|
+
- [ ] Current ICP state displayed to user
|
|
194
|
+
- [ ] User provided new customer data or specific updates
|
|
195
|
+
- [ ] All proposed changes validated against POSITIONING.md target audience
|
|
196
|
+
- [ ] Conflicts flagged and resolved before writing
|
|
197
|
+
- [ ] ICP.md updated with new entries and preserved structure
|
|
198
|
+
- [ ] Summary markers (<!-- _SUMMARY --> / <!-- END_SUMMARY -->) preserved
|
|
199
|
+
- [ ] Completion banner displayed with changed sections
|
|
200
|
+
</success_criteria>
|