@vruum/skills 0.6.60 → 0.6.62
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.
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vruum",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.62",
|
|
4
4
|
"description": "Vruum AI skills + remote MCP server for B2B GTM teams. Slash commands for outreach triage, engagement triage, pipeline filling, prospect enrichment, and reply diagnosis, paired with the full Vruum MCP tool surface over OAuth 2.1.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Vruum AI",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vruum",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.62",
|
|
4
4
|
"description": "Vruum AI skills + remote MCP server for B2B GTM teams. Skills for outreach triage, engagement triage, pipeline filling, prospect enrichment, and reply diagnosis, paired with the full Vruum MCP tool surface over OAuth 2.1.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Vruum AI",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vruum/skills",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.62",
|
|
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": {
|
|
@@ -41,5 +41,5 @@
|
|
|
41
41
|
"outreach",
|
|
42
42
|
"gtm"
|
|
43
43
|
],
|
|
44
|
-
"contentHash": "
|
|
44
|
+
"contentHash": "dd7d9424d7124210c3f1920fe0da9fbfe7a95099a5d189a5893d49c8045e1988"
|
|
45
45
|
}
|
|
@@ -8,11 +8,11 @@ description: >-
|
|
|
8
8
|
---
|
|
9
9
|
# Deal Triage
|
|
10
10
|
|
|
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,
|
|
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, the buying center, the SPICED record), then presenting structured results back to the seller for decisions.
|
|
12
12
|
|
|
13
13
|
## Why this skill exists
|
|
14
14
|
|
|
15
|
-
Deal review requires cross-referencing multiple data sources per deal:
|
|
15
|
+
Deal review requires cross-referencing multiple data sources per deal: the buying center, conversation timeline, the SPICED record (MEDDIC derived from it), meeting notes, risk signals. Each deal with full context consumes significant tokens. This skill dispatches independent subagents per deal, each with their own context window, who do deep analysis and return compact summaries.
|
|
16
16
|
|
|
17
17
|
## Subagent architecture
|
|
18
18
|
|
|
@@ -53,8 +53,8 @@ Each subagent prompt should include:
|
|
|
53
53
|
- Instructions to follow the subagent workflow below
|
|
54
54
|
|
|
55
55
|
**Subagent workflow** (each subagent runs read-only and independently — its tool surface excludes deal writes by design; mutation happens later in Step 4 with the seller's approval):
|
|
56
|
-
1. Call `get_deal_360` for the full deal context in one call (deal info, stakeholders,
|
|
57
|
-
2. **Read** `
|
|
56
|
+
1. Call `get_deal_360` for the full deal context in one call (deal info, the buying center under `stakeholders` — the nine roles: initiator, user, champion, decider, gatekeeper, influencer, executive_buyer, approver, purchaser — the Customer Impact record under `impact_commitment` — SPICED fields with their basis, `spiced` completeness with the `next` element to establish, the derived `meddic` view, status, confidence, `verified_priority` — and the recent activity timeline). If the consolidated endpoint isn't available in your tool list, fall back to `fetch` with type=deal — the deal row carries `qualification` and `qualification_score` when previously computed.
|
|
57
|
+
2. **Read** `impact_commitment.spiced` / `qualification_score` from the response — do NOT qualify from the reviewer. `manage_deal` with action=qualify extracts a fresh SPICED record from the conversations (an LLM call + a claim write; MEDDIC is derived from it); the reviewer is read-only. If no record stands, the completeness score is < 40, or the record is older than 30 days, the reviewer emits a `re_qualify` recommendation and the orchestrator (this skill) runs `manage_deal` action=qualify ONLY after the seller approves in Step 4.
|
|
58
58
|
3. Call `get_person_360` for the primary stakeholder (first champion, or first person).
|
|
59
59
|
4. Call `fetch` with type=account_state for the deal's account stage + health. If 404 (no row yet), default to `prospect` / null health.
|
|
60
60
|
5. Return a structured summary in this exact format:
|
|
@@ -70,7 +70,7 @@ ACCOUNT_HEALTH: {0-100 or "—"}
|
|
|
70
70
|
RISK_SCORE: {0-100}
|
|
71
71
|
ALERTS: {silence_14d, overdue_next_step, slippage, etc. or "none"}
|
|
72
72
|
STAKEHOLDERS: {count} ({comma-separated roles})
|
|
73
|
-
|
|
73
|
+
SPICED: {completeness score}/100 — next: {situation | pain | impact | critical_event | decision | "complete"} — MEDDIC gaps: {comma-separated derived gaps or "none"}
|
|
74
74
|
RECOMMENDATION: {advance_stage | set_next_step | add_stakeholder | re_qualify | record_impact | close | mark_stalled | no_action}
|
|
75
75
|
CONFIDENCE: {high | medium | low}
|
|
76
76
|
REASONING: {1-2 sentences explaining the recommendation, including post-close trajectory when account_stage is informative}
|
|
@@ -97,8 +97,8 @@ After presenting results, the user can request actions. Execute them using MCP t
|
|
|
97
97
|
- **Advance stage** → `manage_deal` action=stage with payload={stage}
|
|
98
98
|
- **Set next step** → `manage_deal` action=update with payload={next_step, next_step_due_at}
|
|
99
99
|
- **Add stakeholder** → `manage_deal` action=stakeholders with payload={action: 'add', person_id, role}
|
|
100
|
-
- **Re-qualify** → `manage_deal` action=qualify (
|
|
101
|
-
- **Record impact** → `manage_deal` action=impact_commitment with the SPICED fields the seller confirmed (payload={situation?, pain?, impact? {rational? {metric, baseline, target, unit, by}, emotional?}, critical_event? {kind, due|milestone, consequence}, decision?, first_impact_by?, clear_critical_event?}). Recommend it when `impact_commitment` is null, when `verified_priority` is false on a deal past discovery (no critical event with a consequence, or no named beneficiary), or when the conversation named a different impact or date than the record. Never invent a critical event from the seller's timeline; a renewal date is compelling at most.
|
|
100
|
+
- **Re-qualify** → `manage_deal` action=qualify (extracts the SPICED record again from the conversations and meetings, refreshes the Customer Impact record, and re-projects the MEDDIC view; the operator's own fields stand)
|
|
101
|
+
- **Record impact** → `manage_deal` action=impact_commitment with the SPICED fields the seller confirmed (payload={situation?, pain?, impact? {rational? {metric, baseline, target, unit, by}, emotional?}, critical_event? {kind, due|milestone, consequence}, decision? {criteria?, process?, buying_center? [{name | person_id, role}]}, first_impact_by?, clear_critical_event?}). Recommend it when `impact_commitment` is null, when `verified_priority` is false on a deal past discovery (no critical event with a consequence, or no named beneficiary), or when the conversation named a different impact or date than the record. Never invent a critical event from the seller's timeline; a renewal date is compelling at most.
|
|
102
102
|
- **Close deal** → `manage_deal` action=won or action=lost (payload carries win_factors / loss_reason)
|
|
103
103
|
- **Reopen deal** → `manage_deal` action=reopen with payload={stage}
|
|
104
104
|
- **Mark stalled** → `manage_deal` action=stalled (records the stalled outcome; payload optional)
|
|
@@ -97,7 +97,7 @@ For each approved transcript:
|
|
|
97
97
|
Source: <transcript filename> (Google Drive)
|
|
98
98
|
```
|
|
99
99
|
The `[vruum-meeting:<doc_id>]` marker is what makes re-runs idempotent (Step 5 scans for it). It **must be the very first thing in the summary** — `get_person_360` truncates the activity description to ~200 chars, so a marker placed at the end is cut off and the dedup scan silently fails (re-runs would create duplicate meetings). Keep it verbatim, at the front.
|
|
100
|
-
2. **
|
|
100
|
+
2. **Name the meeting's purpose** — pass `purpose` on the `manage_person` interaction (step 1) when the transcript makes it clear: discovery, demo, proposal, negotiation, commit, kickoff, impact_review, renewal, expansion, winback, internal, other. A purpose you got wrong is corrected later with `manage_person` action=set_meeting_purpose (id = `li:<interaction id>` for a logged meeting, or the meeting id; payload={purpose}) — it moves the held event to the right practice. The held meeting's timeline event under its practice (`discovery_held`, `kickoff_held`, `impact_review_held`, …) is written by the backend from the purpose; you do NOT call `manage_account` action=record_impact for the meeting itself — a held meeting is not impact. Record impact only when the transcript states a RESULT the customer got (a value in a unit): then `manage_account` action=record_impact with a post-commit practice (onboarding | adoption | expansion), its event type, `value_delivered_numeric` and `value_delivered_unit`.
|
|
101
101
|
3. **Create each approved task** — `manage_tasks` action=create with:
|
|
102
102
|
- `title` (the action item), `person_id` (+ `deal_id` if there is one)
|
|
103
103
|
- `priority`, and `due_at` as ISO-8601 **only if** a date was actually parseable (omit otherwise)
|
|
@@ -20,7 +20,7 @@ Ask what cohort they want to reach if they haven't said. Criteria can combine:
|
|
|
20
20
|
|
|
21
21
|
- **List**: a named list (e.g. mirrored from a CRM export) — `filters={list: "<name or id>"}`
|
|
22
22
|
- **Custom attributes** from their import (e.g. sorted company size / industry / region) — `filters={custom: {"sorted_company_size": "small", "sorted_industry": "staffing & recruiting"}}`
|
|
23
|
-
- **Persona** (buying role): influencer |
|
|
23
|
+
- **Persona** (buying-center role, Revenue Architecture Table 8.2): initiator | user | champion | decider | gatekeeper | influencer | executive_buyer | approver | purchaser — `filters={persona: "executive_buyer"}`
|
|
24
24
|
- Standard filters: stage, score range, enrollment, relationship type
|
|
25
25
|
|
|
26
26
|
If they reference attributes you haven't seen, call `search` with `type="people"` and `limit=1` first and inspect a row's `custom_fields` keys so you offer real attribute names, not guesses.
|