Agent skill

PPTX Deck Editor

by EveryInc in EveryInc/hands-on-deck

Reads, edits, creates, merges and visually verifies .pptx decks through one script, deck.py, which applies atomic JSON patches.

MITAuto-check passedDocuments & Office

Install PPTX Deck Editor

skills CLI
$ npx skills add EveryInc/hands-on-deck --skill hands-on-deck -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install EveryInc/hands-on-deck hands-on-deck --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/EveryInc/hands-on-deck.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/hands-on-deck .claude/skills/hands-on-deck && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
hands-on-deck
GitHub stars
219
Token cost
~2.9k tokens
SKILL.md length
1,141 words
Files
9 (incl. scripts)
Skills in repo
1
Repo updated
First seen
Licence
MIT

At a glance

Reads, edits, creates, merges and visually verifies .pptx decks through one script, deck.py, which applies atomic JSON patches.

  • Works in 5 steps: slides the template down to the target… → merge in any reusable modules. → One replace-text patch for global… → …
  • Editing text, images or layout in an existing PowerPoint deck
  • SKILL.md covers The edit loop, Patch ops at a glance, Creating slides from HTML… and Deck structure (subcommands,…, plus 4 more sections
  • Runs Python scripts from its folder; calls python, pip and playwright

What it does

The skill gives the agent a single tool, scripts/deck.py, so it never needs to touch slide XML for routine work. The agent inspects slides, writes a JSON patch with ops such as set-text and swap-image, and deck.py validates every op first, reporting all errors at once with the slide's real shape listing, then applies the patch all-or-nothing and lints the result. Slide indices are 0-based, shapes are addressed by stable ids or unique names, and positions are in inches from the top-left.

Other scripts handle html2patch conversion, inventory, merging decks, rearranging and replacing slides, and thumbnails for visual checks. A fix option repairs overflowing text on the slides touched and lists what still needs judgment, and the agent is told to look at the rendered image before declaring success. A few semantics are called out: vertical centering uses anchor, not alignment, set-text inherits the old paragraph's formatting, and duplicating a styled shape beats adding a new one.

When your agent uses it

  • Editing text, images or layout in an existing PowerPoint deck
  • Building new slides with shapes, tables or pictures
  • Merging or reordering slides across decks
  • Checking a deck visually after changes

Example prompts

  • “Replace the title and subtitle on slide 3 of deck.pptx and render it to check the layout.”
  • “Merge the slides from sales.pptx into our quarterly deck and reorder them.”
  • “Swap the logo image on every slide of this presentation.”

Requirements

  • Python 3 to run scripts/deck.py

Workflow steps

5 steps, taken from the first numbered list in SKILL.md.

  1. slides the template down to the target slide sequence (duplicating repeated layouts).
  2. merge in any reusable modules.
  3. One replace-text patch for global renames (scope master catches footers).
  4. Per-slide patches: inspect --slide N for shape ids, then set-text / swap-image only what you name — nothing else is touched.
  5. apply --fix --render img/ and look at every touched slide.

What it can do on your machine

Read from SKILL.md and the folder at commit a24b996. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 7 files in scripts/ (Python), which the agent can run.

    Shell commands in SKILL.md call:

    • python
    • pip
    • playwright

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use pip, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

PPTX Deck Editor loads about 2.9k tokens when it runs. Until then it costs about 116 tokens; SKILL.md has 1,141 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~116
When it runs · the whole SKILL.md, loaded when a task matches
~2.9k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from EveryInc/hands-on-deck at commit a24b996, republished under its MIT licence (© EveryInc). 1,141 words, ~2,906 tokens.

Download SKILL.mdSave it as .claude/skills/hands-on-deck/SKILL.md (or your agent's skills folder). This skill also uses 8 other files; get the full folder from GitHub.
name
hands-on-deck
description
Use this skill any time a .pptx file is involved in any way — as input, output, or both. This includes reading, analyzing, or extracting content from presentations; editing text, images, styles, or layout of existing decks; creating new slides, shapes, tables, or pictures; reordering, duplicating, or merging slides across decks; and verifying decks visually. Trigger whenever the user mentions a deck, slides, a presentation, or a .pptx filename.

hands-on-deck — agent-native PPTX manipulation

One tool does everything: scripts/deck.py. You write a JSON patch describing your edits; deck.py validates and executes it atomically, then lints the result. You never need to open slide XML for routine work.

Golden rules (the tool enforces and repeats these):

  • ALL slide indices are 0-based, everywhere. Shapes are addressed by stable native ids (s12) or unique shape name.
  • Positions and sizes are inches from the slide's top-left.
  • Patches are atomic: every op is pre-validated (all errors reported at once, with the slide's real shape listing), then applied all-or-nothing.

Full reference: python scripts/deck.py docs — prints every op with semantics and recipes; needs no file. Read it before writing your first patch.

The edit loop

bash
# 1. READ — cheap orientation first, full JSON only when about to write a patch
python scripts/deck.py deck.pptx inspect --slide 3 --brief   # one line per shape
python scripts/deck.py deck.pptx inspect --slide 3           # full JSON: text+formatting, image rIds, geometry, issues
python scripts/deck.py deck.pptx inspect --issues            # only shapes with geometric problems

# 2. WRITE — one patch, many ops, atomic; chain repair + render of touched slides
python scripts/deck.py deck.pptx apply patch.json -o out.pptx --fix --render img/

# 3. VERIFY — look at what you changed
#    (render names files slide-<0-based-index>.jpg to match inspect)
python scripts/deck.py deck.pptx diff out.pptx               # structural changelog, no rendering

--fix runs deterministic geometry repair on the slides you touched (grows/shrinks/nudges overflowing text; never auto-moves pictures). Its residue report lists what still needs judgment, with a suggested op. Always look at the rendered image before declaring success.

Patch ops at a glance

json
{"ops": [
  {"op":"set-text",    "slide":3, "shape":"s12", "text":["Title", "Subtitle"]},
  {"op":"swap-image",  "slide":3, "shape":"s9",  "image":"/abs/new.png"},
  {"op":"swap-image",  "media":"image13.png",    "image":"/abs/logo.png"},
  {"op":"replace-text","scope":"deck", "from":"Old Name", "to":"New Name"},
  {"op":"replace-color","scope":"deck", "from":"E8A33D", "to":"F8DE6E"},
  {"op":"set-theme",   "colors":{"accent1":"BB7B19"}, "fonts":{"major":"Georgia"}},
  {"op":"set-props",   "title":"Q3 Review", "author":"Acme"},
  {"op":"set-slide",   "slide":3, "hidden":true, "background":"0F5258"},
  {"op":"set-slide",   "slide":3, "transition":{"type":"fade","speed":"med"}},
  {"op":"set-notes",   "slide":3, "notes":"speaker notes"},
  {"op":"move",        "slide":3, "shape":"s12", "to":[1.0,2.5]},
  {"op":"resize",      "slide":3, "shape":"s12", "size":[4.0,1.5]},
  {"op":"set-style",   "slide":3, "shape":"s12", "font_size":18, "fill":"0B3D3A", "rotation":6, "anchor":"MIDDLE"},
  {"op":"delete",      "slide":3, "shape":"s12"},
  {"op":"duplicate",   "slide":3, "shape":"s12", "offset":[0,1.2], "text":["Fourth pillar"]},
  {"op":"copy-shape",  "from_slide":8, "shape":"s12", "slide":3, "at":[1.0,2.0]},
  {"op":"reorder",     "slide":3, "shape":"s12", "z":"back"},
  {"op":"add-shape",   "slide":3, "kind":"textbox", "at":[1,2], "size":[4,1.5], "text":["…"], "name":"card"},
  {"op":"add-picture", "slide":3, "image":"/abs/img.png", "at":[1,2], "width":4},
  {"op":"add-table",   "slide":3, "at":[1,2], "size":[8,3], "rows":[["A","B"],["1","2"]]},
  {"op":"add-slide",   "layout":"Blank", "at":5},
  {"op":"add-row",     "slide":3, "shape":"s12", "cells":["a","b"]},
  {"op":"delete-col",  "slide":3, "shape":"s12", "col":1}
]}

Key semantics (details in docs):

  • Vertical centering is anchor, not alignment: alignment (set-text) is HORIZONTAL; to center text in a box taller than the text, set "anchor":"MIDDLE" (TOP|MIDDLE|BOTTOM) on set-style or set-text. inspect reports it when it's not the default top. html2patch sets it automatically from the slide's CSS (flex/grid centering).
  • set-text inherits formatting: new paragraph i inherits ALL formatting of old paragraph i — pass plain strings for routine replacement. Pass objects to override ({"text":"Big","font_size":28}), or "runs" for mixed in-paragraph formatting. Table cells: add "cell":[row,col].
  • Prefer duplicate/copy-shape over add-shape when a styled donor exists — new shapes start from PowerPoint defaults, not the deck's design language.
  • add-shape "name" lets later ops in the same patch target the shape it creates.
  • Transitions only on request: never add slide transitions unless the user explicitly asks — applied uninvited or inconsistently they're annoying, not polish. When asked, default to one subtle type (fade) across the whole deck.
  • Alignment is linted, advisory: inspect/apply report a misaligned issue when a shape's load-bearing edge sits a hair (0.03"–0.15") off a gridline ≥3 other shapes share — the near-miss that reads as sloppy. Act on it (move/resize the edge to the named coordinate) or ignore it: intentional asymmetry is real, so it never fails the build, and apply reports only a newly introduced near-miss.
  • Keep new text comparable in length to the old, or let fix repair the overflow.

Creating slides from HTML (html2patch)

When a slide should be DESIGNED from scratch — free-form layout, no styled donor to duplicate — write it as HTML/CSS and compile it into a patch. The browser is used as a measuring engine; the output is ordinary deck.py ops.

Before writing any slide HTML, read designing-slides.md — how to design for this medium: subject-derived palettes, refusing the default AI-deck looks, the token plan, projection type sizes, and what survives compilation. The pipeline below is mechanical; that file is taste.

bash
python scripts/html2patch.py slide.html --deck deck.pptx --layout Blank -o patch.json
python scripts/deck.py deck.pptx apply patch.json -o out.pptx --render img/
  • The <body> is the slide at 96px/inch: 16:9 → width:1280px; height:720px. Content overflowing the body is a compile error.
  • Text lives in <p>, <h1>–<h6>, <ul>/<ol> (numbered), <table>, or any element with inline-only content (figcaption, blockquote…). Divs with background / border / border-radius / linear-gradient become styled rects; <img> becomes a picture (local files only; object-fit: cover becomes a real crop); <table> becomes a real table with per-cell fills and measured column widths.
  • Inline <b>/<i>/<u>/<span style> become formatted runs; <a href> becomes a real hyperlink. CSS padding maps to text insets; text-transform, transform:rotate, and vertical writing-mode are honored. Use installed fonts (Arial, Georgia, …).
  • By default each HTML file appends a new slide (add-slide, --layout picks the template layout); --slide N targets an existing slide instead. Multiple files compile into ONE atomic patch.
  • Apply compiled patches WITHOUT --fix first — geometry is browser-measured, so look at the render before repairing; run fix only if the render shows a real problem.
  • NEVER dismiss an overflow or covered_by flag on display-size text without zooming that exact shape: render --slide N --crop l,t,w,h --scale 2. Serif faces wrap differently in PowerPoint than in the browser — a clipped last line is invisible at thumbnail size, especially when it falls behind a picture.
  • Extra dependency: pip install playwright && playwright install chromium.

Deck structure (subcommands, not patch ops)

bash
python scripts/deck.py deck.pptx slides 0,3,3,5 -o out.pptx        # keep these, in this order; repeat = duplicate
python scripts/deck.py deck.pptx merge module.pptx --slides 0,2 --at 12 -o out.pptx
python scripts/deck.py deck.pptx merge --list-layouts              # choose a layout for imported slides
Show full SKILL.md (454 more words)Show less

Building a deck from a template (the human workflow)

  1. slides the template down to the target slide sequence (duplicating repeated layouts).
  2. merge in any reusable modules.
  3. One replace-text patch for global renames (scope master catches footers).
  4. Per-slide patches: inspect --slide N for shape ids, then set-text / swap-image only what you name — nothing else is touched.
  5. apply --fix --render img/ and look at every touched slide.

Verification

  • render -o img/ --slide 3,7 — JPGs named slide-<index>.jpg; --crop l,t,w,h --scale 2 zooms a region (inches, same coordinates as inspect). Hidden slides render only when explicitly listed.
  • diff other.pptx — text/geometry/media/notes changelog without rendering.
  • Thumbnail grids for whole-deck review: python scripts/thumbnail.py deck.pptx --cols 4 (optional second arg = output filename prefix).
Reviewing more than a slide or two — fan out, don't accumulate

Rendered images and full inspect dumps are the heaviest things you put in context, and they never leave it: one agent that builds the deck and then reviews every slide re-reads every image and dump it has ever seen on every later turn, so cost grows with the square of the work. The fix is context discipline, not fewer checks.

When more than a slide or two needs visual review, AND you have a sub-agent / Task tool available, fan the review out — one sub-agent per slide (or per small batch):

  • Give each sub-agent a fresh, minimal context: the deck path + that one slide's render + its inspect --slide N. NOT your build history, the other slides, or their renders. This is the whole point — each review context stays small, and they run in parallel.
  • Each sub-agent returns a verdict only — pass, or the specific defects with shape ids and the fix/patch ops to apply. It does not hand the image back to you.
  • You apply the fixes from the verdicts, then (if needed) fan out one more round on only the slides that changed.

Even during the build, don't hoard renders in your own thread. Look at a render, act on it, and move on — don't carry a growing pile of slide JPGs forward. If you're visually checking many slides, delegate the looking so the images live in the sub-agents' contexts, not yours.

No sub-agent tool available? Render and review in small batches and drop earlier slides' images from context once you've judged them — same principle, manual.

Escape hatch

When no op expresses the change (animations, exotic effects):

bash
python scripts/deck.py deck.pptx xml get --slide 5 -o slide5.xml   # pretty-printed, editable
python scripts/deck.py deck.pptx xml set slide5.xml --slide 5 -o out.pptx   # parse-checked, lint-checked

Out of scope by design (use the escape hatch or PowerPoint itself): creating native charts, shape animations (slide transitions ARE covered — set-slide "transition"; verify them with inspect/diff, since renders are static), embedded video/OLE, merged table cells.

Dependencies

  • Python 3.9+ with python-pptx and Pillow (pip install python-pptx Pillow)
  • For render and thumbnails: LibreOffice (soffice) and Poppler (pdftoppm)

© EveryInc, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 8 other files (scripts) in skills/hands-on-deck of EveryInc/hands-on-deck.

  • SKILL.md
  • designing-slides.md
  • scripts/deck.py
  • scripts/html2patch.py
  • scripts/inventory.py
  • scripts/merge_decks.py
  • scripts/rearrange.py
  • scripts/replace.py
  • scripts/thumbnail.py

Open the folder on GitHubat commit a24b996

Compare with similar skills

PPTX Deck Editor next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

PPTX Deck Editor compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
PPTX Deck Editor this skillEveryInc/hands-on-deck219—~2.9kAutomated safety check: PassMIT
PPT Masterhugohe3/ppt-master58k1 repos~2.5kAutomated safety check: PassMIT
Image to Editable PPTXYuan1z0825/nature-skills46k—~2.5kAutomated safety check: PassMIT
Open Kimi Pptjinwyp/open-ppt-skill1562 repos~5.1kAutomated safety check: PassMIT
McKinsey-Style PPT Designlikaku/Mck-ppt-design-skill296—~2.1kAutomated safety check: PassApache-2.0
AI Image PowerPoint Generatorbytedance/deer-flow83k4 repos~7.1kAutomated safety check: PassMIT

Similar skills

  • PPT Master

    hugohe3/ppt-master

    Generates editable PowerPoint decks, rebuilds slides from images, fills .pptx templates and polishes existing presentations through routed workflows.

    58k GitHub starsUsed in 1 repo~2.5k tokens
    Documents & OfficeAuto-check passed
  • Image to Editable PPTX

    Yuan1z0825/nature-skills

    Rebuilds slide images, screenshots, scanned PDFs or image-only PPTX files as PowerPoint with editable objects, using a local CLI with per-page manifests and QA.

    46k GitHub stars~2.5k tokensUpdated today
    Documents & OfficeAuto-check passed
  • Open Kimi Ppt

    jinwyp/open-ppt-skill

    Create, edit, replicate, read, and export presentations. An agent skill from jinwyp/open-ppt-skill.

    156 GitHub starsUsed in 2 repos~5.1k tokens
    Documents & OfficeAuto-check passed
  • McKinsey-Style PPT Design

    likaku/Mck-ppt-design-skill

    Builds consultant-style PowerPoint decks from scratch with the MckEngine python-pptx wrapper, through a five-stage flow with scripted quality gates.

    296 GitHub stars~2.1k tokensUpdated 5 mo ago
    Documents & OfficeAuto-check passed
  • Creates a PowerPoint deck by planning the slide structure, generating one AI image per slide in a chosen visual style, and assembling the images into a PPTX file.

    83k GitHub starsUsed in 4 repos~7.1k tokens
    Documents & OfficeAuto-check passed
  • PowerPoint Reader and Builder

    TokenRhythm/opensquilla

    Reads, edits in place, or creates PowerPoint .pptx decks, picking one of three paths based on what tools and files are available.

    7.1k GitHub stars~3.8k tokensUpdated 2 days ago
    Documents & OfficeAuto-check: notes

Questions about PPTX Deck Editor

What does PPTX Deck Editor do?

Reads, edits, creates, merges and visually verifies .pptx decks through one script, deck.py, which applies atomic JSON patches. py, so it never needs to touch slide XML for routine work.py validates every op first, reporting all errors at once with the slide's real shape listing, then applies the patch all-or-nothing and lints the result.

When should I use PPTX Deck Editor?

PPTX Deck Editor fits situations like: editing text, images or layout in an existing PowerPoint deck; building new slides with shapes, tables or pictures; merging or reordering slides across decks; checking a deck visually after changes.

How do I install PPTX Deck Editor in Claude Code?

Run `npx skills add EveryInc/hands-on-deck --skill hands-on-deck -a claude-code`. Or copy the skill folder (skills/hands-on-deck in EveryInc/hands-on-deck) into .claude/skills/hands-on-deck in your project. Claude Code loads it when a task matches its description.

How do I install PPTX Deck Editor in Codex?

Run `npx skills add EveryInc/hands-on-deck --skill hands-on-deck -a codex`. Or copy the skill folder (skills/hands-on-deck in EveryInc/hands-on-deck) into .agents/skills/hands-on-deck in your project. Codex loads it when a task matches its description.

Can I use PPTX Deck Editor in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add EveryInc/hands-on-deck --skill hands-on-deck -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/hands-on-deck, .gemini/skills/hands-on-deck, .github/skills/hands-on-deck and .opencode/skills/hands-on-deck in your project.

What does PPTX Deck Editor need to run?

Going by SKILL.md and its folder, PPTX Deck Editor needs Python for the scripts in its folder and the command-line tools its instructions call (python, pip and playwright). Our summary lists: Python 3 to run scripts/deck.py.

Does PPTX Deck Editor access the network?

SKILL.md contains no URLs. Its commands use pip, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is PPTX Deck Editor safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does PPTX Deck Editor use?

PPTX Deck Editor is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does PPTX Deck Editor use?

About 2.9k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to PPTX Deck Editor?

Skills that share tags, products or a category with PPTX Deck Editor: PPT Master (hugohe3/ppt-master, 58k stars), Image to Editable PPTX (Yuan1z0825/nature-skills, 46k stars), Open Kimi Ppt (jinwyp/open-ppt-skill, 156 stars) and McKinsey-Style PPT Design (likaku/Mck-ppt-design-skill, 296 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains PPTX Deck Editor?

EveryInc (a GitHub organization) maintains it in EveryInc/hands-on-deck, which has 219 GitHub stars. The repository was last updated on August 4, 2026.

Source: EveryInc/hands-on-deck on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.