@vruum/skills 0.5.3 → 0.6.1

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 CHANGED
@@ -13,7 +13,7 @@ Add to `~/.claude.json`:
13
13
  ```json
14
14
  {
15
15
  "mcpServers": {
16
- "vruum-local": { "type": "http", "url": "https://api.vruum.ai/mcp" }
16
+ "vruum": { "type": "http", "url": "https://api.vruum.ai/mcp" }
17
17
  }
18
18
  }
19
19
  ```
@@ -22,23 +22,25 @@ Slash commands appear automatically once registered. You don't need this npm pac
22
22
 
23
23
  ### Codex CLI
24
24
 
25
- Add to `~/.codex/config.toml`:
25
+ **Plugin (recommended)** — bundles the skills + Vruum MCP in one step:
26
26
 
27
- ```toml
28
- [mcp_servers.vruum-local]
29
- url = "https://api.vruum.ai/mcp"
27
+ ```bash
28
+ codex plugin marketplace add vruum-gtm/skills
29
+ codex plugin add vruum@vruum-gtm
30
+ codex mcp login vruum
30
31
  ```
31
32
 
32
- Then run this installer to bring the skill bundle into your Codex skills directory:
33
+ **Manual / other harnesses** register the MCP, then install the skills into the agent-standard skills dir:
33
34
 
34
- ```bash
35
- npx @vruum/skills install
35
+ ```toml
36
+ # ~/.codex/config.toml
37
+ [mcp_servers.vruum]
38
+ url = "https://api.vruum.ai/mcp"
36
39
  ```
37
40
 
38
- Detects `~/.codex/skills/` automatically. For other harnesses without a known path:
39
-
40
41
  ```bash
41
- npx @vruum/skills install --target /path/to/skills/dir
42
+ npx @vruum/skills install # detects ~/.agents/skills/
43
+ npx @vruum/skills install --target /path/to/skills/dir # any other harness
42
44
  ```
43
45
 
44
46
  ### Cursor / VS Code Copilot / Cline
@@ -73,7 +75,7 @@ npx @vruum/skills install --target /path/to/skills/dir
73
75
  - `/yc-pipeline-fill` — YC harness source for /pipeline-fill. Scrapes YC's public Algolia index, extracts founder LinkedIn URLs, dedups, hands a candidate list to /pipeline-fill for deep research and import. Use when: YC pipeline fill, source from YC, fill segment with YC founders, sales nav dried up, source YC.
74
76
  - `/csv-pipeline-fill` — CSV harness source for /pipeline-fill. Reads a CSV, auto-detects headers, maps columns, hands off to /pipeline-fill for harness deep research and import. Use when: import CSV, paste a CSV, csv import, prospect list from CSV, csv harness mode.
75
77
  - `/create-content` — Co-produce an on-voice LinkedIn content post — pull your own signal, steer the angle conversationally, draft in your voice, then save as draft, schedule, or publish. Use when: write a post, draft LinkedIn content, create content, post about, content co-production, help me write a post.
76
- - `/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.
78
+ - `/campaign-doctor` — Diagnose and fix struggling outreach campaigns. Use when: fix a campaign, diagnose campaign, why is my campaign not working, campaign health, low reply rate, check campaigns, which campaigns need help.
77
79
  - `/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.
78
80
  - `/winback-fill` — Source winback candidates from closed-lost deals or churned customers. Surfaces people who went silent or lost a deal >90 days ago, where the loss reason wasn't 'no_fit'. Use when: winback, win back churned, reactivate, revive cold deals, 90-day silent revival, lost deal recovery, lost customer outreach.
79
81
  <!-- generated:skills-end -->
