Systems Lab

Agent skill

generate

Generate GTM content (emails, LinkedIn messages, call prep) using saved agents, Octave AI, or Claude direct — your choice.

activeSelf-containedInstructions only1,830 words

Filed under Outbound email.

From octavehq/lfgtm · 27 skills · 11 · pushed 2026-08-21

What it does when it runs

Generate GTM content (emails, LinkedIn messages, call prep) using saved agents, Octave AI, or Claude direct — your choice. Use when user says "generate an email", "write a LinkedIn message", "prep for a call", "create outreach", or asks for single-asset content generation with mode selection.

Read from the skill and the 0 files bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.

Keys and connectors you must supply
None found.
Hosts it reaches
No third-party host appears in the skill or its bundled files.
Tool permissions it declares
No allowed-tools in the frontmatter. It only issues instructions, so there is nothing to bound.
Actions present in the files
None. Instructions only.

Ask about generate

Opens your assistant with this page's verified links already in the prompt.

Is this safe to install?ClaudeChatGPT
Adapt it to my stackClaudeChatGPT
What else do I need for it to workClaudeChatGPT
Rather ask a human? Talk to Cheetah
git clone --depth 1 --filter=blob:none --sparse https://github.com/octavehq/lfgtm.git /tmp/lfgtm
git -C /tmp/lfgtm sparse-checkout set "skills/generate"
mkdir -p ~/.claude/skills/generate
cp -R "/tmp/lfgtm/skills/generate/." ~/.claude/skills/generate/

Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗

Or take the whole library

This repo ships a .claude-plugin manifest, so Claude Code can install all 27 skills at once. Plugin skills are invoked as /<plugin>:<skill>, so they never collide with your own.

/plugin marketplace add octavehq/lfgtm
/plugin

The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.

Reproduced in full from octavehq/lfgtm/blob/88c5cdb1899aec05dc17e9fabd61e6e376598cd6/skills/generate/SKILL.md, which is licensed MIT (repository). 1,830 words, 39 headings.

/octave:generate - GTM Content Generator

Generate GTM content using your Octave library context. Choose how to generate: run a saved agent for consistency, use Octave's built-in AI, or have Claude draft it directly with Octave context.

Principles

Follow these standards during generation. Read each before producing output.

Content and language:

Presentation:

  • Presentation principles — use for any visual output (HTML, dashboards, tables); text follows the editorial rules above

Octave data:

  • Octave value — prioritize grounded workspace data over generic AI content
  • Octave research toolkit — tool selection (list vs. search) and standard error handling when gathering context for Mode B/C
  • Entity model — canonical entity types and oId prefixes referenced throughout (persona, product, Motion, Motion ICP, etc.)

Review:

  • For Mode C (Claude Direct), the content is Claude's own draft: run the review from protocol.md before presenting it — for HTML output the protocol is a mandatory gate; for text output run the preflight and the editorial checks. Modes A and B hand generation to a saved agent or Octave's own generation tools, so the protocol's reviewer pass doesn't apply — those outputs still get the Step 4/5 present-and-refine loop below.

Usage

/octave:generate <type> [options] [--mode agent|octave|claude]

Content Types

Email Sequences

/octave:generate email --to "<person>" --about "<topic>" [--persona "<persona>"] [--motion "<motion>"]

Example:

/octave:generate email --to "John Smith, VP Engineering at Acme" --about "reducing deployment time"

LinkedIn Messages

/octave:generate linkedin --to "<person>" --about "<topic>" [--type connection|inmail|follow-up]

Example:

/octave:generate linkedin --to "Sarah Chen, CTO" --about "DevOps automation" --type connection

Call Prep

/octave:generate call-prep --for "<person/company>" [--motion "<motion>"] [--focus "<topics>"]

Example:

/octave:generate call-prep --for "Meeting with Acme Corp engineering team" --focus "security, scalability"

General Content

/octave:generate content --type "<content-type>" --about "<topic>" [--persona "<persona>"]

Example:

/octave:generate content --type "objection handling" --about "pricing concerns" --persona "CFO"

Generation Modes

Three ways to generate content, each with different trade-offs:

ModeBest ForHow
Saved AgentConsistency, team standards, repeatable sequenceslist_agentsrun_*_agent
Octave DefaultBalanced quality + library groundinggenerate_email / generate_content / generate_call_prep
Claude DirectMaximum control, rapid iteration, custom formatsFetch Octave context, Claude generates directly

Smart Inference Rules

