@unified-product-graph/mcp-server 0.7.1 → 0.7.3

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.
Files changed (56) hide show
  1. package/TOOLS.md +11 -11
  2. package/dist/index.js +930 -911
  3. package/dist/index.js.map +1 -1
  4. package/dist/preflight.js +1 -1
  5. package/dist/preflight.js.map +1 -1
  6. package/dist/tools-manifest.json +11 -11
  7. package/package.json +1 -1
  8. package/skills/upg/SKILL.md +30 -30
  9. package/skills/upg-analytics/SKILL.md +11 -11
  10. package/skills/upg-capture/SKILL.md +19 -19
  11. package/skills/upg-connect/SKILL.md +6 -6
  12. package/skills/upg-context/SKILL.md +51 -51
  13. package/skills/upg-context-intelligence/SKILL.md +43 -43
  14. package/skills/upg-design-system/SKILL.md +21 -21
  15. package/skills/upg-diff/SKILL.md +12 -12
  16. package/skills/upg-discover/SKILL.md +10 -10
  17. package/skills/upg-explore/SKILL-DETAIL.md +9 -9
  18. package/skills/upg-explore/SKILL.md +14 -14
  19. package/skills/upg-export/SKILL.md +34 -34
  20. package/skills/upg-feedback/SKILL.md +17 -17
  21. package/skills/upg-gaps/SKILL.md +31 -31
  22. package/skills/upg-hypothesis/SKILL.md +10 -10
  23. package/skills/upg-impact/SKILL.md +30 -30
  24. package/skills/upg-import/SKILL.md +14 -14
  25. package/skills/upg-init/SKILL.md +40 -40
  26. package/skills/upg-inspect/SKILL.md +9 -9
  27. package/skills/upg-journey/SKILL.md +21 -21
  28. package/skills/upg-launch/SKILL-DETAIL.md +71 -71
  29. package/skills/upg-launch/SKILL.md +16 -16
  30. package/skills/upg-migrate/SKILL.md +19 -19
  31. package/skills/upg-okr/SKILL-DETAIL.md +27 -27
  32. package/skills/upg-okr/SKILL.md +10 -10
  33. package/skills/upg-persona/SKILL.md +20 -20
  34. package/skills/upg-prioritise/SKILL.md +19 -19
  35. package/skills/upg-pull/SKILL-DETAIL.md +21 -21
  36. package/skills/upg-pull/SKILL.md +5 -5
  37. package/skills/upg-push/SKILL-DETAIL.md +23 -23
  38. package/skills/upg-push/SKILL.md +6 -6
  39. package/skills/upg-reflect/SKILL.md +20 -20
  40. package/skills/upg-research/SKILL.md +37 -37
  41. package/skills/upg-rollback/SKILL.md +19 -19
  42. package/skills/upg-run/SKILL.md +14 -14
  43. package/skills/upg-schema-changelog/SKILL.md +29 -29
  44. package/skills/upg-schema-consolidate/SKILL.md +18 -18
  45. package/skills/upg-schema-edges/SKILL.md +12 -12
  46. package/skills/upg-schema-evolve/SKILL.md +16 -16
  47. package/skills/upg-schema-health/SKILL.md +22 -22
  48. package/skills/upg-schema-update/SKILL.md +24 -24
  49. package/skills/upg-snapshot/SKILL.md +8 -8
  50. package/skills/upg-status/SKILL.md +31 -31
  51. package/skills/upg-strategy/SKILL.md +26 -26
  52. package/skills/upg-template/SKILL.md +21 -21
  53. package/skills/upg-trace/SKILL.md +22 -22
  54. package/skills/upg-tree/SKILL.md +18 -18
  55. package/skills/upg-verify/SKILL.md +42 -42
  56. 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 Discovery Flow (Detail)
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 Your positioning** (~5 minutes total)
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> launching this
34
- 2. The whole product first public launch
35
- 3. A major new feature <suggest based on product context>
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 describe what you're putting out there
38
- 6. Not sure yet we can skip this or come back to it
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 <launch description>",
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> 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
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 it's the mental category you want to own. It answers: "What is this, and why should I care?"*
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 "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
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** <brief summary>."
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>" 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
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 the full narrative>",
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** *\"<headline>\"*"
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 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
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 not separate entities unless the user wants to go deeper):
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** <primary channel> as the lead, supported by <others>."
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 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
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 <type>",
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 don't create an explicit edge for the same relationship. The launch node is already connected to the GTM strategy via parent_id.
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** <approach> with <n> phases."
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 where will your ongoing growth come from?"**
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 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
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** <primary channel> as the lead growth engine."
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 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
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** <primary format> focused on <goal>."
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 positioning, messaging, channels, launch timeline as graph entities"
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 Go-to-Market Planning
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 from positioning and messaging to channels and phased rollout.
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 suggest, propose, give examples as a selectable list. This is brainstorming with a partner, not filling out a form.
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 tell me in your own words
49
- 5. Not sure yet we can skip this or come back to it
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 not generic ones.
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 phases and timeline |
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 <launch description>
80
+ 📣 <Product Name> GTM; <launch description>
81
81
 
82
82
  ├─ 🎯 Audience
83
- │ └─ <ICP name> <key characteristics>
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> <timeframe> ⚪
100
- │ ├─ Phase 2: <name> <timeframe> ⚪
101
- │ └─ Phase 3: <name> <timeframe> ⚪
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> <cadence>, focused on <goal>
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 open standard, portable, git-friendly.
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 don't re-ask.
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 preview changes, then apply safely"
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 Migrate Deprecated Entity Types
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` the authoritative source.
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 no deprecated types found.
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 make it visible.
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 open standard, portable, git-friendly.
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 Discovery Flow Detail
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 Setting the timeframe** (~8 minutes total)
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 tell me
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 the 'what' you want to achieve, not the number."**
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 e.g., 'Prove product-market fit'>"
76
- 5. Something else what's the big goal?
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 a measurable number. What's the bigger, qualitative goal that number supports?"**
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 One at a Time
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 a specific metric with a target."**
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>" <why this measures the objective>
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 tell me what you'd measure
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 if you hit 100% every quarter, your OKRs aren't ambitious enough.
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> link it to this key result
192
- 2. 📦 <Existing feature> link it to this key result
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 I'll connect initiatives later
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 I have metrics to add
234
- 2. No the key results cover it
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> 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
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 I have another objective
293
- 2. That's enough show me the full OKR set
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 <Timeframe> <Year>
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> <direction> <unit> (input)
317
- └─ 📊 <guardrail metric> <direction> <unit> (guardrail)
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%