package/install.js CHANGED
@@ -78,9 +78,13 @@ function injectPrelude(skillDir) {
78
78
 
79
79
  // Known harness skill directories. Add a target here when a new harness
80
80
  // lands on a stable skill-dir convention.
81
+ // `detect` = the harness's config dir (its presence means the harness is
82
+ // installed); `dir` = where that harness actually reads skills from. Claude
83
+ // Code reads ~/.claude/skills; Codex CLI (and other agents on the
84
+ // agentskills.io standard) read ~/.agents/skills.
81
85
  const KNOWN_TARGETS = [
82
- { name: 'Claude Code', dir: path.join(os.homedir(), '.claude', 'skills') },
83
- { name: 'Codex CLI', dir: path.join(os.homedir(), '.codex', 'skills') },
86
+ { name: 'Claude Code', detect: path.join(os.homedir(), '.claude'), dir: path.join(os.homedir(), '.claude', 'skills') },
87
+ { name: 'Codex CLI', detect: path.join(os.homedir(), '.codex'), dir: path.join(os.homedir(), '.agents', 'skills') },
84
88
  ];
85
89
 
86
90
  function parseArgs(argv) {
@@ -125,7 +129,7 @@ slash commands.
125
129
 
126
130
  Supported auto-detection:
127
131
  - Claude Code ~/.claude/skills/
128
- - Codex CLI ~/.codex/skills/
132
+ - Codex CLI ~/.agents/skills/
129
133
 
130
134
  Any other harness: pass --target <its skills directory>.
131
135
 
@@ -231,9 +235,11 @@ function linkSkill({ name, srcAbs, target, dryRun }) {
231
235
 
232
236
  function detectTargets(extraTargets) {
233
237
  const targets = [];
234
- // Auto-detect only when the skills directory itself already exists.
238
+ // Auto-detect only when the harness's config dir exists (the skills dir may
239
+ // not exist yet — e.g. ~/.agents/skills for a fresh Codex user — and gets
240
+ // created at link time).
235
241
  for (const known of KNOWN_TARGETS) {
236
- if (fs.existsSync(known.dir)) {
242
+ if (fs.existsSync(known.detect)) {
237
243
  targets.push({ ...known, autoDetected: true });
238
244
  }
239
245
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vruum/skills",
3
- "version": "0.5.3",
3
+ "version": "0.6.1",
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": "b612084d29f288715842a2c9527811f6db59778759c9cb918819f84d10ca5d30"
39
+ "contentHash": "4bcdec8d3e471c8e08561b920faafca0c170aa2966ff5683576545aa2723b2f1"
40
40
  }
@@ -1,20 +1,10 @@
1
1
  ---
2
- name: segment-doctor
2
+ name: campaign-doctor
3
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.
4
+ Diagnose and fix struggling outreach campaigns. Use when: fix a campaign,
5
+ diagnose campaign, why is my campaign not working, campaign health, low reply
6
+ rate, check campaigns, which campaigns need help.
7
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
8
  # Segment Doctor
19
9
 
20
10
  You are a segment diagnostics and optimization agent. Your job is to identify struggling segments, diagnose root causes, and recommend (or apply) fixes.
@@ -23,21 +13,21 @@ You are a segment diagnostics and optimization agent. Your job is to identify st
23
13
 
24
14
  ### Step 1: Triage — health + trends
25
15
 
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).
16
+ Call `get_campaigns` to list all segments. For each segment, dispatch three calls in parallel:
17
+ - `diagnose_campaign(campaign_id=X)` — returns `health_score` (0–100), reply-rate vs company average, and ranked root causes (targeting, messaging, channel, saturation, cadence, timing).
18
+ - `get_performance_metrics(view='funnel', campaign_id=X, start_date=<today_utc - 6d>, end_date=<today_utc + 1d>)` — current 7-day window (7 full days ending today, inclusive).
19
+ - `get_performance_metrics(view='funnel', campaign_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
20
 
31
21
  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
22
 
33
- If `get_segments` returns no segments, tell the user "No segments yet — create one in the Vruum app before running diagnosis" and stop.
23
+ If `get_campaigns` returns no segments, tell the user "No segments yet — create one in the Vruum app before running diagnosis" and stop.
34
24
 
35
- Classify each segment by reply rate (from `diagnose_segment` output). Reply rate is a **diagnostic triage proxy** here — it cheaply flags which segments to look at. It is not segment health itself: the objective is client revenue, and a segment can post a strong reply rate while producing no deals (or a weak one while closing). Treat the band as "where to point the diagnosis," and in the operator flow always reconcile it against meetings and the downstream signal (Block 14 below) before calling a segment healthy.
25
+ Classify each segment by reply rate (from `diagnose_campaign` output). Reply rate is a **diagnostic triage proxy** here — it cheaply flags which segments to look at. It is not segment health itself: the objective is client revenue, and a segment can post a strong reply rate while producing no deals (or a weak one while closing). Treat the band as "where to point the diagnosis," and in the operator flow always reconcile it against meetings and the downstream signal (Block 14 below) before calling a segment healthy.
36
26
 
37
27
  - **CRITICAL** — 30-day reply rate < 5% with ≥20 sent
38
28
  - **WARNING** — 30-day reply rate 5–10% with ≥20 sent
39
29
  - **HEALTHY** — 30-day reply rate ≥ 10% (reply-rate-healthy — confirm it also produces meetings/deals before treating it as truly healthy)
40
- - **INSUFFICIENT DATA** — `diagnose_segment` returned `insufficient_data: true` (fewer than 20 sent in 30d)
30
+ - **INSUFFICIENT DATA** — `diagnose_campaign` returned `insufficient_data: true` (fewer than 20 sent in 30d)
41
31
 
42
32
  For WoW delta, compute `(current_reply_rate - prior_reply_rate) / prior_reply_rate`. Guards:
43
33
  - **Brand-new segment** (prior window sent = 0): show "new segment, WoW N/A".
@@ -67,11 +57,11 @@ Want me to diagnose the critical and warning segments?"
67
57
  Key behaviors:
68
58
  - Never auto-diagnose `insufficient_data` segments. They need more volume first.
69
59
  - If `get_performance_metrics` returns an empty funnel for the prior window, treat it as "new segment, WoW N/A" (not -100%).
70
- - 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.
60
+ - If the funnel is empty for the current window too, fall back to the 30-day reply rate from `diagnose_campaign` output — don't show a fake zero.
71
61
 
72
62
  ### Step 2: Diagnose root causes
73
63
 
74
- For each segment the user wants to diagnose, you already have the `diagnose_segment` output from Step 1's parallel calls. Present the findings:
64
+ For each segment the user wants to diagnose, you already have the `diagnose_campaign` output from Step 1's parallel calls. Present the findings:
75
65
 
76
66
  "**'IT Directors'** — Health score: 25/100
77
67
 
@@ -91,18 +81,18 @@ Root causes (ranked):
91
81
  Want me to apply any of these fixes?"
92
82
 
93
83
  Key behaviors:
94
- - If `diagnose_segment` returned `insufficient_data`, surface the tool's own `message` field verbatim. Don't re-derive the threshold logic.
84
+ - If `diagnose_campaign` returned `insufficient_data`, surface the tool's own `message` field verbatim. Don't re-derive the threshold logic.
95
85
  - When multiple segments share the same root cause dimension (e.g., all have messaging issues), recommend a cross-segment fix first.
96
86
 
97
87
  ### Step 3: Apply fixes (with approval)
98
88
 
99
89
  For each recommended fix the user approves:
100
90
 
101
- - **Targeting fix**: Suggest specific ICP field changes and call `update_segment` with new `target_titles`, `target_industries`, or `positioning_angle`.
91
+ - **Targeting fix**: Suggest specific ICP field changes and call `update_campaign` with new `target_titles`, `target_industries`, or `positioning_angle`.
102
92
 
103
- - **Messaging fix**: Suggest revised `ai_tone_instructions` or `ai_selling_strategy` and call `update_segment`.
93
+ - **Messaging fix**: Suggest revised `ai_tone_instructions` or `ai_selling_strategy` and call `update_campaign`.
104
94
 
105
- - **Channel fix**: Call `update_segment` with adjusted `allowed_channels`.
95
+ - **Channel fix**: Call `update_campaign` with adjusted `allowed_channels`.
106
96
 
107
97
  - **Saturation fix (recommend only)**: The client flow doesn't manage pipeline sources directly. Instead:
108
98
  1. Explain the saturation issue in plain terms ("your saved search is drying up — fewer new profiles available each day than your target").
@@ -120,12 +110,12 @@ After all fixes are applied:
120
110
  - 'VP Engineering': Updated tone instructions
121
111
  - 'CFO Northeast': Suggested broader saved search; run /pipeline-fill once updated
122
112
 
123
- Monitor results over the next 7 days. Run /segment-doctor again next week to check progress."
113
+ Monitor results over the next 7 days. Run /campaign-doctor again next week to check progress."
124
114
 
125
115
  ## Notes
126
116
 
127
- - `diagnose_segment` requires 20+ sent touches in 30 days for meaningful analysis. For newer segments, wait — do not attempt diagnosis.
128
- - Reply-rate thresholds for health bands match `diagnose_segment.health_score` output: <30 ≈ CRITICAL, 30–75 ≈ WARNING, ≥75 ≈ HEALTHY (see `health_score` field).
129
- - 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.
117
+ - `diagnose_campaign` requires 20+ sent touches in 30 days for meaningful analysis. For newer segments, wait — do not attempt diagnosis.
118
+ - Reply-rate thresholds for health bands match `diagnose_campaign.health_score` output: <30 ≈ CRITICAL, 30–75 ≈ WARNING, ≥75 ≈ HEALTHY (see `health_score` field).
119
+ - WoW comparison uses two `get_performance_metrics(view='funnel', campaign_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.
130
120
  - Root causes are ranked by severity. Focus on the highest-severity issues first.
131
121
  - 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`.
@@ -6,7 +6,6 @@ description: >-
6
6
  publish. Use when: write a post, draft LinkedIn content, create content, post
7
7
  about, content co-production, help me write a post.
8
8
  ---
9
-
10
9
  # /create-content
11
10
 
12
11
  You co-produce a LinkedIn post in the seller's own voice. This is a conversation, not a one-shot generator: you pull the seller's real signal (their calls, posts, notes, knowledge), surface what's there, let them steer the angle, draft on-voice, and then save it the way they want — draft, scheduled, or (only on explicit confirmation) published.
@@ -6,16 +6,6 @@ description: >-
6
6
  when: import CSV, paste a CSV, csv import, prospect list from CSV, csv harness
7
7
  mode.
8
8
  ---
9
-
10
- ## Auto-update check
11
-
12
- Before starting, run `~/.vruum/bin/vruum-skills-update-check` (path relative to this repo). Interpret output:
13
- - `UPGRADE_AVAILABLE <old> <new>` → mention the available upgrade in one line and offer `/vruum-upgrade`. Then continue.
14
- - `JUST_UPGRADED <old> <new>` → acknowledge in one line, then continue.
15
- - Empty → proceed silently.
16
-
17
- Never block skill execution on this check.
18
-
19
9
  # CSV Pipeline Fill (harness source)
20
10
 
21
11
  You are the CSV harness-mode source for `/pipeline-fill`. You read a CSV the operator provides (Apollo export, ZoomInfo, hand-built spreadsheet, LinkedIn export — anything), normalize columns to the canonical candidate-list shape, and hand off to the orchestrator.
@@ -6,16 +6,6 @@ description: >-
6
6
  review deals, triage deals, check pipeline, deal review, morning deals,
7
7
  pipeline review, deal health, at-risk deals.
8
8
  ---
9
-
10
- ## Auto-update check
11
-
12
- Before starting, run `~/.vruum/bin/vruum-skills-update-check` (path relative to this repo). Interpret output:
13
- - `UPGRADE_AVAILABLE <old> <new>` → mention the available upgrade in one line and offer `/vruum-upgrade`. Then continue.
14
- - `JUST_UPGRADED <old> <new>` → acknowledge in one line, then continue.
15
- - Empty → proceed silently.
16
-
17
- Never block skill execution on this check.
18
-
19
9
  # Deal Triage
20
10
 
21
11
  You are a deal pipeline orchestrator. Your job is to efficiently review the seller's active deals by dispatching subagents that do deep deal analysis (timeline, stakeholders, MEDDIC qualification), then presenting structured results back to the seller for decisions.
@@ -5,16 +5,6 @@ description: >-
5
5
  triggered it. Use when: why did they reply, what worked, diagnose reply, reply
6
6
  diagnosis, analyze this reply, what caused this reply, reply analysis.
7
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
8
  # /diagnose-reply
19
9
 
20
10
  You diagnose individual replies to understand what worked (or didn't) in the outreach that preceded them. This turns every reply into a learning event.
@@ -6,16 +6,6 @@ description: >-
6
6
  warming comments, review nurture reactions, review marketing comments, review
7
7
  content drafts, check engagement queue.
8
8
  ---
9
-
10
- ## Auto-update check
11
-
12
- Before starting, run `~/.vruum/bin/vruum-skills-update-check` (path relative to this repo). Interpret output:
13
- - `UPGRADE_AVAILABLE <old> <new>` → mention the available upgrade in one line and offer `/vruum-upgrade`. Then continue.
14
- - `JUST_UPGRADED <old> <new>` → acknowledge in one line, then continue.
15
- - Empty → proceed silently.
16
-
17
- Never block skill execution on this check.
18
-
19
9
  ## MCP smoke test (run early)
20
10
 
21
11
  Before triaging, confirm Vruum MCP is reachable. Call `get_marketing_overview` as a lightweight liveness check. On failure, surface this error and stop:
@@ -6,16 +6,6 @@ description: >-
6
6
  profile this person, who is this person, research prospect, diarize prospect,
7
7
  prospect briefing.
8
8
  ---
9
-
10
- ## Auto-update check
11
-
12
- Before starting, run `~/.vruum/bin/vruum-skills-update-check` (path relative to this repo). Interpret output:
13
- - `UPGRADE_AVAILABLE <old> <new>` → mention the available upgrade in one line and offer `/vruum-upgrade`. Then continue.
14
- - `JUST_UPGRADED <old> <new>` → acknowledge in one line, then continue.
15
- - Empty → proceed silently.
16
-
17
- Never block skill execution on this check.
18
-
19
9
  # /enrich-prospect
20
10
 
21
11
  You diarize a prospect. Read everything available — LinkedIn, company research, match analysis, conversation history, knowledge base — and synthesize a one-page structured profile that reveals the gap between what the data says and what's actually going on.
@@ -6,14 +6,6 @@ description: >-
6
6
  Use when: expand customer, find upsell opportunities, NRR play, expansion
7
7
  opportunities, customers ripe for expansion, who can we expand to.
8
8
  ---
9
-
10
- ## Auto-update check
11
-
12
- Before starting, run `~/.vruum/bin/vruum-skills-update-check`. Interpret output:
13
- - `UPGRADE_AVAILABLE <old> <new>` → mention upgrade in one line, offer `/vruum-upgrade`, continue.
14
- - `JUST_UPGRADED <old> <new>` → acknowledge in one line, continue.
15
- - Empty → proceed silently.
16
-
17
9
  # Expansion Fill
18
10
 
19
11
  You are an expansion-side pipeline filler. While `/pipeline-fill` sources cold prospects, this skill surfaces *existing customers* who are due for an expansion conversation — new product, larger seat count, multi-team rollout, renewal-with-uplift, etc.
@@ -5,16 +5,6 @@ description: >-
5
5
  when: triage, review queue, morning review, check messages, approve outreach,
6
6
  what needs review.
7
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
8
  # Outreach Triage
19
9
 
20
10
  You are an outreach queue orchestrator. Your job is to efficiently process pending outreach messages by dispatching subagents who do review, research, and editing, then presenting results for approval.
@@ -41,7 +41,7 @@ Before any other Step 3 work, call `get_research_playbook(segment_id=<id>)`. If
41
41
 
42
42
  > Vruum MCP not configured as a user-scoped server. Run:
43
43
  >
44
- > Register the Vruum MCP server in your assistant once: Claude Code → `~/.claude.json` `mcpServers.vruum-local = {"type":"http","url":"https://api.vruum.ai/mcp"}`; Codex CLI → `~/.codex/config.toml` `[mcp_servers.vruum-local]` with `url = "https://api.vruum.ai/mcp"`; other assistants → connect to `https://api.vruum.ai/mcp` (HTTP, OAuth via standard MCP flow).
44
+ > Register the Vruum MCP server in your assistant once: Claude Code → `~/.claude.json` `mcpServers.vruum = {"type":"http","url":"https://api.vruum.ai/mcp"}`; Codex CLI → `~/.codex/config.toml` `[mcp_servers.vruum]` with `url = "https://api.vruum.ai/mcp"`; other assistants → connect to `https://api.vruum.ai/mcp` (HTTP, OAuth via standard MCP flow).
45
45
  >
46
46
  > and retry. (The cloud `claude.ai Vruum` connector doesn't propagate to subagents — they need `vruum` configured at the user scope in `~/.claude.json`.)
47
47
 
@@ -7,16 +7,6 @@ description: >-
7
7
  gate. Use when: fill pipeline, import prospects, daily imports, need more
8
8
  prospects, discover prospects from scratch, deep research before import.
9
9
  ---
10
-
11
- ## Auto-update check
12
-
13
- Before starting, run `~/.vruum/bin/vruum-skills-update-check` (path relative to this repo). Interpret output:
14
- - `UPGRADE_AVAILABLE <old> <new>` → mention the available upgrade in one line and offer `/vruum-upgrade`. Then continue.
15
- - `JUST_UPGRADED <old> <new>` → acknowledge in one line, then continue.
16
- - Empty → proceed silently.
17
-
18
- Never block skill execution on this check.
19
-
20
10
  # Pipeline Fill
21
11
 
22
12
  You are a source-agnostic pipeline filler. You pick segments to fill, pick a source per segment (Sales Nav / YC / CSV / discovery), and orchestrate harness deep research that gates against the segment ICP before saving prospects into the backend pipeline.
@@ -45,8 +35,8 @@ This skill uses two subagents (defined in `.claude/agents/`):
45
35
 
46
36
  Subagents need access to the Vruum MCP server. Register it once in your AI assistant:
47
37
 
48
- - **Claude Code**: `~/.claude.json` → `mcpServers.vruum-local` = `{"type": "http", "url": "https://api.vruum.ai/mcp"}`
49
- - **Codex CLI**: `~/.codex/config.toml` → `[mcp_servers.vruum-local]` with `url = "https://api.vruum.ai/mcp"`
38
+ - **Claude Code**: `~/.claude.json` → `mcpServers.vruum` = `{"type": "http", "url": "https://api.vruum.ai/mcp"}`
39
+ - **Codex CLI**: `~/.codex/config.toml` → `[mcp_servers.vruum]` with `url = "https://api.vruum.ai/mcp"`
50
40
  - **Other**: connect to `https://api.vruum.ai/mcp` (HTTP, OAuth via standard MCP flow)
51
41
 
52
42
  The orchestrator's MCP precheck at the top of Step 3 (`get_research_playbook` call) catches misconfiguration upfront. Don't skip it.
@@ -66,7 +56,7 @@ The orchestrator's MCP precheck at the top of Step 3 (`get_research_playbook` ca
66
56
 
67
57
  ## Workflow — Step 1: Show pipeline status & pick segments
68
58
 
69
- Call `manage_sales_nav_searches(action="list")` + `get_outreach_stats` for queue depth + `get_segments` for non-Sales-Nav segments. Present a numbered table with **per-segment ETA**:
59
+ Call `manage_sales_nav_searches(action="list")` + `get_outreach_stats` for queue depth + `get_campaigns` for non-Sales-Nav segments. Present a numbered table with **per-segment ETA**:
70
60
 
71
61
  ```
72
62
  Pipeline status:
@@ -137,13 +127,13 @@ Drop blank lines and lines starting with `#` (treat as comments).
137
127
  **Path B — operator describes an ICP** (you want the harness to discover candidates)
138
128
  Operator gives a brief like "Series A-C SaaS founders, US, 50-500 ppl" or "directors of operations at MSPs in DFW, recently posted about hiring". Harness sources candidates from scratch:
139
129
 
140
- 1. **Anchor on segment ICP** — read the segment's existing ICP/company profile (via `get_segment` and `get_company_profile`) and merge with the operator's brief. Show a one-line synthesis ("OK so: Series A-C SaaS, US, 50-500 ppl, founder/CEO/CTO titles") and confirm before sourcing.
130
+ 1. **Anchor on segment ICP** — read the segment's existing ICP/company profile (via `get_campaign` and `get_company_profile`) and merge with the operator's brief. Show a one-line synthesis ("OK so: Series A-C SaaS, US, 50-500 ppl, founder/CEO/CTO titles") and confirm before sourcing.
141
131
  2. **Source companies first** — use harness tools to find candidate companies matching the brief:
142
132
  - `WebSearch` for funding announcements, news, lists ("Series A SaaS 2026", "TechCrunch Series B SaaS announcements")
143
133
  - `WebFetch` on Crunchbase / PitchBook / company directories
144
- - `mcp__vruum-local__search_linkedin_people` for company-fitting roles when the brief is people-shaped (e.g. "VPs of Eng at Series A SaaS")
145
- 3. **Source people from each company** — for each candidate company, use `mcp__vruum-local__find_people_at_company` (Unipile-backed; respects LinkedIn rate limits) to find titles matching the segment ICP. Cap at ~5 people per company to spread the discovery surface.
146
- 4. **Dedup against existing pipeline** — for each discovered person, check `mcp__vruum-local__search_existing_people` so you don't research someone the segment already has.
134
+ - `mcp__vruum__search_linkedin_people` for company-fitting roles when the brief is people-shaped (e.g. "VPs of Eng at Series A SaaS")
135
+ 3. **Source people from each company** — for each candidate company, use `mcp__vruum__find_people_at_company` (Unipile-backed; respects LinkedIn rate limits) to find titles matching the segment ICP. Cap at ~5 people per company to spread the discovery surface.
136
+ 4. **Dedup against existing pipeline** — for each discovered person, check `mcp__vruum__search_existing_people` so you don't research someone the segment already has.
147
137
  5. **Show the discovered list to the operator** before handoff. Format: `Name (title) — Company [linkedin]`. Cap the surface at 2x daily_target so we don't over-source. Get a "go" / "drop X" before continuing.
148
138
 
149
139
  Discovery-path candidates produced in either path use the canonical shape in `RESEARCH-ENGINE.md` and feed into Step 3 the same way.
@@ -6,16 +6,6 @@ description: >-
6
6
  /pipeline-fill for deep research and import. Use when: sales nav with deep
7
7
  research, sales nav harness mode, in-chat sales nav.
8
8
  ---
9
-
10
- ## Auto-update check
11
-
12
- Before starting, run `~/.vruum/bin/vruum-skills-update-check` (path relative to this repo). Interpret output:
13
- - `UPGRADE_AVAILABLE <old> <new>` → mention the available upgrade in one line and offer `/vruum-upgrade`. Then continue.
14
- - `JUST_UPGRADED <old> <new>` → acknowledge in one line, then continue.
15
- - Empty → proceed silently.
16
-
17
- Never block skill execution on this check.
18
-
19
9
  # Sales Nav Deep Fill (harness source)
20
10
 
21
11
  You are the Sales Nav harness-mode source for `/pipeline-fill`. You produce a candidate list from a Sales Nav saved search and hand off to the orchestrator for deep research, harness gate, and save chain.
@@ -7,14 +7,6 @@ description: >-
7
7
  revive cold deals, 90-day silent revival, lost deal recovery, lost customer
8
8
  outreach.
9
9
  ---
10
-
11
- ## Auto-update check
12
-
13
- Before starting, run `~/.vruum/bin/vruum-skills-update-check`. Interpret output:
14
- - `UPGRADE_AVAILABLE <old> <new>` → mention upgrade in one line, offer `/vruum-upgrade`, continue.
15
- - `JUST_UPGRADED <old> <new>` → acknowledge in one line, continue.
16
- - Empty → proceed silently.
17
-
18
10
  # Winback Fill
19
11
 
20
12
  You are a winback-side pipeline filler. While `/expansion-fill` targets won-and-quiet customers, this skill surfaces *lost or churned* relationships where re-engagement is still plausible.
@@ -6,16 +6,6 @@ description: >-
6
6
  /pipeline-fill for deep research and import. Use when: YC pipeline fill,
7
7
  source from YC, fill segment with YC founders, sales nav dried up, source YC.
8
8
  ---
9
-
10
- ## Auto-update check
11
-
12
- Before starting, run `~/.vruum/bin/vruum-skills-update-check` (path relative to this repo). Interpret output:
13
- - `UPGRADE_AVAILABLE <old> <new>` → mention the available upgrade in one line and offer `/vruum-upgrade`. Then continue.
14
- - `JUST_UPGRADED <old> <new>` → acknowledge in one line, then continue.
15
- - Empty → proceed silently.
16
-
17
- Never block skill execution on this check.
18
-
19
9
  # YC Pipeline Fill (harness source)
20
10
 
21
11
  You are the YCombinator harness-mode source for `/pipeline-fill`. You scrape YC's public directory, extract founder LinkedIn URLs, dedup, and hand a candidate list to the orchestrator. No deep research, no harness gate, no save chain in this skill — that's all in `pipeline-fill/RESEARCH-ENGINE.md`.