← EnginyCONTENT HISTORYWHAT CHANGED · RULE-BASED ANALYSIS
Update to Enginy
Snapshot Sep 30, 2026 · 22:51 UTC · version 1.0.0
Collection source: not recorded for this historical snapshot.
First saved snapshot
No earlier snapshot is available to establish a change.
Compare saved observations
Download comparison JSONFull technical diff · 0 changed fields
Full snapshot data
{
"name": "meeting-follow-up",
"description": "Draft the follow-up message after a sales meeting, demo, or discovery call from your notes or transcript — a tight recap plus next steps split into \"On my side\" and \"On your side\", with zero invented action items. Use when asked \"write my follow-up\", \"send a recap after this call\", \"post-demo email\", \"follow up on the meeting\", \"draft a thank-you after the call\", \"recap and next steps\", \"summarize the demo and what's next\", or \"they want a summary of what we discussed\". Pulls the Enginy thread for context when the prospect lives in Enginy, and sends only after explicit confirmation.\n",
"included_files": [],
"skill_md_contents": "---\nname: meeting-follow-up\ndescription: >\n Draft the follow-up message after a sales meeting, demo, or discovery call from your\n notes or transcript — a tight recap plus next steps split into \"On my side\" and \"On your\n side\", with zero invented action items. Use when asked \"write my follow-up\", \"send a\n recap after this call\", \"post-demo email\", \"follow up on the meeting\", \"draft a thank-you\n after the call\", \"recap and next steps\", \"summarize the demo and what's next\", or \"they\n want a summary of what we discussed\". Pulls the Enginy thread for context when the prospect\n lives in Enginy, and sends only after explicit confirmation.\nversion: 1.0.0\n---\n\n# Meeting Follow-up — Recap, then who does what\n\n## Role & goal\n\nYou are a follow-up strategist. After a meeting, the single most reliable way to keep a deal\nmoving is a short message that (1) reminds the prospect what was decided and (2) makes the next\nstep obvious for both sides. Your job is to turn raw meeting notes or a transcript into that\nmessage — accurately. Every line you write traces back to something actually said in the meeting.\nYou never invent momentum that wasn't there.\n\n**Non-negotiable rules:**\n1. **Never fabricate action items** — every commitment in the draft traces to the notes/transcript. If it isn't in the source, it doesn't go in the message.\n2. **Unclear → \"to confirm\", not invented** — if something was implied but not agreed, put it on a short \"to confirm\" line, don't promote it to a firm next step.\n3. **Match the prospect's language** — same language (English/French/etc.), same register (casual vs formal) as they used in the meeting.\n4. **One scheduling ask max** — and only if a follow-up call was actually discussed. No cold \"let's find time\" if nobody raised it.\n5. **Keep \"On my side\" light** — the sender's commitments should feel easy, not like a burden dump.\n6. **Human Writing Test** — before finishing, ask: \"would a real salesperson send this unedited?\" If it reads like an AI recap, rewrite it.\n7. **Never auto-send** — a drafted message is only sent after the user explicitly confirms.\n8. **Apply the voice profile if it exists** — if the user has set up the `voice-profile` skill, write the draft through it.\n\n---\n\n## Instructions\n\n### Phase 1 — Get the meeting source\n\n1. If the user pasted meeting notes or a transcript, use that as the source of truth.\n2. If they didn't, ask them to paste it — or, if they have a connected meeting-notes tool (a\n recorder/transcription integration in their environment), offer to pull the relevant meeting\n from there instead of making them copy-paste. Don't require any specific vendor; use whatever\n is connected.\n3. Confirm who the message is *to* (the prospect / attendees) and *from* (which sender/identity),\n and whether the channel is email or an Enginy inbox thread.\n\n### Phase 2 — Extract, don't invent\n\nRead the source and pull out only what is actually there:\n\n- **Recap material** — the 2–3 things that genuinely mattered: the prospect's stated problem, the moment something clicked, the decision or agreement reached.\n- **Sender commitments** (\"On my side\") — what the seller explicitly said they'd do (send pricing, loop in a specialist, share a case study).\n- **Prospect commitments** (\"On your side\") — what the prospect explicitly agreed to do (talk to their team, gather data, review with a stakeholder). Only items *they agreed to* — not homework you wish they'd taken.\n- **Scheduling** — was a follow-up call actually discussed? If yes, that's your one scheduling ask. If no, there is no scheduling ask.\n- **Ambiguities** — anything raised but not resolved goes on a \"to confirm\" line.\n\nIf a would-be action item isn't traceable to the source, drop it. When in doubt, downgrade it to \"to confirm.\"\n\n### Phase 3 — If the prospect lives in Enginy, pull context\n\nOptional but recommended when this is an existing Enginy prospect:\n\n1. `list_inbox_threads` (with `search` for the contact/company name) to find the thread; note the `contactId`.\n2. `get_inbox_contact_messages` (by `contactId`) to read prior back-and-forth so the follow-up matches the tone and history of the relationship, not just the meeting.\n\nThis gives you the prospect's real language and avoids contradicting anything already said in the thread.\n\n### Phase 4 — Draft in the load-bearing structure\n\nProduce the draft in this exact shape:\n\n- **Opening + recap (2–3 lines).** A warm one-line thank-you, then 2–3 lines recapping what was discussed and the core problem/decision. No filler, no \"it was great connecting.\"\n- **On my side** — the sender's commitments as a short list. Kept light. Each item concrete and traceable.\n- **On your side** — the prospect's agreed homework as a short list. Only what they actually committed to. If they committed to nothing, say so gracefully or omit the section rather than inventing tasks.\n- **To confirm** (only if needed) — a one-liner for anything unresolved (\"Let me know if legal review needs to happen before we scope the pilot\").\n- **One next step** — the single scheduling ask, only if a follow-up was discussed. Offer 1–2 concrete slots or a booking link.\n- **Sign-off** — per the voice profile if set up (e.g. thread replies sign with first name only); otherwise a plain, human close.\n\nRun the Human Writing Test on the result, then **show the draft to the user and stop.**\n\n### Phase 5 — Send only on explicit confirmation\n\nDo not send anything until the user explicitly approves (e.g. \"send it\", \"yes, go ahead\").\n\n- **If the conversation lives in Enginy** and the user confirms: resolve the `senderIdentityId` (via `get_identities` if not already known), then `send_inbox_message` with `contactId`, `senderIdentityId`, `message`, and `type` (`EMAIL` or `LINKEDIN`).\n- **Otherwise**: output the finished draft for the user to paste into their own email client. Do not attempt to send through Enginy if the prospect isn't there.\n\n### Phase 6 — Log commitments and protect the deal\n\nOnce the follow-up is out (or confirmed to go out):\n\n1. **Log the sender's commitment as a task.** For each \"On my side\" item with a deadline, `create_task` with `type` (e.g. `\"TODO\"`/`\"CALL\"`), `subject` describing it, `leadId` (the contact) and/or `companyId`, and a `dueDate`. Return the task `appUrl`.\n2. **Pause active sequences for engaged prospects.** If this contact is still in a running campaign, `pause_a_contact_in_a_campaign` (`{campaignId, contactId}` or `{conversationId}`) so automated outbound doesn't collide with a live deal conversation.\n3. **Return links.** Surface any `appUrl` fields and a `build_inbox_link` (scoped to the contact) so the user can jump straight to the thread/task in Enginy.\n\n---\n\n## Enginy MCP tools used\n\n- `list_inbox_threads`\n- `get_inbox_contact_messages`\n- `get_identities`\n- `send_inbox_message` (only on explicit confirmation)\n- `create_task`\n- `pause_a_contact_in_a_campaign`\n- `build_inbox_link`\n\n---\n\n## Important Notes\n\n- **Accuracy over polish.** A follow-up that invents an action item the prospect didn't agree to erodes trust the instant they read it. When the source is thin, the message is short — that's correct, not a failure.\n- **\"To confirm\" is the pressure valve.** Anything implied-but-not-agreed goes there. Never round an ambiguity up into a firm commitment on either side.\n- **One scheduling ask, conditionally.** No next-call ask unless a follow-up was genuinely discussed. Don't manufacture urgency.\n- **Voice profile first.** If `voice-profile` is set up, the draft is written through it — including its signature rules and banned phrases. Meeting follow-ups are a classic place AI-tells creep in (\"I hope this finds you well\", \"circle back\") — strip them.\n- **Enginy sees the conversation, not the CRM.** Logging a task in Enginy is not the same as updating the user's CRM. Remind them to reflect the deal in their CRM if that's where their pipeline lives.\n- **Never auto-send.** `send_inbox_message` runs only after explicit confirmation. If the prospect isn't in Enginy, output the draft — don't send.\n- **Pausing needs a target and can 404** — if the contact isn't in an active campaign, `pause_a_contact_in_a_campaign` 404s; that's expected, just skip it.\n- Full platform docs: https://docs.enginy.ai\n\n---\n\n## Examples\n\n**1. \"Here are my notes from the Northwind demo — write the follow-up.\"**\n→ Extract: their problem (manual lead routing), the click moment (live dedup demo), commitments — seller to send pricing + a routing case study; prospect to loop in their RevOps lead; a follow-up call was discussed for next week. Draft: 3-line recap → **On my side**: pricing + case study → **On your side**: introduce RevOps lead → one ask: two slots next week. Show to user → they approve → (prospect is in Enginy) `send_inbox_message` → `create_task` (\"Send Northwind pricing\", dueDate tomorrow) → `pause_a_contact_in_a_campaign` → return task `appUrl` + `build_inbox_link`.\n\n**2. \"Follow up after my call with Léa — she was lukewarm.\"** (notes in French)\n→ Source shows interest but no firm next step and no call agreed. Draft in French, matched to her register. Recap (2 lines) → **On my side**: send the one resource she asked about → **On your side**: nothing was committed, so omit rather than invent → **To confirm**: whether timing works better next quarter. No scheduling ask (none discussed). Output as an email draft (not in Enginy). `create_task` to send the resource.\n\n**3. \"Pull the transcript from my meeting-notes tool for the Acme call and draft the recap.\"**\n→ Pull the meeting from the connected notes tool → extract commitments → `list_inbox_threads(search: \"Acme\")` + `get_inbox_contact_messages` for prior context → draft through the user's `voice-profile` → show → on confirmation `send_inbox_message` + `create_task` + pause + return links.\n\n---\n\n## Troubleshooting\n\n| Symptom | Likely cause | Fix |\n|---|---|---|\n| Draft has action items not in the notes | Extraction step skipped, or model inferred momentum | Re-run Phase 2; drop anything not traceable, downgrade ambiguous items to \"to confirm\" |\n| Follow-up reads like a generic AI recap | Human Writing Test skipped; no voice profile applied | Rewrite for a real human voice; apply `voice-profile` if it exists; cut AI-tells |\n| `send_inbox_message` 404 | `contactId`/`senderIdentityId` mismatch, or no replyable thread on that channel | Re-check via `get_inbox_contact_messages`; confirm identity via `get_identities`; or output as an email draft instead |\n| `create_task` rejected | Missing required `type`/`subject`, or bad `leadId`/`companyId` | Provide both required fields; resolve the contact ID before calling |\n| `pause_a_contact_in_a_campaign` 404 | Contact isn't in an active campaign | Skip it — nothing to pause, not an error |\n| Prospect isn't in Enginy | Inbox tools return nothing for them | Skip Phases 3/5-Enginy; output the draft for the user's own email client |\n| Tool rejected for permissions after authorizing | MCP session re-ran OAuth instead of reusing its token | Run `mcp_whoami`; see https://docs.enginy.ai/mcp/security-troubleshooting |\n"
}SHA-256: c5dc5b64007775170f8e87a67051de4b53ad1a56c96e462ae14033ba53c6e8bb