@vruum/skills 0.6.64 → 0.6.65

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.64",
3
+ "version": "0.6.65",
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.64",
3
+ "version": "0.6.65",
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",
@@ -45,6 +45,7 @@ This is your primary context. Read it carefully for each message before reviewin
45
45
  - Is it within the word/character limits specified in the touch sequence?
46
46
  - Does the channel match? (linkedin_connection messages have a 280 char hard limit)
47
47
  - If it's a reply_response, does it actually address what the person said?
48
+ - If a cold touch (initial/followup) carries `prior_reply`, the prospect already wrote back. Read the reply excerpt and intent. A cold re-pitch to someone who replied (for example, "I left that role" or "not interested") is a FLAG, never an APPROVE, unless the operator explicitly continued the sequence.
48
49
 
49
50
  ### 2b. Cross-touch deduplication
50
51
 
@@ -177,5 +178,5 @@ RESEARCH_DONE: {list of extra research you did, or "none"}
177
178
 
178
179
  **APPROVE**: passes all checks, personalization at least basic, reads like a human wrote it
179
180
  **EDITED**: had fixable issues, you've applied the fix via manage_messages action=edit, rewritten version passes
180
- **FLAG**: reply_response to complex conversation, high-value prospect (90+), needs operator judgment
181
+ **FLAG**: reply_response to complex conversation, high-value prospect (90+), a cold touch that carries `prior_reply`, needs operator judgment
181
182
  **REJECT**: fundamentally violates touch sequence, severe repetition, fabricated personalization
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vruum/skills",
3
- "version": "0.6.64",
3
+ "version": "0.6.65",
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": "e5cbb708b20a8e9ee9a8d1fe7744bd21ebb767b295eb4f38f9221758f6ca511b"
44
+ "contentHash": "2745915e4740ad55ecc2031ddce87480ae596a0cf4b64f57303226c09c9cd1a6"
45
45
  }
@@ -86,6 +86,8 @@ Categorize into three processing groups:
86
86
  2. **Follow-ups** (first_content_touch=false; fallback when null: sequence_number >= 2) — need research and quality check
87
87
  3. **Openers** (first_content_touch=true; fallback when null: sequence_number = 1) — first real message regardless of T-number; full opener research standards, never "follow-up" framing
88
88
 
89
+ **Cold drafts to people who already replied (VRU-894).** An opener or follow-up item that carries `prior_reply` is a re-pitch to someone who wrote back. Never bulk-approve it. Show the user the reply excerpt and intent, and hold the draft unless they explicitly want the cold sequence to continue. Never call `manage_outreach` action=resume to release a stuck reply: replies send without the plan, and resume re-arms the cold sequence. A resume of a reply-paused plan returns 409 `plan_paused_by_reply` with the pending cold messages it would release; pass `payload: {continue_sequence: true}` only on the user's explicit decision. To end outreach to that person, use action=stop.
90
+
89
91
  **Template-authored drafts (VRU-813).** A draft with `ai_decision_context.authored_by = "template"` is the OPERATOR'S OWN template rendered per person (deterministic `{{variable}}` substitution, `generated_by_ai=false`) — it arrives in the review lane already written. Review it for FIT (right person, correct variable values, thread coherence), not style: do NOT rewrite the operator's chosen wording per-row. If the prose itself is weak, that's a template-level problem — flag it once to the user so they fix the template in the objective workbench (or via `manage_outreach` action=objective_update), rather than editing N copies divergently. Conversely, a `needs_draft` row carrying `ai_decision_context.template_fallback_reason` is a person the template could NOT render for (missing variable value, or the channel fell back outside the template's step) — author it normally, and if many rows share one reason, surface the pattern (e.g. "31 people have no title on file") instead of silently hand-writing around a fixable data gap.
90
92
 
91
93
  Present the queue composition before dispatching. For the counts in one call, use `search` with type=messages and `view=breakdown` — it returns grouped counts (by status, category, sequence/touch number, channel, and objective) over the whole queue plus a compact items page, so you don't have to tally the pages yourself: