Pull the full context on any Attio deal — stage, linked contacts, notes, open tasks — then diagnose where it's stuck and recommend the exact next action with a drafted message or talking points. Interactive review loop: Mitch approves, edits, or redirects before anything writes back to Attio. Supports --all-active for full pipeline review with a triage table first, --bulk-approve to fast-path obvious actions (overdue tasks, proposal follow-ups) without reviewing each deal individually, and --export to generate all deal briefs to a file. Use during weekly pipeline review, before calls, or when a deal has gone quiet. Triggers: deal review, pipeline review, next step, deal stuck, what should I do with this deal, follow up on deal, pre-call prep.
Pull the full deal context, diagnose the situation, recommend the next move, draft the outreach. Mitch reviews before anything writes back to Attio.
One of the following is required. Everything else is pulled from Attio.
| Input | Type | Notes |
|---|---|---|
deal_identifier | string | Deal name, linked contact email, or Attio deal record ID. The most specific identifier you have. |
--all-active | flag |
| Skip identifier. Run the skill across all deals not in Won or Lost. Used for full pipeline review sessions. |
--bulk-approve | flag | Used with --all-active. Fast-path obvious actions (overdue tasks, proposal follow-ups older than 5d, unanswered questions) without per-deal review. Flags complex actions (new proposals, re-engagement) for individual review. |
--export | flag | Generate all deal briefs and recommendations to temp/scratch/pipeline-review-YYYY-MM-DD.md. No Attio writes. No EmailBison calls. Use for pre-meeting prep or async review. |
--stage <name> | string | Filter --all-active to a specific pipeline stage (e.g. "Proposal Sent", "Discovery"). Useful when you only want to work one stage of the funnel. |
If a deal record ID is provided directly, skip search.
If a name is provided:
attio deals search "<deal_name>" --json --limit 5
If a contact email is provided, find the person first, then pull their linked deals:
attio people search "<email>" --json --limit 3
# Get PERSON_ID from response, then:
attio records list deals --filter '{"linked_record": {"target_object": "people", "target_record_id": "<PERSON_ID>"}}' --json
If multiple deals match, list them and ask Mitch to confirm which one before proceeding.
Extract data.id.record_id — this is DEAL_ID.
attio records get deals <DEAL_ID> --json
Extract and store:
deal_name — the deal's display namestage — current pipeline stage (e.g., "Discovery", "Proposal Sent", "Negotiation")value — deal value if setlinked_contacts — array of linked person record IDslinked_company — linked company record ID if setFor each person in linked_contacts (usually one, occasionally two):
attio records get people <PERSON_ID> --json
Extract: name, email, job title, company name.
If a company is linked to the deal:
attio records get companies <COMPANY_ID> --json
Extract: company name, domain, industry if available.
attio notes list --parent-object deals --parent-record-id <DEAL_ID> --json
Sort notes by created_at descending (most recent first). Read the full content of each note. Notes contain call summaries, email history, context from previous interactions.
Also pull notes on the linked person record to catch context logged there:
attio notes list --parent-object people --parent-record-id <PERSON_ID> --json
attio tasks list --not-completed --linked-object deals --linked-record-id <DEAL_ID> --json
Note any tasks that are overdue (deadline in the past). These signal dropped follow-ups.
Before diagnosis, load the following context files. These define what good looks like and what LeadGrow can offer.
leadgrow-hq/company/voice-guide.md — tone and writing rules for all outreach
leadgrow-hq/company/ICP.md — who we target, what their pain looks like
leadgrow-hq/company/offerings.md — what we sell, how we position it
Do not summarize these. Read them in full. They are the benchmark for the diagnosis and draft.
Analyze the deal state across four dimensions:
1. Time in stage
Calculate days_inactive from the most recent note timestamp instead — days_inactive = today - most_recent_note.created_at. Attio v2 does not expose stage_entered_at as a standard record attribute. Use note history as the proxy for stage engagement. Flag deals where days_inactive exceeds the thresholds below:
days_inactive > 7 with no next call scheduleddays_inactive > 5 with no response noteddays_inactive > 10 with no updatedays_inactive > 212. Last activity Find the most recent note across deal + person records. Calculate days since that note. If last activity > 14 days: deal is cold. If > 30 days: deal is likely dead — say so.
3. What's been discussed Read all notes and extract:
4. What's missing or blocking Identify the specific gap preventing the deal from advancing:
Based on the diagnosis, recommend one specific next action. Do not give a list of options. Pick the right move.
Use the recommendation logic below to decide.
Draft the outreach or talking points for that action. See Drafting Rules.
Display the deal brief and recommendation to Mitch. Wait for his input before any write operation.
See Review Interface for the display format.
Once Mitch approves (with or without edits):
Work through these in order. The first one that applies is the correct recommendation.
| Condition | Recommended Action |
|---|---|
| Overdue task exists on the deal | Action the overdue task first. Name it explicitly. |
| Commitment was made by LeadGrow and not fulfilled | Fulfill it. Draft the deliverable or the message sending it. |
| Prospect asked a question in the last note that was never answered | Answer it. Draft the response. |
| Proposal was sent > 5 days ago with no reply | Follow up on the proposal. Draft a short check-in. |
| Discovery call happened, no proposal sent | Recommend sending proposal. Draft it or flag that generate-proposal skill should run. |
| First touch made, no call scheduled | Recommend booking the discovery call. Draft the scheduling message. |
| Last activity > 14 days, deal in active stage | Soft re-engagement. Draft a reason-to-reach-out message. |
| Last activity > 30 days, no urgency signals | Flag the deal as likely cold. Recommend a final bump or closing it out. |
| Deal is in Negotiation with no timeline | Recommend creating a mutual action plan. Draft a "here's what next 2 weeks look like" message. |
| Deal is in Won or Lost | Don't recommend an outreach action. Recommend archiving or requesting a case study (Won) or logging the loss reason (Lost). |
When no condition applies cleanly: read the last note and draft whatever the natural next human response to it would be.
All outreach drafts must follow the LeadGrow voice guide. Non-negotiable rules:
For talking points (pre-call prep): bullet format is fine. 3-5 key points Mitch should hit, 2-3 questions to ask, any objections to expect based on the notes.
--all-active)When --all-active is set, Claude pulls all active deals before starting any review.
Before generating any per-deal briefs, run a rapid triage across all active deals. Display a summary table:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PIPELINE TRIAGE — 8 active deals
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Deal Stage Days Last Action Type
─ ───────────────── ─────────────── ───── ──────── ─────────────────────────
1 Acme Corp Proposal Sent 8d 8d ago 🔴 Overdue task: follow up on proposal
2 Boundless Discovery 3d 3d ago 🟡 No next call scheduled
3 Storylane Negotiation 15d 15d ago 🔴 No mutual action plan, no timeline
4 Tensorlake Proposal Sent 2d 2d ago ✅ Recently sent. Monitor.
5 Teachaid Discovery 1d 1d ago ✅ Call yesterday. Task exists.
6 Aurium Interested 30d 30d ago 🔴 Cold. Final bump or close out.
7 Vercel deal Proposal Sent 5d 5d ago 🟡 Proposal follow-up due
8 Findem Discovery 7d 12d ago 🟡 No call after first touch
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔴 = needs action now 🟡 = monitor/follow-up ✅ = no action needed
Process options:
[a] Review all deals (default)
[b] Bulk approve all 🔴 actions, skip ✅, review 🟡 individually
[s] Select deals by number (e.g. "1,3,6")
[x] Export full pipeline brief to file — no actions taken
> _
This triage table is generated from the data already pulled (deal stage + last note timestamp + open tasks). It does NOT require full note analysis for all deals — that happens per-deal as Claude works through them.
After triage, process each deal using the Review Interface below.
--bulk-approve with --all-active)When --bulk-approve is active, Claude fast-paths actions that match well-defined patterns without requiring per-deal review.
Auto-approved action types (no review needed):
Flagged for individual review:
After generating all auto-approved actions:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
BULK APPROVE SUMMARY — 8 deals analyzed
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
AUTO-APPROVE (3):
• Acme Corp — follow up on proposal (8d overdue)
• Storylane — proposal follow-up (sent 6d ago, no reply)
• Vercel deal — proposal check-in (5d no response)
NEEDS REVIEW (2):
• Aurium — cold 30d, final bump or close-out?
• Findem — no call after first touch (7d) — schedule discovery?
NO ACTION (3):
• Tensorlake, Teachaid, Boundless — active, no action needed
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Confirm auto-approve 3 actions? (y/n) _
On y: Execute auto-approve batch (tasks + EmailBison queue), then enter interactive review for the 2 flagged deals.
--export)Generate a full pipeline brief to:
C:/Users/mitch/Everything_CC/temp/scratch/pipeline-review-YYYY-MM-DD.md
File format:
# Pipeline Review — 2026-04-01
Generated: 8 deals | Active only (excl. Won/Lost)
---
## 1. Acme Corp — NEEDS ACTION
**Stage:** Proposal Sent (8 days) **Contact:** Sarah Chen ([email protected])
**Last activity:** 8 days ago
**Situation:** Proposal sent March 24. No reply. One overdue task: "Follow up on proposal" (due March 27).
**Recommendation:** Follow up on proposal — reference their Q1 close timing from the discovery call.
**Draft:**
Subject: Re: Acme proposal
Sarah,
Wanted to check if you had a chance to look over what we put together.
Q2 starts in a few weeks — if the timing works, I'd want to get you onboarded before the window closes.
Worth 20 minutes this week to go through any questions?
— Mitch
---
## 2. Boundless — MONITOR
...
Print file path. Nothing sends. No Attio writes.
Claude displays this before asking for input:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
DEAL: <deal_name>
Company: <company_name> Contact: <name> (<email>)
Stage: <stage> Last activity: <N> days ago
Value: <value or "not set">
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
SITUATION SUMMARY
<2-4 sentence summary of where the deal is and how it got here.
Based strictly on the notes. No invented context.>
WHAT'S BEEN DISCUSSED
<Bulleted extract: key pain points, signals, objections, open questions, commitments>
BLOCKERS
<Specific gap preventing the deal from advancing. One clear sentence.>
DIAGNOSIS
<One sentence: what this deal actually needs right now.>
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
RECOMMENDED NEXT ACTION
<Action verb + what to send/do + by when>
DRAFT
─────────────────────────────────────────────────────────────
<The email, message, or talking points. Full draft. Ready to use or edit.>
─────────────────────────────────────────────────────────────
What do you want to do?
[a] Approve — create task + queue message as-is
[e] Edit draft — paste your version, then approve
[d] Different action — tell me what you want instead
[s] Stage update only — advance the stage without sending
[skip] Skip this deal for now
Wait for input. Do not proceed until Mitch responds.
Create the task and (if a message is part of the action) queue it in EmailBison.
# Create task linked to the deal
attio tasks create \
--content "<recommended_action>" \
--deadline "<ISO_8601_deadline>" \
--linked-record '{"target_object": "deals", "target_record_id": "<DEAL_ID>"}' \
--json
If sending a message via EmailBison, route through the outbound:queue-message skill. Do not call EmailBison directly from this skill.
Mitch pastes the edited version. Claude confirms the edit is captured, then runs the same approve flow with the edited text.
Mitch states what he actually wants to do. Claude drafts for that action and presents a new review block. Do not loop more than twice — if Mitch redirects twice, just ask him to specify the exact text to use.
attio records update deals <DEAL_ID> \
--values '{"stage": "<new_stage>"}' \
--json
Confirm the update. No task creation unless Mitch requests it.
Log nothing. Move to the next deal (in pipeline review mode) or exit (in single-deal mode).
On completion of each deal, print a summary line:
Dealt — <deal_name>: <action taken>
Task: "<task_content>" due <deadline> [task_id]
Message: queued in EmailBison [or "not sent"]
Stage: <updated_stage> [or "unchanged"]
In pipeline review mode (--all-active), print a session summary at the end:
PIPELINE REVIEW COMPLETE
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
<N> deals reviewed
<N> tasks created
<N> messages queued
<N> deals flagged as cold
<N> skipped
Load these before Step 7 (Diagnosis). Read in full.
| File | Why |
|---|---|
leadgrow-hq/company/voice-guide.md | Draft outreach in Mitchell's voice. Non-negotiable. |
leadgrow-hq/company/ICP.md | Understand what good-fit pain looks like. Helps calibrate urgency and blockers. |
leadgrow-hq/company/offerings.md | Know what we can offer at each stage. Needed if recommending a proposal or scoping a follow-up. |
| Command | Purpose |
|---|---|
attio deals search "<name>" --json --limit 5 | Find deal by name |
attio people search "<email>" --json --limit 3 | Find person by email to resolve linked deals |
attio records list deals --filter <json> --json | List deals linked to a person |
attio records get deals <DEAL_ID> --json | Pull full deal record |
attio records get people <PERSON_ID> --json | Pull linked contact details |
attio records get companies <COMPANY_ID> --json | Pull linked company details |
attio notes list --parent-object deals --parent-record-id <id> --json | All notes on the deal |
attio notes list --parent-object people --parent-record-id <id> --json | Notes on the linked person |
attio tasks list --not-completed --linked-object deals --linked-record-id <DEAL_ID> --json | Open tasks linked to the deal |
attio tasks create --content <text> --deadline <iso8601> --linked-record <json> --json | Create next-action task |
attio records update deals <DEAL_ID> --values <json> --json | Update deal stage |
Clear division of labor:
| Responsibility | Claude | CLI |
|---|---|---|
| Resolve deal from name or email | Yes (decides which command to run) | No |
| Filter tasks to target deal (client-side) | Yes | No |
| Read notes and synthesize situation | Yes | No |
| Apply recommendation logic | Yes | No |
| Draft outreach in LeadGrow voice | Yes | No |
| Display review interface and wait for input | Yes | No |
| Convert natural language deadlines to ISO 8601 | Yes | No |
| Execute all API writes (tasks, stage updates) | No | Yes |
| Handle auth, retries, rate limiting | No | Yes |
| Route messages to EmailBison | Delegates to outbound:queue-message skill | No |
User: "What's next with the Storylane deal?"
Claude: Searches for deals linked to storylane.io or the known contact email.
Pulls deal record, notes, open tasks.
Loads voice + ICP + offerings.
Diagnoses: Proposal was sent 8 days ago. No reply. One open task (overdue by 3 days): "Follow up on proposal."
Recommends: Follow up on proposal with a specific hook from the discovery call notes.
Drafts the message.
Presents review interface.
Mitch: [a]
Claude: Creates task "Follow up on proposal — 2026-04-03" linked to Storylane deal. Queues message.
Prints: Dealt — Storylane: task created + message queued.
User: "Let's do the pipeline review."
Claude: Runs attio records list deals (all non-Won, non-Lost) --json.
Works through each deal one at a time.
For each: pulls notes, tasks, diagnoses, recommends, presents review block.
Mitch approves, edits, or skips each.
After all deals: prints session summary.
User: "Prep me for my call with Tensorlake at 2pm."
Claude: Pulls Tensorlake deal record and all notes.
Diagnosis: They asked about our reporting cadence and wanted a sample report. That was 5 days ago and never sent.
Recommendation: Bring a sample report to the call. Cover their reporting question directly. Push for a decision or a scoped trial.
Draft: 5 talking points + 3 questions to ask + 2 objections to expect.
No task is created unless Mitch approves post-call.
| Scenario | Behavior |
|---|---|
| No deal found for identifier | Surface the exact search used, return zero-results message, ask for a more specific identifier. Do not guess. |
| Multiple deals match the identifier | List all matches (name, stage, contact) and ask Mitch to pick one. |
| Deal has no notes | Flag it. Diagnosis proceeds with "no prior history" noted. Recommendation defaults to "schedule discovery call" or "make first contact" depending on stage. |
| Deal is Won or Lost | State the outcome and do not recommend outreach. Offer: log a loss reason (Lost) or request a case study (Won). |
| Voice guide or offerings file missing | Halt and report the missing file path. Do not draft without the voice guide. |
attio tasks create fails | Log the error and the task content. Ask Mitch if he wants to retry or note it manually. Do not silently skip. |
| Stage update fails | Surface the error. The task may still be created. Report both outcomes separately. |