Install
$ agentstack add skill-tristan-mcinnis-pptx-from-layouts-skill-pptx-author ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Step 2 — Author (pptx-author)
Write the deck as markdown where every slide names the exact template layout it should land on, using [HINT: layout_name]. This is the bridge between "I know my template's layouts" (Step 1) and "render the deck" (Step 3).
STEP 1 — PROFILE STEP 2 — AUTHOR STEP 3 — RENDER
pptx-profile pptx-author pptx-from-layouts
─────────────── ─────────────── ─────────────────
your-template.pptx slides.md (+ [HINT:]) slides.md + config
│ │ │
▼ ▼ ▼
catalog.py ──catalog.md──▶ write & lint ──slides──▶ generate.py ─▶ deck.pptx
└────────────────── config.json ───────────────────▲ (validated)
You are here: Step 2. You need the layout-catalog.md from Step 1 (or use the bundled Inner Chapter layouts). Output is a slides.md the renderer consumes.
The contract
- Slides are separated by
---. Each begins with a title and (optionally) a
hint.
# Slide N: Titleor## Title— the title. Make it a claim, not a
label ("Three briefs, one foundation" — not "Overview").
[HINT: layout_name]— names a real layout from the Step-1 catalog. Copy
the value verbatim from the catalog's Hint column. The engine fills that layout's actual placeholders.
- Content matches the layout:
column-*/grid-*layouts →[Column N: Header]blocks (or**Header**- body lines).
- image-bearing layouts →
[Image: path/to.jpg]. - tabular data → a markdown table.
- everything else →
-bullets (the last resort, not the reflex).
Hints vs. Visual types — when to use which
| You have… | Author with | Why | |-----------|-------------|-----| | A profiled template + its catalog | [HINT: real-layout-name] | Precise: targets the exact layout. The "creating" path. | | No catalog / unsure of layouts | **Visual: type** (e.g. process-4-phase) | Semantic: the engine auto-picks a layout for that intent. |
[HINT:] always wins if both are present. A hint that doesn't match the template is ignored with a warning and falls back to auto-detection — so lint first.
Lint before you render
python scripts/lint_hints.py slides.md --config your-template-config.json
# or, against the Step-1 markdown catalog:
python scripts/lint_hints.py slides.md --catalog your-template-layout-catalog.md
# no flag → validates against the bundled Inner Chapter template
The linter flags, per slide: P0 unknown hint (with a "did you mean…?" suggestion — this will mis-render), P1 missing title, P2 bullets mixed with a table. Exit code 2 means fix-and-re-run.
Example
# Slide 1: Personas that respond like real humans
[HINT: title-cover]
### Inner Chapter
---
# Slide 2: Three outcomes the research must achieve
[HINT: column-3-centered-a]
[Column 1: Level-set the teams]
- Confirm what's known about each athlete
[Column 2: Capture room content]
- In-home video, voice clips, phone recordings
[Column 3: Deliver for leadership]
- A visceral understanding for senior stakeholders
---
# Slide 3: Why personas are the hard part
[HINT: content-image-right-a]
[Image: assets/persona-diagram.png]
- No world model — pattern-matching only
- Bias toward agreeableness — more positive than real consumers
Typography markers (inline)
| Marker | Result | | Marker | Result | |--------|--------|-|--------|--------| | {bold}text{/bold} | Bold | | {bullet:-} | Dash bullet | | {italic}text{/italic} | Italic | | {bullet:1} | Numbered | | {blue}text{/blue} | Brand color | | {level:N} | Indent level |
Then what
Hand slides.md (plus the template + config) to Step 3 — pptx-from-layouts:
python ../pptx-from-layouts/scripts/generate.py slides.md -o deck.pptx \
--template your-template.pptx --config your-template-config.json --validate
For turning raw notes/source docs into a hint-tagged slides.md automatically, the pptx-outline-architect subagent does the heavy lifting.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: tristan-mcinnis
- Source: tristan-mcinnis/pptx-from-layouts-skill
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.