@vruum/skills 0.6.66 → 0.6.68
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/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +24 -5
- package/README.md +10 -2
- package/assets/logo.png +0 -0
- package/assets/logo.svg +1 -0
- package/package.json +3 -2
- package/skills/ingest-meetings/SKILL.md +37 -10
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vruum",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.68",
|
|
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,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vruum",
|
|
3
|
-
"version": "0.6.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.6.68",
|
|
4
|
+
"description": "Connect your Vruum workspace to review revenue priorities, manage deals, research prospects, and prepare outreach through guided skills and authenticated MCP tools.",
|
|
5
5
|
"author": {
|
|
6
|
-
"name": "Vruum
|
|
6
|
+
"name": "Vruum",
|
|
7
7
|
"url": "https://vruum.ai"
|
|
8
8
|
},
|
|
9
9
|
"license": "MIT",
|
|
@@ -13,7 +13,26 @@
|
|
|
13
13
|
"mcpServers": "./.mcp.json",
|
|
14
14
|
"interface": {
|
|
15
15
|
"displayName": "Vruum",
|
|
16
|
-
"shortDescription": "
|
|
17
|
-
"
|
|
16
|
+
"shortDescription": "Manage your revenue work",
|
|
17
|
+
"longDescription": "Connect your existing Vruum workspace to review daily priorities, inspect deals, research people and companies, and prepare outreach. Use guided workflows to review drafts and record updates in your workspace. Access follows your Vruum account permissions, and execution follows your workspace policies.",
|
|
18
|
+
"developerName": "Vruum",
|
|
19
|
+
"category": "Productivity",
|
|
20
|
+
"capabilities": [
|
|
21
|
+
"Revenue priorities",
|
|
22
|
+
"Deal review",
|
|
23
|
+
"Prospect research",
|
|
24
|
+
"Outreach review"
|
|
25
|
+
],
|
|
26
|
+
"websiteURL": "https://vruum.ai",
|
|
27
|
+
"privacyPolicyURL": "https://vruum.ai/privacy",
|
|
28
|
+
"termsOfServiceURL": "https://vruum.ai/terms",
|
|
29
|
+
"defaultPrompt": [
|
|
30
|
+
"What needs my attention in Vruum today?",
|
|
31
|
+
"Review my stalled deals and recommend the next action for each.",
|
|
32
|
+
"Review my outreach drafts and suggest improvements before I approve them."
|
|
33
|
+
],
|
|
34
|
+
"brandColor": "#3B82F6",
|
|
35
|
+
"composerIcon": "./assets/logo.svg",
|
|
36
|
+
"logo": "./assets/logo.svg"
|
|
18
37
|
}
|
|
19
38
|
}
|
package/README.md
CHANGED
|
@@ -63,13 +63,21 @@ Register the MCP server via your editor's MCP setup (each one has its own UI / c
|
|
|
63
63
|
|
|
64
64
|
### Claude Desktop / Claude.ai (Cowork)
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
Download the Vruum plugin ZIP to bundle the connector and skills in one step:
|
|
67
67
|
|
|
68
68
|
[github.com/vruum-gtm/skills/releases/latest/download/vruum-plugin.zip](https://github.com/vruum-gtm/skills/releases/latest/download/vruum-plugin.zip)
|
|
69
69
|
|
|
70
70
|
Download and upload via **Settings → Customize → Plugins → "+"**.
|
|
71
71
|
|
|
72
|
-
### ChatGPT
|
|
72
|
+
### ChatGPT
|
|
73
|
+
|
|
74
|
+
Vruum's OpenAI directory submission is in preparation. This package does not
|
|
75
|
+
establish an approved directory listing. Until that listing is available,
|
|
76
|
+
connect `https://api.vruum.ai/mcp` through custom remote MCP where your account
|
|
77
|
+
supports it. The npm installer below requires a local harness; it does not
|
|
78
|
+
install skills into ChatGPT.
|
|
79
|
+
|
|
80
|
+
### Other local harnesses without plugin support
|
|
73
81
|
|
|
74
82
|
```bash
|
|
75
83
|
npx --yes @vruum/skills@latest install --target /path/to/skills/dir
|
package/assets/logo.png
ADDED
|
Binary file
|
package/assets/logo.svg
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 522.374 522.374"><g transform="translate(18.238 0)"><path d="M456.671,275.006c-5.426.014-10.551,1.918-14.645,5.382l-63.169-32.3c26.307-10.274,51.567-17.688,69.895-22.464,3.921,3.176,8.909,5.083,14.333,5.083h.059c12.578-.032,22.785-10.291,22.754-22.871-.033-12.559-10.26-22.753-22.812-22.753h-.059c-12.306.032-22.336,9.854-22.735,22.058-53.133,14.055-146.261,45.436-186.856,100.152l-.214-84.072c.186-.934.245-1.91.15-2.907-.214-2.232-.22-4.479-.018-6.68,1.988-21.774,24.98-44.324,66.488-65.212,21.68-10.91,48.508-21.361,78.341-30.572,3.966,3.328,9.073,5.337,14.641,5.337h.059c12.578-.032,22.785-10.291,22.754-22.871-.033-12.559-10.26-22.753-22.812-22.753h-.059c-12.244.031-22.237,9.753-22.731,21.871-30.001,9.373-57.083,20.001-79.183,31.122-25.507,12.835-44.787,26.452-57.762,40.738l-.325-128.012c.083-.041.164-.084.246-.126.329-.167.653-.342.974-.525.321-.183.636-.373.947-.571.306-.195.607-.397.905-.607.331-.234.655-.476.973-.726.248-.196.493-.396.734-.604.357-.306.704-.622,1.042-.95.097-.094.203-.176.299-.272.102-.103.189-.216.289-.32.328-.343.647-.694.954-1.057.197-.232.386-.468.572-.707.256-.328.504-.663.743-1.005.199-.285.389-.574.574-.867.204-.324.401-.653.589-.988.175-.31.341-.624.5-.941.186-.371.364-.746.53-1.128.121-.278.234-.558.344-.84.184-.473.358-.952.511-1.44.058-.188.109-.377.162-.566.157-.552.299-1.11.415-1.678.025-.125.044-.251.067-.376.117-.628.213-1.263.277-1.908.007-.067.009-.134.015-.201.062-.682.098-1.371.098-2.069,0-.012,0-.025,0-.037,0-.007,0-.014,0-.02,0-.019-.003-.037-.003-.056-.004-.726-.04-1.445-.11-2.154-.003-.034-.007-.069-.01-.103-.069-.664-.17-1.319-.295-1.966-.023-.12-.045-.241-.07-.361-.118-.561-.26-1.112-.419-1.657-.065-.226-.133-.451-.206-.674-.143-.441-.301-.875-.47-1.304-.122-.311-.251-.618-.387-.923-.154-.346-.317-.688-.488-1.025-.174-.343-.357-.682-.548-1.016-.175-.306-.357-.607-.546-.904-.203-.319-.414-.633-.633-.943-.224-.317-.456-.628-.696-.932-.206-.262-.417-.519-.635-.773-.295-.343-.599-.677-.914-1.002-.101-.104-.189-.217-.292-.32-.109-.108-.229-.201-.34-.307-.325-.311-.659-.613-1.002-.905-.248-.211-.5-.414-.755-.613-.308-.24-.621-.472-.941-.696-.305-.214-.613-.418-.927-.616-.299-.188-.603-.37-.911-.545-.333-.189-.67-.369-1.012-.541-.34-.171-.685-.334-1.035-.488-.305-.134-.612-.261-.923-.382-.435-.169-.874-.328-1.322-.471-.223-.071-.447-.135-.672-.199-.547-.156-1.099-.299-1.661-.414-.124-.025-.249-.044-.373-.067-.627-.118-1.261-.215-1.905-.28-.059-.006-.119-.008-.179-.014-.694-.065-1.396-.102-2.106-.102-.008,0-.015-.001-.023-.001h-.06c-.025,0-.05.004-.075.004-.713.004-1.419.04-2.115.108-.049.005-.097.009-.145.014-.652.068-1.294.168-1.928.29-.133.025-.266.05-.398.078-.549.116-1.089.255-1.623.41-.236.068-.47.139-.704.215-.432.141-.857.295-1.277.46-.318.125-.632.257-.943.396-.341.152-.677.312-1.009.48-.347.175-.688.36-1.026.553-.304.174-.603.354-.897.542-.321.204-.636.415-.947.636-.316.224-.626.455-.93.695-.262.206-.52.417-.774.636-.343.295-.677.599-1.002.913-.104.101-.218.189-.32.292-.107.108-.199.227-.304.336-.318.332-.626.673-.923,1.023-.204.241-.401.485-.594.733-.251.322-.494.65-.728.985-.202.29-.396.584-.585.882-.202.32-.396.645-.582.976-.176.313-.345.63-.506.951-.185.368-.361.74-.526,1.119-.122.28-.237.563-.347.848-.183.471-.356.948-.508,1.433-.059.189-.11.381-.164.572-.157.552-.299,1.11-.415,1.678-.025.124-.044.249-.067.373-.117.629-.213,1.264-.277,1.909-.007.067-.009.135-.015.202-.062.682-.098,1.371-.098,2.068,0,.012,0,.025,0,.037,0,.007,0,.014,0,.02,0,.019.003.037.003.056.004.726.04,1.445.11,2.154.003.034.006.068.01.102.069.666.171,1.322.296,1.97.023.117.044.235.068.352.119.565.262,1.121.422,1.67.063.219.129.437.199.654.145.448.306.89.478,1.325.119.303.245.602.376.899.158.356.326.707.502,1.053.168.332.345.659.53.983.182.319.371.633.568.942.195.306.397.608.608.906.233.331.475.654.726.972.197.249.397.494.605.736.306.357.622.704.949,1.041.094.097.176.203.273.299.103.102.216.189.32.289.342.328.693.646,1.054.952.229.194.461.381.696.565.331.259.668.509,1.014.75.28.195.564.383.852.565.327.207.659.406.997.596.305.172.613.336.926.493.077.039.153.08.23.118v128.012c-13.011-14.253-32.326-27.821-57.865-40.591-22.129-11.065-49.237-21.624-79.263-30.921-.525-12.117-10.543-21.813-22.787-21.813-12.579,0-22.812,10.233-22.812,22.812s10.233,22.812,22.812,22.812c5.59,0,10.714-2.025,14.685-5.374,29.856,9.136,56.711,19.518,78.419,30.373,41.562,20.782,64.61,43.274,66.654,65.042.207,2.204.207,4.452,0,6.682-.092.995-.031,1.968.156,2.9v84.078c-40.734-54.612-133.941-85.757-187.11-99.677-.43-12.203-10.485-22-22.791-22-12.578,0-22.812,10.233-22.812,22.812s10.233,22.812,22.812,22.812c5.447,0,10.453-1.922,14.38-5.119,18.34,4.729,43.618,12.079,69.951,22.286l-63.09,32.462c-3.967-3.334-9.079-5.347-14.654-5.347-12.578,0-22.812,10.233-22.812,22.812s10.233,22.812,22.812,22.812c12.297,0,22.347-9.782,22.791-21.972l79.051-40.675c.514.233,1.029.461,1.543.695,28.086,12.852,50.688,26.941,67.177,41.875,19.25,17.436,30.125,36.062,32.323,55.363.572,5.022.57,10.206-.004,15.409-.161,1.457.008,2.872.434,4.181v136.323c0,5.522,4.478,10,10,10,.22,0,.434-.019.651-.033.197.012.393.03.594.03h.025c5.522-.014,9.988-4.503,9.975-10.025l-.346-136.32c.423-1.311.588-2.727.423-4.184-.587-5.203-.602-10.388-.043-15.408,2.148-19.308,12.977-37.962,32.183-55.445,16.451-14.977,39.017-29.123,67.069-42.047.513-.236,1.027-.465,1.54-.699l79.176,40.484c.226,5.772,2.561,11.167,6.678,15.262,4.306,4.284,10.017,6.641,16.085,6.641h.062c6.094-.016,11.816-2.402,16.114-6.722,4.299-4.32,6.656-10.055,6.641-16.146-.016-6.094-2.402-11.816-6.722-16.114-4.32-4.299-10.068-6.675-16.146-6.641Z" fill="#3b82f6"/></g></svg>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vruum/skills",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.68",
|
|
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": {
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
"LICENSE",
|
|
21
21
|
"skills/",
|
|
22
22
|
"agents/",
|
|
23
|
+
"assets/",
|
|
23
24
|
"bin/",
|
|
24
25
|
".mcp.json",
|
|
25
26
|
".claude-plugin/",
|
|
@@ -41,5 +42,5 @@
|
|
|
41
42
|
"outreach",
|
|
42
43
|
"gtm"
|
|
43
44
|
],
|
|
44
|
-
"contentHash": "
|
|
45
|
+
"contentHash": "935d2cff928fcd38ce3918f9a9b03b10997239323f820f351224c843c3a6aa1c"
|
|
45
46
|
}
|
|
@@ -13,13 +13,21 @@ description: >-
|
|
|
13
13
|
|
|
14
14
|
Your meeting transcripts (Gemini Meet auto-notes, Read.ai reports) land in Google Drive. With Drive connected to Vruum, those transcripts sync into your knowledge base — but on their own they're just searchable text. This skill turns them into CRM activity: each transcript gets **attached to the right person and deal as a meeting** on their timeline, and its **action items become Vruum tasks** that show up in your daily briefing.
|
|
15
15
|
|
|
16
|
-
This is an analyst's job, not a batch import. The attribution step (which person? which deal?) is where a wrong guess does real damage — a meeting logged on the wrong account misleads whoever reads it next. So **you confirm every attach before anything is written**, the skill never auto-attaches an ambiguous match, and
|
|
16
|
+
This is an analyst's job, not a batch import. The attribution step (which person? which deal?) is where a wrong guess does real damage — a meeting logged on the wrong account misleads whoever reads it next. So **you confirm every attach before anything is written**, the skill never auto-attaches an ambiguous match, and every retry checks the meeting and task receipts separately.
|
|
17
17
|
|
|
18
18
|
## What this needs
|
|
19
19
|
|
|
20
20
|
- **Drive connected to Vruum.** The transcripts must be syncing into the knowledge base via the connector. If KB search turns up none of your recent meetings, the connection may be down or PDFs may not be admitted — say so and stop; this skill reads what's synced, it doesn't fix the connector.
|
|
21
21
|
- **Vruum MCP** for: `search` (kb + people reads), `get_person_360`, `manage_person` (to log the meeting as a `meeting`-kind interaction), `manage_tasks`, `get_tasks`.
|
|
22
22
|
|
|
23
|
+
**Check the session's actual tools before proposing execution.** The backend may
|
|
24
|
+
implement a tool without advertising it to the harness. If either task tool is
|
|
25
|
+
unavailable, explain that meeting-to-task execution is blocked; prepare a
|
|
26
|
+
reviewable proposal only. Do not log the meeting first and then discover that its
|
|
27
|
+
approved tasks cannot be written. Drive connection health proves neither tool
|
|
28
|
+
availability nor automatic contact linking/task creation: those are this reviewed
|
|
29
|
+
workflow's separate steps.
|
|
30
|
+
|
|
23
31
|
### Step 1 — Establish the recency window, then find NEW transcripts
|
|
24
32
|
|
|
25
33
|
**This skill is incremental and go-forward.** It ingests only meetings newer than the last one already logged, and never re-ingests the historical archive (a connected Drive can hold years of old transcripts — those stay KB-searchable but are not turned into CRM activity/tasks).
|
|
@@ -28,17 +36,24 @@ This is an analyst's job, not a batch import. The attribution step (which person
|
|
|
28
36
|
- **Set** → the window is everything *after* that date.
|
|
29
37
|
- **`null`** (no meeting logged yet — first run) → **ask the operator for a seed date** ("Ingest meetings since when? (default: last 30 days)"). Never silently default to the whole archive.
|
|
30
38
|
|
|
31
|
-
2. **Find candidates — deterministic recency listing, NOT a keyword search.** `search` type=kb with `filters={doc_type: "connector", modified_after: "<watermark or seed date, ISO-8601>", include_content: false}` and **no `query`**. This
|
|
39
|
+
2. **Find candidates — deterministic recency listing, NOT a keyword search.** `search` type=kb with `filters={doc_type: "connector", modified_after: "<watermark or seed date, ISO-8601>", include_content: false}` and **no `query`**. This lists synced connector documents modified after the watermark, newest first (up to 100). Connector results carry `source_kind='connector'`, the Drive modification time in `modified_at` (not the meeting date), a Drive `url`, and often these filename shapes:
|
|
32
40
|
- **Gemini:** `… - Notes by Gemini`, `… - Transcript`, `… - Live Notes`
|
|
33
41
|
- **Read.ai:** `… - Read Meeting Report`, `… Smart Notes`
|
|
34
42
|
|
|
35
43
|
> **Never use a keyword query for this step.** A query (e.g. "meeting notes transcript live notes") is a relevance-ranked top-N sample over the whole archive — on a Drive with years of old transcripts, recent meetings routinely fall below the relevance cutoff and the run wrongly concludes there is nothing new. Keyword search is fine later for looking things up; candidate discovery must be the `modified_after` listing.
|
|
36
44
|
|
|
37
|
-
3. **Keep only the meeting artifacts.** The
|
|
45
|
+
3. **Keep only the meeting artifacts.** The filename shapes above are clues, not an allowlist. Exported notes can use a plain `YYYY-MM-DD - <meeting title>` name with no provider suffix. Inspect the summary and, when unclear, read the document before excluding it; meeting time, attendees and substantive discussion identify a meeting more reliably than its filename. Drop obvious non-meeting files (specs, sheets, decks). The Drive's historical archive is intentionally left KB-searchable-only, NOT re-ingested into the CRM. Logging an old meeting (and minting "follow up next week" tasks from a meeting that happened a year ago) is noise.
|
|
38
46
|
|
|
39
47
|
> **The window field is Drive *modified* time, not the meeting time.** They usually track each other, but an OLD transcript someone re-edits re-enters the window looking "new" — check the meeting date in the title/content, and the Step 5 idempotency marker catches anything already logged. If the listing returns exactly 100 documents, the window overflowed and the OLDEST part was cut (results are newest-first) — tell the user and pull the remainder via the Drive MCP alternative below; a narrower window can NOT recover it (the filter is a lower bound only).
|
|
40
48
|
|
|
41
|
-
4. Present the surviving candidates as a short list: `name · meeting date · one-line summary`. **If none are newer than the watermark, say so and stop** —
|
|
49
|
+
4. Present the surviving candidates as a short list: `name · meeting date · one-line summary`. **If none are newer than the watermark, say so and stop** — no new candidates were found in the inspected window. This is not a claim about uninspected history.
|
|
50
|
+
|
|
51
|
+
A failed or timed-out listing is **unknown coverage**, never an empty result.
|
|
52
|
+
Report the failing read and stop discovery; do not substitute a keyword sample
|
|
53
|
+
and claim completeness. The latest logged meeting is only a recency hint,
|
|
54
|
+
not a completed-import checkpoint: skipped/failed older meetings and late
|
|
55
|
+
arrivals can remain behind it. Any recovery or historical pass needs an
|
|
56
|
+
explicitly agreed window and a per-document completion ledger.
|
|
42
57
|
|
|
43
58
|
> **One meeting, one record.** Gemini + Read.ai often produce 3-4 artifacts per meeting (`- Transcript`, `- Live Notes`, `Read Meeting Report`, `- Chat`). Pick the single richest one (usually `- Transcript` or `Notes by Gemini`) and ingest that — don't log the same meeting multiple times.
|
|
44
59
|
|
|
@@ -48,6 +63,13 @@ This is an analyst's job, not a batch import. The attribution step (which person
|
|
|
48
63
|
|
|
49
64
|
`search` type=kb with `filters={document_id: "<doc_id>", include_content: true}` returns the full document text. You need the whole transcript (attendees + the discussion), not a search snippet.
|
|
50
65
|
|
|
66
|
+
Check `truncated` and the actual content. A Read Meeting Report link, attendee
|
|
67
|
+
list, empty "Your Notes"/"Live Notes" template or "Recent Turn: ..." placeholder
|
|
68
|
+
is not a transcript. Mark it source-incomplete and request the substantive
|
|
69
|
+
artifact; do not infer action items from its title. If `truncated=true`, obtain
|
|
70
|
+
the complete source through an already-authorized read path or report the read
|
|
71
|
+
limit before extracting a supposedly complete action list.
|
|
72
|
+
|
|
51
73
|
### Step 3 — Resolve the entity (the careful step)
|
|
52
74
|
|
|
53
75
|
For each transcript, work out **which person** it's with and **which deal** it belongs to. Mis-attribution is worse than no attribution — when in doubt, ask.
|
|
@@ -75,7 +97,12 @@ Per transcript, show the user the complete proposal before writing anything:
|
|
|
75
97
|
- **Meeting:** the recap + meeting date.
|
|
76
98
|
- **Tasks:** the action-item list.
|
|
77
99
|
|
|
78
|
-
**Idempotency check (do this before writing):**
|
|
100
|
+
**Idempotency check (do this before writing):** in `get_person_360` for the resolved person, scan recent **meeting** activity for the marker `[vruum-meeting:<doc_id>]`. If present, skip the meeting write. That marker does **not** prove its tasks succeeded: a run can fail after logging the meeting. Resume task writes only from the saved, approved task list with the same external IDs and original numbering; the task service returns an existing task on a sequential retry. If that proposal or its write receipts are missing, report the partial state for review instead of inventing a new task list. The marker must lead the summary because `get_person_360` truncates each activity description to ~200 chars.
|
|
101
|
+
|
|
102
|
+
The recent activity view is bounded. Absence there is not proof that an old
|
|
103
|
+
meeting was never logged. Historical reconciliation needs an exhaustive,
|
|
104
|
+
tenant-scoped marker check before writes. Run one writer at a time: the meeting
|
|
105
|
+
marker is a workflow check, not a database uniqueness constraint.
|
|
79
106
|
|
|
80
107
|
The user **approves / edits / drops individual tasks / drops the whole transcript**. Only what they approve gets written.
|
|
81
108
|
|
|
@@ -87,7 +114,7 @@ For each approved transcript:
|
|
|
87
114
|
- `person_id` = the resolved person
|
|
88
115
|
- `interaction_kind` = `"meeting"`
|
|
89
116
|
- `direction` = `"outbound"` (or `"inbound"` if the prospect convened it)
|
|
90
|
-
- `occurred_at` = the meeting date as ISO-8601
|
|
117
|
+
- `occurred_at` = the meeting date as ISO-8601 from the transcript title/text, with its timezone resolved. If missing, ask; Drive modification time can be a later edit/export and must not silently become the meeting date.
|
|
91
118
|
- `deal_id` = the resolved deal (omit if none)
|
|
92
119
|
- `summary` =
|
|
93
120
|
```
|
|
@@ -96,21 +123,21 @@ For each approved transcript:
|
|
|
96
123
|
Attendees: <names / emails>
|
|
97
124
|
Source: <transcript filename> (Google Drive)
|
|
98
125
|
```
|
|
99
|
-
The `[vruum-meeting:<doc_id>]` marker
|
|
126
|
+
The `[vruum-meeting:<doc_id>]` marker lets Step 5 detect a previously logged transcript within the returned activity history. 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 duplicate check fails. Keep it verbatim, at the front.
|
|
100
127
|
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
128
|
3. **Create each approved task** — `manage_tasks` action=create with:
|
|
102
129
|
- `title` (the action item), `person_id` (+ `deal_id` if there is one)
|
|
103
130
|
- `priority`, and `due_at` as ISO-8601 **only if** a date was actually parseable (omit otherwise)
|
|
104
131
|
- `assigned_to` = the rep running this (leave to self; only assign a teammate if you know their Vruum user id)
|
|
105
|
-
- `external_id` = `transcript:<doc_id>:task:<n>` — the
|
|
132
|
+
- `external_id` = `transcript:<doc_id>:task:<n>` — keep the approved list's original numbering, including gaps for dropped tasks. Save the approved proposal and each successful task ID before continuing. Retry the same IDs sequentially; never renumber or re-extract the task list during partial recovery.
|
|
106
133
|
|
|
107
134
|
### Step 7 — Confirm
|
|
108
135
|
|
|
109
|
-
Report concisely: **N meetings logged, M tasks created**, and anything **skipped** (already-logged, or unresolved). Note that
|
|
136
|
+
Report concisely: **N meetings logged, M tasks created**, and anything **skipped** (already-logged, or unresolved). Distinguish reused tasks from newly created ones and report partial failures, unavailable tools, incomplete source text and discovery limits. Note that successfully created tasks will surface in `get_daily_briefing` (tasks due) and on each person's timeline (`get_person_360`). For any **unresolved** transcripts, list them so the user can create the people and re-run.
|
|
110
137
|
|
|
111
138
|
## Guardrails
|
|
112
139
|
|
|
113
140
|
- **Never attach on an ambiguous or missing match** — ask. Mis-attribution is worse than no attribution.
|
|
114
141
|
- **Never invent action items** — only commitments actually stated in the meeting.
|
|
115
142
|
- **You approve every write.** Nothing is committed without the Step 5 sign-off.
|
|
116
|
-
- **
|
|
143
|
+
- **Reconcile before re-running.** Tasks dedup on stable `external_id` values; meeting checks use the `[vruum-meeting:<doc_id>]` summary marker. Multiple artifacts for one meeting, truncated activity history and partial task failures require explicit reconciliation. Do not promise an unconditional no-op.
|