one-pager
npx skills add https://github.com/octavehq/lfgtm --skill one-pager
Agent 安装分布
Skill 文档
/octave:one-pager – Personalized One-Pager Builder
Generate personalized, self-contained HTML one-pager documents (leave-behinds) powered by your Octave GTM knowledge base. Unlike generic templates, this skill enriches every section with real account intelligence — company signals, persona pain points, playbook messaging, and proof points — to create a document that feels written specifically for the recipient.
One-pagers are single scrollable pages designed to be sent after a demo, meeting, or call. They summarize why your product is a fit for this specific account. Think of it as the document you email or print, not present.
Usage
/octave:one-pager <target> [--for <occasion>] [--style <preset>]
Examples
/octave:one-pager acme.com # General one-pager for Acme
/octave:one-pager jane@acme.com --for demo-followup # Post-demo leave-behind
/octave:one-pager acme.com --for discovery # Post-discovery summary
/octave:one-pager "enterprise healthcare segment" # Segment-level one-pager
/octave:one-pager acme.com --for renewal --style soft-light # Renewal doc with specific style
/octave:one-pager jane@acme.com --for event-followup # Post-conference/event follow-up
Occasions
| Occasion | Output Focus |
|---|---|
demo-followup |
Recap what was shown, reinforce value, clear next steps |
discovery |
Summarize pain points heard, position solution fit |
intro |
General company intro tailored to the account (default) |
event-followup |
Post-conference/event personalized summary |
renewal |
Reinforce value delivered, expansion opportunities |
Instructions
When the user runs /octave:one-pager:
Step 1: Understand the Context
If not provided via flags, ask the user interactively:
Target — “Who is this for?”
Who is this one-pager for?
Provide any of the following:
- Company domain (e.g., acme.com)
- Person email (e.g., jane@acme.com)
- Segment description (e.g., "enterprise healthcare")
Target:
Occasion — “What’s the context?”
What's the occasion for this one-pager?
1. Demo follow-up - Sent after a product demo
2. Discovery follow-up - Sent after a discovery call
3. General intro - First touch or general positioning
4. Event follow-up - Sent after a conference/event meeting
5. Renewal - Reinforcing value for an existing customer
Your choice:
Tone — “What tone should it strike?”
What tone fits best?
1. Formal executive - Polished, concise, boardroom-ready
2. Conversational - Warm, approachable, peer-to-peer
3. Technical - Data-driven, detailed, practitioner-focused
Your choice:
Step 2: Octave Context Gathering
Based on target, occasion, and tone, use Octave MCP tools to build rich context for the one-pager. Always tell the user what you’re researching and why.
Call as many tools as needed to build a complete picture. The best one-pagers come from layering multiple sources — company enrichment + playbook messaging + proof points + conversation intel all combine to create a document that feels genuinely personalized. Don’t stop at one tool when three would give you a stronger narrative.
That said, not every tool applies to every one-pager. Use your judgment about which are relevant to this specific situation. The tables below show what’s available — pick the combination that gives you the richest context for the occasion and target.
List vs Search — when to use which:
| Tool | Purpose | Use when… |
|---|---|---|
list_all_entities({ entityType }) |
Fetch all entities of a type (minimal fields) | You want a quick inventory — “show me all our playbooks” |
list_entities({ entityType }) |
Fetch entities with full data (paginated) | You need the actual content — “get full proof point details” |
get_entity({ oId }) |
Deep dive on one specific entity | You found something relevant and need the complete picture |
search_knowledge_base({ query }) |
Semantic search across library + resources | You have a concept or question — “how do we position for healthcare?” |
list_resources() / search_resources({ query }) |
Uploaded docs, URLs, Google Drive files | You need reference material, uploaded assets, or source docs |
Rule of thumb: Use list_* when you know what type of thing you want. Use search_* when you know what topic you’re looking for.
Follow-up one-pagers — ground them in what actually happened:
If this one-pager follows a previous interaction (demo, discovery call, event meeting), pull findings and events to anchor the narrative in real data rather than generic positioning:
list_findings({ query: "<company or contact>", startDate: "<relevant period>" })— surfaces what was actually said in calls: objections raised, features requested, pain points confirmed, competitor mentionslist_events({ filters: { accounts: ["<account_oId>"] } })— deal stage changes, meetings held, emails sent — shows the journey so farget_event_detail({ eventOId })— deep dive on specific events (e.g., the demo, the discovery call) to pull exact context
This turns a generic “here’s why we’re a fit” document into “here’s what we heard from you, and here’s how we address it” — much more compelling for the recipient.
For Account-Specific One-Pagers
Start with company and person enrichment, then pull positioning context:
| What you need | Tool | When to use |
|---|---|---|
| Company profile | enrich_company({ companyDomain }) |
Almost always — gives industry, size, tech stack, signals |
| Person deep-dive | enrich_person({ person: { email, firstName, lastName, companyDomain } }) |
When a specific person is the recipient |
| Key contacts | find_person({ searchMode: "people", companyDomain, fuzzyTitles }) |
When you need to identify the right stakeholder(s) |
| ICP fit scoring | qualify_company({ companyDomain }) |
When you need to frame “why us” for this account |
| Matching playbook | search_knowledge_base({ query: "<industry> <persona>", entityTypes: ["playbook"] }) |
To find the best-fit messaging framework |
| Playbook + value props | get_playbook({ oId, includeValueProps: true }) |
After finding a relevant playbook — gets full content + value props |
| Value props | list_value_props({ playbookOId }) |
Fetch value props for a specific playbook |
| Proof points | list_entities({ entityType: "proof_point" }) |
Fetch proof points with full data — metrics, quotes, logos |
| References | list_entities({ entityType: "reference" }) |
Fetch customer references with full details |
| Topic-specific proof | search_knowledge_base({ query: "<industry> results", entityTypes: ["proof_point", "reference"] }) |
When you need proof points about a specific topic or industry |
| Competitive context | search_knowledge_base({ query: "<signals>", entityTypes: ["competitor"] }) |
When competitor is mentioned or likely in the deal |
| Recent intel | list_findings({ query: "<company>", startDate: "<90 days ago>" }) |
Conversation-based insights for follow-up docs |
| Deal events | list_events({ filters: { accounts: ["<account_oId>"] } }) |
Deal progression for follow-up context |
| Event details | get_event_detail({ eventOId }) |
Deep dive on specific interactions |
| Synthesized prep | generate_call_prep({ companyDomain }) |
When you want a single comprehensive brief to work from |
| Uploaded assets | search_resources({ query: "<topic>" }) |
Relevant uploaded docs or reference materials |
For Segment-Level One-Pagers
When the target is a segment description rather than a specific company:
| What you need | Tool | When to use |
|---|---|---|
| Matching playbook | search_knowledge_base({ query: "<segment description>", entityTypes: ["playbook"] }) |
Find the playbook for this segment |
| Playbook + value props | get_playbook({ oId, includeValueProps: true }) |
Full messaging framework for the segment |
| Personas | list_entities({ entityType: "persona" }) |
Understand who the typical buyer is in this segment |
| Segments | list_all_entities({ entityType: "segment" }) |
Quick scan to match the description to a defined segment |
| Proof points | list_entities({ entityType: "proof_point" }) |
Fetch proof points relevant to this segment |
| References | list_entities({ entityType: "reference" }) |
Customer references in this segment |
| Products | list_entities({ entityType: "product" }) |
Product capabilities relevant to segment needs |
| Use cases | list_all_entities({ entityType: "use_case" }) |
Use cases that resonate with this segment |
| Uploaded resources | search_resources({ query: "<segment topic>" }) |
Relevant uploaded collateral |
Output of this step: Present a content outline to the user for approval:
ONE-PAGER OUTLINE: [Title]
===========================
Target: [Company / Person / Segment]
Occasion: [Demo follow-up / Discovery / Intro / Event / Renewal]
Tone: [Formal / Conversational / Technical]
---
PROPOSED SECTIONS
-----------------
1. HEADER
- "Prepared for [Company]"
- Date, your company logo
2. THE CHALLENGE
- [Pain point 1 from enrichment/findings]
- [Pain point 2 from enrichment/findings]
3. OUR APPROACH
- [Value prop 1 from playbook, tailored]
- [Value prop 2 from playbook, tailored]
- [Value prop 3 from playbook, tailored]
4. KEY DIFFERENTIATORS
- [Differentiator 1 â brief description]
- [Differentiator 2 â brief description]
- [Differentiator 3 â brief description]
5. PROOF POINTS
- [Customer result / metric 1]
- [Customer result / metric 2]
- [Quote or reference if available]
6. NEXT STEPS
- [CTA based on occasion]
- Contact info
---
Octave Sources Used:
- Company profile: [Company name] â [key insights]
- Playbook: [Playbook name] â [messaging angle]
- Proof points: [N] references pulled
- Findings: [N] recent signals (if follow-up)
---
Does this outline look good? I can:
1. Proceed to style selection and generation
2. Add or remove sections
3. Change the messaging angle
4. Adjust the tone or emphasis
Wait for user approval before proceeding.
Step 3: Style Selection
One-pagers use the same 12 style presets and brand extraction system as the deck skill. See STYLE_PRESETS.md for full CSS variable definitions.
Ask the user:
How would you like to style the one-pager?
1. Pick from presets â 12 styles from dark executive to light minimal
2. Use my brand â extract from my website or provide brand assets
3. Auto-pick â I'll choose based on the occasion and tone
4. Surprise me
Your choice:
Option 1: Preset Picker — Show the same preset table from the deck skill (see /octave:deck Step 4, Option 2).
Option 2: Brand Extraction — Follow the same brand discovery flow from the deck skill (see /octave:deck Step 3). Supports browser-use tier, WebFetch tier, and manual fallback. Confirm brand config with user before proceeding.
Option 3: Auto-Pick — Map occasion + tone to recommended presets:
| Occasion + Tone | Recommended Preset |
|---|---|
| Demo follow-up, formal | midnight-pro |
| Demo follow-up, conversational | soft-light |
| Discovery, formal | executive-dark |
| Discovery, conversational | swiss-modern |
| Intro, formal | midnight-pro |
| Intro, conversational | soft-light |
| Intro, technical | electric-studio |
| Event follow-up | aurora-gradient |
| Renewal, formal | executive-dark |
| Renewal, conversational | soft-light |
Tell the user what you picked and why. Let them override.
Step 4: Generate HTML
Build a single, self-contained HTML file. No external dependencies except Google Fonts. This is a single scrollable document — NOT slides.
Output Directory
Every one-pager gets its own folder under .octave-one-pagers/:
.octave-one-pagers/
âââ <kebab-case-name>-<YYYY-MM-DD>/
âââ <name>.html
Example: /octave:one-pager acme.com produces .octave-one-pagers/acme-one-pager-2026-02-11/acme-one-pager.html
The entire .octave-one-pagers/ directory is in .gitignore — nothing here gets committed.
HTML Architecture
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>[One-Pager Title]</title>
<!-- Google Fonts (preconnect + stylesheet) -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=[fonts]&display=swap" rel="stylesheet">
<style>
/* === CSS Variables (from chosen preset) === */
:root { ... }
/* === Reset & Base === */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; }
body {
font-family: var(--font-body);
background: var(--bg);
color: var(--text-primary);
line-height: 1.6;
}
/* === Page Container (narrower than deck) === */
.page {
max-width: 800px;
margin: 0 auto;
padding: clamp(2rem, 5vw, 4rem) clamp(1.5rem, 4vw, 3rem);
}
/* === Typography (all clamp-based) === */
.heading-1 { font-size: clamp(1.75rem, 4vw, 2.75rem); }
.heading-2 { font-size: clamp(1.25rem, 2.5vw, 1.75rem); }
.heading-3 { font-size: clamp(1rem, 1.8vw, 1.25rem); }
.body-text { font-size: clamp(0.875rem, 1.3vw, 1rem); }
.body-sm { font-size: clamp(0.75rem, 1.1vw, 0.875rem); }
/* === Section Spacing === */
.section { margin-bottom: clamp(2rem, 4vh, 3rem); }
.section-title {
font-family: var(--font-display);
color: var(--brand-primary);
margin-bottom: clamp(0.75rem, 1.5vh, 1.25rem);
}
/* === Components === */
.card { ... }
.metric-card { ... }
.proof-quote { ... }
.cta-block { ... }
.divider { ... }
/* === Print Styles === */
@media print {
body { background: white; color: #1a1a1a; }
.page { max-width: 100%; padding: 0.5in; }
.card { break-inside: avoid; border: 1px solid #e5e5e5; }
.section { break-inside: avoid; }
a { color: inherit; text-decoration: underline; }
}
/* === Responsive === */
@media (max-width: 600px) {
.grid-3 { grid-template-columns: 1fr; }
.grid-2 { grid-template-columns: 1fr; }
}
</style>
</head>
<body>
<div class="page">
<!-- Header -->
<!-- The Challenge -->
<!-- Our Approach -->
<!-- Key Differentiators -->
<!-- Proof Points -->
<!-- Next Steps -->
</div>
</body>
</html>
Key differences from the deck skill’s HTML:
- No scroll snap — natural scrolling, single continuous page
- No navigation dots or progress bar — not a presentation
- No slide-level animations — subtle entrance animations are fine, but no Intersection Observer per-section
- Narrower container —
max-width: 800px(vs deck’s 1100px) - Print-friendly — includes
@media printstyles for PDF/print output - No
overflow: hiddensections — content flows naturally
Document Sections
Header:
<header class="section header">
<!-- Logo if available (from brand extraction or Octave workspace) -->
<img src="[logo-url]" alt="[Company]" class="logo" />
<h1 class="heading-1">[Document Title]</h1>
<p class="body-text text-secondary">Prepared for [Target Company] | [Date]</p>
</header>
The Challenge:
<section class="section">
<h2 class="heading-2 section-title">The Challenge</h2>
<p class="body-text">
[2-3 sentences about their pain points, drawn from enrichment data,
findings, or persona pain points. Specific to this account.]
</p>
</section>
Our Approach:
<section class="section">
<h2 class="heading-2 section-title">Our Approach</h2>
<div class="value-props">
<div class="value-prop">
<h3 class="heading-3">[Value Prop Headline]</h3>
<p class="body-text text-secondary">[1-2 sentences tailored to their situation]</p>
</div>
<!-- Repeat for 3-4 value props -->
</div>
</section>
Key Differentiators:
<section class="section">
<h2 class="heading-2 section-title">Why [Your Company]</h2>
<div class="grid-3">
<div class="card">
<h3 class="heading-3">[Differentiator]</h3>
<p class="body-sm text-secondary">[1-2 sentences]</p>
</div>
<!-- 3 cards max -->
</div>
</section>
Proof Points:
<section class="section">
<h2 class="heading-2 section-title">Results</h2>
<div class="proof-points">
<div class="metric-card">
<span class="big-number">[Metric Value]</span>
<span class="body-sm text-secondary">[Metric Label]</span>
</div>
<!-- 2-3 metrics or quotes -->
</div>
<!-- Optional quote -->
<blockquote class="proof-quote">
"[Customer quote]"
<cite>-- [Name, Title, Company]</cite>
</blockquote>
</section>
Next Steps:
<section class="section cta-block">
<h2 class="heading-2 section-title">Next Steps</h2>
<p class="body-text">[Clear CTA based on occasion]</p>
<div class="contact-info">
<p class="body-sm">[Name] | [Email] | [Phone]</p>
<p class="body-sm">[Meeting link if available]</p>
</div>
</section>
Content Density Rules
Keep it tight. A one-pager should be scannable in under 2 minutes:
| Section | Max Content |
|---|---|
| Header | Company name + title + date + “Prepared for” |
| The Challenge | 2-3 sentences max |
| Our Approach | 3-4 value props, each 1-2 sentences |
| Key Differentiators | 3 cards max, each heading + 1-2 sentences |
| Proof Points | 2-3 metrics or quotes |
| Next Steps | 1 CTA + contact info |
If content exceeds these limits, prioritize ruthlessly. The one-pager is a teaser, not a whitepaper.
Step 5: Delivery
After generating the HTML file:
- Open the one-pager in the default browser
- Present a summary:
ONE-PAGER READY
================
Folder: .octave-one-pagers/<name>-<date>/
File: .octave-one-pagers/<name>-<date>/<name>.html
Style: [Preset name or "Custom Brand"]
Size: [file size]
Viewing:
- Open in any browser -- single scrollable page
- Print-friendly -- Cmd+P / Ctrl+P for clean printout
- Email as attachment or save as PDF
Customization tips:
- Colors: Edit the :root CSS variables at the top of the file
- Content: Each <section class="section"> is one block
- Fonts: Change the Google Fonts <link> and font-family values
- Layout: Adjust max-width in .page for wider/narrower output
---
Want me to:
1. Adjust content or messaging
2. Change the style/colors
3. Export as PDF (print dialog)
4. Create a version for a different contact at the same company
5. Create a full presentation deck for this account (/octave:deck)
6. Done
MCP Tools Used
Research & Enrichment
enrich_company– Full company intelligence profileenrich_person– Full person intelligence reportfind_person– Find contacts at a company by title/rolequalify_company– ICP fit scoring for a companyqualify_person– ICP fit scoring for a personfind_company– Find companies matching criteria
Library — Fetching Entities
list_all_entities– Quick scan of all entities of a type (minimal fields, no pagination)list_entities– Fetch entities with full data and pagination (proof points, references, personas, etc.)get_entity– Deep dive on one specific entityget_playbook– Retrieve a playbook with full content and value propslist_value_props– Value propositions for a specific playbook
Library — Searching
search_knowledge_base– Semantic search across library entities and resourceslist_resources– Browse uploaded docs, URLs, and Google Drive filessearch_resources– Semantic search across uploaded resources
Intelligence & Signals
list_findings– Recent conversation findings and insightslist_events– Deal events (won, lost, created, etc.)get_event_detail– Full details for a specific event
Content Generation
generate_call_prep– Synthesized prep brief for accountsgenerate_content– Generate positioning or messaging content
Brand & Style
list_brand_voices– Available brand voices in workspacelist_writing_styles– Available writing styles in workspace
Error Handling
Octave Connection Failed:
Could not connect to your Octave workspace.
The one-pager builder can still work without Octave — you’ll provide the content manually, and I’ll handle structure, style, and HTML generation.
To reconnect: check your MCP configuration or run
/octave:workspace status
Company/Person Not Found:
I couldn’t find detailed intelligence for [target].
Options:
- Proceed with what we have — I’ll use general positioning from your library
- Try a different domain or email
- Provide the content manually and I’ll build the one-pager
No Matching Playbook:
No playbook matches this audience profile directly.
I’ll use your general value props and positioning. After the one-pager is built, consider creating a playbook for this segment:
/octave:library create playbook
No Proof Points Available:
No proof points found matching this account’s industry or segment.
Options:
- Proceed without the proof points section
- Use general proof points from your library
- Provide customer results manually and I’ll format them
No Findings for Follow-Up:
No conversation findings found for [target] in the recent period.
This means I’ll build the one-pager from enrichment data and library content rather than grounding it in specific past conversations. You can provide meeting notes or context manually if you have them.
Related Skills
/octave:deck– Full presentation deck (when one page isn’t enough)/octave:research– Deeper research on the account/octave:brief– Internal account dossier (vs external leave-behind)/octave:proposal– Formal business case/octave:microsite– Personalized web page for ABM