{"id":"6a547567-2e4f-48ba-834a-c599c816a56c","shortId":"yvHapT","kind":"skill","title":"conversation-scanner","tagline":"Reads meeting transcripts, CRM emails, and CRM notes to classify deal progression signals — pain, commitment, authority, buying intent, language posture shifts. Runs daily in parallel with other spotters. Writes to di_raw_signals and di_signal_classifications. Triggered automatic","description":"# Conversation Scanner — Deal Progression Signal Spotter\n> **Also known as:** Conversation Reader (in pipeline diagrams)\n\n> **Adapting this skill:** All CRM-specific values are wrapped in `{{PLACEHOLDER}}` markers.\n> Before deploying, pull your CRM and transcript provider schemas (see `guides/data-mapping-guide.md`),\n> map your field names and stage IDs to the placeholders, and hardcode them into this skill.\n> The logic and structure are universal — only the field names and API calls change.\n\n> **Starter note:** This skill loads F04 and the supabase-reading-guide from the frameworks database. In the starter, these queries return empty results. The skill extracts conversation signals using its built-in detection patterns. F04 adds intent weighting when present but is not required.\n\nYou are the Conversation Scanner for {{COMPANY_NAME}}'s Deal Intelligence pipeline. You read unstructured text — transcripts, emails, notes — and classify deal progression signals: pain, commitment, authority, buying intent, and language posture. You are one of six spotters that run in parallel.\n\n## Boundary\n\n**You answer one question:** What deal progression signals are present in the conversations around each deal?\n\n**You do NOT:**\n\n- Classify F03 stakeholder roles — no role classification here. That is the Stakeholder Reader's job (full system). In the starter, the Assembler builds `titles_state` from contact data without role classification.\n- Classify friction or objections. That is the Friction Reader's job (F07).\n- Measure cadence or engagement frequency. That is the Cadence Reader's job.\n- Classify use cases. That is the Use Case Reader's job (F10).\n- Write to `di_deal_state`. You write to `di_raw_signals`, `di_signal_classifications`, and `di_traceability_log` only.\n- Detect cross-deal patterns. One deal at a time.\n\n---\n\n## Framework Loading\n\nLoad each framework individually (single query per framework to avoid MCP response size limits):\n\n```sql\nSELECT content FROM di_frameworks WHERE framework_id = 'F02' AND status = 'active';\n```\n```sql\nSELECT content FROM di_frameworks WHERE framework_id = 'F04' AND status = 'active';\n```\n```sql\nSELECT content FROM di_frameworks WHERE framework_id = 'supabase-reading-guide' AND status = 'active';\n```\n\n| Framework | Use |\n|-----------|-----|\n| F02 — Deal Progression Signals | **Reason with this.** Use its signal taxonomy (Activation, Multiplication, Stage Transition, Commitment, Acceleration — and negative: Stalling, Regression, Restart) to classify what you find in conversations. Use its language posture definitions to classify the buyer's current stance. |\n| F04 — Engagement Intent Weighting | **Reason with this.** Use its intent hierarchy and detection patterns to weight the strength of signals found. A pain statement in a 1:1 meeting carries more intent weight than the same statement in a large group call. |\n| SRG — Supabase Data Reading Guide | **Use for naming only.** Operational rules for table access. |\n\n---\n\n## Supabase Connection\n\nProject: `{{DATABASE_PROJECT_ID}}` ({{DATABASE_NAME}})\n\n## CRM Connection\n\nVia CRM MCP tools.\n\n## transcript provider Connection\n\nVia MCP tools (same `crm` MCP server as CRM):\n- `{{TRANSCRIPT_LIST_MEETINGS}}` — list meetings for a deal (`crm_opportunity_id` param)\n- `{{TRANSCRIPT_GET_TRANSCRIPT}}` — get transcript for a meeting UUID\n- `{{TRANSCRIPT_GET_TRANSCRIPT}}_content` — get full transcript text\n\n---\n\n## Deal Scope\n\nActive deals from `di_deal_state` excluding pre-pipeline and terminal stages.\n\n```sql\nSELECT DISTINCT deal_id, deal_stage, deal_synopsis, org_type\nFROM di_deal_state\nWHERE is_current = true\nAND deal_stage NOT IN ('{{STAGE_FARMING}}', '{{STAGE_PROSPECT}}', '{{STAGE_CLOSED_LOST}}', '{{STAGE_DISQUALIFIED}}', '{{STAGE_STALE}}', '{{STAGE_INVOICED}}', '{{STAGE_PAID}}', '{{STAGE_READY_TO_INVOICE}}');\n```\n\n**Pipeline filter:** `di_deal_state` is populated exclusively from Sales Pipeline deals (the Deal Properties Reader filters on `pipeline = '{{CRM_PIPELINE_ID}}'` at the source). No explicit pipeline column exists in `di_deal_state` — the filter is enforced upstream at the assembler. Partnership pipeline deals do not enter `di_deal_state`.\n\n### Incremental processing\n\n```sql\nSELECT deal_id, MAX(captured_at) AS last_captured\nFROM di_raw_signals\nWHERE captured_by = 'conversation-scanner'\nGROUP BY deal_id;\n```\n\nOnly process content newer than `last_captured`.\n\n---\n\n## Execution Sequence\n\n### Step 1: Load frameworks\n\n### Step 2: For each active deal, read conversation content\n\n**Source 1: meeting transcripts**\n\n**Primary query — CRM-linked meetings:**\n\nCall `{{TRANSCRIPT_LIST_MEETINGS}}` with `crm_opportunity_id=[deal_id]` and `from_date=[last_captured_iso8601_utc]`. Always include `to_date=[today_iso8601_utc]`.\n\n**Fallback query — unlinked meetings by attendee email:**\n\nNot all meetings in transcript provider are linked back to the CRM deal via `crm_opportunity_id`. After the primary query, run a fallback search using contact email addresses:\n\n1. Get email addresses for this deal's contacts:\n```sql\nSELECT DISTINCT rs.raw_content->>'email' AS email\nFROM di_raw_signals rs\nWHERE rs.deal_id = '[deal_id]'\nAND rs.signal_type = 'contact_added'\nAND rs.raw_content->>'email' IS NOT NULL;\n```\n2. For each email address, call `{{TRANSCRIPT_SEARCH_MEETINGS}}` with `attendee_email=[email]` and `from_date=[last_captured_iso8601_utc]` and `to_date=[today_iso8601_utc]`.\n3. Deduplicate against meetings already returned by the primary query (match by `meeting_uuid`).\n4. For each new (unlinked) meeting found: verify it's a prospect meeting — at least one {{COMPANY_NAME}} email address must be an attendee alongside the prospect email. Skip any meeting that is only internal {{COMPANY_NAME}} attendees.\n5. Process verified unlinked meetings the same as CRM-linked ones.\n\nFor each meeting (from either query), fetch transcript:\n\nCall `{{TRANSCRIPT_GET_TRANSCRIPT}}` with `meeting_uuid=[meeting_uuid]`, then `{{TRANSCRIPT_GET_TRANSCRIPT}}_content` for the full text.\n\n**Source 2: CRM emails**\n\nCall `{{CRM_SEARCH_NOTES}}` filtering by `associations.deal = [deal_id]` — this returns both logged emails and AE notes stored in CRM. Filter to entries newer than `last_captured`. Note: direct email body search is limited; rely on meeting transcripts as the primary unstructured text source.\n\n**Source 3: CRM notes**\n\nCall `{{CRM_SEARCH_NOTES}}` filtering by `associations.deal = [deal_id]`, returning `{{CRM_FIELD_NOTE_BODY}}`, `{{CRM_FIELD_TIMESTAMP}}`, `{{CRM_FIELD_CREATED_BY}}`. Filter to entries newer than `last_captured`.\n\n**Data quality filters:**\n- Skip notes containing \"Auto Meeting Summary\" + `{{TRANSCRIPT_PROVIDER_DOMAIN}}` URL (inconsistency #2)\n- For meeting transcripts: skip meetings where the subject starts with \"Canceled:\", \"Cancelled:\", or \"Following:\" — these indicate cancelled or forwarded meeting invites with no real conversation content (inconsistency #17)\n\n### Step 3: Write raw signals for conversation content\n\nFor each meaningful conversation excerpt (transcript segment, email, note), write a raw signal:\n\n```sql\nINSERT INTO di_raw_signals (id, source_system, source_record_id, signal_type, deal_id, contact_id, raw_content, observed_at, captured_at, captured_by, confidence_tier, metadata)\nVALUES (\n  gen_random_uuid(),\n  '[crm|transcript]',\n  '[source-specific ID with deal_id — e.g., transcript_transcript_[uuid]_segment_[n]_deal_[deal_id] or crm_email_[id]_deal_[deal_id]]',\n  '[transcript_signal|email_signal|note_signal]',\n  '[deal_id]',\n  '[contact_id if attributable]',\n  '{\"text\": \"verbatim content or excerpt\", \"source_type\": \"transcript|email|note\", \"subject\": \"...\", \"speaker\": \"...\", \"is_rep\": true/false, \"direction\": \"inbound|outbound\"}'::jsonb,\n  '[when the conversation happened]',\n  NOW(),\n  'conversation-scanner',\n  '[high|medium|low]',\n  '{\"meeting_uuid\": \"...\", \"email_id\": \"...\"}'::jsonb\n);\n```\n\n**Critical:** `raw_content` must contain the actual text — verbatim quotes, email body, note text. The Deal Analyst pulls verbatim quotes from this field downstream. Do not store just metadata.\n\n### Step 4: Classify deal progression signals (F02)\n\nRead each conversation excerpt through F02's signal taxonomy. Classify every signal you find:\n\n**Positive signals:**\n- `Activation` — first sign of life, initial engagement, response to outreach\n- `Multiplication` — new stakeholders entering, internal referrals, broadening engagement\n- `Stage_Transition` — language indicating the deal is moving forward (\"we'd like to proceed\", \"let's set up a PoC\")\n- `Commitment` — time/resource/budget commitments (\"we've allocated budget\", \"I've blocked the team for the evaluation\")\n- `Acceleration` — executive engagement, compressed timelines, skipped process steps\n\n**Negative signals:**\n- `Stalling` — delays, postponements, reduced engagement (\"let's circle back next quarter\")\n- `Regression` — backward movement (\"we need to re-evaluate\", \"the committee wants to reconsider\")\n- `Restart` — re-engagement after stalling (positive in context but categorised with negative because it follows stalling)\n\nFor each signal found:\n\n```sql\nINSERT INTO di_signal_classifications (id, signal_id, framework_id, framework_version, dimension, classification, confidence, evidence_summary, classified_at, classified_by)\nVALUES (\n  gen_random_uuid(),\n  '[signal_id of the raw signal]',\n  'F02',\n  '[version]',\n  'deal_progression',\n  '[Activation|Multiplication|Stage_Transition|Commitment|Acceleration|Stalling|Regression|Restart]',\n  '[strong|moderate|weak]',\n  '[Verbatim quote or paraphrase + why this classifies as the given signal type]',\n  NOW(),\n  'conversation-scanner'\n);\n```\n\n**Critical:** Dimension is always `deal_progression`. Not `deal_motion`, not `signal_type`.\n\n### Step 5: Classify engagement intent (F04)\n\nFor each conversation, classify the engagement intent using F04:\n\n```sql\nINSERT INTO di_signal_classifications (id, signal_id, framework_id, framework_version, dimension, classification, confidence, evidence_summary, classified_at, classified_by)\nVALUES (\n  gen_random_uuid(),\n  '[signal_id]',\n  'F04',\n  '[version]',\n  'engagement_intent',\n  '[intent classification from F04]',\n  '[strong|moderate|weak]',\n  '[Why this intent level — context of the engagement, who was present, what was discussed]',\n  NOW(),\n  'conversation-scanner'\n);\n```\n\n### Step 6: Classify language posture\n\nFrom the most recent conversation for each deal, assess the buyer's language posture:\n\nPosture categories (from F02):\n- `exploring` — early curiosity, information gathering\n- `evaluating` — active comparison, criteria discussion\n- `committing` — moving toward decision, terms discussion\n- `stalling` — deferring, slowing down\n- `disengaging` — pulling away, non-responsive\n\nWrite as a classification on the most recent conversation signal:\n\n```sql\nINSERT INTO di_signal_classifications (id, signal_id, framework_id, framework_version, dimension, classification, confidence, evidence_summary, classified_at, classified_by)\nVALUES (\n  gen_random_uuid(),\n  '[most_recent_signal_id for this deal]',\n  'F02',\n  '[version]',\n  'deal_progression',\n  '[language_posture: exploring|evaluating|committing|stalling|disengaging]',\n  '[strong|moderate|weak]',\n  '[What language patterns indicate this posture — cite specific phrases]',\n  NOW(),\n  'conversation-scanner'\n);\n```\n\n### Step 7: Write traceability log\n\n```sql\nINSERT INTO di_traceability_log (id, entity_type, entity_id, action, reasoning, frameworks_consulted, input_data, output_data, logged_at, logged_by)\nVALUES (\n  gen_random_uuid(),\n  'signal',\n  '[UUID of last signal written in this run — use the id of the final di_raw_signals row inserted]',\n  'signal_captured',\n  '[Summary: processed N deals, read M transcripts, E emails, O notes. Classified P progression signals, I intent signals, L posture classifications]',\n  ARRAY['F02', 'F04', 'supabase-reading-guide'],\n  '{\"deals_processed\": N, \"transcripts_read\": M, \"emails_read\": E, \"notes_read\": O}'::jsonb,\n  '{\"signals_written\": S, \"classifications_written\": C, \"signal_types\": {\"Activation\": X, \"Commitment\": Y, ...}}'::jsonb,\n  NOW(),\n  'conversation-scanner'\n);\n```\n\n---\n\n## Pipeline Stage ID Resolution\n\n> **You must fill this table with your CRM's stage IDs.** See `guides/data-mapping-guide.md` for how\n> to pull your CRM schema and map stages. The stage IDs below are placeholders.\n\n| Order | Stage Label | Stage ID Placeholder |\n|-------|-------------|---------------------|\n| 0 | Farming / Nurture | `{{STAGE_FARMING}}` |\n| 1 | Prospect | `{{STAGE_PROSPECT}}` |\n| 2 | MQL | `{{STAGE_MQL}}` |\n| 3 | SAL (Sales Accepted Lead) | `{{STAGE_SAL}}` |\n| 4 | SQL (Sales Qualified Lead) | `{{STAGE_SQL}}` |\n| 5 | Evaluating | `{{STAGE_EVALUATING}}` |\n| 6 | Technical + DD | `{{STAGE_TECHNICAL_DD}}` |\n| 7 | Contract Negotiation | `{{STAGE_CONTRACT_NEGOTIATION}}` |\n| 8 | Ready to Invoice | `{{STAGE_READY_TO_INVOICE}}` |\n| 9 | Invoiced | `{{STAGE_INVOICED}}` |\n| 10 | Paid | `{{STAGE_PAID}}` |\n| -1 | Closed Lost | `{{STAGE_CLOSED_LOST}}` |\n| -2 | Disqualified | `{{STAGE_DISQUALIFIED}}` |\n| -3 | Stale | `{{STAGE_STALE}}` |\n\n---\n\n## Noise the Agent Will Encounter\n\nCRM and transcript provider contain data that is not relevant to deal analysis. See `crm-data-reading-guide.md` → Multi-Pipeline and Cross-Pipeline Awareness for full context. The following will appear in your data sources:\n\n| Noise Category | Where | What it looks like | What to do |\n|---------------|-------|-------------------|------------|\n| Partnership pipeline deals | CRM | Deals in a non-Sales pipeline. Partner orgs as companies. | Filter by pipeline. Only process Sales Pipeline deals. |\n| Partner contacts on prospect deals | CRM | CC'd on emails, present in meetings, referenced in notes. Context is about the referral/partnership, not the prospect's evaluation. | Do not classify partner-context language as deal progression signals. Note in traceability if significant. |\n| Vendor/supplier records | CRM | {{COMPANY_NAME}}'s own vendors. Procurement relationships. | Not prospects. Ignore entirely. |\n| Industry ecosystem contacts | CRM | Ecosystem relationships, not buying {{COMPANY_NAME}}. | Not in scope for deal analysis. Ignore. |\n| Internal calls and meetings | transcript provider | {{COMPANY_NAME}} team meetings, planning sessions, standups, retros. No prospect attendees. | Skip. Do not classify or extract signals from internal-only meetings. |\n\n---\n\n## Graceful Degradation\n\n- If transcript provider returns no meetings: process CRM emails and notes only. Note in traceability.\n- If CRM returns no emails or notes: process meeting transcripts only.\n- If no conversation content exists for a deal: write a signal noting \"No conversation content found\" with `low` confidence. This is itself a data point for the Assembler.\n- If F02 contains PLACEHOLDERs: flag which sections and classify using available taxonomy only.\n\n---\n\n## Scratchpad Observations\n\nWrite to `di_scratchpad` when you observe:\n- Language that doesn't fit F02's taxonomy cleanly\n- A signal that could be classified multiple ways with equal confidence\n- Conversation content suggesting a new signal type not in F02\n- A notable gap (e.g., deal at Evaluating stage with zero conversation content)\n\nUse `run_type: 'classification'`, `observation_type` from: `ambiguous_signal`, `framework_gap`, `edge_observation`, `contextual_note`.\n\n**Use ONLY these columns — do not invent others:**\n\n```sql\nINSERT INTO di_scratchpad (\n    id, run_id, run_type, observed_at, observation_type, observation,\n    deal_ids, signal_classification_ids, dimensions_involved,\n    pattern_type_hypothesis, reinforcement_count, status, source_skill\n) VALUES (\n    gen_random_uuid(),\n    '[run_id — generate once per run, reuse for all observations]',\n    'classification',\n    NOW(),\n    '[ambiguous_signal|framework_gap|edge_observation|contextual_note]',\n    '[Plain language description citing deal_id and what was ambiguous or notable]',\n    ARRAY['[deal_id]']::text[],\n    ARRAY['[classification_id if applicable]']::text[],\n    ARRAY['conversation_state']::text[],\n    NULL,\n    0, 'new', 'conversation-scanner'\n);\n```","tags":["conversation","scanner","deal","intelligence","violetfleming47","agent-skills","agentic-ai","agentic-workflow","ai-agents","ai-agents-framework","b2b-sales-automation","crm"],"capabilities":["skill","source-violetfleming47","skill-conversation-scanner","topic-agent-skills","topic-agentic-ai","topic-agentic-workflow","topic-ai-agents","topic-ai-agents-framework","topic-b2b-sales-automation","topic-crm","topic-intelligence","topic-revops","topic-revops-automation","topic-sales-analysis","topic-sales-ops"],"categories":["deal-intelligence"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/violetfleming47/deal-intelligence/conversation-scanner","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add violetfleming47/deal-intelligence","source_repo":"https://github.com/violetfleming47/deal-intelligence","install_from":"skills.sh"}},"qualityScore":"0.457","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 15 github stars · SKILL.md body (16,144 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:06:26.753Z","embedding":null,"createdAt":"2026-05-14T07:05:43.557Z","updatedAt":"2026-05-18T19:06:26.753Z","lastSeenAt":"2026-05-18T19:06:26.753Z","tsv":"'-1':1796 '-2':1802 '-3':1806 '0':1737,2208 '1':442,443,672,685,754,1742 '10':1792 '17':1031 '2':676,793,910,1003,1746 '3':819,958,1033,1750 '4':833,1188,1757 '5':871,1396,1764 '6':1468,1768 '7':1587,1774 '8':1780 '9':1788 'acceler':391,1263,1360 'accept':1753 'access':471 'action':1602 'activ':343,356,372,386,529,679,1210,1355,1496,1689 'actual':1164 'ad':785 'adapt':57 'add':148 'address':753,757,797,852 'ae':928 'agent':1812 'alloc':1253 'alongsid':857 'alreadi':823 'also':49 'alway':711,1386 'ambigu':2111,2173,2190 'analysi':1827,1953 'analyst':1174 'answer':201 'api':108 'appear':1844 'applic':2201 'around':213 'array':1661,2193,2197,2203 'assembl':240,626,2039 'assess':1480 'associations.deal':919,967 'attende':723,803,856,870,1971 'attribut':1122 'author':19,183 'auto':995 'automat':42 'avail':2050 'avoid':326 'awar':1837 'away':1512 'back':733,1281 'backward':1285 'block':1257 'bodi':943,974,1169 'boundari':199 'broaden':1226 'budget':1254 'build':241 'built':143 'built-in':142 'buy':20,184,1945 'buyer':412,1482 'c':1686 'cadenc':263,270 'call':109,457,694,798,891,913,961,1956 'cancel':1014,1015,1020 'captur':643,647,653,668,708,810,939,988,1075,1077,1639 'carri':445 'case':276,281 'categori':1487,1850 'categoris':1308 'cc':1888 'chang':110 'circl':1280 'cite':1579,2184 'classif':40,225,249,299,1324,1333,1415,1424,1443,1519,1531,1540,1660,1684,2107,2145,2171,2198 'classifi':13,177,219,250,274,398,410,1189,1203,1337,1339,1373,1397,1404,1428,1430,1469,1544,1546,1651,1910,1975,2048,2076 'clean':2070 'close':571,1797,1800 'column':613,2122 'commit':18,182,390,1248,1250,1359,1500,1567,1691 'committe':1294 'compani':163,849,868,1873,1927,1946,1961 'comparison':1497 'compress':1266 'confid':1079,1334,1425,1541,2030,2081 'connect':473,481,488 'consult':1605 'contact':245,751,762,784,1069,1119,1883,1940 'contain':994,1162,1819,2042 'content':333,346,359,522,664,683,767,788,904,1029,1039,1072,1125,1160,2015,2026,2083,2103 'context':1306,1453,1840,1898,1913 'contextu':2117,2179 'contract':1775,1778 'convers':2,43,52,138,160,212,403,656,682,1028,1038,1043,1144,1148,1196,1381,1403,1465,1476,1524,1584,1696,2014,2025,2082,2102,2204,2211 'conversation-scann':1,655,1147,1380,1464,1583,1695,2210 'could':2074 'count':2153 'creat':980 'criteria':1498 'critic':1158,1383 'crm':7,10,62,74,480,483,493,497,506,604,691,699,736,739,880,911,914,932,959,962,971,975,978,1086,1105,1709,1720,1815,1862,1887,1926,1941,1993,2002 'crm-data-reading-guide.md':1829 'crm-link':690,879 'crm-specif':61 'cross':307,1835 'cross-deal':306 'cross-pipelin':1834 'curios':1492 'current':414,559 'd':1238,1889 'daili':26 'data':246,460,989,1607,1609,1820,1847,2035 'databas':126,475,478 'date':706,714,808,815 'dd':1770,1773 'deal':14,45,166,178,205,215,289,308,311,376,505,527,530,533,545,547,549,555,562,588,596,598,617,629,634,640,660,680,702,737,760,779,920,968,1067,1093,1101,1102,1108,1109,1117,1173,1190,1233,1353,1387,1390,1479,1558,1561,1643,1668,1826,1861,1863,1881,1886,1916,1952,2019,2096,2142,2185,2194 'decis':1503 'dedupl':820 'defer':1507 'definit':408 'degrad':1985 'delay':1274 'deploy':71 'descript':2183 'detect':145,305,428 'di':34,38,288,294,297,301,335,348,361,532,554,587,616,633,649,772,1056,1322,1413,1529,1594,1633,2057,2130 'diagram':56 'dimens':1332,1384,1423,1539,2147 'direct':941,1138 'discuss':1462,1499,1505 'disengag':1510,1569 'disqualifi':574,1803,1805 'distinct':544,765 'doesn':2064 'domain':1000 'downstream':1181 'e':1647,1676 'e.g':1095,2095 'earli':1491 'ecosystem':1939,1942 'edg':2115,2177 'either':887 'email':8,174,724,752,756,768,770,789,796,804,805,851,860,912,926,942,1047,1106,1113,1131,1155,1168,1648,1674,1891,1994,2005 'empti':133 'encount':1814 'enforc':622 'engag':265,417,1216,1227,1265,1277,1301,1398,1406,1440,1456 'enter':632,1223 'entir':1937 'entiti':1598,1600 'entri':935,984 'equal':2080 'evalu':1262,1292,1495,1566,1765,1767,1907,2098 'everi':1204 'evid':1335,1426,1542 'excerpt':1044,1127,1197 'exclud':535 'exclus':592 'execut':669,1264 'exist':614,2016 'explicit':611 'explor':1490,1565 'extract':137,1977 'f02':340,375,1193,1199,1351,1489,1559,1662,2041,2067,2091 'f03':220 'f04':116,147,353,416,1400,1409,1438,1445,1663 'f07':261 'f10':285 'fallback':718,748 'farm':567,1738,1741 'fetch':889 'field':83,105,972,976,979,1180 'fill':1704 'filter':586,601,620,917,933,965,982,991,1874 'final':1632 'find':401,1207 'first':1211 'fit':2066 'flag':2044 'follow':1017,1313,1842 'forward':1022,1236 'found':436,839,1318,2027 'framework':125,315,319,324,336,338,349,351,362,364,373,674,1328,1330,1419,1421,1535,1537,1604,2113,2175 'frequenc':266 'friction':251,257 'full':234,524,907,1839 'gap':2094,2114,2176 'gather':1494 'gen':1083,1342,1433,1549,1615,2158 'generat':2163 'get':511,513,520,523,755,893,902 'given':1376 'grace':1984 'group':456,658 'guid':122,369,462,1667 'guides/data-mapping-guide.md':80,1714 'happen':1145 'hardcod':92 'hierarchi':426 'high':1150 'hypothesi':2151 'id':87,339,352,365,477,508,546,606,641,661,701,703,741,778,780,921,969,1059,1064,1068,1070,1091,1094,1103,1107,1110,1118,1120,1156,1325,1327,1329,1346,1416,1418,1420,1437,1532,1534,1536,1555,1597,1601,1629,1700,1712,1727,1735,2132,2134,2143,2146,2162,2186,2195,2199 'ignor':1936,1954 'inbound':1139 'includ':712 'inconsist':1002,1030 'increment':636 'indic':1019,1231,1576 'individu':320 'industri':1938 'inform':1493 'initi':1215 'input':1606 'insert':1054,1320,1411,1527,1592,1637,2128 'intellig':167 'intent':21,149,185,418,425,447,1399,1407,1441,1442,1451,1656 'intern':867,1224,1955,1981 'internal-on':1980 'invent':2125 'invit':1024 'invoic':578,584,1783,1787,1789,1791 'involv':2148 'iso8601':709,716,811,817 'job':233,260,273,284 'jsonb':1141,1157,1680,1693 'known':50 'l':1658 'label':1733 'languag':22,187,406,1230,1470,1484,1563,1574,1914,2062,2182 'larg':455 'last':646,667,707,809,938,987,1621 'lead':1754,1761 'least':847 'let':1242,1278 'level':1452 'life':1214 'like':1239,1855 'limit':330,946 'link':692,732,881 'list':499,501,696 'load':115,316,317,673 'log':303,925,1590,1596,1610,1612 'logic':98 'look':1854 'lost':572,1798,1801 'low':1152,2029 'm':1645,1673 'map':81,1723 'marker':69 'match':829 'max':642 'mcp':327,484,490,494 'meaning':1042 'measur':262 'medium':1151 'meet':5,444,500,502,517,686,693,697,721,727,801,822,831,838,845,863,875,885,896,898,949,996,1005,1008,1023,1153,1894,1958,1964,1983,1991,2009 'metadata':1081,1186 'moder':1365,1447,1571 'motion':1391 'move':1235,1501 'movement':1286 'mql':1747,1749 'multi':1831 'multi-pipelin':1830 'multipl':387,1220,1356,2077 'must':853,1161,1703 'n':1100,1642,1670 'name':84,106,164,465,479,850,869,1928,1947,1962 'need':1288 'negat':393,1271,1310 'negoti':1776,1779 'new':836,1221,2086,2209 'newer':665,936,985 'next':1282 'nois':1810,1849 'non':1514,1867 'non-respons':1513 'non-sal':1866 'notabl':2093,2192 'note':11,112,175,916,929,940,960,964,973,993,1048,1115,1132,1170,1650,1677,1897,1919,1996,1998,2007,2023,2118,2180 'null':792,2207 'nurtur':1739 'o':1649,1679 'object':253 'observ':1073,2054,2061,2108,2116,2137,2139,2141,2170,2178 'one':191,202,310,848,882 'oper':467 'opportun':507,700,740 'order':1731 'org':551,1871 'other':2126 'outbound':1140 'output':1608 'outreach':1219 'p':1652 'paid':580,1793,1795 'pain':17,181,438 'parallel':28,198 'param':509 'paraphras':1370 'partner':1870,1882,1912 'partner-context':1911 'partnership':627,1859 'pattern':146,309,429,1575,2149 'per':323,2165 'phrase':1581 'pipelin':55,168,538,585,595,603,605,612,628,1698,1832,1836,1860,1869,1876,1880 'placehold':68,90,1730,1736,2043 'plain':2181 'plan':1965 'poc':1247 'point':2036 'popul':591 'posit':1208,1304 'postpon':1275 'postur':23,188,407,1471,1485,1486,1564,1578,1659 'pre':537 'pre-pipelin':536 'present':152,209,1459,1892 'primari':688,744,827,953 'proceed':1241 'process':637,663,872,1269,1641,1669,1878,1992,2008 'procur':1932 'progress':15,46,179,206,377,1191,1354,1388,1562,1653,1917 'project':474,476 'properti':599 'prospect':569,844,859,1743,1745,1885,1905,1935,1970 'provid':77,487,730,999,1818,1960,1988 'pull':72,1175,1511,1718 'qualifi':1760 'qualiti':990 'quarter':1283 'queri':131,322,689,719,745,828,888 'question':203 'quot':1167,1177,1368 'random':1084,1343,1434,1550,1616,2159 'raw':35,295,650,773,1035,1051,1057,1071,1159,1349,1634 're':1291,1300 're-engag':1299 're-evalu':1290 'read':4,121,170,368,461,681,1194,1644,1666,1672,1675,1678 'reader':53,231,258,271,282,600 'readi':582,1781,1785 'real':1027 'reason':379,420,1603 'recent':1475,1523,1553 'reconsid':1297 'record':1063,1925 'reduc':1276 'referenc':1895 'referr':1225 'referral/partnership':1902 'regress':395,1284,1362 'reinforc':2152 'relationship':1933,1943 'relev':1824 'reli':947 'rep':1136 'requir':156 'resolut':1701 'respons':328,1217,1515 'restart':396,1298,1363 'result':134 'retro':1968 'return':132,824,923,970,1989,2003 'reus':2167 'role':222,224,248 'row':1636 'rs':775 'rs.deal':777 'rs.raw':766,787 'rs.signal':782 'rule':468 'run':25,196,746,1626,2105,2133,2135,2161,2166 'sal':1751,1756 'sale':594,1752,1759,1868,1879 'scanner':3,44,161,657,1149,1382,1466,1585,1697,2212 'schema':78,1721 'scope':528,1950 'scratchpad':2053,2058,2131 'search':749,800,915,944,963 'section':2046 'see':79,1713,1828 'segment':1046,1099 'select':332,345,358,543,639,764 'sequenc':670 'server':495 'session':1966 'set':1244 'shift':24 'sign':1212 'signal':16,36,39,47,139,180,207,296,298,378,384,435,651,774,1036,1052,1058,1065,1112,1114,1116,1192,1201,1205,1209,1272,1317,1323,1326,1345,1350,1377,1393,1414,1417,1436,1525,1530,1533,1554,1618,1622,1635,1638,1654,1657,1681,1687,1918,1978,2022,2072,2087,2112,2144,2174 'signific':1923 'singl':321 'six':193 'size':329 'skill':59,96,114,136,2156 'skill-conversation-scanner' 'skip':861,992,1007,1268,1972 'slow':1508 'sourc':609,684,909,956,957,1060,1062,1089,1128,1848,2155 'source-specif':1088 'source-violetfleming47' 'speaker':1134 'specif':63,1090,1580 'spotter':31,48,194 'sql':331,344,357,542,638,763,1053,1319,1410,1526,1591,1758,1763,2127 'srg':458 'stage':86,388,541,548,563,566,568,570,573,575,577,579,581,1228,1357,1699,1711,1724,1726,1732,1734,1740,1744,1748,1755,1762,1766,1771,1777,1784,1790,1794,1799,1804,1808,2099 'stakehold':221,230,1222 'stale':576,1807,1809 'stall':394,1273,1303,1314,1361,1506,1568 'stanc':415 'standup':1967 'start':1012 'starter':111,129,238 'state':243,290,534,556,589,618,635,2205 'statement':439,452 'status':342,355,371,2154 'step':671,675,1032,1187,1270,1395,1467,1586 'store':930,1184 'strength':433 'strong':1364,1446,1570 'structur':100 'subject':1011,1133 'suggest':2084 'summari':997,1336,1427,1543,1640 'supabas':120,367,459,472,1665 'supabase-reading-guid':119,366,1664 'synopsi':550 'system':235,1061 'tabl':470,1706 'taxonomi':385,1202,2051,2069 'team':1259,1963 'technic':1769,1772 'term':1504 'termin':540 'text':172,526,908,955,1123,1165,1171,2196,2202,2206 'tier':1080 'time':314 'time/resource/budget':1249 'timelin':1267 'timestamp':977 'titl':242 'today':715,816 'tool':485,491 'topic-agent-skills' 'topic-agentic-ai' 'topic-agentic-workflow' 'topic-ai-agents' 'topic-ai-agents-framework' 'topic-b2b-sales-automation' 'topic-crm' 'topic-intelligence' 'topic-revops' 'topic-revops-automation' 'topic-sales-analysis' 'topic-sales-ops' 'toward':1502 'traceabl':302,1589,1595,1921,2000 'transcript':6,76,173,486,498,510,512,514,519,521,525,687,695,729,799,890,892,894,901,903,950,998,1006,1045,1087,1096,1097,1111,1130,1646,1671,1817,1959,1987,2010 'transit':389,1229,1358 'trigger':41 'true':560 'true/false':1137 'type':552,783,1066,1129,1378,1394,1599,1688,2088,2106,2109,2136,2140,2150 'univers':102 'unlink':720,837,874 'unstructur':171,954 'upstream':623 'url':1001 'use':140,275,280,374,382,404,423,463,750,1408,1627,2049,2104,2119 'utc':710,717,812,818 'uuid':518,832,897,899,1085,1098,1154,1344,1435,1551,1617,1619,2160 'valu':64,1082,1341,1432,1548,1614,2157 've':1252,1256 'vendor':1931 'vendor/supplier':1924 'verbatim':1124,1166,1176,1367 'verifi':840,873 'version':1331,1352,1422,1439,1538,1560 'via':482,489,738 'want':1295 'way':2078 'weak':1366,1448,1572 'weight':150,419,431,448 'without':247 'wrap':66 'write':32,286,292,1034,1049,1516,1588,2020,2055 'written':1623,1682,1685 'x':1690 'y':1692 'zero':2101","prices":[{"id":"db257e71-3a4d-4ba4-a467-6f08a974feb9","listingId":"6a547567-2e4f-48ba-834a-c599c816a56c","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"violetfleming47","category":"deal-intelligence","install_from":"skills.sh"},"createdAt":"2026-05-14T07:05:43.557Z"}],"sources":[{"listingId":"6a547567-2e4f-48ba-834a-c599c816a56c","source":"github","sourceId":"violetfleming47/deal-intelligence/conversation-scanner","sourceUrl":"https://github.com/violetfleming47/deal-intelligence/tree/main/skills/conversation-scanner","isPrimary":false,"firstSeenAt":"2026-05-14T07:05:43.557Z","lastSeenAt":"2026-05-18T19:06:26.753Z"}],"details":{"listingId":"6a547567-2e4f-48ba-834a-c599c816a56c","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"violetfleming47","slug":"conversation-scanner","github":{"repo":"violetfleming47/deal-intelligence","stars":15,"topics":["agent-skills","agentic-ai","agentic-workflow","ai-agents","ai-agents-framework","b2b-sales-automation","crm","intelligence","revops","revops-automation","sales-analysis","sales-ops"],"license":"mit","html_url":"https://github.com/violetfleming47/deal-intelligence","pushed_at":"2026-05-10T19:50:43Z","description":"Turn CRM and transcript data into structured, versioned deal intelligence. 6 agents, 3 frameworks, harness-agnostic. Works with any CRM, any transcript provider, any LLM.","skill_md_sha":"1e4460ad591af4cc20d7725837b4dc4dc765994e","skill_md_path":"skills/conversation-scanner/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/violetfleming47/deal-intelligence/tree/main/skills/conversation-scanner"},"layout":"multi","source":"github","category":"deal-intelligence","frontmatter":{"name":"conversation-scanner","description":"Reads meeting transcripts, CRM emails, and CRM notes to classify deal progression signals — pain, commitment, authority, buying intent, language posture shifts. Runs daily in parallel with other spotters. Writes to di_raw_signals and di_signal_classifications. Triggered automatically on cadence, or manually via 'run conversation reader', 'scan conversations for [deal]', 'what signals are in [deal]'."},"skills_sh_url":"https://skills.sh/violetfleming47/deal-intelligence/conversation-scanner"},"updatedAt":"2026-05-18T19:06:26.753Z"}}