/ppt-template-creator
Creates self-contained PPT template SKILLS (not presentations) from user-provided PowerPoint templates. Use ONLY when a user wants to create a reusable skill from their template. For creating actual presentations, use the pptx skill instead.
$ npx -y skills add anthropics/financial-services --skill ppt-template-creator --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/ppt-template-creator
Context preview
The summary Claude sees to decide when to auto-load this skill.
Creates self-contained PPT template SKILLS (not presentations) from user-provided PowerPoint templates. Use ONLY when a user wants to create a reusable skill from their template. For creating actual presentations, use the pptx skill instead.
SKILL.md
ppt-template-creator.SKILL.mdname: ppt-template-creator
description: Creates self-contained PPT template SKILLS (not presentations) from user-provided PowerPoint templates. Use ONLY when a user wants to create a reusable skill from their template. For creating actual presentations, use the pptx skill instead.
PPT Template Creator
**This skill creates SKILLS, not presentations.** Use this when a user wants to turn their PowerPoint template into a reusable skill that can generate presentations later. If the user just wants to create a presentation, use the `pptx` skill instead.
The generated skill includes:
- `assets/template.pptx` - the template file
- `SKILL.md` - complete instructions (no reference to this meta skill needed)
**For general skill-building best practices**, refer to the `skill-creator` skill. This skill focuses on PPT-specific patterns.
Workflow
1. **User provides template** (.pptx or .potx) 2. **Analyze template** - extract layouts, placeholders, dimensions 3. **Initialize skill** - use the `skill-creator` skill to set up the skill structure 4. **Add template** - copy .pptx to `assets/template.pptx` 5. **Write SKILL.md** - follow template below with PPT-specific details 6. **Create example** - generate sample presentation to validate 7. **Package** - use the `skill-creator` skill to package into a .skill file
Step 2: Analyze Template
**CRITICAL: Extract precise placeholder positions** - this determines content area boundaries.
from pptx import Presentation
prs = Presentation(template_path)
print(f"Dimensions: {prs.slide_width/914400:.2f}\" x {prs.slide_height/914400:.2f}\"")
print(f"Layouts: {len(prs.slide_layouts)}")
for idx, layout in enumerate(prs.slide_layouts):
print(f"\n[{idx}] {layout.name}:")
for ph in layout.placeholders:
try:
ph_idx = ph.placeholder_format.idx
ph_type = ph.placeholder_format.type
# IMPORTANT: Extract exact positions in inches
left = ph.left / 914400
top = ph.top / 914400
width = ph.width / 914400
height = ph.height / 914400
print(f" idx={ph_idx}, type={ph_type}")
print(f" x={left:.2f}\", y={top:.2f}\", w={width:.2f}\", h={height:.2f}\"")
except:
pass**Key measurements to document:**
- **Title position**: Where does the title placeholder sit?
- **Subtitle/description**: Where is the subtitle line?
- **Footer placeholders**: Where do footers/sources appear?
- **Content area**: The space BETWEEN subtitle and footer is your content area
Finding the True Content Start Position
**CRITICAL:** The content area does NOT always start immediately after the subtitle placeholder. Many templates have a visual border, line, or reserved space between the subtitle and content area.
**Best approach:** Look at Layout 2 or similar "content" layouts that have an OBJECT placeholder - this placeholder's `y` position indicates where content should actually start.
# Find the OBJECT placeholder to determine true content start
for idx, layout in enumerate(prs.slide_layouts):
for ph in layout.placeholders:
try:
if ph.placeholder_format.type == 7: # OBJECT type
top = ph.top / 914400
print(f"Layout [{idx}] {layout.name}: OBJECT starts at y={top:.2f}\"")
# This y value is where your content should start!
except:
pass**Example:** A template might have:
- Subtitle ending at y=1.38"
- But OBJECT placeholder starting at y=1.90"
- The gap (0.52") is reserved for a border/line - **do not place content there**
Use the OBJECT placeholder's `y` position as your content start, not the subtitle's end position.
Step 5: Write SKILL.md
The generated skill should have this structure:
[company]-ppt-template/
├── SKILL.md
└── assets/
└── template.pptxGenerated SKILL.md Template
The generated SKILL.md must be **self-contained** with all instructions embedded. Use this template, filling in the bracketed values from your analysis:
---
name: [company]-ppt-template
description: [Company] PowerPoint template for creating presentations. Use when creating [Company]-branded pitch decks, board materials, or client presentations.
---
# [Company] PPT Template
Template: `assets/template.pptx` ([WIDTH]" x [HEIGHT]", [N] layouts)
## Creating Presentations
```python
from pptx import Presentation
prs = Presentation("path/to/skill/assets/template.pptx")
# DELETE all existing slides first
while len(prs.slides) > 0:
rId = prs.slides._sldIdLst[0].rId
prs.part.drop_rel(rId)
del prs.slides._sldIdLst[0]
# Add slides from layouts
slide = prs.slides.add_slide(prs.slide_layouts[LAYOUT_IDX])Key Layouts
| Index | Name | Use For | |-------|------|---------| | [0] | [Layout Name] | [Cover/title slide] | | [N] | [Layout Name] | [Content with bullets] | | [N] | [Layout Name] | [Two-column layout] |
Placeholder Mapping
**CRITICAL: Include exact positions (x, y coordinates) for each placeholder.**
Layout [N]: [Name]
| idx | Type | Position | Use | |-----|------|----------|-----| | [idx] | TITLE (1) | y=[Y]" | Slide title | | [idx] | BODY (2) | y=[Y]" | Subtitle/description | | [idx] | BODY (2) | y=[Y]" | Footer | | [idx] | BODY (2) | y=[Y]" | Source/notes |
Content Area Boundaries
**Document the safe content area for custom shapes/tables/charts:**
Content Area (for Layout [N]):
- Left margin: [X]" (content starts here)
- Top: [Y]" (below subtitle placeholder)
- Width: [W]"
- Height: [H]" (ends before footer)
For 4-quadrant layouts:
- Left column: x=[X]", width=[W]"
- Right column: x=[X]", width=[W]"
- Top row: y=[Y]", height=[H]"
- Bottom row: y=[Y]", height=[H]"
**Why this matters:** Custom content (textboxes, tables, charts) must stay within these boundaries to avoid overlapping with template placeholders like titles, footers, and source lines.
Fil
Read more
name: ppt-template-creator description: Creates self-contained PPT template SKILLS (not presentations) from user-provided PowerPoint templates. Use ONLY when a user wants to create a reusable skill from their template. For creating actual presentations, use the pptx skill instead.
PPT Template Creator
**This skill creates SKILLS, not presentations.** Use this when a user wants to turn their PowerPoint template into a reusable skill that can generate presentations later. If the user just wants to create a presentation, use the `pptx` skill instead.
The generated skill includes:
- `assets/template.pptx` - the template file
- `SKILL.md` - complete instructions (no reference to this meta skill needed)
**For general skill-building best practices**, refer to the `skill-creator` skill. This skill focuses on PPT-specific patterns.
Workflow
1. **User provides template** (.pptx or .potx) 2. **Analyze template** - extract layouts, placeholders, dimensions 3. **Initialize skill** - use the `skill-creator` skill to set up the skill structure 4. **Add template** - copy .pptx to `assets/template.pptx` 5. **Write SKILL.md** - follow template below with PPT-specific details 6. **Create example** - generate sample presentation to validate 7. **Package** - use the `skill-creator` skill to package into a .skill file
Step 2: Analyze Template
**CRITICAL: Extract precise placeholder positions** - this determines content area boundaries.
from pptx import Presentation
prs = Presentation(template_path)
print(f"Dimensions: {prs.slide_width/914400:.2f}\" x {prs.slide_height/914400:.2f}\"")
print(f"Layouts: {len(prs.slide_layouts)}")
for idx, layout in enumerate(prs.slide_layouts):
print(f"\n[{idx}] {layout.name}:")
for ph in layout.placeholders:
try:
ph_idx = ph.placeholder_format.idx
ph_type = ph.placeholder_format.type
# IMPORTANT: Extract exact positions in inches
left = ph.left / 914400
top = ph.top / 914400
width = ph.width / 914400
height = ph.height / 914400
print(f" idx={ph_idx}, type={ph_type}")
print(f" x={left:.2f}\", y={top:.2f}\", w={width:.2f}\", h={height:.2f}\"")
except:
pass**Key measurements to document:**
- **Title position**: Where does the title placeholder sit?
- **Subtitle/description**: Where is the subtitle line?
- **Footer placeholders**: Where do footers/sources appear?
- **Content area**: The space BETWEEN subtitle and footer is your content area
Finding the True Content Start Position
**CRITICAL:** The content area does NOT always start immediately after the subtitle placeholder. Many templates have a visual border, line, or reserved space between the subtitle and content area.
**Best approach:** Look at Layout 2 or similar "content" layouts that have an OBJECT placeholder - this placeholder's `y` position indicates where content should actually start.
# Find the OBJECT placeholder to determine true content start
for idx, layout in enumerate(prs.slide_layouts):
for ph in layout.placeholders:
try:
if ph.placeholder_format.type == 7: # OBJECT type
top = ph.top / 914400
print(f"Layout [{idx}] {layout.name}: OBJECT starts at y={top:.2f}\"")
# This y value is where your content should start!
except:
pass**Example:** A template might have:
- Subtitle ending at y=1.38"
- But OBJECT placeholder starting at y=1.90"
- The gap (0.52") is reserved for a border/line - **do not place content there**
Use the OBJECT placeholder's `y` position as your content start, not the subtitle's end position.
Step 5: Write SKILL.md
The generated skill should have this structure:
[company]-ppt-template/
├── SKILL.md
└── assets/
└── template.pptxGenerated SKILL.md Template
The generated SKILL.md must be **self-contained** with all instructions embedded. Use this template, filling in the bracketed values from your analysis:
---
name: [company]-ppt-template
description: [Company] PowerPoint template for creating presentations. Use when creating [Company]-branded pitch decks, board materials, or client presentations.
---
# [Company] PPT Template
Template: `assets/template.pptx` ([WIDTH]" x [HEIGHT]", [N] layouts)
## Creating Presentations
```python
from pptx import Presentation
prs = Presentation("path/to/skill/assets/template.pptx")
# DELETE all existing slides first
while len(prs.slides) > 0:
rId = prs.slides._sldIdLst[0].rId
prs.part.drop_rel(rId)
del prs.slides._sldIdLst[0]
# Add slides from layouts
slide = prs.slides.add_slide(prs.slide_layouts[LAYOUT_IDX])Key Layouts
| Index | Name | Use For | |-------|------|---------| | [0] | [Layout Name] | [Cover/title slide] | | [N] | [Layout Name] | [Content with bullets] | | [N] | [Layout Name] | [Two-column layout] |
Placeholder Mapping
**CRITICAL: Include exact positions (x, y coordinates) for each placeholder.**
Layout [N]: [Name]
| idx | Type | Position | Use | |-----|------|----------|-----| | [idx] | TITLE (1) | y=[Y]" | Slide title | | [idx] | BODY (2) | y=[Y]" | Subtitle/description | | [idx] | BODY (2) | y=[Y]" | Footer | | [idx] | BODY (2) | y=[Y]" | Source/notes |
Content Area Boundaries
**Document the safe content area for custom shapes/tables/charts:**
Content Area (for Layout [N]): - Left margin: [X]" (content starts here) - Top: [Y]" (below subtitle placeholder) - Width: [W]" - Height: [H]" (ends before footer) For 4-quadrant layouts: - Left column: x=[X]", width=[W]" - Right column: x=[X]", width=[W]" - Top row: y=[Y]", height=[H]" - Bottom row: y=[Y]", height=[H]"
**Why this matters:** Custom content (textboxes, tables, charts) must stay within these boundaries to avoid overlapping with template placeholders like titles, footers, and source lines.
Fil
Reference agents, skills, and data connectors for the financial-services workflows we see most — investment banking, equity research, private equity, and wealth management.
Other skills on financial-services.
- /verify
Verify changes to the claude-for-msft-365-install admin scripts and commands by driving them against an isolated fake $HOME.
Open skill - /audit-xls
Audit a spreadsheet for formula accuracy, errors, and common mistakes. Scopes to a selected range, a single sheet, or the entire model (including financial-model integrity checks like BS balance, cash tie-out, and logic sanity). Triggers on "audit this sheet", "check my
Open skill - /earnings-analysis
Create professional equity research earnings update reports (8-12 pages, 3,000-5,000 words) analyzing quarterly results for companies already under coverage. Fast-turnaround format focusing on beat/miss analysis, key metrics, updated estimates, and revised thesis. Includes 1-3
Open skill - /earnings-preview
Build pre-earnings analysis with estimate models, scenario frameworks, and key metrics to watch. Use before a company reports quarterly earnings to prepare positioning notes, set up bull/bear scenarios, and identify what will move the stock. Triggers on "earnings preview", "what
Open skill - /model-update
Update financial models with new data — quarterly earnings, management guidance, macro changes, or revised assumptions. Adjusts estimates, recalculates valuation, and flags material changes. Use after earnings, guidance updates, or when assumptions need refreshing. Triggers on
Open skill - /morning-note
Draft concise morning meeting notes summarizing overnight developments, trade ideas, and key events for coverage stocks. Designed for the 7am morning meeting format — tight, opinionated, actionable. Triggers on "morning note", "morning meeting", "what happened overnight", "trade
Open skill

