skills/train/SKILL.md
Practice selling with role-play simulations, knowledge quizzes, and guided learning on your GTM library. Use when user says "role-play a call", "quiz me", "practice objections", "sales training", "test my knowledge", or asks for interactive learning.
npx skillsauth add octavehq/lfgtm trainInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Practice and learn your GTM playbooks and Motion ICPs through interactive role-play simulations and knowledge quizzes — all grounded in your real library data. Role-play against buyer personas with realistic objections, or quiz yourself on value props, competitive positioning, and discovery techniques.
/octave:train [mode] [--persona <name>] [--competitor <name>] [--difficulty easy|medium|hard]
/octave:train # Interactive - pick a mode
/octave:train roleplay # Simulate a buyer conversation
/octave:train roleplay --persona "CTO" # Role-play with a specific persona
/octave:train roleplay --scenario discovery # Practice discovery calls
/octave:train quiz # Test your GTM knowledge
/octave:train quiz --topic objections # Quiz on objection handling
/octave:train quiz --competitor "Acme" # Competitive knowledge check
When the user runs /octave:train:
If no mode specified, ask:
AskUserQuestion({
questions: [{
question: "What do you want to practice?",
header: "Train mode",
options: [
{ label: "Role-Play", description: "Simulate a sales conversation — I'll play the buyer and give you feedback" },
{ label: "Quiz", description: "Test your knowledge of personas, objections, value props, and competitive positioning" },
{ label: "Guided Learning", description: "Walk me through a topic from your Motion ICP narrative — teach me like I'm a new hire" }
],
multiSelect: false
}]
})
Simulate realistic buyer conversations using persona data from the library.
Ask for scenario parameters (use AskUserQuestion for structured choices):
AskUserQuestion({
questions: [
{
question: "What scenario do you want to practice?",
header: "Scenario",
options: [
{ label: "Discovery call", description: "First conversation — qualify the opportunity and uncover pain" },
{ label: "Objection handling", description: "Practice responding to tough objections mid-deal" },
{ label: "Demo pitch", description: "Present your product's value to a skeptical buyer" },
{ label: "Competitive displacement", description: "Sell against a competitor the buyer currently uses" }
],
multiSelect: false
},
{
question: "How tough should I be?",
header: "Difficulty",
options: [
{ label: "Friendly", description: "Interested buyer, open to learning — good for building confidence" },
{ label: "Skeptical (Recommended)", description: "Realistic buyer who pushes back and needs convincing" },
{ label: "Hostile", description: "Tough buyer — time-pressed, has objections, hard to impress" }
],
multiSelect: false
}
]
})
If no persona specified, present available personas:
# Get personas from library
list_all_entities({ entityType: "persona" })
Ask:
AskUserQuestion({
questions: [{
question: "Which buyer persona should I play?",
header: "Persona",
options: [
{ label: "[Persona 1 name]", description: "[Title] — [key concern]" },
{ label: "[Persona 2 name]", description: "[Title] — [key concern]" },
{ label: "[Persona 3 name]", description: "[Title] — [key concern]" }
],
multiSelect: false
}]
})
# Get full persona details
get_entity({ oId: "<persona_oId>" })
# Find the matching Motion ICP cell (persona × segment) for messaging context
list_motions()
list_motion_icps({ motionOId: "<motion_oId>" })
find_motion_icp({ motionIcpOId: "<motion_icp_oId>", includeLearnings: true })
# Get real objections from conversations (to make role-play realistic)
list_findings({
query: "objections pushback concerns",
startDate: "<180 days ago>",
eventFilters: {
personas: ["<persona_oId>"]
}
})
# Get product details
list_all_entities({ entityType: "product" })
get_entity({ oId: "<product_oId>" })
# Get competitor details (for competitive scenarios)
get_entity({ oId: "<competitor_oId>" }) // if competitive scenario
# Get proof points (to evaluate if rep uses them)
search_knowledge_base({ query: "<persona> results metrics", entityTypes: ["proof_point", "reference"] })
Present the scenario context, then begin:
See roleplay-scene-template.md for the role-play scene template.
How to play the buyer:
Use the loaded persona data to respond realistically:
End the conversation after 8-12 exchanges with a natural conclusion:
After the role-play ends, provide detailed feedback:
See roleplay-scorecard-template.md for the role-play scorecard template.
Test knowledge of the user's own GTM library.
AskUserQuestion({
questions: [{
question: "What do you want to be quizzed on?",
header: "Quiz topic",
options: [
{ label: "Personas", description: "Pain points, priorities, buying triggers, and how to sell to each persona" },
{ label: "Objection handling", description: "Common objections and how to respond — from your Motion ICP narratives and real conversations" },
{ label: "Competitive positioning", description: "Differentiators, trap questions, and counters for each competitor" },
{ label: "Full GTM review", description: "Mix of everything — personas, products, value props, objections, competitors" }
],
multiSelect: false
}]
})
Also ask for quiz format:
AskUserQuestion({
questions: [{
question: "What format?",
header: "Format",
options: [
{ label: "Rapid fire (Recommended)", description: "Quick question-answer, 10 questions, scored at the end" },
{ label: "Scenario-based", description: "Situational questions — 'A prospect says X, what do you do?'" },
{ label: "Deep dive", description: "Fewer questions but explain your reasoning — I'll coach you on each answer" }
],
multiSelect: false
}]
})
# Load based on topic
# For Personas:
list_all_entities({ entityType: "persona" })
get_entity({ oId: "<persona_oId>" }) // for each persona
# For Objections:
list_findings({
query: "objections pushback concerns pricing",
startDate: "<180 days ago>"
})
list_motions()
list_motion_icps({ motionOId: "<motion_oId>" })
find_motion_icp({ motionIcpOId: "<motion_icp_oId>", includeLearnings: true })
# For Competitive:
list_all_entities({ entityType: "competitor" })
get_entity({ oId: "<competitor_oId>" }) // for each competitor
# For Full GTM:
list_all_entities({ entityType: "persona" })
list_all_entities({ entityType: "product" })
list_all_entities({ entityType: "competitor" })
search_knowledge_base({ query: "value propositions proof points" })
list_all_entities({ entityType: "use_case" })
See quiz-formats.md for the rapid fire, scenario-based, and deep dive quiz format templates with question types per topic.
See quiz-results-template.md for the quiz results template.
Walk through a topic from the library like a training session.
AskUserQuestion({
questions: [{
question: "What do you want to learn about?",
header: "Topic",
options: [
{ label: "A persona", description: "Deep walkthrough of how to sell to a specific buyer type" },
{ label: "A competitor", description: "Learn competitive positioning, differentiators, and counters" },
{ label: "A Motion", description: "Walk through a Motion's Default Motion Playbook (persona × segment matrix) plus any Custom Motion Playbooks" },
{ label: "Your product", description: "Master your product's capabilities, use cases, and proof points" }
],
multiSelect: false
}]
})
Fetch the relevant entity and present it as a structured training walkthrough:
# Load the entity
get_entity({ oId: "<entity_oId>" })
# Load related Motion + ICP cell
list_motions()
list_motion_icps({ motionOId: "<motion_oId>" })
find_motion_icp({ motionIcpOId: "<motion_icp_oId>", includeLearnings: true })
# Load real conversation examples
list_findings({
query: "<topic>",
startDate: "<180 days ago>"
})
# Load proof points
search_knowledge_base({ query: "<topic>", entityTypes: ["proof_point", "reference"] })
See guided-learning-template.md for the interactive guided learning lesson template.
list_all_entities - List personas, products, competitors, use casesget_entity - Full entity details (persona pain points, competitor weaknesses, etc.)list_motions - List Motions in the workspacelist_motion_playbooks - List Motion Playbooks under a Motion (Default + Custom)get_motion_playbook - Full details for a Motion Playbooklist_motion_icps - List Motion ICP cells (persona × segment) for a Motionfind_motion_icp - Motion ICP narrative (Target ICP overview, Strategic narrative, Pains/Benefits, Methodology, References) + Learning Loop learningssearch_knowledge_base - Proof points, references, messaginglist_findings - Real objections, pain points, and signals from calls/emailslist_events - Deal outcomes (win/loss evidence for coaching)get_event_detail - Specific interaction details for training examplesgenerate_content - Generate scenario descriptions, coaching feedbackNo Personas in Library:
No personas found in your library.
Role-play and quizzes work best with persona data. Add personas first:
/octave:library create personaI can still run a general sales quiz using your product info.
No Conversation Data:
No conversation data available yet.
I'll use your library data for role-play and quizzes. As your team logs calls and emails, training will get richer with real-world objections and patterns.
No Competitors:
No competitors in your library.
Competitive quizzes and displacement role-plays need competitor data. Add competitors:
/octave:library create competitorI can still quiz you on personas, value props, and general objection handling.
Sparse Library:
Your library has limited data for a full training session.
Start with:
/octave:library create product- Add your product/octave:library create persona- Add buyer personas/octave:library create competitor- Add competitorsEven with just a product and one persona, I can run basic training.
/octave:enablement - Generate training materials (cheat sheets, objection guides, discovery banks)/octave:battlecard - Deep competitive intelligence for competitive training/octave:insights - Surface real field intelligence to inform training/octave:wins-losses - Win/loss patterns to learn from/octave:research - Research a real prospect before a live call/octave:generate - Generate real outreach after practicingtools
Capture a brand's visual design system from its website and build a reusable component kit. Walks key pages on a domain (screenshots + HTML via the Octave scrape tool), derives design tokens (colors, type, spacing, radius, shadow), and produces a minimal component library (buttons, cards, headers, stats, tables, badges, hero, footer) as a self-contained HTML reference plus CSS tokens. Use when the user says "get brand components", "capture the brand", "build a component kit for <domain>", "make outputs look like <company>", or wants other skills to generate on-brand HTML for a target company.
tools
Define, run, and manage multi-step GTM workflows with human-in-the-loop execution. Use when user says "run a workflow", "show workflows", "create a workflow", "automate this process", or references workflow-based tasks.
development
Analyze won and lost deals for patterns, insights, and actionable learnings. Use when user says "win/loss analysis", "why did we lose", "deal patterns", "win themes", or asks about deal outcome trends. Do NOT use for visual HTML reports — use /octave:win-loss-report instead.
development
Generate visual win/loss analysis reports as self-contained HTML with CSS-based charts and data visualizations. Use when user says "win/loss report", "deal report", "visual analysis", or wants a formatted HTML version of deal outcome analysis. Do NOT use for text-based deal analysis — use /octave:wins-losses instead.