slides
Build PowerPoint decks from a Markdown source with pandoc, reloading LibreOffice Impress after every change.
Skill by heartnetkung
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/heartnetkung-slides
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: documents, presentations, writing
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Python package
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/slides
What's inside
- Skill name
slides- Description
- Build PowerPoint decks from a Markdown source with pandoc, reloading LibreOffice Impress after every change. Use when asked to make a presentation, slide deck, or .pptx; when editing a *-slides.md deck; when asked to review a deck (`/slides review`); or when asked to add diagrams, photos, or visuals to slides (`/slides visuals`).
- License
- MIT
- Instructions
- 97 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
- Instructions call the network
Files (21)
- SKILL.md
- deck-claude-md.md · assets/
- outline-skeleton.md · assets/
- reference.pptx · assets/
- skeleton.md · assets/
- image-scout.md
- outline.md
- review.md
- reviewer-common.md
- reviewer-editor.md
- reviewer-flow.md
- build.sh · scripts/
- check.py · scripts/
- find_image.py · scripts/
- lint_deck.py · scripts/
- loop.sh · scripts/
- reload.py · scripts/
- render.sh · scripts/
- svg-style.md
- visual-rules.md
- visuals.md
SKILL.md (first lines)
# Slides: Markdown in, PowerPoint out
The Markdown file is the deck. The `.pptx` is built from it and never edited by hand. Every change
is: edit the `.md` → build → check → reload LibreOffice.
**Resolve the skill directory first.** It is the base directory Claude Code printed when this skill
loaded (a symlink path is fine). Every path below written `<skill-dir>/…` means that directory, made
absolute. The deck folder is where the deck's `*-slides.md` lives; pass it absolute too.
## Route to one phase
Read the argument, then read **all** of that phase's files **in one parallel turn**. They're next
to this file:
| Request | Read together |
|---|---|
| A new deck, or no `*-slides.md` exists yet | `outline.md` + `visual-rules.md` |
| `review`, or "review / check / critique the slides". Only when the user asks: never start or suggest a review yourself, since it runs two agents. | `review.md` (the reviewers read their own rubrics) |
| `visuals`, or "add diagrams / photos / images / visuals" | `visuals.md` + `visual-rules.md`, plus `svg-style.md` unless it's photos only |
| Anything else: an edit, a rebuild, a fix | nothing more; the loop below is the whole job |
## Files in a deck folder
| File | Lifetime |
|---|---|
| `NAME-slides.md` | the deck, permanent |
| `NAME.pptx` | built output, rebuilt every change |
| `NAME-outline.md` | short-lived: exists from the outline until the first draft is complete |
| `CLAUDE.md` | the deck's own rules: audience, tone, numbering, banned words |
| `reference.pptx` | frozen copy of `<skill-dir>/assets/reference.pptx`, so the deck builds even if the skill changes |
| `template.pptx` | optional: a company or Google Slides template; wins over `reference.pptx` |
| `images/` | diagram sources and renders, photos, and `CREDITS.md` |
**Read the deck folder's `CLAUDE.md` before editing a deck.** Its rules beat the general ones below.
## The loop, after every edit
One command, not three:
```bash
<skill-dir>/scripts/loop.sh DECK_DIR/NAME-slides.md [--png DIR]
```
It runs `build.sh` (lint + pandoc → `NAME.pptx`), then `check.py` (overflow report), then
`reload.py` (show it in LibreOffice).
- **Lint errors stop the build**, and nothing is reloaded. Fix the Markdown; don't work around the
linter.
- **Check `error:` means content runs off the slide; `warning:` means text runs past its box**, which
in practice is text touching the bottom edge. Fix both: cut words, split the slide, or move detail
to speaker notes. To see a slide, add `--png DIR` (a scratch directory) and read `DIR/slide-NN.png`.
- **A check error still reloads**, so the user sees the problem slide, but `loop.sh` exits 1.
- To run a step on its own, use the script directly. Run `check.py` and `reload.py` with
`/usr/bin/python3`: the `uno` module comes from the system LibreOffice package.
### LibreOffice safety
`reload.py` talks to LibreOffice through a local pipe (`claude_slide`). It starts LibreOffice if
nothing is listening, and otherwise closes and reopens only this deck's window.
- **Never open the deck with `xdg-open`**: that LibreOffice has no pipe, so later reloads can't reach it.
- **If LibreOffice is running without the pipe** (`pgrep -a soffice` shows no `--accept`), don't
kill it; the user may have unsaved work. Ask them to close it, then run `reload.py`.
- `check.py` runs its own headless LibreOffice with a throwaway profile, so it's safe at any time.
## Markdown structure
- `##` makes a section title slide, `###` a content slide. Never `#`.
- **Never two title slides in a row.** The front-matter title slide and every `##` must be followed
by a `###`. The linter enforces this.
- `::: notes` … `:::` is speaker notes, not shown on the slide.
- An HTML comment (`<!-- … -->`) isn't converted. The one at the top of the deck is for the
presenter: how to convert, open questions.
- Side by side: `:::::: {.columns}` holding two `::: {.column}` blocks.
- Images live in `images/`. Credit every image from outside the project in that slide's notes
(source and license).
## Writing limits
- About 6 bullets per slide, tables of 7 rows or fewer. The linter warns past both.
- A slide says one thing. Detail the presenter needs goes in the notes, not on the slide.
- Which slides get a diagram or a photo is decided by `visual-rules.md`: diagrams wherever items
connect, photos only in four cases.
## Requirements
- `pandoc` on the `PATH`. If missing, install without sudo from the static release:
`curl -L https://github.com/jgm/pandoc/releases/download/<v>/pandoc-<v>-linux-amd64.tar.gz | tar xz --strip-components 2 -C ~/.local/bin pandoc-<v>/bin/pandoc`
- The template's fonts, or fonts with the same letter widths, or the overflow check measures the
wrong widths (`check.py` warns). For `reference.pptx` that's Calibri or **Carlito**: `sudo apt
install fonts-crosextra-carlito`, or without sudo, put the four `Carlito-*.ttf` files from
github.com/google/fonts (`ofl/carlito`) into `~/.local/share/fonts` and run `fc-cache -f`.
- LibreOffice Impress with Python UNO (`/usr/bin/python3 -c "import uno"`), and `pdftocairo` (poppler-utils) for `--png`.
- For `visuals.md`: Google Chrome or Chromium for diagrams (falls back to LibreOffice, which renders
fonts worse), and numpy and Pillow (`/usr/bin/python3 -c "import numpy, PIL"`) for photo search.From heartnetkung/claude-skills, MIT.
More from heartnetkung/claude-skills
- 0.592score
vibe-prototype
heartnetkung
Build a throwaway, locally-running UI prototype with realistic dummy data to decide what to build, then hand it off as a spec with screenshots.
SkillAFreshness: A★ 1Claude Code +9 - 0.587score
module-design
heartnetkung
How to design a new module, or a change to an existing module's behaviour or contract, before coding it, and how to retire its build docs afterwards.
SkillAFreshness: A★ 1Claude Code +9 - 0.587score
open-pr
heartnetkung
Open a pull request whose description carries the evidence a reviewer needs — screenshots of every changed screen at each supported device size for UI work…
SkillAFreshness: A★ 1Claude Code +9 - 0.587score
python-scaffold
heartnetkung
Scaffold a new Python project with strict tooling — uv, src layout, ruff, pyright strict, tach layer enforcement, deptry, vulture, and an 8-hook pre-commit…
SkillAFreshness: A★ 1Claude Code +9 - 0.587score
start-ticket
heartnetkung
Start work on a ticket — read it, explore the code, decide the obvious questions yourself and ask the rest, and get the plan approved, including how it splits…
SkillAFreshness: A★ 1Claude Code +9 - 0.587score
markdown-check
heartnetkung
Edit a markdown document for coherence, concision, unambiguous technical terms, and live references — auto-fixing what is certain and asking about what is not.
SkillAFreshness: A★ 1Claude Code +9 - 0.582score
slow-pytest-maintenance
heartnetkung
Record a pytest suite that has grown too slow as a GitHub issue, then stop.
SkillAFreshness: A★ 1Claude Code +9 - 0.318score
typescript-scaffold
heartnetkung
No description from the publisher yet.
SkillAFreshness: A★ 1Claude Code +9
Signals
- Stars
- 1
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Sep 25, 2026 (1 month ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/heartnetkung/claude-skills
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from heartnetkung
- 0.592score
vibe-prototype
heartnetkung
Build a throwaway, locally-running UI prototype with realistic dummy data to decide what to build, then hand it off as a spec with screenshots.
SkillAFreshness: A★ 1Claude Code +9 - 0.587score
module-design
heartnetkung
How to design a new module, or a change to an existing module's behaviour or contract, before coding it, and how to retire its build docs afterwards.
SkillAFreshness: A★ 1Claude Code +9 - 0.587score
open-pr
heartnetkung
Open a pull request whose description carries the evidence a reviewer needs — screenshots of every changed screen at each supported device size for UI work…
SkillAFreshness: A★ 1Claude Code +9 - 0.587score
markdown-check
heartnetkung
Edit a markdown document for coherence, concision, unambiguous technical terms, and live references — auto-fixing what is certain and asking about what is not.
SkillAFreshness: A★ 1Claude Code +9 - 0.587score
start-ticket
heartnetkung
Start work on a ticket — read it, explore the code, decide the obvious questions yourself and ask the rest, and get the plan approved, including how it splits…
SkillAFreshness: A★ 1Claude Code +9 - 0.587score
python-scaffold
heartnetkung
Scaffold a new Python project with strict tooling — uv, src layout, ruff, pyright strict, tach layer enforcement, deptry, vulture, and an 8-hook pre-commit…
SkillAFreshness: A★ 1Claude Code +9
Cite this page
slides skill. Agent Mart. https://agentmart.dev/skills/heartnetkung-slides (last updated 2026-10-24)