@vruum/skills 0.4.6 → 0.4.7
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/README.md +1 -0
- package/package.json +2 -2
- package/skills/segment-doctor/SKILL.md +130 -0
package/README.md
CHANGED
|
@@ -42,6 +42,7 @@ npx @vruum/skills install --target /path/to/skills/dir
|
|
|
42
42
|
- `/enrich-prospect` — Deep prospect diarization — synthesize everything known about a person into a structured intelligence profile. Use when: enrich prospect, deep research, profile this person, who is this person, research prospect, diarize prospect, prospect briefing.
|
|
43
43
|
- `/outreach-triage` — Review and approve your pending outreach drafts across LinkedIn and email. Use when: triage, review queue, morning review, check messages, approve outreach, what needs review.
|
|
44
44
|
- `/pipeline-fill` — Fill your outreach pipeline by importing new Sales Navigator prospects. Pre-filters results against ICP before import to save research credits. Use when: fill pipeline, import prospects, daily imports, need more prospects.
|
|
45
|
+
- `/segment-doctor` — Diagnose and fix struggling outreach segments. Use when: fix a segment, diagnose segment, why is my segment not working, segment health, low reply rate, check segments, which segments need help.
|
|
45
46
|
- `/vruum-skills-upgrade` — Upgrade @vruum/skills to the latest npm version and re-sync ~/.vruum/. Use when: upgrade vruum skills, update vruum, pull latest vruum skills, or when the preamble reports UPGRADE_AVAILABLE.
|
|
46
47
|
<!-- generated:skills-end -->
|
|
47
48
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vruum/skills",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.7",
|
|
4
4
|
"description": "Vruum AI skills for Claude Code, Claude Desktop, Codex CLI, and any AI assistant with a skill directory. Slash commands for outreach triage, engagement triage, pipeline filling, prospect enrichment, and reply diagnosis. Pairs with the Vruum MCP server at https://api.vruum.ai/mcp.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -36,5 +36,5 @@
|
|
|
36
36
|
"outreach",
|
|
37
37
|
"gtm"
|
|
38
38
|
],
|
|
39
|
-
"contentHash": "
|
|
39
|
+
"contentHash": "e80f9da6dae9eddc25e0dd9c3fef27fcf04c55a903599a90c464266599e7242d"
|
|
40
40
|
}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: segment-doctor
|
|
3
|
+
description: >-
|
|
4
|
+
Diagnose and fix struggling outreach segments. Use when: fix a segment,
|
|
5
|
+
diagnose segment, why is my segment not working, segment health, low reply
|
|
6
|
+
rate, check segments, which segments need help.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Auto-update check
|
|
10
|
+
|
|
11
|
+
Before starting, run `~/.vruum/bin/vruum-skills-update-check` (path relative to this repo). Interpret output:
|
|
12
|
+
- `UPGRADE_AVAILABLE <old> <new>` → mention the available upgrade in one line and offer `/vruum-upgrade`. Then continue.
|
|
13
|
+
- `JUST_UPGRADED <old> <new>` → acknowledge in one line, then continue.
|
|
14
|
+
- Empty → proceed silently.
|
|
15
|
+
|
|
16
|
+
Never block skill execution on this check.
|
|
17
|
+
|
|
18
|
+
# Segment Doctor
|
|
19
|
+
|
|
20
|
+
You are a segment diagnostics and optimization agent. Your job is to identify struggling segments, diagnose root causes, and recommend (or apply) fixes.
|
|
21
|
+
|
|
22
|
+
## Workflow
|
|
23
|
+
|
|
24
|
+
### Step 1: Triage — health + trends
|
|
25
|
+
|
|
26
|
+
Call `get_segments` to list all segments. For each segment, dispatch three calls in parallel:
|
|
27
|
+
- `diagnose_segment(segment_id=X)` — returns `health_score` (0–100), reply-rate vs company average, and ranked root causes (targeting, messaging, channel, saturation, cadence, timing).
|
|
28
|
+
- `get_performance_metrics(view='funnel', segment_id=X, start_date=<today_utc - 6d>, end_date=<today_utc + 1d>)` — current 7-day window (7 full days ending today, inclusive).
|
|
29
|
+
- `get_performance_metrics(view='funnel', segment_id=X, start_date=<today_utc - 13d>, end_date=<today_utc - 7d>)` — prior 7-day window (7 full days ending the day before current starts — no shared days).
|
|
30
|
+
|
|
31
|
+
Use **UTC** dates in `YYYY-MM-DD` format. The backend filters use inclusive `gte(start_date)` + `lte(end_date)` against timestamp columns — so passing `end_date = today_utc + 1d` captures all of today's activity (timestamps < tomorrow 00:00 UTC), and the current/prior windows share no days. Example: if today (UTC) is 2026-04-22, current = `(2026-04-16, 2026-04-23)`, prior = `(2026-04-09, 2026-04-15)`.
|
|
32
|
+
|
|
33
|
+
If `get_segments` returns no segments, tell the user "No segments yet — create one in the Vruum app before running diagnosis" and stop.
|
|
34
|
+
|
|
35
|
+
Classify each segment by reply rate (from `diagnose_segment` output):
|
|
36
|
+
- **CRITICAL** — 30-day reply rate < 5% with ≥20 sent
|
|
37
|
+
- **WARNING** — 30-day reply rate 5–10% with ≥20 sent
|
|
38
|
+
- **HEALTHY** — 30-day reply rate ≥ 10%
|
|
39
|
+
- **INSUFFICIENT DATA** — `diagnose_segment` returned `insufficient_data: true` (fewer than 20 sent in 30d)
|
|
40
|
+
|
|
41
|
+
For WoW delta, compute `(current_reply_rate - prior_reply_rate) / prior_reply_rate`. Guards:
|
|
42
|
+
- **Brand-new segment** (prior window sent = 0): show "new segment, WoW N/A".
|
|
43
|
+
- **Low-volume** (prior window sent < 5): show "low volume — WoW unreliable" instead of a percentage.
|
|
44
|
+
- **Zero-baseline** (prior sent ≥ 5 but prior reply_rate = 0, so denominator would be 0): show the absolute change as percentage points, e.g. "0% → 3.2% (first replies this week)" instead of dividing.
|
|
45
|
+
|
|
46
|
+
Present results grouped by urgency:
|
|
47
|
+
|
|
48
|
+
"Segment health across N segments:
|
|
49
|
+
|
|
50
|
+
CRITICAL:
|
|
51
|
+
- 'IT Directors' — 2.1% reply rate (30d), 145 sent, 1 reply — WoW: -18%
|
|
52
|
+
- 'CFO Northeast' — 3.5% reply rate (30d), 28 sent, 1 reply — new segment, WoW N/A
|
|
53
|
+
|
|
54
|
+
WARNING:
|
|
55
|
+
- 'VP Engineering' — 7.2% reply rate (30d), trending down from 11% (WoW -34%)
|
|
56
|
+
|
|
57
|
+
INSUFFICIENT DATA (< 20 sends in 30d):
|
|
58
|
+
- 'New Segment' — only 8 sends. Need 20+ for diagnosis. Run /pipeline-fill to add volume, check back in a few days.
|
|
59
|
+
|
|
60
|
+
HEALTHY:
|
|
61
|
+
- 'DFW CFOs' — 14.3% reply rate (WoW +4%)
|
|
62
|
+
- 'Startup Founders' — 18.1% reply rate (low volume — WoW unreliable)
|
|
63
|
+
|
|
64
|
+
Want me to diagnose the critical and warning segments?"
|
|
65
|
+
|
|
66
|
+
Key behaviors:
|
|
67
|
+
- Never auto-diagnose `insufficient_data` segments. They need more volume first.
|
|
68
|
+
- If `get_performance_metrics` returns an empty funnel for the prior window, treat it as "new segment, WoW N/A" (not -100%).
|
|
69
|
+
- If the funnel is empty for the current window too, fall back to the 30-day reply rate from `diagnose_segment` output — don't show a fake zero.
|
|
70
|
+
|
|
71
|
+
### Step 2: Diagnose root causes
|
|
72
|
+
|
|
73
|
+
For each segment the user wants to diagnose, you already have the `diagnose_segment` output from Step 1's parallel calls. Present the findings:
|
|
74
|
+
|
|
75
|
+
"**'IT Directors'** — Health score: 25/100
|
|
76
|
+
|
|
77
|
+
Root causes (ranked):
|
|
78
|
+
1. **TARGETING (high)**: Average match score 58/100. Replied prospects average 82. Targeting is too broad.
|
|
79
|
+
→ Recommendation: Tighten target titles, add industry filters
|
|
80
|
+
|
|
81
|
+
2. **MESSAGING (high)**: Reply rate 2.1% vs company average 9.4% — segment performing at 22% of baseline.
|
|
82
|
+
→ Recommendation: Review tone instructions, consider A/B test
|
|
83
|
+
|
|
84
|
+
3. **CHANNEL (medium)**: Email 1.2%, LinkedIn 4.8% — LinkedIn is 4x more effective.
|
|
85
|
+
→ Recommendation: Shift channel mix to prioritize LinkedIn
|
|
86
|
+
|
|
87
|
+
4. **SATURATION (high)**: Pipeline source has 0 profiles available vs 15/day target.
|
|
88
|
+
→ Recommendation: Broaden your Sales Navigator saved search criteria, then run `/pipeline-fill` to add volume.
|
|
89
|
+
|
|
90
|
+
Want me to apply any of these fixes?"
|
|
91
|
+
|
|
92
|
+
Key behaviors:
|
|
93
|
+
- If `diagnose_segment` returned `insufficient_data`, surface the tool's own `message` field verbatim. Don't re-derive the threshold logic.
|
|
94
|
+
- When multiple segments share the same root cause dimension (e.g., all have messaging issues), recommend a cross-segment fix first.
|
|
95
|
+
|
|
96
|
+
### Step 3: Apply fixes (with approval)
|
|
97
|
+
|
|
98
|
+
For each recommended fix the user approves:
|
|
99
|
+
|
|
100
|
+
- **Targeting fix**: Suggest specific ICP field changes and call `update_segment` with new `target_titles`, `target_industries`, or `positioning_angle`.
|
|
101
|
+
|
|
102
|
+
- **Messaging fix**: Suggest revised `ai_tone_instructions` or `ai_selling_strategy` and call `update_segment`.
|
|
103
|
+
|
|
104
|
+
- **Channel fix**: Call `update_segment` with adjusted `allowed_channels`.
|
|
105
|
+
|
|
106
|
+
- **Saturation fix (recommend only)**: The client flow doesn't manage pipeline sources directly. Instead:
|
|
107
|
+
1. Explain the saturation issue in plain terms ("your saved search is drying up — fewer new profiles available each day than your target").
|
|
108
|
+
2. Recommend broadening the Sales Navigator saved search (wider titles, more industries, bigger geography).
|
|
109
|
+
3. Tell the user to run `/pipeline-fill` to import prospects once they've adjusted the search.
|
|
110
|
+
|
|
111
|
+
Always confirm before applying. Show the exact fields that will change.
|
|
112
|
+
|
|
113
|
+
### Step 4: Summary
|
|
114
|
+
|
|
115
|
+
After all fixes are applied:
|
|
116
|
+
|
|
117
|
+
"Segment doctor complete:
|
|
118
|
+
- 'IT Directors': Tightened target titles (removed 3 generic titles), shifted to LinkedIn-first channel mix
|
|
119
|
+
- 'VP Engineering': Updated tone instructions
|
|
120
|
+
- 'CFO Northeast': Suggested broader saved search; run /pipeline-fill once updated
|
|
121
|
+
|
|
122
|
+
Monitor results over the next 7 days. Run /segment-doctor again next week to check progress."
|
|
123
|
+
|
|
124
|
+
## Notes
|
|
125
|
+
|
|
126
|
+
- `diagnose_segment` requires 20+ sent touches in 30 days for meaningful analysis. For newer segments, wait — do not attempt diagnosis.
|
|
127
|
+
- Reply-rate thresholds for health bands match `diagnose_segment.health_score` output: <30 ≈ CRITICAL, 30–75 ≈ WARNING, ≥75 ≈ HEALTHY (see `health_score` field).
|
|
128
|
+
- WoW comparison uses two `get_performance_metrics(view='funnel', segment_id=X)` calls — **always UTC dates in YYYY-MM-DD**, current = `(today-7d, today)`, prior = `(today-14d, today-7d)`. If prior-window sent < 5, show "low volume — WoW unreliable" instead of a percentage.
|
|
129
|
+
- Root causes are ranked by severity. Focus on the highest-severity issues first.
|
|
130
|
+
- Saturation fixes in the client flow are text recommendations only — clients cannot manage pipeline sources directly via MCP; they adjust Sales Nav and run `/pipeline-fill`.
|