| name | pipeline-review |
| description | Early warning system for active deals. Surfaces risks before they become lost deals: stakeholder silence, stalled next steps, competitor threats, deal velocity drops, MEDDPICC qualification gaps. Pulls signals from Attio, Gmail, Granola, and Google Calendar to produce a prioritized risk report with recommended actions. MANDATORY TRIGGERS: Use this skill whenever the user mentions "pipeline review", "deal risk", "deal health", "pipeline risk", "stale deals", "what's at risk", "deal warnings", "pipeline health check", "which deals need attention", "risk report", "deal alerts", or asks about deals that might be slipping, going dark, or losing momentum.
|
Pipeline Review
Surface deal risks as they emerge — before a winnable deal silently becomes a lost one.
Risk Categories
1. Engagement Risk (Stakeholder Silence)
Signals that key contacts have gone quiet:
| Signal | How to detect | Severity |
|---|
| No email in 14+ days | Gmail: search for threads with associated contacts, check last message date | HIGH if deal is In Progress/POC |
| No email in 7-13 days | Same as above | MEDIUM |
| No meeting in 21+ days | Granola: list_meetings + query_granola_meetings for company name | HIGH if In Progress |
| No upcoming meeting scheduled | Google Calendar: gcal_list_events searching for company/contact name | MEDIUM |
| One-sided communication | Gmail: check if last 2+ emails are outbound with no reply | HIGH |
2. Momentum Risk (Deal Velocity)
Signals that the deal is losing speed:
| Signal | How to detect | Severity |
|---|
| Stuck in stage 30+ days | Attio: compare created_at or stage change date vs today | HIGH |
| Stuck in stage 14-29 days | Same | MEDIUM |
| No deal value set | Attio: value field is empty | MEDIUM if past Lead stage |
| No associated people | Attio: associated_people is empty | HIGH |
| Next steps overdue | Attio: check tasks linked to deal with past deadlines | HIGH |
3. Competitive Risk
Signals that competition threatens the deal:
| Signal | How to detect | Severity |
|---|
| Competitor mentioned | Attio: meddpicc_competition field contains named competitors | MEDIUM |
| Build vs buy tension | Attio: meddpicc_competition mentions internal build | HIGH |
| "Do nothing" risk flagged | Attio: meddpicc_competition mentions "do nothing" | HIGH |
| Competition score 0 | Attio: meddpicc_competition starts with "0/4" — unknown landscape | MEDIUM (blind spot) |
4. Qualification Risk (MEDDPICC Gaps)
Signals that the deal is under-qualified for its stage:
| Stage | Expected strong (3-4) | Gap = risk if below 2 |
|---|
| POC | Pain, Metrics, Decision Criteria | Any of these below 2 = HIGH |
| In Progress | Pain, Metrics, Criteria, Competition | Any below 2 = HIGH |
| Signal | How to detect | Severity |
|---|
| MEDDPICC score = 0 | Attio: meddpicc_score is 0 or empty | CRITICAL — deal is unqualified |
| MEDDPICC score < 40 | Attio: meddpicc_score < 40 | HIGH |
| Key dimension at 0 for stage | Parse score from meddpicc_metrics, meddpicc_decision_criteria, meddpicc_competition | HIGH |
| No budget discussed | Attio: meddpicc_budget_total is empty AND stage is In Progress | MEDIUM |
5. Data Risk
Signals that you're flying blind:
| Signal | How to detect | Severity |
|---|
| No Granola meetings found | Granola returns empty for company name | MEDIUM |
| No Attio notes on deal | semantic-search-notes returns empty | MEDIUM |
| No Gmail threads | Gmail search returns empty | HIGH — no communication trail |
| All three empty | Combined | CRITICAL — ghost deal |
Workflow
Step 1: Identify Target Deals
If the user specifies deals, use those. Otherwise:
- Call
list-records with object: "deals" and filter for active stages (POC, In Progress).
- Collect all deal record IDs, names, stages, and associated contacts.
Step 2: Gather Signals (Per Deal)
For each deal, run these checks in parallel where possible:
2a. Attio Deal Data
get-records-by-ids to pull full deal record (MEDDPICC fields, value, stage, confidence, associated people/company, created_at)
list-tasks filtered to the deal to check for overdue tasks
list-comments on the deal for recent activity
2b. Email Activity
gmail_search_messages with the company name or associated contact emails
- Check the date of the most recent message
- Check if the last 2+ messages are outbound-only (no reply)
2c. Meeting Activity
query_granola_meetings with company name to find recent meetings
gcal_list_events searching for company/contact name to check for upcoming meetings
Step 3: Score Risks
For each deal, evaluate all risk categories and assign:
- CRITICAL — Immediate action needed. Deal is at serious risk of being lost.
- HIGH — Action needed this week. Multiple warning signs.
- MEDIUM — Monitor closely. Early warning signs present.
- LOW — On track. No significant risks detected.
Overall deal risk = highest individual risk found.
Count the number of HIGH+ signals to determine urgency ranking across deals.
Step 4: Generate Risk Report
Present a prioritized report, sorted by risk level (CRITICAL first):
## Pipeline Risk Report — {date}
### CRITICAL: {Deal Name}
**Stage:** {stage} | **Value:** {value} | **MEDDPICC:** {score}/100
**Days in stage:** {N}
Risk signals:
- {signal 1 with evidence}
- {signal 2 with evidence}
Recommended actions:
1. {specific action with timeline}
2. {specific action}
---
### HIGH: {Deal Name}
...
Step 5: Offer Actions
After presenting the report, offer:
- Re-engage a specific deal (hand off to
deal-reengagement skill)
- Score a call for a deal that needs MEDDPICC update (hand off to
meddpicc-post-call skill)
- Prep for a meeting with an at-risk account (hand off to
meeting-prep skill)
- Draft a follow-up email to break silence (hand off to
meeting-followup skill)
- Create tasks in Attio for the recommended actions
Attio MCP Tool Reference
| Task | Tool | Key parameters |
|---|
| List active deals | list-records | object: "deals", filter by stage |
| Get deal details | get-records-by-ids | object: "deals", record_ids |
| Check MEDDPICC fields | Already in deal record | Parse from attributes |
| List deal tasks | list-tasks | filter by linked deal |
| List deal comments | list-comments | parent_object: "deals", parent_record_id |
| Search notes | semantic-search-notes | query with company name |
Gmail MCP Tool Reference
| Task | Tool |
|---|
| Search for threads | gmail_search_messages (query with company/contact) |
| Read thread content | gmail_read_thread (thread_id) |
Granola MCP Tool Reference
| Task | Tool |
|---|
| Find meetings | query_granola_meetings (query with company name) |
| List recent meetings | list_meetings |
Google Calendar MCP Tool Reference
| Task | Tool |
|---|
| Check upcoming meetings | gcal_list_events (search for company/contact) |
Environment
| Variable | Source | Purpose |
|---|
| Attio | MCP (Attio connector) | CRM — deals, MEDDPICC, tasks, notes |
| Granola | MCP (Granola connector) | Meeting history |
| Gmail | MCP (Gmail connector) | Email engagement signals |
| Google Calendar | MCP (Google Calendar connector) | Upcoming meeting check |