Sales Coaching

SkillCommunication

AI sales coach composite. Analyzes all available sales data, email campaigns, call recordings/transcripts, reply patterns, pipeline outcomes, to identify what the user does well, where they struggle, and how to improve. Finds patterns in top-performing emails, winning call techniques, successful objection handles, and deal progression. Produces personalized coaching recommendations based on their specific product, market, and selling style. Tool-agnostic.

Use Sales Coaching in Claude, ChatGPT or Ahel Desktop

Free. Sign in, add Sales Coaching and connect your AI. About a minute.

Also: Claude Code · Cursor · Codex

Then ask your AI: use the Sales Coaching skill

Details

Instructions available. Your AI can read the instructions. Execution depends on the setup they require.

Add Ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.

Sales CoachingStart free

What this skill tells your AI

The instructions your AI receives, as published by gooseworks-ai/goose-skills in skills/sales/composites/sales-coaching/SKILL.md and read by Ahel’s review.

An AI coach that studies everything you do in sales — your emails, your calls, your deals — finds the patterns in what works and what doesn't, and gives you specific, actionable coaching to get better.

This isn't generic sales advice ("always be closing"). It's coaching derived from YOUR data: your top-performing emails, your winning calls, your successful deal patterns, your most common objection fumbles, and your specific product's market.

What makes this different from sequence-performance:

CompositeFocusOutput
sequence-performanceHow is this campaign doing?Campaign metrics + copy diagnosis
sales-coachingHow can THIS person sell better?Personal skill assessment + coaching plan

The other composite analyzes the work. This one coaches the worker.

When to Auto-Load

Load this composite when:

  • User says "how can I improve my sales", "coach me", "what am I doing wrong", "sales coaching", "help me sell better"
  • User says "review my selling style", "analyze my calls", "what patterns do you see in my sales"
  • User asks "why am I losing deals", "why aren't people responding", "what are my best emails doing differently"
  • After a bad quarter/month and the user wants to diagnose personal performance
  • As a periodic (monthly/quarterly) self-improvement exercise

Step 0: Configuration (One-Time Setup)

User Profile

QuestionPurposeStored As
What is your role?Calibrate coaching leveluser_role
How long have you been in sales?Experience-appropriate adviceexperience_level
What do you sell? (product/service, 2-3 sentences)Context for all analysisproduct_description
What's your average deal size?Calibrate what mattersavg_deal_size
What's your typical sales cycle?Calibrate velocity expectationssales_cycle_days
What do you think your biggest weakness is?Starting point for coachingself_assessed_weakness

Role options:

  • "sdr" — Focus on prospecting, outreach, qualification, meeting booking
  • "ae" — Focus on discovery, demos, negotiation, closing
  • "founder" — Focus on everything (wearing multiple hats)
  • "sales_leader" — Focus on team patterns, not just individual

Data Sources

QuestionOptionsStored As
Where are your email campaigns?Smartlead / Instantly / Outreach / CSVemail_tool
Where are your call recordings/transcripts?Gong / Chorus / Fireflies / Otter / local files / nonecall_tool
Where is your pipeline?Salesforce / HubSpot / Pipedrive / Close / Supabasecrm_tool
Do you have call transcripts available?Yes (path or tool) / Notranscripts_available
How far back should we analyze?30 / 60 / 90 / 180 daysanalysis_window

Store config in the current working directory or wherever the user prefers.


Step 1: Collect Sales Data

Purpose: Pull all available sales data for analysis. The more data types available, the richer the coaching. But the system works with whatever is available.

Input Contract

data_sources: { ... }                 # From config
analysis_window: integer              # Days to look back
user_role: string                     # From config

Data Collection Matrix

Data TypeWhat to PullWhat It Reveals
Email campaignsAll campaigns in window — copy, metrics, repliesWriting quality, messaging effectiveness, personalization skill
Email repliesFull reply text, classificationObjection handling, how prospects respond to you
Call recordings/transcriptsFull transcripts or recordingsTalk-to-listen ratio, discovery skill, objection handling, closing technique
Pipeline dealsAll deals in window — stage, outcome, timelineDeal management, velocity, where deals stall or die
Meeting notesPost-call notes (if available)Follow-through, note-taking discipline
CalendarMeetings booked, held, no-showsTime management, meeting quality