Skip the mode question when intent is obvious:

  • "Run my cold outreach agent" / "use the enterprise agent" → Saved Agent
  • "Generate an email for..." / "create a sequence" → Octave Default
  • "Write me an email using our Motion narrative" / "draft this yourself" / "I want more control" → Claude Direct

When Ambiguous, Ask (via AskUserQuestion tool)

When the mode is not obvious from the request, always use the AskUserQuestion tool to present the three options as a UI selector. Never silently default to one mode — let the user choose.

Instructions

When the user runs /octave:generate:

Step 1: Parse the Request

Identify:

  • Content type (email, linkedin, call-prep, content)
  • Target person/company if specified
  • Topic or context
  • Optional constraints (persona, Motion, etc.)
  • Generation mode (if --mode flag or clear intent)

Step 2: Determine Generation Mode

Apply smart inference rules from the request wording:

  • "Run my cold outreach agent" / "use the enterprise agent" → Saved Agent (skip the question)
  • "Draft this yourself" / "I want more control" / "write it yourself" → Claude Direct (skip the question)

If mode is not obvious from the request, use the AskUserQuestion tool to ask — do NOT default silently:

AskUserQuestion({
  questions: [{
    question: "How should I generate this?",
    header: "Gen mode",
    options: [
      { label: "Use a saved agent", description: "I'll find matching agents from your library for consistency and team standards" },
      { label: "Generate with Octave (Recommended)", description: "Octave AI generates using your library context — balanced quality" },
      { label: "I'll draft it directly", description: "I'll pull Octave context, then write it myself — maximum control" }
    ],
    multiSelect: false
  }]
})

IMPORTANT: Do not skip this question by defaulting to Octave. If the user didn't explicitly indicate a mode, you MUST ask using AskUserQuestion.

Step 3: Generate (branch by mode)


Mode A: Saved Agent

Map the content type to an agent type and find matching agents:

Content TypeAgent Type
emailEMAIL
linkedinCONTENT
call-prepCALL_PREP
contentCONTENT
# Find matching agents
list_agents({ type: "<mapped_type>" })

If agents found, present them:

MATCHING AGENTS
===============

1. [Agent Name] — [Description]
   Run: Select this agent

2. [Agent Name] — [Description]
   Run: Select this agent

Which agent? (or switch to Octave default / Claude direct):

Run the selected agent:

For Email Agents:

run_email_agent({
  agent: "<agent name or oId>",
  person: {
    firstName: "<first name>",
    lastName: "<last name>",
    email: "<email>",
    linkedInProfile: "<linkedin url>",
    companyName: "<company>",
    companyDomain: "<domain>",
    jobTitle: "<title>"
  },
  allEmailsContext: "<additional context>",
  allEmailsInstructions: "<instructions>"
})

For Content Agents:

run_content_agent({
  agent: "<agent name or oId>",
  person: { ... },
  company: { ... },
  runtimeContext: "<additional context>"
})

For Call Prep Agents:

run_call_prep_agent({
  agent: "<agent name or oId>",
  person: { ... },
  meetingContext: "<meeting details>"
})

If no agents found:

No [type] agents found in your library.

Options:
1. Generate with Octave (default AI)
2. I'll draft it directly (Claude + Octave context)
3. Browse all agents with the `list_agents` tool

Your choice:

Mode B: Octave Default

Gather context, then call Octave's generation tools directly.

Gather Context:

  • If person specified, use find_person to get details
  • If company specified, use find_company to get company info
  • Use search_knowledge_base to get relevant messaging
  • Match to appropriate persona and Motion ICP cell
  • See octave-research-toolkit.md for the full list/search tool tables and standard error-handling responses (Octave connection failed, person/company not found, no matching Motion ICP cell, no proof points, no findings)

For Email Sequences:

generate_email({
  person: {
    firstName: "<first name>",
    lastName: "<last name>",
    email: "<email>",
    linkedInProfile: "<linkedin url>",
    companyName: "<company>",
    title: "<job title>"
  },
  allEmailsContext: "<context for all emails>",
  allEmailsInstructions: "<instructions for all emails>",
  numEmails: 4
})

For General Content (including LinkedIn):

generate_content({
  instructions: "<detailed instructions for content generation>",
  customContext: "<additional context>",
  person: { /* optional person details */ },
  company: { /* optional company details */ }
})

For Call Prep:

generate_call_prep({
  person: {
    firstName: "<first name>",
    lastName: "<last name>",
    email: "<email>",
    linkedInProfile: "<linkedin url>",
    companyName: "<company>",
    jobTitle: "<job title>"
  },
  meetingContext: "<meeting details and focus areas>"
})

Mode C: Claude Direct

