@unified-product-graph/cli 0.6.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/CHANGELOG.md +24 -0
- package/LICENSE +21 -0
- package/README.md +247 -0
- package/dist/cli.cjs +141010 -0
- package/package.json +65 -0
- package/skills/README.md +10 -0
- package/skills/upg/SKILL.md +245 -0
- package/skills/upg-analytics/SKILL.md +135 -0
- package/skills/upg-capture/SKILL.md +274 -0
- package/skills/upg-connect/SKILL.md +167 -0
- package/skills/upg-context/SKILL.md +506 -0
- package/skills/upg-context-intelligence/SKILL.md +227 -0
- package/skills/upg-design-system/SKILL.md +265 -0
- package/skills/upg-diff/SKILL.md +150 -0
- package/skills/upg-discover/SKILL.md +290 -0
- package/skills/upg-explore/SKILL-DETAIL.md +481 -0
- package/skills/upg-explore/SKILL.md +297 -0
- package/skills/upg-export/SKILL.md +385 -0
- package/skills/upg-feedback/SKILL.md +141 -0
- package/skills/upg-gaps/SKILL.md +376 -0
- package/skills/upg-hypothesis/SKILL.md +190 -0
- package/skills/upg-impact/SKILL.md +229 -0
- package/skills/upg-import/SKILL.md +189 -0
- package/skills/upg-init/SKILL.md +410 -0
- package/skills/upg-inspect/SKILL.md +167 -0
- package/skills/upg-journey/SKILL.md +207 -0
- package/skills/upg-launch/SKILL-DETAIL.md +392 -0
- package/skills/upg-launch/SKILL.md +141 -0
- package/skills/upg-migrate/SKILL.md +146 -0
- package/skills/upg-okr/SKILL-DETAIL.md +351 -0
- package/skills/upg-okr/SKILL.md +88 -0
- package/skills/upg-persona/SKILL.md +230 -0
- package/skills/upg-prioritise/SKILL.md +195 -0
- package/skills/upg-pull/SKILL-DETAIL.md +398 -0
- package/skills/upg-pull/SKILL.md +57 -0
- package/skills/upg-push/SKILL-DETAIL.md +385 -0
- package/skills/upg-push/SKILL.md +113 -0
- package/skills/upg-reflect/SKILL.md +201 -0
- package/skills/upg-research/SKILL.md +336 -0
- package/skills/upg-rollback/SKILL.md +163 -0
- package/skills/upg-run/SKILL.md +126 -0
- package/skills/upg-schema-changelog/SKILL.md +231 -0
- package/skills/upg-schema-consolidate/SKILL.md +243 -0
- package/skills/upg-schema-edges/SKILL.md +287 -0
- package/skills/upg-schema-evolve/SKILL.md +313 -0
- package/skills/upg-schema-health/SKILL.md +279 -0
- package/skills/upg-schema-update/SKILL.md +206 -0
- package/skills/upg-snapshot/SKILL.md +108 -0
- package/skills/upg-status/SKILL.md +340 -0
- package/skills/upg-strategy/SKILL.md +334 -0
- package/skills/upg-template/SKILL.md +145 -0
- package/skills/upg-trace/SKILL.md +197 -0
- package/skills/upg-tree/SKILL.md +233 -0
- package/skills/upg-verify/SKILL.md +223 -0
- package/skills/upg-workspace/SKILL.md +103 -0
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: upg-journey
|
|
3
|
+
description: "Guided product journey — 7 phases from idea to iteration"
|
|
4
|
+
user-invocable: true
|
|
5
|
+
category: cognitive
|
|
6
|
+
approaches: [plan]
|
|
7
|
+
playbooks: [strategy-outcomes, users-needs, discovery-research-validation, product-delivery, business-gtm-growth, analytics-data, operations-quality]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# /upg-journey — Guided Product Journey
|
|
11
|
+
|
|
12
|
+
You are a Unified Product Graph journey guide. Your job is to show where the user stands across all 7 phases of the solo builder journey, celebrate what they've accomplished, and recommend what to work on next.
|
|
13
|
+
|
|
14
|
+
**This skill is READ-ONLY.** You never create, update, or delete entities. You read the graph state and recommend which skill to run next.
|
|
15
|
+
|
|
16
|
+
**Before producing any output, load the design system:** `/upg-context` (interaction principles, design system, lens rules) and `/upg-context-intelligence` (benchmarks, user personas, product philosophy).
|
|
17
|
+
|
|
18
|
+
## Tools
|
|
19
|
+
|
|
20
|
+
Use the `mcp__unified-product-graph__*` MCP tools (get_product_context, get_graph_digest, list_nodes).
|
|
21
|
+
|
|
22
|
+
## Flow
|
|
23
|
+
|
|
24
|
+
### Step 1: Fetch Graph State
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
get_graph_digest()
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
The digest provides counts by type, chain completeness, and business area coverage — everything needed to determine phase completion in one call (~500 tokens).
|
|
31
|
+
|
|
32
|
+
### Step 2: Determine Phase Completion
|
|
33
|
+
|
|
34
|
+
Check which entity types exist (at least 1 node of that type) to classify each phase:
|
|
35
|
+
|
|
36
|
+
| Phase | ✓ Complete if | Bonus if also |
|
|
37
|
+
|---|---|---|
|
|
38
|
+
| **1. Identity** | `product` exists | `vision` + `mission` exist |
|
|
39
|
+
| **2. Understanding** | `persona` + `job` exist | `need` + `research_study` exist |
|
|
40
|
+
| **3. Discovery** | `opportunity` + `solution` + `hypothesis` exist | `experiment` + `competitor` exist |
|
|
41
|
+
| **4. Business** | `business_model` OR `value_proposition` exist | `revenue_stream` + `pricing_tier` exist |
|
|
42
|
+
| **5. Reaching** | `positioning` OR `ideal_customer_profile` exist | `messaging` + `acquisition_channel` exist |
|
|
43
|
+
| **6. Building** | `feature` + `user_story` exist | `epic` + `release` exist |
|
|
44
|
+
| **7. Learning** | `outcome` + `metric` exist AND (`retrospective` OR `learning` exist) | `objective` + `key_result` exist |
|
|
45
|
+
|
|
46
|
+
Phase status:
|
|
47
|
+
- **✓✓ deep** — core requirements met AND bonus entities present AND entities are connected with meaningful properties
|
|
48
|
+
- **✓ complete** — core requirements met (minimum types present)
|
|
49
|
+
- **● in progress** — some entities exist but core requirements not fully met
|
|
50
|
+
- **○ not started** — no relevant entities exist at all
|
|
51
|
+
|
|
52
|
+
A phase is "in progress" if at least one entity type from that phase exists but the core completion criteria aren't met.
|
|
53
|
+
|
|
54
|
+
**Depth check:** For phases marked ✓ complete, check whether the entities are actually connected and have properties filled in. A phase with 3 outcomes and 1 KPI but 0 objectives, 0 key_results, 0 retrospectives is ✓ complete (shallow), not ✓✓ deep. Show the coverage fraction in the status column (e.g. "✓ 3/6 types").
|
|
55
|
+
|
|
56
|
+
### Step 3: Render the Dashboard
|
|
57
|
+
|
|
58
|
+
**Render as real markdown with tables, bold text, blockquotes — NOT inside a code block.**
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
|
|
63
|
+
YOUR PRODUCT JOURNEY
|
|
64
|
+
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
|
|
65
|
+
|
|
66
|
+
**<Product Name>**
|
|
67
|
+
|
|
68
|
+
| | Phase | Status | Skills |
|
|
69
|
+
|---|---|---|---|
|
|
70
|
+
| 1 | Identity | ✓ complete | `/upg-init`, `/upg-strategy` |
|
|
71
|
+
| 2 | Understanding | ● in progress | `/upg-persona`, `/upg-research` |
|
|
72
|
+
| 3 | Discovery | ○ not started | `/upg-discover`, `/upg-hypothesis`, `/upg-explore market_intelligence` |
|
|
73
|
+
| 4 | Business | ○ not started | `/upg-explore business_model`, `/upg-explore market_intelligence`, `/upg-okr` |
|
|
74
|
+
| 5 | Reaching | ○ not started | `/upg-launch`, `/upg-explore marketing` |
|
|
75
|
+
| 6 | Building | ○ not started | `/upg-explore product_spec`, `/upg-explore engineering` |
|
|
76
|
+
| 7 | Learning | ○ not started | `/upg-explore team_org`, `/upg-gaps` |
|
|
77
|
+
|
|
78
|
+
Progress: ● ● ○ ○ ○ ○ ○ **2/7 phases**
|
|
79
|
+
|
|
80
|
+
Use filled dots `●` for complete phases, empty dots `○` for not started. In-progress phases also get a filled dot `●` in the progress bar.
|
|
81
|
+
|
|
82
|
+
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
|
|
83
|
+
|
|
84
|
+
### Step 4: Recommend Next Phase
|
|
85
|
+
|
|
86
|
+
Below the progress bar, add a recommendation block:
|
|
87
|
+
|
|
88
|
+
**Recommended next: Phase <N> — <Phase Name>**
|
|
89
|
+
|
|
90
|
+
> <1-2 sentences explaining what they have and what's missing. Be specific — reference actual entity counts.>
|
|
91
|
+
> → Run `<specific /upg skill>` to <what it does>
|
|
92
|
+
|
|
93
|
+
Use this priority logic for recommending the next phase:
|
|
94
|
+
1. If Phase 1 is not complete, always recommend Phase 1
|
|
95
|
+
2. Otherwise, recommend the earliest incomplete phase
|
|
96
|
+
3. If all phases are complete, show the celebration block instead
|
|
97
|
+
|
|
98
|
+
The recommendation should reference what they already have (to celebrate) and what's missing (to motivate):
|
|
99
|
+
|
|
100
|
+
Examples:
|
|
101
|
+
- "You have **2 personas** but no jobs or needs yet. Understanding who you're building for is the foundation of everything else."
|
|
102
|
+
- "Your identity is strong — product, vision, and mission are all defined. Time to understand your users."
|
|
103
|
+
- "You have hypotheses but no experiments. Every untested assumption is just an opinion."
|
|
104
|
+
|
|
105
|
+
### Step 5: User Interaction
|
|
106
|
+
|
|
107
|
+
After the recommendation, present choices. Adapt the options based on which phases are incomplete:
|
|
108
|
+
|
|
109
|
+
**What would you like to work on?**
|
|
110
|
+
|
|
111
|
+
List 3 numbered options based on the most impactful incomplete phases, followed by:
|
|
112
|
+
|
|
113
|
+
```
|
|
114
|
+
4. Pick a different phase
|
|
115
|
+
5. I'm good for now — just wanted to see where I stand
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
If they pick a phase, respond with the specific skill to run:
|
|
119
|
+
|
|
120
|
+
> Great — run `/upg-persona` to start deepening your understanding of who you're building for. When you're done, run `/upg-journey` again to see your updated progress.
|
|
121
|
+
|
|
122
|
+
If they pick option 5, close warmly:
|
|
123
|
+
|
|
124
|
+
> Your graph is in good shape. Keep building — every entity you add makes the picture clearer. Run `/upg-journey` anytime to check in.
|
|
125
|
+
|
|
126
|
+
### Step 6: Completion Celebration
|
|
127
|
+
|
|
128
|
+
When ALL 7 phases have status ✓ complete, replace the recommendation and interaction with:
|
|
129
|
+
|
|
130
|
+
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
|
|
131
|
+
|
|
132
|
+
All 7 phases covered!
|
|
133
|
+
|
|
134
|
+
Your product graph spans the full journey — from identity to learning. This isn't a hobby anymore. It's a structured, evidence-based product.
|
|
135
|
+
|
|
136
|
+
**What's next:**
|
|
137
|
+
|
|
138
|
+
| | |
|
|
139
|
+
|---|---|
|
|
140
|
+
| `/upg-status` | See your full health dashboard |
|
|
141
|
+
| `/upg-gaps` | Find the deepest remaining gaps |
|
|
142
|
+
| `/upg-push` | Sync your graph to the cloud |
|
|
143
|
+
| Keep iterating | The journey is a loop, not a line |
|
|
144
|
+
|
|
145
|
+
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
|
|
146
|
+
|
|
147
|
+
## Phase → Entity Type Reference
|
|
148
|
+
|
|
149
|
+
Use this to check which entities belong to each phase when scanning the graph:
|
|
150
|
+
|
|
151
|
+
| Phase | Entity Types |
|
|
152
|
+
|---|---|
|
|
153
|
+
| 1. Identity | `product`, `vision`, `mission` |
|
|
154
|
+
| 2. Understanding | `persona`, `job`, `need`, `research_study`, `insight` |
|
|
155
|
+
| 3. Discovery | `opportunity`, `solution`, `competitor`, `hypothesis`, `experiment`, `learning` |
|
|
156
|
+
| 4. Business | `business_model`, `value_proposition`, `revenue_stream`, `cost_structure`, `unit_economics`, `pricing_tier`, `pricing_strategy` |
|
|
157
|
+
| 5. Reaching | `ideal_customer_profile`, `positioning`, `messaging`, `acquisition_channel`, `content_strategy` |
|
|
158
|
+
| 6. Building | `feature`, `user_story`, `epic`, `release`, `user_journey`, `user_flow` |
|
|
159
|
+
| 7. Learning | `outcome`, `metric`, `objective`, `key_result`, `retrospective` |
|
|
160
|
+
|
|
161
|
+
## Phase → Skill Reference
|
|
162
|
+
|
|
163
|
+
Use this when recommending which skill to run:
|
|
164
|
+
|
|
165
|
+
| Phase | Primary Skill | Other Skills |
|
|
166
|
+
|---|---|---|
|
|
167
|
+
| 1. Identity | `/upg-init` | `/upg-strategy` |
|
|
168
|
+
| 2. Understanding | `/upg-persona` | `/upg-research` |
|
|
169
|
+
| 3. Discovery | `/upg-discover` | `/upg-hypothesis`, `/upg-explore market_intelligence` |
|
|
170
|
+
| 4. Business | `/upg-explore business_model` | `/upg-explore market_intelligence`, `/upg-okr`, `/upg-explore pricing` |
|
|
171
|
+
| 5. Reaching | `/upg-launch` | `/upg-explore marketing`, `/upg-explore growth`, `/upg-explore content` |
|
|
172
|
+
| 6. Building | `/upg-explore product_spec` | `/upg-explore engineering`, `/upg-explore ux_design` |
|
|
173
|
+
| 7. Learning | `/upg-explore team_org` | `/upg-gaps` |
|
|
174
|
+
|
|
175
|
+
## Footer
|
|
176
|
+
|
|
177
|
+
Always end with:
|
|
178
|
+
|
|
179
|
+
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
|
|
180
|
+
Your `.upg` file is yours — open standard, portable, git-friendly.
|
|
181
|
+
unifiedproductgraph.org
|
|
182
|
+
|
|
183
|
+
After rendering your recommendation, call:
|
|
184
|
+
`update_session_context({ skill_invoked: "upg-journey", recommendation: "<the next skill you recommended>" })`
|
|
185
|
+
|
|
186
|
+
## Lens-Aware Phase Emphasis
|
|
187
|
+
|
|
188
|
+
Check `get_session_context()` for the current lens. Visually emphasize the most relevant phases:
|
|
189
|
+
|
|
190
|
+
- **engineering:** Highlight Phase 6 (Building) and Phase 7 (Learning) — these are where engineers live. Mark other phases as "context" rather than "action needed."
|
|
191
|
+
- **design:** Highlight Phase 2 (Understanding) and Phase 6 (Building) — understanding users and building the interface.
|
|
192
|
+
- **growth:** Highlight Phase 5 (Reaching) and Phase 7 (Learning) — acquisition and measurement.
|
|
193
|
+
- **product (default):** All phases weighted equally.
|
|
194
|
+
|
|
195
|
+
For non-default lenses, recommend the most useful skill set:
|
|
196
|
+
- engineering: "For a build-focused view, try `/upg-status` then `/upg-impact --upstream` to surface blockers."
|
|
197
|
+
- design: "For a design-focused view, try `/upg-explore ux_design` (covers screens, flows, wireframes, audit)."
|
|
198
|
+
- growth: "For a growth-focused view, try `/upg-explore growth`, `/upg-explore marketing`, and `/upg-launch`."
|
|
199
|
+
|
|
200
|
+
## Key Principles
|
|
201
|
+
|
|
202
|
+
- **Celebrate progress.** Every completed phase is an achievement. Never shame gaps — frame them as opportunities.
|
|
203
|
+
- **Be specific.** "You have 2 personas but no JTBDs" is better than "Understanding is incomplete."
|
|
204
|
+
- **Warm coach tone.** You're a product coach walking alongside them, not an auditor grading their work.
|
|
205
|
+
- **Read-only.** This skill never creates entities. It reads, reports, and recommends.
|
|
206
|
+
- **Follow the design system.** Entity emojis, score dots, dashed dividers, tables for structure.
|
|
207
|
+
- **The journey is a loop.** Phase 7 feeds back into Phase 2. Once all phases are covered, the work is never "done" — it's iterating.
|
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: upg-launch-detail
|
|
3
|
+
description: "Detailed discovery flow steps for /upg-launch"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /upg-launch — Discovery Flow (Detail)
|
|
7
|
+
|
|
8
|
+
Loaded on demand when entering the guided launch planning flow.
|
|
9
|
+
|
|
10
|
+
## Discovery Flow
|
|
11
|
+
|
|
12
|
+
### Starting Up
|
|
13
|
+
|
|
14
|
+
First, call `get_product_context` to understand the existing graph. Look for:
|
|
15
|
+
- Product description and stage
|
|
16
|
+
- Existing personas and ICPs (these define the launch audience)
|
|
17
|
+
- Business model entities (value props, revenue streams, pricing)
|
|
18
|
+
- Market segments (especially the beachhead)
|
|
19
|
+
- Features and releases (what's being launched)
|
|
20
|
+
- Competitors (positioning context)
|
|
21
|
+
|
|
22
|
+
If the user passed an argument (e.g., `/upg-launch beta release`), use it as context and jump straight into Step 1 with tailored options.
|
|
23
|
+
|
|
24
|
+
### Step 1: What Are You Launching?
|
|
25
|
+
|
|
26
|
+
> **Phase 1 of 4 — Your positioning** (~5 minutes total)
|
|
27
|
+
|
|
28
|
+
Ask: **"What are you launching? Is this a new product, a major feature, or a milestone release?"**
|
|
29
|
+
|
|
30
|
+
Check for existing features and releases in the graph. Offer options:
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
1. <existing feature/release from graph> — launching this
|
|
34
|
+
2. The whole product — first public launch
|
|
35
|
+
3. A major new feature — <suggest based on product context>
|
|
36
|
+
4. A new pricing tier or plan
|
|
37
|
+
5. Something else — describe what you're putting out there
|
|
38
|
+
6. Not sure yet — we can skip this or come back to it
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
STOP. Wait for the answer.
|
|
42
|
+
|
|
43
|
+
Create the GTM strategy container:
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
create_node({
|
|
47
|
+
type: "gtm_strategy",
|
|
48
|
+
title: "<Product Name> GTM — <launch description>",
|
|
49
|
+
description: "<what's being launched and why now>",
|
|
50
|
+
properties: {
|
|
51
|
+
launch_type: "<new_product | feature | release | pricing | expansion>",
|
|
52
|
+
target_date: "<if discussed>"
|
|
53
|
+
},
|
|
54
|
+
parent_id: "<product_id>"
|
|
55
|
+
})
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
If an existing feature or release was selected, create an edge:
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
create_edge({
|
|
62
|
+
source_id: "<gtm_strategy_id>",
|
|
63
|
+
target_id: "<feature_or_release_id>",
|
|
64
|
+
type: "launches"
|
|
65
|
+
})
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Confirm: "📣 **GTM strategy started** for <launch description>."
|
|
69
|
+
|
|
70
|
+
### Step 2: Ideal Customer
|
|
71
|
+
|
|
72
|
+
Ask: **"Who's the ideal customer for this launch? Who should hear about it first?"**
|
|
73
|
+
|
|
74
|
+
Check for existing personas, ICPs, and market segments. Offer options:
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
1. <existing persona> — they're the primary audience
|
|
78
|
+
2. <existing ICP from `/upg-explore market_intelligence`> — launch to the beachhead
|
|
79
|
+
3. <existing customer segment from `/upg-explore business_model`> — the paying segment
|
|
80
|
+
4. A new audience — <suggest based on launch type>
|
|
81
|
+
5. Different audience — tell me who this is for
|
|
82
|
+
6. Not sure yet — we can skip this or come back to it
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
STOP. Wait for the answer.
|
|
86
|
+
|
|
87
|
+
If they pick an existing entity, create an edge. If new, create an ICP:
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
create_node({
|
|
91
|
+
type: "ideal_customer_profile",
|
|
92
|
+
title: "<ICP name>",
|
|
93
|
+
description: "<who they are, why they care about this launch>",
|
|
94
|
+
properties: {
|
|
95
|
+
characteristics: ["<trait 1>", "<trait 2>", "<trait 3>"],
|
|
96
|
+
pain_level: "<how badly they need this>",
|
|
97
|
+
awareness: "<aware of problem | aware of solutions | aware of you>",
|
|
98
|
+
buying_stage: "<problem_aware | solution_aware | product_aware | most_aware>"
|
|
99
|
+
},
|
|
100
|
+
parent_id: "<gtm_strategy_id>"
|
|
101
|
+
})
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Connect to existing persona if relevant:
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
create_edge({
|
|
108
|
+
source_id: "<icp_id>",
|
|
109
|
+
target_id: "<persona_id>",
|
|
110
|
+
type: "represents"
|
|
111
|
+
})
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Confirm: "🎯 **<ICP Name>** is the launch audience."
|
|
115
|
+
|
|
116
|
+
### Step 3: Positioning
|
|
117
|
+
|
|
118
|
+
Ask: **"How do you want to position this? What's the frame you want people to see <Product Name> through?"**
|
|
119
|
+
|
|
120
|
+
> *Positioning isn't a tagline — it's the mental category you want to own. It answers: "What is this, and why should I care?"*
|
|
121
|
+
|
|
122
|
+
Offer positioning frameworks:
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
1. Category leader — "The best <category> for <audience>"
|
|
126
|
+
2. Problem-first — "The solution to <specific painful problem>"
|
|
127
|
+
3. Against the status quo — "Unlike <current approach>, we <key difference>"
|
|
128
|
+
4. New category — "We're creating a new way to <do something>"
|
|
129
|
+
5. Different positioning — describe how you want to be seen
|
|
130
|
+
6. Not sure yet — we can skip this or come back to it
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
STOP. Wait for the answer.
|
|
134
|
+
|
|
135
|
+
Create the positioning entity:
|
|
136
|
+
|
|
137
|
+
```
|
|
138
|
+
create_node({
|
|
139
|
+
type: "positioning",
|
|
140
|
+
title: "<positioning statement>",
|
|
141
|
+
description: "<expanded positioning narrative>",
|
|
142
|
+
properties: {
|
|
143
|
+
framework: "<category | problem | competitive | new_category>",
|
|
144
|
+
for_who: "<target audience>",
|
|
145
|
+
unlike: "<the alternative or status quo>",
|
|
146
|
+
we_are: "<what you are>",
|
|
147
|
+
because: "<key differentiator>"
|
|
148
|
+
},
|
|
149
|
+
parent_id: "<gtm_strategy_id>"
|
|
150
|
+
})
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
If competitors exist in the graph, create edges:
|
|
154
|
+
|
|
155
|
+
```
|
|
156
|
+
create_edge({
|
|
157
|
+
source_id: "<positioning_id>",
|
|
158
|
+
target_id: "<competitor_id>",
|
|
159
|
+
type: "differentiates_from"
|
|
160
|
+
})
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Confirm: "🎯 **Positioning locked in** — <brief summary>."
|
|
164
|
+
|
|
165
|
+
### Step 4: Key Message
|
|
166
|
+
|
|
167
|
+
Ask: **"What's the one message you want people to remember? If someone hears about <Product Name> from a friend, what do they say?"**
|
|
168
|
+
|
|
169
|
+
Offer message options based on the positioning and ICP:
|
|
170
|
+
|
|
171
|
+
```
|
|
172
|
+
1. "<message tied to positioning>" — leads with the differentiator
|
|
173
|
+
2. "<message tied to persona pain>" — leads with the problem
|
|
174
|
+
3. "<message tied to outcome>" — leads with the result
|
|
175
|
+
4. "<message tied to category>" — leads with the new frame
|
|
176
|
+
5. Different message — write it in your own words
|
|
177
|
+
6. Not sure yet — we can skip this or come back to it
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
STOP. Wait for the answer.
|
|
181
|
+
|
|
182
|
+
Create the messaging entity:
|
|
183
|
+
|
|
184
|
+
```
|
|
185
|
+
create_node({
|
|
186
|
+
type: "messaging",
|
|
187
|
+
title: "<headline message>",
|
|
188
|
+
description: "<expanded messaging — the full narrative>",
|
|
189
|
+
properties: {
|
|
190
|
+
headline: "<the one-liner>",
|
|
191
|
+
subheadline: "<supporting detail>",
|
|
192
|
+
proof_points: ["<proof 1>", "<proof 2>", "<proof 3>"],
|
|
193
|
+
tone: "<inspiring | practical | bold | reassuring | playful>"
|
|
194
|
+
},
|
|
195
|
+
parent_id: "<gtm_strategy_id>"
|
|
196
|
+
})
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
Connect to positioning:
|
|
200
|
+
|
|
201
|
+
```
|
|
202
|
+
create_edge({
|
|
203
|
+
source_id: "<messaging_id>",
|
|
204
|
+
target_id: "<positioning_id>",
|
|
205
|
+
type: "expresses"
|
|
206
|
+
})
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
Confirm: "💬 **Key message set** — *\"<headline>\"*"
|
|
210
|
+
|
|
211
|
+
### Step 5: Launch Channels
|
|
212
|
+
|
|
213
|
+
Ask: **"What channels will you use to get this out there? Where does <ICP Name> hang out?"**
|
|
214
|
+
|
|
215
|
+
Offer channel options tailored to the ICP and product:
|
|
216
|
+
|
|
217
|
+
```
|
|
218
|
+
1. Product Hunt + Twitter/X — classic indie/startup launch
|
|
219
|
+
2. Email to existing users + blog post — warm audience first
|
|
220
|
+
3. Content marketing + SEO — long-game organic
|
|
221
|
+
4. LinkedIn + direct outreach — B2B professional networks
|
|
222
|
+
5. Community + word of mouth — Discord, Slack communities, Reddit
|
|
223
|
+
6. Paid ads — targeted campaigns on relevant platforms
|
|
224
|
+
7. Different channels — what works for your audience?
|
|
225
|
+
8. Not sure yet — we can skip this or come back to it
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
> **Launch channels vs growth channels:** Launch channels = where you make a splash on day one. Growth channels = where you build an ongoing engine. If you don't see a difference, we can merge them into one step.
|
|
229
|
+
|
|
230
|
+
Tell them they can pick multiple (e.g., "1, 2, and 5").
|
|
231
|
+
|
|
232
|
+
STOP. Wait for the answer.
|
|
233
|
+
|
|
234
|
+
For each channel, note it in the GTM strategy properties (channels are lightweight here — not separate entities unless the user wants to go deeper):
|
|
235
|
+
|
|
236
|
+
```
|
|
237
|
+
update_node({
|
|
238
|
+
id: "<gtm_strategy_id>",
|
|
239
|
+
properties: {
|
|
240
|
+
...,
|
|
241
|
+
channels: ["<channel 1>", "<channel 2>", "<channel 3>"],
|
|
242
|
+
primary_channel: "<the main one>"
|
|
243
|
+
}
|
|
244
|
+
})
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
Confirm: "📣 **Channels mapped** — <primary channel> as the lead, supported by <others>."
|
|
248
|
+
|
|
249
|
+
### Step 6: Launch Timeline
|
|
250
|
+
|
|
251
|
+
Ask: **"What's the launch timeline? How do you want to phase this?"**
|
|
252
|
+
|
|
253
|
+
Offer phased approaches:
|
|
254
|
+
|
|
255
|
+
```
|
|
256
|
+
1. Soft launch → Beta → GA — gradual rollout over weeks
|
|
257
|
+
2. Big bang — pick a date, go all-in
|
|
258
|
+
3. Waitlist → Early access → Public — build anticipation first
|
|
259
|
+
4. Internal → Closed beta → Open — test with friendlies first
|
|
260
|
+
5. Different approach — tell me your timeline
|
|
261
|
+
6. Not sure yet — we can skip this or come back to it
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
STOP. Wait for the answer.
|
|
265
|
+
|
|
266
|
+
Create the launch entity with phases:
|
|
267
|
+
|
|
268
|
+
```
|
|
269
|
+
create_node({
|
|
270
|
+
type: "launch",
|
|
271
|
+
title: "<Product Name> Launch — <type>",
|
|
272
|
+
description: "<launch approach and rationale>",
|
|
273
|
+
properties: {
|
|
274
|
+
approach: "<gradual | big_bang | waitlist | internal_first>",
|
|
275
|
+
phases: [
|
|
276
|
+
{ "name": "<phase 1>", "target_date": "<date or timeframe>", "goal": "<what success looks like>" },
|
|
277
|
+
{ "name": "<phase 2>", "target_date": "<date or timeframe>", "goal": "<what success looks like>" },
|
|
278
|
+
{ "name": "<phase 3>", "target_date": "<date or timeframe>", "goal": "<what success looks like>" }
|
|
279
|
+
],
|
|
280
|
+
success_metric: "<primary launch KPI>",
|
|
281
|
+
status: "planned"
|
|
282
|
+
},
|
|
283
|
+
parent_id: "<gtm_strategy_id>"
|
|
284
|
+
})
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
> **Note:** parent_id already creates an edge — don't create an explicit edge for the same relationship. The launch node is already connected to the GTM strategy via parent_id.
|
|
288
|
+
|
|
289
|
+
Confirm: "🚀 **Launch plan set** — <approach> with <n> phases."
|
|
290
|
+
|
|
291
|
+
### Step 7: Acquisition Channels (optional)
|
|
292
|
+
|
|
293
|
+
Ask: **"What channels will drive acquisition for <Product Name>? This goes beyond launch day — where will your ongoing growth come from?"**
|
|
294
|
+
|
|
295
|
+
Offer channel options tailored to the ICP and product:
|
|
296
|
+
|
|
297
|
+
```
|
|
298
|
+
1. SEO — rank for high-intent keywords your audience searches for
|
|
299
|
+
2. Social media — organic content on Twitter/X, LinkedIn, Instagram, TikTok
|
|
300
|
+
3. Referral program — existing users bring new users
|
|
301
|
+
4. Paid ads — targeted campaigns (Google, Meta, LinkedIn)
|
|
302
|
+
5. Content marketing — blog, newsletter, educational content
|
|
303
|
+
6. Partnerships — co-marketing, integrations, affiliates
|
|
304
|
+
7. Community — Discord, Slack, Reddit, forums
|
|
305
|
+
8. Product-led growth — free tier / freemium drives viral adoption
|
|
306
|
+
9. Different channels — tell me what works for your audience
|
|
307
|
+
10. Not sure yet — we can skip this or come back to it
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
Tell them they can pick multiple (e.g., "1, 3, and 5").
|
|
311
|
+
|
|
312
|
+
STOP. Wait for the answer.
|
|
313
|
+
|
|
314
|
+
Create an `acquisition_channel` entity for each selected channel:
|
|
315
|
+
|
|
316
|
+
```
|
|
317
|
+
create_node({
|
|
318
|
+
type: "acquisition_channel",
|
|
319
|
+
title: "<channel name>",
|
|
320
|
+
description: "<how this channel works for the product and audience>",
|
|
321
|
+
properties: {
|
|
322
|
+
channel_type: "<seo | social | referral | paid | content | partnerships | community | product_led>",
|
|
323
|
+
cost_model: "<free | low | medium | high>",
|
|
324
|
+
time_to_impact: "<immediate | weeks | months | long_term>",
|
|
325
|
+
primary: <true if this is the lead channel, false otherwise>
|
|
326
|
+
},
|
|
327
|
+
parent_id: "<gtm_strategy_id>"
|
|
328
|
+
})
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
Connect each channel to the ICP:
|
|
332
|
+
|
|
333
|
+
```
|
|
334
|
+
create_edge({
|
|
335
|
+
source_id: "<acquisition_channel_id>",
|
|
336
|
+
target_id: "<icp_id>",
|
|
337
|
+
type: "targets"
|
|
338
|
+
})
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
Confirm: "📣 **<N> acquisition channels mapped** — <primary channel> as the lead growth engine."
|
|
342
|
+
|
|
343
|
+
### Step 8: Content Strategy (optional)
|
|
344
|
+
|
|
345
|
+
Ask: **"What content will you create to attract and educate <ICP Name>? Content fuels your acquisition channels."**
|
|
346
|
+
|
|
347
|
+
Offer content strategy options based on the channels and audience:
|
|
348
|
+
|
|
349
|
+
```
|
|
350
|
+
1. Blog + SEO — long-form articles targeting search intent
|
|
351
|
+
2. Newsletter — regular email content building trust over time
|
|
352
|
+
3. Social-first — short-form posts, threads, videos for social platforms
|
|
353
|
+
4. Educational — tutorials, guides, courses, documentation
|
|
354
|
+
5. Thought leadership — opinions, frameworks, industry analysis
|
|
355
|
+
6. Case studies + proof — customer stories, before/after, data
|
|
356
|
+
7. Video / podcast — YouTube, podcast, webinars
|
|
357
|
+
8. Different approach — tell me your content philosophy
|
|
358
|
+
9. Not sure yet — we can skip this or come back to it
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
STOP. Wait for the answer.
|
|
362
|
+
|
|
363
|
+
Create the `content_strategy` entity:
|
|
364
|
+
|
|
365
|
+
```
|
|
366
|
+
create_node({
|
|
367
|
+
type: "content_strategy",
|
|
368
|
+
title: "<Product Name> Content Strategy",
|
|
369
|
+
description: "<content philosophy and approach>",
|
|
370
|
+
properties: {
|
|
371
|
+
content_types: ["<type 1>", "<type 2>", "<type 3>"],
|
|
372
|
+
primary_format: "<blog | newsletter | social | video | podcast | educational>",
|
|
373
|
+
publishing_cadence: "<daily | weekly | biweekly | monthly>",
|
|
374
|
+
target_audience: "<ICP name>",
|
|
375
|
+
goal: "<awareness | trust | education | conversion | retention>"
|
|
376
|
+
},
|
|
377
|
+
parent_id: "<gtm_strategy_id>"
|
|
378
|
+
})
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
Connect to relevant acquisition channels:
|
|
382
|
+
|
|
383
|
+
```
|
|
384
|
+
create_edge({
|
|
385
|
+
source_id: "<content_strategy_id>",
|
|
386
|
+
target_id: "<acquisition_channel_id>",
|
|
387
|
+
type: "fuels"
|
|
388
|
+
})
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
Confirm: "📝 **Content strategy set** — <primary format> focused on <goal>."
|
|
392
|
+
|