Pull from each configured source:

Email Data
email_data: {
  campaigns: [
    {
      name: string
      date_range: { start: string, end: string }
      sequence: [
        {
          touch: integer
          subject: string
          body: string
          sent: integer
          opens: integer
          replies: integer
        }
      ]
      replies: [
        {
          sender: string
          sender_title: string
          reply_text: string
          category: string            # positive, objection, not interested, etc.
          touch_triggered: integer
        }
      ]
    }
  ]
  total_campaigns: integer
  total_emails_sent: integer
  total_replies: integer
  overall_reply_rate: percentage
}
Call Data
call_data: {
  calls: [
    {
      date: string
      prospect_name: string
      prospect_company: string
      call_type: string               # discovery, demo, follow-up, negotiation
      duration_minutes: integer
      transcript: string | null       # Full transcript if available
      recording_url: string | null    # Recording link if available
      outcome: string                 # "next step agreed", "no next step", "closed won", "closed lost"
      notes: string | null            # Post-call notes
    }
  ]
  total_calls: integer
  avg_duration: float
  outcome_distribution: { ... }
}
Pipeline Data
pipeline_data: {
  deals: [
    {
      name: string
      company: string
      stage: string
      created_date: string
      close_date: string | null
      outcome: "open" | "won" | "lost"
      loss_reason: string | null
      amount: number | null
      days_in_pipeline: integer
      source: string | null           # How the deal originated
      touches_before_close: integer | null
    }
  ]
  total_deals: integer
  win_rate: percentage
  avg_cycle_days: float
  avg_deal_size: number | null
}

Output Contract

collected_data: {
  email_data: { ... } | null
  call_data: { ... } | null
  pipeline_data: { ... } | null
  data_richness: "full" | "partial" | "minimal"
  data_summary: string                # "Analyzing X campaigns, Y calls, Z deals over N days"
}

Human Checkpoint

## Data Collected

| Source | Available | Volume |
|--------|-----------|--------|
| Email campaigns | Yes | X campaigns, Y emails sent, Z replies |
| Call transcripts | Yes/No | X calls, Y hours |
| Pipeline deals | Yes | X deals (W won, L lost, O open) |

Analysis window: [start] to [end]
Data richness: [full/partial/minimal]

Proceed with analysis? (Y/n)

Step 2: Analyze Email Performance Patterns

Purpose: Go beyond campaign-level metrics. Find patterns in what makes YOUR best emails work and YOUR worst emails fail. Pure LLM reasoning.

Process

A) Identify Top-Performing Emails

Across all campaigns, find:

  • Highest reply-rate subject lines — What do they have in common?
  • Highest reply-rate email bodies — What patterns exist?
  • Emails that generated positive replies — What specifically triggered interest?
  • Emails that generated meetings — The gold standard. What did these say?

For each top performer, extract:

Pattern ElementWhat to Look For
Subject line structureSignal-reference? Question? Peer-framing? Length?
Opening lineLead with them or with you? Signal reference? Question? Statement?
Body structureHow many paragraphs? Proof point placement? Length?
Personalization depthTier 1/2/3? What was personalized?
CTA typeSpecific ask? Open-ended? Time-bound?
ToneCasual? Professional? Provocative? Empathetic?
Framework usedPAS? BAB? Signal-Proof-Ask? AIDA?
Proof point typeCustomer name? Metric? Case study?
B) Identify Worst-Performing Emails

Same analysis on the bottom performers:

  • What do low-reply emails have in common?
  • Are there anti-patterns? (Long emails, generic openers, weak CTAs, no proof)
  • Is there a consistent flaw across campaigns?
C) Compare Winners vs. Losers
DimensionTop 20% EmailsBottom 20% EmailsGap
Avg word count[X][Y][shorter/longer]
Subject line length[X chars][Y chars][delta]
Opens with "I" or "We"[X%][Y%][self-focused vs. prospect-focused]
Contains proof point[X%][Y%][proof usage gap]
Personalization tier[avg tier][avg tier][personalization gap]
CTA clarity[assessment][assessment][delta]
Has signal reference[X%][Y%][signal usage gap]
D) Objection Pattern Analysis

Across all replies classified as objections:

AnalysisWhat It Reveals
Most common objectionWhat you're running into most often
Objection by campaign/audienceIs targeting driving objections?
How you handle each objection (from follow-up emails)Are your handles effective?
Objections that lead to meetings vs. dead endsWhich objections are actually handleable?
Objection language patternsExact words prospects use (copy these into your messaging)
E) Reply Sentiment Analysis
CategoryCount%Trend
Positive interestXY%+/- vs. earlier campaigns
Warm / curiousXY%
Objection (handleable)XY%
Objection (terminal)XY%
Not interestedXY%
Auto-replyXY%

Key question: Is the ratio of positive-to-negative replies improving over time? Are you getting better at writing emails that generate interest, or are you stagnating?

Output Contract

email_patterns: {
  top_performers: {
    common_patterns: string[]
    best_subject_lines: [ { subject: string, reply_rate: percentage, pattern: string } ]
    best_openers: [ { opener: string, campaign: string, why_it_works: string } ]
    winning_proof_points: string[]
    winning_ctas: string[]
    winning_tone: string
    winning_framework: string
  }

  bottom_performers: {
    common_anti_patterns: string[]
    worst_subject_lines: [ { subject: string, reply_rate: percentage, issue: string } ]
    common_mistakes: string[]
  }

  winner_vs_loser: {
    dimensions: [ { dimension: string, winners: string, losers: string, gap: string } ]
    biggest_differentiator: string
  }

  objection_patterns: {
    most_common: { objection: string, count: integer, handle_effectiveness: string }
    handleable_objections: [ { objection: string, best_handle: string, conversion_rate: string } ]
    terminal_objections: [ { objection: string, implication: string } ]
  }

  sentiment_trend: {
    direction: "improving" | "stable" | "declining"
    evidence: string
  }

  email_skill_grade: "A" | "B" | "C" | "D" | "F"
  email_skill_summary: string
}

Step 3: Analyze Call Performance Patterns

Purpose: If call transcripts or recordings are available, analyze how the user performs on calls. If no call data exists, skip this step.

Process

A) Structural Analysis (From Transcripts)

For each call transcript, measure:

MetricHow to CalculateWhat It Reveals
Talk-to-listen ratioWord count (you) / word count (prospect)>60% talking = talking too much. Best reps are 40-50% talk.
Longest monologueLongest uninterrupted stretch by the seller>90 seconds = you're lecturing, not selling. Keep it under 60s.
Question countNumber of questions askedDiscovery calls should have 10-15 questions. <5 = not discovering.
Question depthSurface questions ("What do you do?") vs. deep ("What happens when that process breaks?")Deep questions = strong discovery. Surface = going through motions.
Filler word frequencyCount of "um", "uh", "like", "you know", "basically", "honestly"High frequency = lack of confidence or preparation.
Call durationTotal timeToo short (<15 min for discovery) = not going deep enough. Too long (>45 min) = not controlling the call.
B) Discovery Quality Analysis

From call transcripts, evaluate:

DimensionWhat to CheckGood vs. Bad
Pain discoveryDid you uncover a real pain point?Good: Prospect describes pain in their own words. Bad: You told them what their pain should be.
Impact quantificationDid you help them quantify the cost of the problem?Good: "So that's costing you roughly $X/month." Bad: Never quantified.
Decision processDid you ask who else is involved, timeline, budget?Good: Clear understanding of BANT. Bad: Left the call not knowing.
Current stateDid you understand how they solve this today?Good: Know their current tool/process. Bad: No idea what they do now.
Compelling eventDid you identify why now?Good: Know the trigger (new leader, funding, deadline). Bad: No urgency established.
Next stepDid the call end with a clear, mutually agreed next step?Good: Specific date/time/action. Bad: "Let me think about it" or "I'll follow up."
C) Objection Handling on Calls

For each objection raised during calls:

AnalysisWhat to Evaluate
Was the objection acknowledged?Good: "I hear you, that's a valid concern." Bad: Immediately countering or ignoring.
Was it explored?Good: "Tell me more about that." Bad: Jumped straight to handle.
Was the handle relevant?Good: Addressed their specific concern. Bad: Generic response.
Was proof provided?Good: "Company X had the same concern, here's what happened." Bad: "Trust me."
Did the conversation move forward?Good: Objection resolved, back on track. Bad: Call stalled or ended.
D) Demo / Presentation Analysis

