@vruum/skills 0.6.10 → 0.6.11

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.10",
3
+ "version": "0.6.11",
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.10",
3
+ "version": "0.6.11",
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.10",
3
+ "version": "0.6.11",
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": {
@@ -42,5 +42,5 @@
42
42
  "outreach",
43
43
  "gtm"
44
44
  ],
45
- "contentHash": "972878f2bee7bf57828c62eef717e62af60902a62155f3161fb9584a533896b2"
45
+ "contentHash": "7a697ed805b730dd66f49fb54b7834b7d35189acd48ac7f0e9adcf4bbfe41149"
46
46
  }
@@ -16,11 +16,15 @@ Do not silently fall back to generic Claude responses.
16
16
 
17
17
  # Engagement Triage
18
18
 
19
- You review the user's pending LinkedIn engagement drafts (warming comments, nurture reactions, marketing comments) and demand-gen content posts. Subagents dispatch in parallel to UPLIFT the backend's shippable-floor output into great comments, then present results for approval. Separate from `/outreach-triage` (which handles outreach messages).
19
+ You review the user's pending LinkedIn engagement queue (warming comments, nurture reactions, marketing comments) and demand-gen content posts. Subagents dispatch in parallel to AUTHOR comments awaiting prose and UPLIFT any legacy backend drafts, then present results for approval. Separate from `/outreach-triage` (which handles outreach messages).
20
20
 
21
21
  ## Why this is a skill and not just "call the tool"
22
22
 
23
- The backend produces a research dossier + shippable-floor comment for every engagement (the `polished_floor` field quality SLA for all four front doors per `project_four_front_doors_architecture`). The skill's job is to UPLIFT that floor into a great comment using the operator's Claude subscription, then write the polished result back via `manage_engagements` with `polish_provenance.source="skill"` so the two-stage edit diff is captured.
23
+ The backend no longer writes engagement prose (VRU-570: the harness authors everything). Items arrive as `needs_draft` — the deterministic research dossier, the target post, and the person context attached, but NO comment text. These are blank pages, not rewrites: the skill AUTHORS the comment in the seller's voice and submits it via `manage_engagements` action=edit (which flips the item to a normal reviewable `draft`), then the operator approves.
24
+
25
+ **Authoring is the second qualification gate.** The backend's relevance scoring picked the post; whether it's actually comment-worthy is now YOUR call — the judgment the retired agent used to make. If the post isn't worth a comment, recommend skip. NOTE the bundle semantics: skipping a needs_draft comment cascade-skips its bundled like (same `engagement_group_id`), so skip means "don't engage this post at all", not "like without commenting."
26
+
27
+ Legacy `draft` items (created before the cutover, or under the fallback env) still carry `polished_floor` — for those the job is UPLIFT: rewrite the floor into a great comment, with `polish_provenance.source="skill"` so the edit diff is captured.
24
28
 
25
29
  Reviewing inline burns tokens fast. Subagents with their own context windows do the uplift in parallel and return compact verdicts.
26
30
 
@@ -123,14 +127,24 @@ Hard constraints:
123
127
  - No company/product names, URLs, or CTAs.
124
128
 
125
129
  For each engagement:
126
- 1. Read polished_floor + dossier + pitch_phrases + validator_failures.
127
- 2. Decide UPLIFT, KEEP, or FLAG:
130
+ 1. Read status + content + dossier + target_post_text + pitch_phrases (+
131
+ polished_floor/validator_failures on legacy drafts).
132
+ 2. Branch on status:
133
+ **needs_draft → AUTHOR or FLAG** (this is the default post-VRU-570):
134
+ - AUTHOR: write the comment from scratch — grounded in the dossier and
135
+ the actual post text, in the seller's voice, against the same quality
136
+ bars below. This is a blank page, not a rewrite. Submit via
137
+ manage_engagements action="edit" (the edit flips the item to draft).
138
+ - FLAG: the post isn't comment-worthy (generic, off-topic, bad fit) —
139
+ recommend skip. Skipping cascades to the bundled like, so this means
140
+ "don't engage this post at all."
141
+ **draft (legacy/fallback) → UPLIFT, KEEP, or FLAG:**
128
142
  - UPLIFT: rewrite to fix listed validator_failures AND/OR pull a sharper
129
143
  specific fact from the dossier. Materially better, not lateral.
130
144
  - KEEP: polished_floor is already strong. Don't edit.
131
145
  - FLAG: structurally broken (off-topic, wrong stage, prospect bad fit).
132
146
  Recommend skip + plan-stop cascade.
133
- 3. If UPLIFT, call manage_engagements with:
147
+ 3. If AUTHOR or UPLIFT, call manage_engagements with:
134
148
  action="edit"
135
149
  id="<id>"
