{"id":8121,"plugin_id":"plugin_asdk_app_6a672c7aa740819188b2138f730487b5","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T22:51:59.682Z","digest":"e77b48dd1b996e1e19d8e53ef966969f677c6453be1859f030a9084a00838dda","against":null,"payload":{"name":"pre-call-research-brief","description":"Assemble a tight pre-call research brief on a contact and their company before a sales call or meeting. Use when the user says \"prep me for my call with X\", \"build a pre-call brief\", \"research this prospect before my meeting\", \"what do I need to know before I talk to this account\", \"give me talking points for this contact\", or \"get me ready for the demo with this company\".","included_files":[],"skill_md_contents":"---\nname: pre-call-research-brief\ndescription: >-\n  Assemble a tight pre-call research brief on a contact and their company before\n  a sales call or meeting. Use when the user says \"prep me for my call with X\",\n  \"build a pre-call brief\", \"research this prospect before my meeting\", \"what do\n  I need to know before I talk to this account\", \"give me talking points for this\n  contact\", or \"get me ready for the demo with this company\".\nversion: 1.1.0\n---\n\n# Pre-Call Research Brief\n\n## Role and goal\n\nBefore a rep gets on a call, give them everything they need on one screen: who\nthe person is, what the company does, the full history of what's been said\nbetween you, the likely pains, concrete talking points, objection prep, and a\nsuggested next step. Pull relationship history from Enginy, fill only the gaps\nthat matter for the call, and optionally leave the brief on the record as a task\nnote. Keep it short enough to read in the two minutes before dialing.\n\n**The meeting-existence rule.** A call only earns its slot on the calendar if it\ndelivers something the prospect couldn't get from an email — a fix, a decision,\nan idea, or a sharper plan. If the research doesn't surface that value (no open\nquestion worth talking through live, nothing concrete to walk them through),\nsay so plainly in the brief and suggest handling it async by email instead of\ndefaulting to a call.\n\n## Instructions\n\n### Phase 1 — Identify contact and company\n1. Resolve the contact: `get_a_single_contact` by ID, or `get_contacts` /\n   `search_contacts_with_advanced_filters` by name/email. Note the associated\n   company ID.\n2. `get_a_single_company` for firmographics. Capture `appUrl` for both so the\n   brief links straight into Enginy.\n3. Check the meeting type. Strategic/planning meetings — QBRs, quarterly\n   business reviews, success reviews — aren't a fit for this skill; route those\n   to **quarterly-outbound-review** instead. This skill is built for tactical\n   sales/demo calls, one contact and one agenda at a time.\n\n### Phase 2 — Fill gaps only if the record is thin\n1. If key fields for the call are missing (role, seniority, company size,\n   industry, recent company context), consider `SCRAPE_LEAD_FROM_LINKEDIN` and\n   `SCRAPE_COMPANY_ACCOUNTIQ_FROM_LINKEDIN` (AI company insights).\n2. These are **billable**. Call `get_credit_pricing` + `get_credit_balance`,\n   show the cost, and confirm before `start_an_actions_run`. Poll\n   `get_actions_run_status` to completion. Skip this phase entirely when the\n   record is already rich enough for the call — don't spend to gold-plate a\n   brief.\n\n### Phase 3 — Relationship history\n1. `get_inbox_contact_messages` (contactId) for the flattened message history —\n   what you've sent and what they replied. Use `get_conversation_messages` for a\n   specific thread if needed.\n2. `get_tasks` filtered by `companyIds` (and search by contact) for open/pending\n   items and past activity.\n3. Check which campaigns the contact is in (from the contact record / campaign\n   membership) so you know what messaging they've already received — don't\n   repeat an angle they've seen.\n\n### Phase 4 — Fresh external context (optional)\n1. For recent news, funding, launches, or leadership changes not in Enginy, use\n   web search. **Host requirement: this phase needs web search available in the\n   running client.** If it isn't, say so and build the brief from Enginy data\n   only — do not fabricate news.\n\n### Phase 5 — Assemble the brief\n\nBefore writing anything, apply the meeting-existence rule from above: if\nnothing in Phases 1-4 turned up a concrete fix, decision, insight, or plan\nworth the prospect's time live, say so and recommend async handling instead of\nprepping a call that shouldn't happen.\n\nPrep the brief for the call's actual shape, not just its content. Default to a\n30-minute meeting run as:\n- **0-5 min** — intro and agenda.\n- **5-15 min** — their questions and doubts.\n- **15-30 min** — the Value block: the prepared segment where you bring\n  something they didn't have before the call.\n\n**Never walk in empty.** The brief's output must always include a prepared\nValue block — not just talking points — so the rep has a relevant insight, a\nconcrete analysis, or a best practice matched to their situation ready to run\nfor that back half of the call.\n\nProduce a tight, skimmable brief:\n- **Who they are** — name, role, seniority, tenure, notable background.\n- **Company snapshot** — what they do, size, industry, any fresh context.\n- **Engagement history** — messages exchanged, last touch, current campaign(s),\n  open tasks. Quote the last thing *they* said if there is a reply.\n- **Likely pains** — route to the `pain-identifier` doctrine to reason from\n  role + company to probable problems. Frame as hypotheses, not facts.\n- **Talking points** — 3-5 specific openers/angles tied to the pains and history,\n  for the 5-15 min segment.\n- **Value block** — the prepared 15-30 min segment: one relevant insight,\n  concrete analysis, or best practice matched specifically to this prospect's\n  situation. This is the part of the brief that makes the call worth having —\n  don't skip it even when talking points feel sufficient.\n- **Objection prep** — anticipated pushback and responses; reference the\n  `reply-handler` doctrine for handling live replies.\n- **Suggested next step** — the concrete ask for this call.\n\n### Phase 6 — Persist and hand off (optional)\n1. If the user wants it saved, `create_task` on the contact (`leadId`) or company\n   (`companyId`) with the brief in `notes`, a `dueDate` for the call, and\n   `type`/`subject`. Return the task `appUrl`.\n2. Return `build_inbox_link` (scoped to the contact via `leadId`) so they can\n   jump to the live thread, plus the contact and company `appUrl`s.\n\n## Enginy MCP tools used\n\nget_a_single_contact, get_contacts, search_contacts_with_advanced_filters,\nget_a_single_company, get_credit_pricing, get_credit_balance,\nstart_an_actions_run, get_actions_run_status, get_inbox_contact_messages,\nget_conversation_messages, get_tasks, create_task, build_inbox_link\n\n## Important notes\n\n- **Confirm before spend.** Phase 2 scraping is billable; always price and\n  confirm before `start_an_actions_run`. Most briefs need no enrichment — skip\n  it when the record is already sufficient.\n- **No value, no call.** If the brief can't identify something the prospect\n  couldn't get from an email, flag it and suggest async instead of prepping a\n  call anyway. Strategic/planning meetings (QBRs, success reviews) route to\n  `quarterly-outbound-review`, not this skill.\n- **Always ship a Value block.** A brief that's only talking points is\n  unfinished — the 15-30 min segment needs a prepared insight, analysis, or\n  best practice, not improvised commentary.\n- **Web research is host-gated.** If the client has no web search, build from\n  Enginy data and say the external-news section is unavailable. Never invent\n  news, funding, or headlines.\n- **Pains and objections are hypotheses.** They come from role/company reasoning\n  (`pain-identifier`), not confirmed facts — label them as such.\n- **Don't repeat sent messaging.** Read campaign membership and inbox history so\n  talking points don't echo what the prospect already ignored.\n- **`build_inbox_link` builds a URL only** — it does not fetch messages. Use\n  `get_inbox_contact_messages` for the actual history.\n- UI walkthroughs: https://docs.enginy.ai.\n\n## Examples\n\n**1. Warm demo prep.** User has a demo in 20 minutes with a contact ID. Pull\ncontact + company, read the inbox thread (they replied \"interested, but worried\nabout onboarding time\"), see they're in the \"Q3 Outbound\" campaign. No\nenrichment needed. Brief leads with the onboarding objection, gives 3 talking\npoints on time-to-value, and suggests booking a technical follow-up. Save as a\ntask due today, return the inbox link.\n\n**2. Cold-ish account, thin record.** Contact has only name + company. Confirm\n~X credits for `SCRAPE_LEAD_FROM_LINKEDIN` + `SCRAPE_COMPANY_ACCOUNTIQ_FROM_LINKEDIN`,\nrun, poll. Add web-search news (recent funding round). Brief covers who they are,\nthe raise as an opener, likely scaling pains, and a discovery-call ask.\n\n**3. No web search available.** Same as above but the client lacks web search.\nBuild the full Enginy-based brief and flag: \"External news section skipped — web\nsearch isn't enabled here.\"\n\n## Troubleshooting\n\n| Symptom | Likely cause | Fix |\n|---|---|---|\n| `get_inbox_contact_messages` returns nothing | No thread, or history is archived | Retry with `archived: true`; the contact may be truly cold |\n| Company fields sparse after scrape | LinkedIn page thin or no URL on record | Add a company LinkedIn URL first, or note the gap in the brief |\n| Web-search step unavailable | No web search in the client | Build from Enginy data; flag the missing section |\n| `create_task` 400 | Missing required `type`/`subject` | Provide both; attach brief in `notes` |\n| Duplicate/irrelevant talking points | Didn't read campaign history | Check campaign membership before drafting angles |\n| Enrichment stuck | Worker backlog (stale `lastUpdatedAt`) | Keep polling `get_actions_run_status` |\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}