If demo calls exist:

DimensionWhat to Check
Feature dumpingDid you show every feature, or only what's relevant to their pain?
"So what?" testAfter showing a feature, did you connect it to their specific need?
Prospect engagementDid the prospect speak during the demo, or was it a monologue?
CustomizationWas the demo tailored to their use case, or generic?
Time on product vs. slidesWere you showing the actual product, or presenting slides?
E) Winning vs. Losing Call Patterns

Compare calls that led to progression (next step, closed won) vs. calls that stalled or lost:

DimensionWinning CallsLosing CallsGap
Talk-to-listen[ratio][ratio]
Questions asked[count][count]
Pain discovered[yes/no %][yes/no %]
Next step agreed[%][%]
Objections surfaced[count][count]
Call duration[avg min][avg min]

Output Contract

call_patterns: {
  structural: {
    avg_talk_ratio: percentage
    avg_longest_monologue_seconds: integer
    avg_questions_per_call: float
    filler_word_frequency: "low" | "moderate" | "high"
    common_fillers: string[]
    avg_call_duration: float
  }

  discovery_quality: {
    pain_discovery_rate: percentage    # % of calls where real pain was uncovered
    impact_quantification_rate: percentage
    decision_process_mapped_rate: percentage
    next_step_agreed_rate: percentage
    common_gaps: string[]             # What's consistently missed in discovery
  }

  objection_handling: {
    objections_per_call: float
    acknowledgment_rate: percentage   # % of times objection was properly acknowledged
    exploration_rate: percentage      # % of times the objection was explored before handling
    resolution_rate: percentage       # % of times the objection was successfully handled
    weakest_objection_type: string    # Which type of objection you handle worst
    best_objection_type: string       # Which type you handle best
  }

  demo_quality: {
    feature_dumping_detected: boolean
    prospect_engagement_level: "high" | "moderate" | "low"
    customization_level: "tailored" | "semi-generic" | "generic"
    common_demo_mistakes: string[]
  } | null

  winning_vs_losing: {
    key_differences: [ { dimension: string, winners: string, losers: string } ]
    biggest_predictor: string         # Single biggest differentiator between winning and losing calls
  }

  call_skill_grade: "A" | "B" | "C" | "D" | "F"
  call_skill_summary: string
} | null

Step 4: Analyze Deal Patterns

Purpose: Look at pipeline data to find patterns in deals you win vs. deals you lose. Pure computation + LLM reasoning.

Process

A) Win/Loss Pattern Analysis
DimensionWhat to Compare (Won vs. Lost)
Source channelWhich channels produce deals that close?
Lead persona/titleWhich titles convert to closed deals?
IndustryWhich verticals are you winning in?
Company sizeWhat size companies do you close best?
Deal sizeDo larger deals win more or less often?
Sales cycle lengthDo faster deals win more?
Number of touchesHow many interactions before close?
Stakeholders involvedSingle-threaded vs. multi-threaded
Competitive situationDo you win more in competitive or non-competitive deals?
B) Velocity Analysis
PatternWhat It Reveals
Stage where deals stall longestYour bottleneck — need to improve skill at this stage
Stage where most deals dieYour kill zone — what's going wrong here?
Deals that closed fastestYour "sweet spot" — what do easy wins have in common?
Deals that dragged longest before winningWhat made these hard? Can you avoid or accelerate?
C) Activity-to-Outcome Correlation
ActivityCorrelation with Winning
More emails before first callPositive, negative, or no correlation?
Faster first response timeDoes speed matter?
Multi-channel (email + LinkedIn + call)Do multi-channel deals win more?
Number of stakeholders contactedDoes multi-threading help?
Follow-up speed after callsDoes fast follow-up predict wins?

Output Contract

deal_patterns: {
  win_profile: {
    best_source: string
    best_persona: string
    best_industry: string
    best_company_size: string
    avg_winning_cycle_days: float
    avg_touches_to_close: float
    common_traits: string[]
  }

  loss_profile: {
    top_loss_reason: string
    loss_stage: string                # Where deals die most
    common_loss_traits: string[]
    recoverable_losses: string        # "X% of lost deals were timing — could be re-engaged"
  }

  velocity: {
    bottleneck_stage: string
    kill_zone_stage: string
    sweet_spot: string                # Description of your easiest wins
  }

  activity_correlations: [
    { activity: string, correlation: "positive" | "negative" | "none", insight: string }
  ]

  deal_skill_grade: "A" | "B" | "C" | "D" | "F"
  deal_skill_summary: string
}

