@unified-product-graph/mcp-server 0.7.1 → 0.7.4
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 +2 -2
- package/README.md +11 -11
- package/TOOLS.md +11 -11
- package/dist/index.js +930 -911
- package/dist/index.js.map +1 -1
- package/dist/preflight.js +1 -1
- package/dist/preflight.js.map +1 -1
- package/dist/tools-manifest.json +34 -34
- package/package.json +1 -1
- package/scripts/claudemd-snippet.md +8 -8
- package/scripts/install-skills.sh +7 -7
- package/skills/upg/SKILL.md +30 -30
- package/skills/upg-analytics/SKILL.md +11 -11
- package/skills/upg-capture/SKILL.md +19 -19
- package/skills/upg-connect/SKILL.md +6 -6
- package/skills/upg-context/SKILL.md +51 -51
- package/skills/upg-context-intelligence/SKILL.md +43 -43
- package/skills/upg-design-system/SKILL.md +21 -21
- package/skills/upg-diff/SKILL.md +12 -12
- package/skills/upg-discover/SKILL.md +10 -10
- package/skills/upg-explore/SKILL-DETAIL.md +9 -9
- package/skills/upg-explore/SKILL.md +14 -14
- package/skills/upg-export/SKILL.md +34 -34
- package/skills/upg-feedback/SKILL.md +17 -17
- package/skills/upg-gaps/SKILL.md +31 -31
- package/skills/upg-hypothesis/SKILL.md +10 -10
- package/skills/upg-impact/SKILL.md +30 -30
- package/skills/upg-import/SKILL.md +14 -14
- package/skills/upg-init/SKILL.md +40 -40
- package/skills/upg-inspect/SKILL.md +9 -9
- package/skills/upg-journey/SKILL.md +21 -21
- package/skills/upg-launch/SKILL-DETAIL.md +71 -71
- package/skills/upg-launch/SKILL.md +16 -16
- package/skills/upg-migrate/SKILL.md +19 -19
- package/skills/upg-okr/SKILL-DETAIL.md +27 -27
- package/skills/upg-okr/SKILL.md +10 -10
- package/skills/upg-persona/SKILL.md +20 -20
- package/skills/upg-prioritise/SKILL.md +19 -19
- package/skills/upg-pull/SKILL-DETAIL.md +21 -21
- package/skills/upg-pull/SKILL.md +5 -5
- package/skills/upg-push/SKILL-DETAIL.md +23 -23
- package/skills/upg-push/SKILL.md +6 -6
- package/skills/upg-reflect/SKILL.md +20 -20
- package/skills/upg-research/SKILL.md +37 -37
- package/skills/upg-rollback/SKILL.md +19 -19
- package/skills/upg-run/SKILL.md +14 -14
- package/skills/upg-schema-changelog/SKILL.md +29 -29
- package/skills/upg-schema-consolidate/SKILL.md +18 -18
- package/skills/upg-schema-edges/SKILL.md +12 -12
- package/skills/upg-schema-evolve/SKILL.md +16 -16
- package/skills/upg-schema-health/SKILL.md +22 -22
- package/skills/upg-schema-update/SKILL.md +24 -24
- package/skills/upg-snapshot/SKILL.md +8 -8
- package/skills/upg-status/SKILL.md +31 -31
- package/skills/upg-strategy/SKILL.md +26 -26
- package/skills/upg-template/SKILL.md +21 -21
- package/skills/upg-trace/SKILL.md +22 -22
- package/skills/upg-tree/SKILL.md +18 -18
- package/skills/upg-verify/SKILL.md +42 -42
- package/skills/upg-workspace/SKILL.md +12 -12
|
@@ -3,7 +3,7 @@ name: upg-launch-detail
|
|
|
3
3
|
description: "Detailed discovery flow steps for /upg-launch"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# /upg-launch
|
|
6
|
+
# /upg-launch: Discovery Flow (Detail)
|
|
7
7
|
|
|
8
8
|
Loaded on demand when entering the guided launch planning flow.
|
|
9
9
|
|
|
@@ -23,19 +23,19 @@ If the user passed an argument (e.g., `/upg-launch beta release`), use it as con
|
|
|
23
23
|
|
|
24
24
|
### Step 1: What Are You Launching?
|
|
25
25
|
|
|
26
|
-
> **Phase 1 of 4
|
|
26
|
+
> **Phase 1 of 4: Your positioning** (~5 minutes total)
|
|
27
27
|
|
|
28
28
|
Ask: **"What are you launching? Is this a new product, a major feature, or a milestone release?"**
|
|
29
29
|
|
|
30
30
|
Check for existing features and releases in the graph. Offer options:
|
|
31
31
|
|
|
32
32
|
```
|
|
33
|
-
1. <existing feature/release from graph
|
|
34
|
-
2. The whole product
|
|
35
|
-
3. A major new feature
|
|
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
36
|
4. A new pricing tier or plan
|
|
37
|
-
5. Something else
|
|
38
|
-
6. Not sure yet
|
|
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
39
|
```
|
|
40
40
|
|
|
41
41
|
STOP. Wait for the answer.
|
|
@@ -45,7 +45,7 @@ Create the GTM strategy container:
|
|
|
45
45
|
```
|
|
46
46
|
create_node({
|
|
47
47
|
type: "gtm_strategy",
|
|
48
|
-
title: "<Product Name> GTM
|
|
48
|
+
title: "<Product Name> GTM; <launch description>",
|
|
49
49
|
description: "<what's being launched and why now>",
|
|
50
50
|
properties: {
|
|
51
51
|
launch_type: "<new_product | feature | release | pricing | expansion>",
|
|
@@ -74,12 +74,12 @@ Ask: **"Who's the ideal customer for this launch? Who should hear about it first
|
|
|
74
74
|
Check for existing personas, ICPs, and market segments. Offer options:
|
|
75
75
|
|
|
76
76
|
```
|
|
77
|
-
1. <existing persona
|
|
78
|
-
2. <existing ICP from `/upg-explore market_intelligence
|
|
79
|
-
3. <existing customer segment from `/upg-explore business_model
|
|
80
|
-
4. A new audience
|
|
81
|
-
5. Different audience
|
|
82
|
-
6. Not sure yet
|
|
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
83
|
```
|
|
84
84
|
|
|
85
85
|
STOP. Wait for the answer.
|
|
@@ -117,17 +117,17 @@ Confirm: "🎯 **<ICP Name>** is the launch audience."
|
|
|
117
117
|
|
|
118
118
|
Ask: **"How do you want to position this? What's the frame you want people to see <Product Name> through?"**
|
|
119
119
|
|
|
120
|
-
> *Positioning isn't a tagline
|
|
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
121
|
|
|
122
122
|
Offer positioning frameworks:
|
|
123
123
|
|
|
124
124
|
```
|
|
125
|
-
1. Category leader
|
|
126
|
-
2. Problem-first
|
|
127
|
-
3. Against the status quo
|
|
128
|
-
4. New category
|
|
129
|
-
5. Different positioning
|
|
130
|
-
6. Not sure yet
|
|
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
131
|
```
|
|
132
132
|
|
|
133
133
|
STOP. Wait for the answer.
|
|
@@ -160,7 +160,7 @@ create_edge({
|
|
|
160
160
|
})
|
|
161
161
|
```
|
|
162
162
|
|
|
163
|
-
Confirm: "🎯 **Positioning locked in
|
|
163
|
+
Confirm: "🎯 **Positioning locked in**: <brief summary>."
|
|
164
164
|
|
|
165
165
|
### Step 4: Key Message
|
|
166
166
|
|
|
@@ -169,12 +169,12 @@ Ask: **"What's the one message you want people to remember? If someone hears abo
|
|
|
169
169
|
Offer message options based on the positioning and ICP:
|
|
170
170
|
|
|
171
171
|
```
|
|
172
|
-
1. "<message tied to positioning>"
|
|
173
|
-
2. "<message tied to persona pain>"
|
|
174
|
-
3. "<message tied to outcome>"
|
|
175
|
-
4. "<message tied to category>"
|
|
176
|
-
5. Different message
|
|
177
|
-
6. Not sure yet
|
|
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
178
|
```
|
|
179
179
|
|
|
180
180
|
STOP. Wait for the answer.
|
|
@@ -185,7 +185,7 @@ Create the messaging entity:
|
|
|
185
185
|
create_node({
|
|
186
186
|
type: "messaging",
|
|
187
187
|
title: "<headline message>",
|
|
188
|
-
description: "<expanded messaging
|
|
188
|
+
description: "<expanded messaging; the full narrative>",
|
|
189
189
|
properties: {
|
|
190
190
|
headline: "<the one-liner>",
|
|
191
191
|
subheadline: "<supporting detail>",
|
|
@@ -206,7 +206,7 @@ create_edge({
|
|
|
206
206
|
})
|
|
207
207
|
```
|
|
208
208
|
|
|
209
|
-
Confirm: "💬 **Key message set
|
|
209
|
+
Confirm: "💬 **Key message set**: *\"<headline>\"*"
|
|
210
210
|
|
|
211
211
|
### Step 5: Launch Channels
|
|
212
212
|
|
|
@@ -215,14 +215,14 @@ Ask: **"What channels will you use to get this out there? Where does <ICP Name>
|
|
|
215
215
|
Offer channel options tailored to the ICP and product:
|
|
216
216
|
|
|
217
217
|
```
|
|
218
|
-
1. Product Hunt + Twitter/X
|
|
219
|
-
2. Email to existing users + blog post
|
|
220
|
-
3. Content marketing + SEO
|
|
221
|
-
4. LinkedIn + direct outreach
|
|
222
|
-
5. Community + word of mouth
|
|
223
|
-
6. Paid ads
|
|
224
|
-
7. Different channels
|
|
225
|
-
8. Not sure yet
|
|
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
226
|
```
|
|
227
227
|
|
|
228
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.
|
|
@@ -231,7 +231,7 @@ Tell them they can pick multiple (e.g., "1, 2, and 5").
|
|
|
231
231
|
|
|
232
232
|
STOP. Wait for the answer.
|
|
233
233
|
|
|
234
|
-
For each channel, note it in the GTM strategy properties (channels are lightweight here
|
|
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
235
|
|
|
236
236
|
```
|
|
237
237
|
update_node({
|
|
@@ -244,7 +244,7 @@ update_node({
|
|
|
244
244
|
})
|
|
245
245
|
```
|
|
246
246
|
|
|
247
|
-
Confirm: "📣 **Channels mapped
|
|
247
|
+
Confirm: "📣 **Channels mapped**: <primary channel> as the lead, supported by <others>."
|
|
248
248
|
|
|
249
249
|
### Step 6: Launch Timeline
|
|
250
250
|
|
|
@@ -253,12 +253,12 @@ Ask: **"What's the launch timeline? How do you want to phase this?"**
|
|
|
253
253
|
Offer phased approaches:
|
|
254
254
|
|
|
255
255
|
```
|
|
256
|
-
1. Soft launch → Beta → GA
|
|
257
|
-
2. Big bang
|
|
258
|
-
3. Waitlist → Early access → Public
|
|
259
|
-
4. Internal → Closed beta → Open
|
|
260
|
-
5. Different approach
|
|
261
|
-
6. Not sure yet
|
|
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
262
|
```
|
|
263
263
|
|
|
264
264
|
STOP. Wait for the answer.
|
|
@@ -268,7 +268,7 @@ Create the launch entity with phases:
|
|
|
268
268
|
```
|
|
269
269
|
create_node({
|
|
270
270
|
type: "launch",
|
|
271
|
-
title: "<Product Name> Launch
|
|
271
|
+
title: "<Product Name> Launch; <type>",
|
|
272
272
|
description: "<launch approach and rationale>",
|
|
273
273
|
properties: {
|
|
274
274
|
approach: "<gradual | big_bang | waitlist | internal_first>",
|
|
@@ -284,27 +284,27 @@ create_node({
|
|
|
284
284
|
})
|
|
285
285
|
```
|
|
286
286
|
|
|
287
|
-
> **Note:** parent_id already creates an edge
|
|
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
288
|
|
|
289
|
-
Confirm: "🚀 **Launch plan set
|
|
289
|
+
Confirm: "🚀 **Launch plan set**: <approach> with <n> phases."
|
|
290
290
|
|
|
291
291
|
### Step 7: Acquisition Channels (optional)
|
|
292
292
|
|
|
293
|
-
Ask: **"What channels will drive acquisition for <Product Name>? This goes beyond launch day
|
|
293
|
+
Ask: **"What channels will drive acquisition for <Product Name>? This goes beyond launch day; where will your ongoing growth come from?"**
|
|
294
294
|
|
|
295
295
|
Offer channel options tailored to the ICP and product:
|
|
296
296
|
|
|
297
297
|
```
|
|
298
|
-
1. SEO
|
|
299
|
-
2. Social media
|
|
300
|
-
3. Referral program
|
|
301
|
-
4. Paid ads
|
|
302
|
-
5. Content marketing
|
|
303
|
-
6. Partnerships
|
|
304
|
-
7. Community
|
|
305
|
-
8. Product-led growth
|
|
306
|
-
9. Different channels
|
|
307
|
-
10. Not sure yet
|
|
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
308
|
```
|
|
309
309
|
|
|
310
310
|
Tell them they can pick multiple (e.g., "1, 3, and 5").
|
|
@@ -338,7 +338,7 @@ create_edge({
|
|
|
338
338
|
})
|
|
339
339
|
```
|
|
340
340
|
|
|
341
|
-
Confirm: "📣 **<N> acquisition channels mapped
|
|
341
|
+
Confirm: "📣 **<N> acquisition channels mapped**: <primary channel> as the lead growth engine."
|
|
342
342
|
|
|
343
343
|
### Step 8: Content Strategy (optional)
|
|
344
344
|
|
|
@@ -347,15 +347,15 @@ Ask: **"What content will you create to attract and educate <ICP Name>? Content
|
|
|
347
347
|
Offer content strategy options based on the channels and audience:
|
|
348
348
|
|
|
349
349
|
```
|
|
350
|
-
1. Blog + SEO
|
|
351
|
-
2. Newsletter
|
|
352
|
-
3. Social-first
|
|
353
|
-
4. Educational
|
|
354
|
-
5. Thought leadership
|
|
355
|
-
6. Case studies + proof
|
|
356
|
-
7. Video / podcast
|
|
357
|
-
8. Different approach
|
|
358
|
-
9. Not sure yet
|
|
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
359
|
```
|
|
360
360
|
|
|
361
361
|
STOP. Wait for the answer.
|
|
@@ -388,5 +388,5 @@ create_edge({
|
|
|
388
388
|
})
|
|
389
389
|
```
|
|
390
390
|
|
|
391
|
-
Confirm: "📝 **Content strategy set
|
|
391
|
+
Confirm: "📝 **Content strategy set**: <primary format> focused on <goal>."
|
|
392
392
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: upg-launch
|
|
3
|
-
description: "Guided go-to-market planning
|
|
3
|
+
description: "Guided go-to-market planning: positioning, messaging, channels, launch timeline as graph entities"
|
|
4
4
|
user-invocable: true
|
|
5
5
|
argument-hint: "[description]"
|
|
6
6
|
category: cognitive
|
|
@@ -8,9 +8,9 @@ approaches: [plan]
|
|
|
8
8
|
playbooks: [business-gtm-growth, business-marketing]
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
# /upg-launch
|
|
11
|
+
# /upg-launch: Go-to-Market Planning
|
|
12
12
|
|
|
13
|
-
You are a GTM strategist. Your job is to help the user plan and structure a product launch as a connected set of graph entities
|
|
13
|
+
You are a GTM strategist. Your job is to help the user plan and structure a product launch as a connected set of graph entities; from positioning and messaging to channels and phased rollout.
|
|
14
14
|
|
|
15
15
|
**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).
|
|
16
16
|
|
|
@@ -37,7 +37,7 @@ Use the `mcp__unified-product-graph__*` MCP tools (create_node, create_edge, upd
|
|
|
37
37
|
|
|
38
38
|
### Rule 2: Be a Collaborator, Not a Form
|
|
39
39
|
|
|
40
|
-
**Every question should offer options the user can pick from OR customize.** Don't just ask a blank question and wait
|
|
40
|
+
**Every question should offer options the user can pick from OR customize.** Don't just ask a blank question and wait; suggest, propose, give examples as a selectable list. This is brainstorming with a partner, not filling out a form.
|
|
41
41
|
|
|
42
42
|
Format options as a numbered list the user can pick from, always ending with a custom option:
|
|
43
43
|
|
|
@@ -45,11 +45,11 @@ Format options as a numbered list the user can pick from, always ending with a c
|
|
|
45
45
|
1. Option A
|
|
46
46
|
2. Option B
|
|
47
47
|
3. Option C
|
|
48
|
-
4. Something else
|
|
49
|
-
5. Not sure yet
|
|
48
|
+
4. Something else; tell me in your own words
|
|
49
|
+
5. Not sure yet; we can skip this or come back to it
|
|
50
50
|
```
|
|
51
51
|
|
|
52
|
-
If the user already gave you context (from the product, personas, business model, or market), use it to generate smart, relevant options
|
|
52
|
+
If the user already gave you context (from the product, personas, business model, or market), use it to generate smart, relevant options, not generic ones.
|
|
53
53
|
|
|
54
54
|
### Rule 3: React and Build On Answers
|
|
55
55
|
|
|
@@ -63,7 +63,7 @@ When the user answers, don't just silently move on. Briefly acknowledge, reflect
|
|
|
63
63
|
| ideal_customer_profile | 🎯 | Who you're launching to |
|
|
64
64
|
| positioning | 🎯 | How you position in the market |
|
|
65
65
|
| messaging | 💬 | Key messages for the launch |
|
|
66
|
-
| launch | 🚀 | The launch itself
|
|
66
|
+
| launch | 🚀 | The launch itself; phases and timeline |
|
|
67
67
|
| acquisition_channel | 📣 | Ongoing growth channels beyond launch day |
|
|
68
68
|
| content_strategy | 📝 | Content approach to fuel acquisition |
|
|
69
69
|
|
|
@@ -77,10 +77,10 @@ When the user answers, don't just silently move on. Briefly acknowledge, reflect
|
|
|
77
77
|
Display the complete GTM strategy:
|
|
78
78
|
|
|
79
79
|
```
|
|
80
|
-
📣 <Product Name> GTM
|
|
80
|
+
📣 <Product Name> GTM; <launch description>
|
|
81
81
|
│
|
|
82
82
|
├─ 🎯 Audience
|
|
83
|
-
│ └─ <ICP name
|
|
83
|
+
│ └─ <ICP name>; <key characteristics>
|
|
84
84
|
│
|
|
85
85
|
├─ 🎯 Positioning
|
|
86
86
|
│ └─ "<positioning statement>"
|
|
@@ -96,9 +96,9 @@ Display the complete GTM strategy:
|
|
|
96
96
|
│ └─ <channel 3>
|
|
97
97
|
│
|
|
98
98
|
├─ 🚀 Launch Plan 🔵 planned
|
|
99
|
-
│ ├─ Phase 1: <name
|
|
100
|
-
│ ├─ Phase 2: <name
|
|
101
|
-
│ └─ Phase 3: <name
|
|
99
|
+
│ ├─ Phase 1: <name>; <timeframe> ⚪
|
|
100
|
+
│ ├─ Phase 2: <name>; <timeframe> ⚪
|
|
101
|
+
│ └─ Phase 3: <name>; <timeframe> ⚪
|
|
102
102
|
│
|
|
103
103
|
├─ 📣 Acquisition Channels (if created)
|
|
104
104
|
│ ├─ <channel 1> (<type>) ← primary
|
|
@@ -106,7 +106,7 @@ Display the complete GTM strategy:
|
|
|
106
106
|
│ └─ <channel 3> (<type>)
|
|
107
107
|
│
|
|
108
108
|
└─ 📝 Content Strategy (if created)
|
|
109
|
-
└─ <primary format
|
|
109
|
+
└─ <primary format>; <cadence>, focused on <goal>
|
|
110
110
|
```
|
|
111
111
|
|
|
112
112
|
Then show a quick health check:
|
|
@@ -126,7 +126,7 @@ Check the graph for the biggest gap across the 8 business areas. Recommend ONE n
|
|
|
126
126
|
> Or run `/upg-journey` to see where you are in the bigger picture.
|
|
127
127
|
|
|
128
128
|
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
|
|
129
|
-
Your `.upg` file is yours
|
|
129
|
+
Your `.upg` file is yours: open standard, portable, git-friendly.
|
|
130
130
|
unifiedproductgraph.org
|
|
131
131
|
|
|
132
132
|
## Key Principles
|
|
@@ -134,7 +134,7 @@ unifiedproductgraph.org
|
|
|
134
134
|
- **ONE QUESTION PER MESSAGE.** This is non-negotiable. Never ask two things at once. Never bundle sub-questions. Ask, wait, process, then ask the next one.
|
|
135
135
|
- **Never create empty nodes.** Every entity should have meaningful properties filled in.
|
|
136
136
|
- **Always create edges.** Use parent_id to auto-connect. Link to existing personas, features, competitors, and market segments when relevant.
|
|
137
|
-
- **Be conversational.** React to what the user says. If they give you extra info, use it
|
|
137
|
+
- **Be conversational.** React to what the user says. If they give you extra info, use it; don't re-ask.
|
|
138
138
|
- **Confirm each creation.** After creating an entity, confirm with the appropriate emoji + bold name before moving on.
|
|
139
139
|
- **Follow the design system.** Entity emojis, score dots, filled bars, dashed dividers as defined in /upg-context.
|
|
140
140
|
- **Use product context.** Always call `get_product_context` first and weave existing entities into your suggestions. A GTM plan that ignores existing personas and business model entities is useless.
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: upg-migrate
|
|
3
|
-
description: "Migrate deprecated entity types to their replacements
|
|
3
|
+
description: "Migrate deprecated entity types to their replacements: preview changes, then apply safely"
|
|
4
4
|
user-invocable: true
|
|
5
5
|
argument-hint: "[from_type]"
|
|
6
6
|
category: tooling
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
# /upg-migrate
|
|
9
|
+
# /upg-migrate: Migrate Deprecated Entity Types
|
|
10
10
|
|
|
11
11
|
You are a Unified Product Graph migration tool. Your job is to scan the graph for deprecated entity types, show what needs migrating, preview the exact changes, and execute the migration atomically. Nothing happens without a preview first.
|
|
12
12
|
|
|
@@ -20,7 +20,7 @@ Use `mcp__unified-product-graph__get_graph_digest` to confirm final state.
|
|
|
20
20
|
|
|
21
21
|
## Deprecation Table
|
|
22
22
|
|
|
23
|
-
This mirrors `UPG_MIGRATIONS` in `packages/upg-spec/src/grammar/migrations.ts
|
|
23
|
+
This mirrors `UPG_MIGRATIONS` in `packages/upg-spec/src/grammar/migrations.ts`; the authoritative source.
|
|
24
24
|
|
|
25
25
|
### v0.1.0 migrations
|
|
26
26
|
|
|
@@ -32,7 +32,7 @@ This mirrors `UPG_MIGRATIONS` in `packages/upg-spec/src/grammar/migrations.ts`
|
|
|
32
32
|
| `north_star_metric` | `metric` | `designation: "north_star"` |
|
|
33
33
|
| `input_metric` | `metric` | `designation: "input"` |
|
|
34
34
|
| `metric_definition` | `metric` | `has_implementation: false` |
|
|
35
|
-
| `research_insight` | `insight` |
|
|
35
|
+
| `research_insight` | `insight` | |
|
|
36
36
|
| `finding` | `insight` | `insight_level: "finding"` |
|
|
37
37
|
| `ux_insight` | `insight` | `source_domain: "ux"` |
|
|
38
38
|
| `highlight` | `observation` | `is_highlighted: true` |
|
|
@@ -43,27 +43,27 @@ This mirrors `UPG_MIGRATIONS` in `packages/upg-spec/src/grammar/migrations.ts`
|
|
|
43
43
|
| `security_incident` | `incident` | `incident_type: "security"` |
|
|
44
44
|
| `defect_report` | `support_ticket` | `ticket_designation: "defect"` |
|
|
45
45
|
| `onboarding_flow` | `user_flow` | `flow_type: "onboarding"` |
|
|
46
|
-
| `nps_score` | `nps_campaign` |
|
|
46
|
+
| `nps_score` | `nps_campaign` | |
|
|
47
47
|
|
|
48
48
|
### v0.2.0 migrations
|
|
49
49
|
|
|
50
50
|
| Deprecated | Replacement | Default Properties |
|
|
51
51
|
|---|---|---|
|
|
52
|
-
| `jtbd` | `job` |
|
|
53
|
-
| `how_might_we` | `design_question` |
|
|
52
|
+
| `jtbd` | `job` | |
|
|
53
|
+
| `how_might_we` | `design_question` | |
|
|
54
54
|
| `architecture_decision` | `decision` | `layer: "engineering"` |
|
|
55
55
|
| `design_decision` | `decision` | `layer: "design"` |
|
|
56
56
|
| `product_decision` | `decision` | `layer: "product"` |
|
|
57
|
-
| `sli` | `service_level_indicator` |
|
|
58
|
-
| `slo` | `service_level_objective` |
|
|
59
|
-
| `sla` | `service_level_agreement` |
|
|
60
|
-
| `customer_segment_bm` | `market_segment` |
|
|
61
|
-
| `target_customer_segment` | `market_segment` |
|
|
57
|
+
| `sli` | `service_level_indicator` | |
|
|
58
|
+
| `slo` | `service_level_objective` | |
|
|
59
|
+
| `sla` | `service_level_agreement` | |
|
|
60
|
+
| `customer_segment_bm` | `market_segment` | |
|
|
61
|
+
| `target_customer_segment` | `market_segment` | |
|
|
62
62
|
| `channel_bm` | `distribution_channel` | `phase: "delivery"` |
|
|
63
|
-
| `campaign` | `growth_campaign` |
|
|
64
|
-
| `segment` | `behavioral_segment` |
|
|
65
|
-
| `package` | `pricing_tier` |
|
|
66
|
-
| `internal_doc` | `document` |
|
|
63
|
+
| `campaign` | `growth_campaign` | |
|
|
64
|
+
| `segment` | `behavioral_segment` | |
|
|
65
|
+
| `package` | `pricing_tier` | |
|
|
66
|
+
| `internal_doc` | `document` | |
|
|
67
67
|
|
|
68
68
|
## Flow
|
|
69
69
|
|
|
@@ -75,7 +75,7 @@ Silently call `list_nodes({ limit: 200 })`. Check each node's type against the d
|
|
|
75
75
|
|
|
76
76
|
**If no deprecated types found:**
|
|
77
77
|
```
|
|
78
|
-
✅ Your graph is up to date
|
|
78
|
+
✅ Your graph is up to date; no deprecated types found.
|
|
79
79
|
```
|
|
80
80
|
Then show the standard footer and stop.
|
|
81
81
|
|
|
@@ -136,11 +136,11 @@ Your graph is now using the latest UPG type names.
|
|
|
136
136
|
|
|
137
137
|
- **Preview before acting.** Always show what will change. The dry run option exists for a reason.
|
|
138
138
|
- **Atomic per type.** Each type migration is one MCP call. If one fails, the others still work.
|
|
139
|
-
- **Show edge renames.** This is the part users cannot figure out themselves
|
|
139
|
+
- **Show edge renames.** This is the part users cannot figure out themselves; make it visible.
|
|
140
140
|
- **Mention the defaults.** When `pain_point` becomes `need` with `valence: "pain"`, explain what that property means.
|
|
141
141
|
- **Suggest /upg-snapshot.** After a migration, save a checkpoint.
|
|
142
142
|
- **One question.** Pick a plan, execute, done. Not 49 individual confirmations.
|
|
143
143
|
|
|
144
144
|
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
|
|
145
|
-
Your .upg file is yours
|
|
145
|
+
Your .upg file is yours: open standard, portable, git-friendly.
|
|
146
146
|
unifiedproductgraph.org
|
|
@@ -3,7 +3,7 @@ name: upg-okr-detail
|
|
|
3
3
|
description: "Detailed OKR builder discovery flow"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# /upg-okr
|
|
6
|
+
# /upg-okr: Discovery Flow Detail
|
|
7
7
|
|
|
8
8
|
## Discovery Flow
|
|
9
9
|
|
|
@@ -37,7 +37,7 @@ Want to add a new objective, or work on key results for an existing one?
|
|
|
37
37
|
|
|
38
38
|
### Step 1: Timeframe
|
|
39
39
|
|
|
40
|
-
> **Phase 1 of 5
|
|
40
|
+
> **Phase 1 of 5: Setting the timeframe** (~8 minutes total)
|
|
41
41
|
|
|
42
42
|
Ask: **"What timeframe are these OKRs for?"**
|
|
43
43
|
|
|
@@ -49,14 +49,14 @@ Ask: **"What timeframe are these OKRs for?"**
|
|
|
49
49
|
5. H1 (Jan-Jun)
|
|
50
50
|
6. H2 (Jul-Dec)
|
|
51
51
|
7. Annual (full year)
|
|
52
|
-
8. Different timeframe
|
|
52
|
+
8. Different timeframe; tell me
|
|
53
53
|
```
|
|
54
54
|
|
|
55
55
|
STOP. Wait for the answer.
|
|
56
56
|
|
|
57
57
|
### Step 2: The Objective
|
|
58
58
|
|
|
59
|
-
React to the timeframe, then ask: **"What's the objective? This should be qualitative and inspiring
|
|
59
|
+
React to the timeframe, then ask: **"What's the objective? This should be qualitative and inspiring; the 'what' you want to achieve, not the number."**
|
|
60
60
|
|
|
61
61
|
Check the graph for context to make smart suggestions:
|
|
62
62
|
|
|
@@ -72,13 +72,13 @@ Offer objective options based on what's in the graph:
|
|
|
72
72
|
1. "<objective based on highest-priority outcome>"
|
|
73
73
|
2. "<objective based on a strategic theme>"
|
|
74
74
|
3. "<objective based on a top opportunity>"
|
|
75
|
-
4. "<objective based on product stage
|
|
76
|
-
5. Something else
|
|
75
|
+
4. "<objective based on product stage; e.g., 'Prove product-market fit'>"
|
|
76
|
+
5. Something else; what's the big goal?
|
|
77
77
|
```
|
|
78
78
|
|
|
79
79
|
> A great objective is qualitative and inspiring. Not "Increase retention to 65%" (that's a key result). Instead: "Deliver an onboarding experience users love." The objective is the *why*, the key results are the *how we measure*.
|
|
80
80
|
|
|
81
|
-
Coach if they give a metric as an objective: **"That sounds like a key result
|
|
81
|
+
Coach if they give a metric as an objective: **"That sounds like a key result; a measurable number. What's the bigger, qualitative goal that number supports?"**
|
|
82
82
|
|
|
83
83
|
STOP. Wait for the answer. Then create the objective:
|
|
84
84
|
|
|
@@ -99,17 +99,17 @@ create_node({
|
|
|
99
99
|
|
|
100
100
|
Confirm: "**Your objective is set.** Now let's make it measurable."
|
|
101
101
|
|
|
102
|
-
### Step 3: Key Results
|
|
102
|
+
### Step 3: Key Results: One at a Time
|
|
103
103
|
|
|
104
|
-
Ask: **"How will you know you achieved '<Objective>'? Give me the first key result
|
|
104
|
+
Ask: **"How will you know you achieved '<Objective>'? Give me the first key result; a specific metric with a target."**
|
|
105
105
|
|
|
106
106
|
Offer key result options based on the objective and graph context:
|
|
107
107
|
|
|
108
108
|
```
|
|
109
|
-
1. "<metric> from <current> to <target>"
|
|
109
|
+
1. "<metric> from <current> to <target>"; <why this measures the objective>
|
|
110
110
|
2. "<another metric> from <current> to <target>"
|
|
111
111
|
3. "<a leading indicator> from <current> to <target>"
|
|
112
|
-
4. Different metric
|
|
112
|
+
4. Different metric; tell me what you'd measure
|
|
113
113
|
```
|
|
114
114
|
|
|
115
115
|
STOP. Wait for the answer.
|
|
@@ -124,7 +124,7 @@ If the user didn't provide specific numbers, ask: **"What's the current value, a
|
|
|
124
124
|
3. Let me give you the numbers
|
|
125
125
|
```
|
|
126
126
|
|
|
127
|
-
> OKR scoring guide: if you achieve 70% of a key result, that's a good outcome. Set targets that are a stretch
|
|
127
|
+
> OKR scoring guide: if you achieve 70% of a key result, that's a good outcome. Set targets that are a stretch; if you hit 100% every quarter, your OKRs aren't ambitious enough.
|
|
128
128
|
|
|
129
129
|
STOP. Wait for the answer.
|
|
130
130
|
|
|
@@ -188,10 +188,10 @@ If related entities exist:
|
|
|
188
188
|
```
|
|
189
189
|
You have initiatives and features in your graph that might drive this:
|
|
190
190
|
|
|
191
|
-
1. 🎯 <Existing initiative
|
|
192
|
-
2. 📦 <Existing feature
|
|
191
|
+
1. 🎯 <Existing initiative>; link it to this key result
|
|
192
|
+
2. 📦 <Existing feature>; link it to this key result
|
|
193
193
|
3. Create a new initiative
|
|
194
|
-
4. Skip
|
|
194
|
+
4. Skip; I'll connect initiatives later
|
|
195
195
|
```
|
|
196
196
|
|
|
197
197
|
If creating a new initiative:
|
|
@@ -230,8 +230,8 @@ create_edge({
|
|
|
230
230
|
After all key results and initiatives are linked for an objective, ask: **"Any other metrics you want to track alongside these KRs? Think input metrics, guardrail metrics, or health metrics that aren't key results but are important to watch."**
|
|
231
231
|
|
|
232
232
|
```
|
|
233
|
-
1. Yes
|
|
234
|
-
2. No
|
|
233
|
+
1. Yes; I have metrics to add
|
|
234
|
+
2. No; the key results cover it
|
|
235
235
|
```
|
|
236
236
|
|
|
237
237
|
STOP. Wait for the answer. If they say no, skip to Step 6.
|
|
@@ -241,11 +241,11 @@ If yes, ask: **"What metric do you want to track?"**
|
|
|
241
241
|
Offer metric options based on the objective and key results:
|
|
242
242
|
|
|
243
243
|
```
|
|
244
|
-
1. 📊 <input metric
|
|
245
|
-
2. 📊 <guardrail metric
|
|
246
|
-
3. 📊 <health metric
|
|
247
|
-
4. 📊 <counter-metric
|
|
248
|
-
5. Different metric
|
|
244
|
+
1. 📊 <input metric>; a leading indicator that feeds into <KR>
|
|
245
|
+
2. 📊 <guardrail metric>; guardrail metrics (things that should NOT get worse while you pursue the objective)
|
|
246
|
+
3. 📊 <health metric>; overall product/team health signal
|
|
247
|
+
4. 📊 <counter-metric>; counter-metrics (the opposite signal; if this moves, something went wrong)
|
|
248
|
+
5. Different metric; tell me what you want to track
|
|
249
249
|
```
|
|
250
250
|
|
|
251
251
|
STOP. Wait for the answer.
|
|
@@ -289,8 +289,8 @@ Ask: **"Any more metrics to track?"** If yes, repeat. If no, move to Step 6.
|
|
|
289
289
|
Ask: **"Want to add another objective for <timeframe>? Most teams have 2-4 per quarter."**
|
|
290
290
|
|
|
291
291
|
```
|
|
292
|
-
1. Yes
|
|
293
|
-
2. That's enough
|
|
292
|
+
1. Yes; I have another objective
|
|
293
|
+
2. That's enough; show me the full OKR set
|
|
294
294
|
```
|
|
295
295
|
|
|
296
296
|
If yes, loop back to Step 2. If no, proceed to the summary.
|
|
@@ -300,7 +300,7 @@ If yes, loop back to Step 2. If no, proceed to the summary.
|
|
|
300
300
|
Display the complete OKR set with grade-ability assessment:
|
|
301
301
|
|
|
302
302
|
```
|
|
303
|
-
### OKRs
|
|
303
|
+
### OKRs: <Timeframe> <Year>
|
|
304
304
|
|
|
305
305
|
🎯 <Objective 1>
|
|
306
306
|
├─ 🎯 <KR 1.1>: <current> → <target> ⚪ 0%
|
|
@@ -313,8 +313,8 @@ Display the complete OKR set with grade-ability assessment:
|
|
|
313
313
|
│ └─ 🎯 <Initiative> 🔵 planned
|
|
314
314
|
│
|
|
315
315
|
└─ 📊 Tracked Metrics (if created)
|
|
316
|
-
├─ 📊 <input metric
|
|
317
|
-
└─ 📊 <guardrail metric
|
|
316
|
+
├─ 📊 <input metric>; <direction> <unit> (input)
|
|
317
|
+
└─ 📊 <guardrail metric>; <direction> <unit> (guardrail)
|
|
318
318
|
|
|
319
319
|
🎯 <Objective 2>
|
|
320
320
|
├─ 🎯 <KR 2.1>: <current> → <target> ⚪ 0%
|