136
150
  payload={
@@ -147,7 +161,7 @@ IMPORTANT: Do NOT approve or skip engagements. Return recommendations only.
147
161
  The operator approves in Step 5.
148
162
 
149
163
  Return a structured summary for each item:
150
- ENGAGEMENT: {id} | TYPE: {reaction|comment} | PERSON: {name} | SOURCE: {warming|nurture|marketing} | RECOMMENDATION: {uplifted|kept|flag} | CONFIDENCE: {high|medium|low} | REASONING: {1-2 sentences} | UPLIFTED: {yes/no} | COMMENT_TEXT: {the comment text, or "reaction" for likes} | VALIDATOR_FAILURES_FIXED: {comma-separated, or "none"}
164
+ ENGAGEMENT: {id} | TYPE: {reaction|comment} | PERSON: {name} | SOURCE: {warming|nurture|marketing} | RECOMMENDATION: {authored|uplifted|kept|flag} | CONFIDENCE: {high|medium|low} | REASONING: {1-2 sentences} | AUTHORED_OR_UPLIFTED: {yes/no} | COMMENT_TEXT: {the comment text, or "reaction" for likes} | VALIDATOR_FAILURES_FIXED: {comma-separated, or "none"}
151
165
  ```
152
166
 
153
167
  For high-value comments (match score 80+, nurture, cold marketing), use research mode: 1 comment per subagent. The subagent reads the prospect's actual post via `get_person_360`, cross-checks against the dossier, and uplifts only when there's a real opportunity to improve.
@@ -1,8 +1,8 @@
1
- # Subagent Instructions: Engagement Uplift Agent
1
+ # Subagent Instructions: Engagement Authoring Agent
2
2
 
3
- You are uplifting AI-generated LinkedIn engagement items (comments, reactions, reposts) before a human operator approves them. Your job is **uplift, not just review** — the Vruum backend already produced a shippable-floor comment for each item. You take it from "good" to "great" using the dossier, then record provenance so the system learns from the two-stage edit diff.
3
+ You author and review LinkedIn engagement items (comments, reactions, reposts) before a human operator approves them. Post-VRU-570 the backend writes NO engagement proseitems arrive as `status="needs_draft"` carrying the research dossier, the target post, and person context, with no comment text. Your job for those is **authoring**: write the comment from scratch, grounded in the dossier, in the seller's voice. Legacy `status="draft"` items (pre-cutover or fallback-env) still carry a backend `polished_floor` — for those the job is **uplift**.
4
4
 
5
- This is front door 1 (managed ops) in the four-front-doors architecture (see project memory `project_four_front_doors_architecture`). Front doors 2/3/4 ship `polished_floor` from the backend directly; we're the layer that makes managed-ops comments stand out.
5
+ Authoring is also the second qualification gate: the retired backend agent used to decide "should we even comment on this post?" that call is now yours. A post that isn't comment-worthy gets FLAG (skip), and note that skipping a needs_draft comment cascade-skips its bundled like (`engagement_group_id`).
6
6
 
7
7
  ## Step 1: Load your items
8
8
 
@@ -26,9 +26,24 @@ Call `get_engagement_review` with your assigned `engagement_ids`, `content_lengt
26
26
  - `budget_status` — sender daily quota
27
27
  - `schema_version` + `rules_version` — backward-compat signals
28
28
 
29
- **Backward-compat:** if `polished_floor` is null (pre-migration queue row), use `content` (== `first_draft`) as your starting point and proceed without dossier grounding. Note `legacy_payload` in REASONING.
29
+ **Backward-compat:** if `polished_floor` is null on a `draft` row (pre-migration queue row), use `content` (== `first_draft`) as your starting point and proceed without dossier grounding. Note `legacy_payload` in REASONING.
30
30
 
31
- ## Step 2: Decide UPLIFT / KEEP / FLAG per item
31
+ ## Step 2: Branch on status
32
+
33
+ ### needs_draft → AUTHOR or FLAG (the default post-VRU-570)
34
+
35
+ There is no starting text — `content` is null and that is correct, not an
36
+ error. Write the comment from scratch against the same ACQ structure and
37
+ quality bars as an uplift (Acknowledge a specific phrase/number/entity from
38
+ `target_post_text`; add Context from the dossier; Question optional ~40%).
39
+ Same hard rules: length, banned openers, no pitch_phrases, no
40
+ company/product names or CTAs. Submit via `manage_engagements`
41
+ action="edit" with the content — the edit transitions the item to a normal
42
+ reviewable `draft`. If the post is not comment-worthy (generic engagement
43
+ bait, off-topic for the relationship, prospect bad fit), FLAG it for skip
44
+ instead — do not force a mediocre comment onto a weak post.
45
+
46
+ ### draft (legacy/fallback) → decide UPLIFT / KEEP / FLAG per item
32
47
 
33
48
  ### 2a. KEEP
34
49
  The polished_floor already passes ACQ, references a specific dossier fact, has no validator_failures, and you cannot materially improve it. Don't edit. Don't make lateral moves (swapping synonyms isn't uplift).