Step 5: Build Skill Assessment & Coaching Plan

Purpose: Synthesize email, call, and deal analysis into a personal sales skill assessment and a specific coaching plan. Pure LLM reasoning.

Input Contract

email_patterns: { ... }              # From Step 2
call_patterns: { ... } | null        # From Step 3 (if calls available)
deal_patterns: { ... }               # From Step 4
user_role: string                    # From config
experience_level: string             # From config
product_description: string          # From config
self_assessed_weakness: string       # From config

Skill Assessment Framework

Assess the user across sales skill dimensions relevant to their role:

SDR Skill Dimensions
DimensionData SourceWhat to Evaluate
Prospecting qualityEmail targeting → reply relevanceAre you reaching the right people?
Email copywritingEmail patterns analysisAre your emails compelling?
PersonalizationEmail patterns analysisDo you go beyond merge fields?
Signal recognitionEmail campaign anglesAre you using relevant signals?
Objection handling (written)Reply analysis, follow-up emailsDo you handle objections well in email?
QualificationPipeline data — qualified vs. unqualified meetingsAre you booking quality meetings?
Follow-up disciplineCampaign structure, timing, sequence lengthDo you follow up effectively?
Volume & consistencyActivity metrics over timeAre you doing enough, consistently?
AE Skill Dimensions
DimensionData SourceWhat to Evaluate
DiscoveryCall transcripts — questions asked, pain uncoveredDo you uncover real pain?
Active listeningCall transcripts — talk ratio, prospect engagementDo you listen more than talk?
Demo effectivenessCall transcripts — feature relevance, engagementDo you demo to their pain?
Objection handling (verbal)Call transcripts — objection resolution rateDo you handle pushback well?
NegotiationDeal data — discount patterns, close ratesDo you protect value?
Deal managementPipeline data — velocity, stage progressionDo you move deals forward?
Multi-threadingDeal data — stakeholders contactedDo you go wide in accounts?
ClosingDeal data — win rate, next step agreementDo you close confidently?
Founder Skill Dimensions

All SDR + AE dimensions, plus:

DimensionData SourceWhat to Evaluate
StorytellingCall transcripts, email copyDo you tell a compelling product story?
Market positioningEmail angles, competitive mentionsDo you position well against competition?
AdaptabilityVariation across campaigns and callsDo you adapt your approach to different prospects?

Scoring

For each dimension, assign a grade:

GradeCriteria
ATop quartile performance. Clear strength. Data supports excellence.
BAbove average. Competent. Minor improvements possible.
CAverage. Functional but not differentiating. Clear room to grow.
DBelow average. Consistent issues visible in data. Needs focused work.
FSignificant weakness. Data shows this is hurting results. Priority fix.

Coaching Plan

For each dimension graded C or below, produce:

Skill: [dimension name]
Current grade: [grade]
Evidence: [specific data points that drive the grade]
Root cause: [why this is happening — not just what, but why]

Coaching recommendation:
1. [Specific, actionable thing to do differently]
2. [Exercise or practice to build this skill]
3. [Example from their own data of when they did this well vs. poorly]

Model to follow:
[Pull from their own top-performing emails/calls as examples.
"Your email in Campaign X did this perfectly — replicate that approach."]

Measurable goal:
[Specific metric to track improvement. E.g., "Increase question count per
discovery call from 6 to 12 over the next 30 days."]

Personalized Playbook

Distill the user's winning patterns into a personal playbook:

## Your Winning Formula

Based on analyzing [X emails, Y calls, Z deals], here's what works for YOU:

### Your Best Email Pattern
Subject line style: [pattern]
Opening approach: [pattern]
Proof point that resonates: [specific proof]
CTA that converts: [specific CTA]
Ideal length: [word count]
Best framework: [framework]

Shortened here. Read the whole file on GitHub.

Signals

GitHub stars
1k
Forks
211
Last commit
Oct 2026
Advanced
Item type
skill
Key
sales-coaching
Source
github.com/gooseworks-ai/goose-skills