Gather the same Octave context, but Claude generates the content itself — no generate_* MCP calls.

See entity-model.md for the canonical entityType values and oId prefixes used below (persona pe_, product px_, service sc_, competitor cp_, proof point pp_, Motion mot_, Motion ICP micp_).

Gather Context (same as Octave Default):

# Get persona details
search_knowledge_base({ query: "<topic> <persona>", entityTypes: ["persona"] })
get_entity({ oId: "<persona_oId>" })

# Get product details
list_entities({ entityType: "product" })
get_entity({ oId: "<product_oId>" })

# Find the matching Motion + Motion ICP cell for this topic and persona
list_motions()
list_motion_icps({ motionOId: "<motion_oId>" })
find_motion_icp({ motionIcpOId: "<motion_icp_oId>", includeLearnings: true })

# Get proof points
search_knowledge_base({ query: "<topic>", entityTypes: ["proof_point", "reference"] })

# Get brand voice
list_entities(entityType: "brand_voice")

# Get competitive positioning if relevant
search_knowledge_base({ query: "<topic>", entityTypes: ["competitor"] })

Generate directly:

  • Apply brand voice guidelines to tone and style
  • Use value props as messaging anchors
  • Incorporate proof points as evidence
  • Structure based on content type (email format, LinkedIn format, call prep format, etc.)
  • Claude has full control over structure, length, and approach

Label the output:

[Content here]

---

Generated by Claude (with Octave context)
Sources: [persona name], [Motion name + Motion ICP cell], [proof points used], [brand voice]

Step 4: Present Generated Content

Format the output clearly with:

  • The generated content
  • Context used (persona, Motion ICP cell, brand voice, etc.)
  • Generation mode used
  • Suggestions for customization

Step 5: Offer Refinement

What would you like to do?

1. Adjust tone or messaging
2. Add more proof points
3. Create version for a different persona
4. Try a different generation mode
5. Done

Your choice:

Tips

  • Provide as much context as possible for better results
  • Specify the persona if you know who you're targeting
  • Use /octave:research first if you need more info about the recipient
  • Use --mode agent for repeatable, team-standard sequences
  • Use --mode claude when you want maximum control over the output

Examples

Quick Email

/octave:generate email --to "engineering leader" --about "reducing CI/CD pipeline time"

Using a Saved Agent

/octave:generate email --to "[email protected]" --mode agent

Claude Direct with Full Control

/octave:generate email --to "Sarah Chen, CTO at TechCorp" --about "DevOps automation" --mode claude

Detailed Email with Context

/octave:generate email --to "Mike Johnson, VP Eng at TechCorp (500 employees, Series B)" --about "improving developer productivity" --persona "Engineering Leader" --motion "Enterprise DevOps Outbound"

Call Prep

/octave:generate call-prep --for "Discovery call with Acme Corp" --focus "security compliance, scalability"

MCP Tools Used

Agent Discovery & Execution

  • list_agents - Find matching saved agents by type
  • run_email_agent - Run a saved email sequence agent
  • run_content_agent - Run a saved content generation agent
  • run_call_prep_agent - Run a saved call prep agent

Context Gathering

  • find_person / find_company - Research recipients
  • search_knowledge_base - Find relevant messaging, proof points, personas
  • get_entity - Get full entity details (persona, product, competitor)
  • list_motions - List all Motions in the workspace
  • list_motion_icps - List Motion ICP cells (persona × segment intersections) for a Motion
  • find_motion_icp - Get full Motion ICP cell narrative (Target ICP overview, Strategic narrative, Pains and consequences, Benefits and impacts, Methodology, References) plus Learning Loop learnings
  • list_motion_playbooks - List Default + Custom Motion Playbooks under a Motion (when a Thematic / Milestone / Account / Competitive angle applies)
  • get_motion_playbook - Full details for a Motion Playbook
  • list_entities (entityType: "brand_voice") - Get brand voice for consistency

Octave Generation

  • generate_email - Email sequence generation (Octave Default mode)
  • generate_content - General content generation (Octave Default mode)
  • generate_call_prep - Call preparation generation (Octave Default mode)

Related Skills

  • Browse and run saved agents with the list_agents / run_agent MCP tools
  • /octave:research - Research recipients before generating
  • /octave:library - Save successful messaging patterns back to library
  • /octave:ads - Ad campaign creative grounded in the library
  • /octave:one-pager / /octave:deck - Deep-dive collateral
  • /octave:positioning - Build messaging frameworks to inform outreach

Need help setting it up?

This page tells you what generate does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.

Book a call →

The directory stays free. There is nothing gated behind this.