← BreakthroughCONTENT HISTORY

Update to Breakthrough

Snapshot Oct 31, 2026 · 01:17 UTC · version 0.24.0

Collection source: downloaded plugin package.

WHAT CHANGED

First saved snapshot

No earlier snapshot is available to establish a change.

Save Breakthrough and check future changes in Following.

Up to 10 plugins free · no card required.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "description": "Searches and reads the user's recorded Breakthrough call transcripts — finds which calls touched a topic, lists a contact's calls, or reads one call in full. Answers what was actually said, by whom, and when, citing the call it came from.",
  "included_files": [],
  "name": "research-transcripts",
  "skill_md_contents": "---\nname: research-transcripts\ndescription: >-\n  Searches and reads the user's recorded Breakthrough call transcripts — finds which\n  calls touched a topic, lists a contact's calls, or reads one call in full. Answers\n  what was actually said, by whom, and when, citing the call it came from.\nwhen_to_use: >-\n  Use when the user says \"what did they say about pricing\", \"did we discuss budget\",\n  \"when did we last talk to Acme\", \"what were their objections\", \"pull up that call\",\n  \"did they commit to anything\", \"who was on the call\", \"did it come up\". Do NOT use to\n  write the call up as notes or a MEDDPICC; that is answer. Do NOT use for questions needing\n  judgment beyond what the calls actually state; that is answer.\n---\n\n# Research call transcripts\n\nWraps `search_transcripts`, `contact_transcripts_list`, and\n`call_transcript_conversation`. Full argument details in\n`${CLAUDE_PLUGIN_ROOT}/references/mcp-tools.md`.\n\n## Before searching: who is the request about?\n\nWhen the request names a person or a company (\"what did Ben think of the demo\",\n\"pull up that call with Acme\"), run `resolve_prompt_context(user_prompt=<verbatim>)`\n**first**, before `search_transcripts`. It says which contacts and businesses exist with\nthat name, how many calls each has, and whether the name is ambiguous. A first name\nalone often matches several people, each with their own demo — searching transcripts\nfor \"Ben demo\" and reading the top hit picks one of them silently, which is the worst\noutcome.\n\n- `clarification_needed: true` → reply with the clarifying question the\n  recommendations spell out (the candidates and their calls on record) and stop.\n- One matched contact → use its id with `contact_transcripts_list`, then open the\n  call you need. Do not fall back to a free-text `search_transcripts` for a person who\n  resolved.\n- A matched business but no contact (\"that call with Acme\") →\n  `search_transcripts(query=<topic or \"\">, filter_by=\"business_names:<name as returned>\")`,\n  then open the call you need. `business_profile` returns the profile and notes, not\n  the call list.\n- No match → `search_transcripts` with the topic is the right next step.\n\n## A topic across a window (\"product requests from the last week\")\n\nThe search index holds each call's name, imported summary, participants, businesses,\ndate and tags — not what was said. A topic like \"product requests\" is rarely in a title,\nso do not search for it. Bound the set instead and read:\n\n1. `search_transcripts(query=\"\", filter_by=\"call_date:>=<YYYY-MM-DD> && tags:Sales\",\n   sort_by=\"call_date:desc\", limit=50)` — the prospect calls in the window, newest first.\n   The tool returns at most 50; if you get 50 back, the window holds more: query again\n   with `call_date:<=` the oldest date you received (`<=`, not `<`: several calls can share\n   a timestamp) and drop the ids you already have, until a page comes back short. Say how\n   many calls there were in total.\n2. Open **each** of them with `format=\"summary\"` (the thematic summary) and read for the\n   topic. Do not stop at three because three felt like enough; stop when the list is done.\n3. Answer from what the summaries say, citing call and date; go back to `format=\"full\"`\n   only for a call an exact quote must come from.\n\nIf the window is empty, say so and offer the most recent calls instead of quietly\nsubstituting them.\n\n## After a clarifying question\n\nWhen you asked \"which Ben?\" and the user answered with a name, run\n`resolve_prompt_context` again on that name before anything else. The map for the\nclarified name carries the CALLS ON RECORD step; the first map did not, because the name\nwas ambiguous. Then `contact_profile` — its `recent_calls` lists their calls, newest\nfirst, with tags — and read the calls the question is about.\n\n## Choosing the entry point\n\n| The question | Tool |\n| --- | --- |\n| \"when did X come up\" / topic across calls | `search_transcripts` |\n| \"what calls have we had with Jane\" | `contact_transcripts_list` (needs contact IDs) |\n| \"what happened on that call\" | `call_transcript_conversation` |\n\n`contact_transcripts_list` takes **integer contact IDs**, not names — resolve through\n`contact_profile` or `resolve_prompt_context` first. It returns metadata only, no\ntranscript bodies.\n\n## Searching\n\n`search_transcripts(query, limit, filter_by, sort_by)`:\n\n- `query` — semantic + keyword. Empty browses without relevance ranking.\n- `filter_by` — filter grammar, applied **before** ranking. Only five fields exist:\n  `name`, `participant_names`, `business_names`, `call_date` (a date as `YYYY-MM-DD`,\n  or unix seconds), `tags`. Every response carries `today` and, when you filtered by\n  `call_date`, `call_date_window` with the dates actually searched; check it against\n  the period the user asked about before reporting that there were no calls.\n  Inventing a field name errors out rather than being ignored.\n- `tags` is what kind of call it is: `Sales`, `Internal`, `Onboarding`,\n  `Instructional`, … A question about prospects or customers means `tags:Sales`; a\n  question about \"my calls\" in a window usually means `tags:!=Internal`. Every result\n  carries its `tags`, so say which calls you left out and why.\n- `sort_by` — sort grammar. Defaults to `call_date:desc` on an empty query,\n  relevance otherwise.\n\nFilter when you know the constraint (a named account, a date range); let relevance rank\nwhen you don't.\n\n## Reading\n\n`call_transcript_conversation(transcript_id, include_structured, format)`:\n\n- **`format=\"summary\"`** when scanning several calls. Pulling three or four at `\"full\"`\n  buries the question in raw dialogue.\n- **`format=\"full\"`** for a single deep dive, or when exact wording matters — an\n  objection, a commitment, a number.\n- `include_structured=True` adds per-sentence timing and speaker structure. Only with\n  `format=\"full\"`, and only when you need to attribute lines to speakers.\n\n## Reporting\n\nCite which call each finding came from — call name and date. \"They pushed back on\npricing\" is worth little; \"on the Feb 12 call, Dana said the $40k figure would need\nCFO sign-off\" is actionable.\n\nDistinguish what was said from what it implies. And when the search returns nothing, say\nthe calls don't cover it rather than reasoning from general knowledge about the account —\nthe entire premise of the question was the user's own call data.\n"
}

SHA-256 of public snapshot: 4785c2cc635941bc5af4cefb3365216e99c326a87e490cc8e435f0529345210f