Agent skill

Powerpoint

by NousResearch in NousResearch/hermes-agent

Create, read, edit .pptx decks with python-pptx. An agent skill from NousResearch/hermes-agent.

MITAuto-check passedDocuments & Office

Install Powerpoint

skills CLI
$ npx skills add NousResearch/hermes-agent --skill powerpoint -a claude-code

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

GitHub CLI
$ gh skill install NousResearch/hermes-agent powerpoint --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/NousResearch/hermes-agent.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/productivity/powerpoint .claude/skills/powerpoint && 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
powerpoint
GitHub stars
252k
Token cost
~2.7k tokens
SKILL.md length
1,267 words
Files
8 (incl. scripts)
Skills in repo
32
Repo updated
First seen
Licence
MIT

At a glance

Create, read, edit .pptx decks with python-pptx. An agent skill from NousResearch/hermes-agent.

  • Works in 5 steps: Create a deck → Read a deck → Edit a deck → …
  • Tasks that involve PowerPoint presentations
  • SKILL.md covers When to Use, Prerequisites, How to Run and Quick Reference, plus 4 more sections
  • Runs Python scripts from its folder; calls python, soffice and pip

What it does

Powerpoint is an agent skill from NousResearch/hermes-agent. Create, read, edit .pptx decks with python-pptx.

Its SKILL.md is about 2.7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 9 other files, including scripts (for example `scripts/pptx_create.py`, `scripts/pptx_edit.py` and `scripts/pptx_from_template.py`).

It sits in Documents & Office, covering PowerPoint presentations. It works with Microsoft PowerPoint, python-pptx and LibreOffice. The repository describes itself as: The agent that grows with you. The licence is MIT.

When your agent uses it

  • Tasks that involve PowerPoint presentations

Example prompts

  • “/powerpoint”

Requirements

  • Python 3

Workflow steps

5 steps, taken from the step headings in SKILL.md.

  1. Create a deck
  2. Read a deck
  3. Edit a deck
  4. Build from a template
  5. Visual verification

What it can do on your machine

Read from SKILL.md and the folder at commit 2966cb6. 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 5 files in scripts/ (Python), which the agent can run.

    Shell commands in SKILL.md call:

    • python
    • soffice
    • pip

    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

Powerpoint loads about 2.7k tokens when it runs. Until then it costs about 15 tokens; SKILL.md has 1,267 words of instructions outside code blocks.

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

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 NousResearch/hermes-agent at commit 2966cb6, republished under its MIT licence (© NousResearch). 1,267 words, ~2,689 tokens.

Download SKILL.mdSave it as .claude/skills/powerpoint/SKILL.md (or your agent's skills folder). This skill also uses 7 other files; get the full folder from GitHub.
name
powerpoint
description
Create, read, edit .pptx decks with python-pptx.
version
1.1.0
author
Nous Research
license
MIT
platforms
linux, macos, windows

Powerpoint Skill

Create, inspect, and edit PowerPoint (.pptx) presentations using the python-pptx library. Five helper scripts cover deck creation from a JSON spec, structured read-back, in-place edits, template-driven brand decks, and slide rendering — all offline, no PowerPoint installation required.

When to Use

  • The user asks to build a slide deck, report presentation, or pitch deck.
  • You need to extract text, notes, tables, chart data, or images from a .pptx someone shared.
  • You need to update an existing deck: replace text, refresh or patch chart data, swap a logo, duplicate/remove/reorder slides, set backgrounds, footers, hyperlinks, or speaker notes.
  • You must produce an on-brand deck from a company .pptx template.
  • Do NOT use this for .ppt (legacy binary) files — convert them first with soffice --convert-to pptx old.ppt if LibreOffice is available.

Prerequisites

  • Python 3.10+ with python-pptx installed (pip install python-pptx).
  • Optional: LibreOffice (soffice) plus poppler (pdftoppm or pdftocairo) for rendering slides to PNGs and for PDF export. pptx_render.py detects both with shutil.which and degrades gracefully (reports {"rendered": false, "missing": [...]}, exit 0) when absent — all create/read/edit operations work without them.
  • Check availability via terminal: python -c "import pptx; print(pptx.__version__)" and which soffice pdftoppm.

How to Run

All scripts live in scripts/, take --help, print JSON to stdout, and exit non-zero on failure. Run them with terminal:

bash
python scripts/pptx_create.py deck.json out.pptx
python scripts/pptx_read.py deck.pptx --outline      # full JSON outline
python scripts/pptx_read.py deck.pptx --notes        # speaker notes
python scripts/pptx_read.py deck.pptx --images ./img # export pictures
python scripts/pptx_edit.py deck.pptx --replace-text "Old Corp" "New Corp"
python scripts/pptx_edit.py deck.pptx --chart-data update.json
python scripts/pptx_edit.py deck.pptx --duplicate-slide 2
python scripts/pptx_edit.py deck.pptx --remove-slide 3 --move-slide 2 0
python scripts/pptx_from_template.py brand.pptx out.pptx --values vals.json
python scripts/pptx_render.py deck.pptx --outdir ./render  # slide PNGs

Author JSON specs with write_file; inspect script output and generated JSON with read_file.

Quick Reference

TaskCommand
New deck from specpptx_create.py spec.json out.pptx
16:9 vs 4:3"slide_size": "16:9" or "4:3" in the spec
Outline as JSONpptx_read.py deck.pptx --outline
Export imagespptx_read.py deck.pptx --images DIR
Replace textpptx_edit.py deck.pptx --replace-text OLD NEW
Replace chart datapptx_edit.py deck.pptx --chart-data spec.json
Patch one seriessame flag, spec with "ops" (see below)
Swap picturepptx_edit.py deck.pptx --swap-image N NAME new.png
Duplicate slidepptx_edit.py deck.pptx --duplicate-slide N
Remove slidepptx_edit.py deck.pptx --remove-slide N
Reorder slidepptx_edit.py deck.pptx --move-slide FROM TO
Slide backgroundpptx_edit.py deck.pptx --set-background N RRGGBB
Hyperlink runspptx_edit.py deck.pptx --hyperlink N TEXT URL
Slide number onpptx_edit.py deck.pptx --enable-slide-number N
Footer textpptx_edit.py deck.pptx --set-footer N TEXT
Set notespptx_edit.py deck.pptx --set-notes N TEXT
Append notespptx_edit.py deck.pptx --append-notes N TEXT
Fill templatepptx_from_template.py tpl.pptx out.pptx --values v.json
Render slide PNGspptx_render.py deck.pptx --outdir DIR

Procedure

1. Create a deck

Write a JSON spec (see pptx_create.py --help for the full format), then run pptx_create.py. Per slide you can set: layout (title, title_content, section, two_content, title_only, blank), title, subtitle, bullets (strings, or dicts with level 0-4, size pt, bold, italic, font, color hex, link URL for a hyperlink), background (solid hex), footer (text; enables the layout's footer placeholder), slide_number (true; enables the layout's slide-number placeholder), images (path + left/top/width/height in inches), tables (rows as list-of-lists), shapes (rectangle, rounded_rectangle, oval, diamond, right_arrow, chevron, with fill hex + optional text), charts (bar, bar_h, line, pie with categories + series), and notes (speaker notes).

2. Read a deck

pptx_read.py deck.pptx --outline returns slide size, layout inventory, and per slide: layout name, all shape texts, table cells, image inventory (filename/ext/bytes), chart categories/series/values, and speaker notes. Use --images DIR to dump embedded pictures to files, then vision_analyze on any exported image if you need to see its content.

3. Edit a deck

pptx_edit.py combines operations in one pass; use --output to keep the original. Text replacement scans slide shapes, table cells, and notes. Image swap retargets the picture's relationship id so position and size are preserved. Slide removal drops the relationship and the <p:sldId> entry; reorder moves the <p:sldId> element within <p:sldIdLst> (python-pptx has no public API for either — the script does the XML-level work). --duplicate-slide N appends an independent deep copy of slide N: shape XML plus image/media/hyperlink relationships are cloned and rIds remapped, so editing the copy never touches the original. Chart slides are refused (see Pitfalls). --set-notes/--append-notes edit speaker notes; --set-background, --hyperlink, --enable-slide-number, and --set-footer handle deck polish.

Chart updates take a JSON spec via --chart-data. Full replace: {"slide": 0, "chart": 0, "categories": [...], "series": {...}}. For surgical edits, pass "ops" instead — a list of {"op": "update_series", "name": ..., "values": [...]}, add_series, remove_series, rename_category (from/to or index), and set_title. python-pptx can only swap a chart's entire dataset (replace_data), so ops are implemented as read-existing → modify → replace; the per-part UX is a wrapper, and any chart data not expressible as categories + numeric series will be normalized by the round-trip.

4. Build from a template

pptx_from_template.py opens a brand .pptx, replaces every {{token}} from a values JSON across slides/tables/notes, and can append new slides that use the template's own layouts (by layout name or index) so they inherit the master's fonts and colors. Tip: to start from a template with zero slides, delete existing ones afterward with pptx_edit.py --remove-slide.

Show full SKILL.md (498 more words)Show less
5. Visual verification

pptx_render.py deck.pptx --outdir ./render converts the deck to PDF with soffice --headless and splits it into one PNG per slide with pdftoppm (or pdftocairo). Output JSON lists the PNG paths — review each with vision_analyze. When either tool is missing the script exits 0 with {"rendered": false, "missing": [...]} and guidance; fall back to the JSON outline from pptx_read.py, which verifies content and structure, just not visuals.

Converting to PDF

If LibreOffice is installed, export the finished deck to PDF directly:

bash
soffice --headless --convert-to pdf --outdir ./out deck.pptx

The output lands at ./out/deck.pdf. Fonts not installed on the host are substituted, so render-verify (Procedure step 5) before shipping the PDF. There is no offline pure-Python .pptx→PDF path; if soffice is absent, say so rather than approximating.

Pitfalls

  • Run splitting: PowerPoint fragments paragraph text into runs at spell-check and edit boundaries. --replace-text first merges adjacent runs whose formatting is identical, so matches split across such runs are replaced with formatting fully preserved. Only when a match spans genuinely differently-formatted runs is the paragraph rewritten with the first run's formatting — verify those slides after replacement.
  • Chart slides cannot be duplicated: each chart relationship embeds a separate XLSX workbook part; cloning that graph reliably is not supported, so --duplicate-slide refuses chart slides cleanly instead of corrupting the deck. Rebuild the chart on a new slide instead. External-hyperlink and image/media rels are carried over; layout and notes rels are recreated fresh.
  • Chart ops are a wrapper: python-pptx replaces the whole dataset; "ops" round-trips existing plot data through replace_data, and changing chart type is not possible.
  • Reordering is XML-level: python-pptx has no supported reorder API. --move-slide manipulates <p:sldIdLst> directly; safe for ordinary decks but re-read the deck afterward to confirm.
  • Copying slides between decks is unsupported — duplication works only within one deck, where layouts and masters are shared.
  • Footer/slide-number enablement copies the placeholder from the slide's layout; on layouts without those placeholders, --set-footer fails with a clear message (add a textbox instead).
  • Hyperlinks apply to whole runs; --hyperlink links every run containing the given text on that slide.
  • The default python-pptx template is 4:3; the create script sets 16:9 unless the spec says otherwise. Custom templates keep their own size.
  • Layout indexes vary by template. For brand templates, list layout names first: pptx_read.py template.pptx --outline (layouts_available).
  • slide.shapes.title is None on blank layouts — the create script handles this, but remember it when writing ad-hoc python-pptx code.
  • Always pass encoding="utf-8" when writing spec files; tokens like {{city}} may be filled with non-ASCII values.

Verification

  1. After any create/edit, run pptx_read.py OUT.pptx --outline and check slide count, texts, tables, notes, and chart values match intent.
  2. --images DIR then file-size check confirms pictures embedded.
  3. Render every slide with pptx_render.py deck.pptx --outdir ./render and review each PNG with vision_analyze — this catches overlapping shapes, truncated text, and color problems the outline cannot. If the render tools are missing, the script says so; rely on the outline.
  4. The bundled test suite is the full contract: python -m pytest tests/ -q (requires python-pptx + pytest).

© NousResearch, 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 7 other files (scripts) in skills/productivity/powerpoint of NousResearch/hermes-agent.

  • SKILL.md
  • LICENSE
  • scripts/pptx_create.py
  • scripts/pptx_edit.py
  • scripts/pptx_from_template.py
  • scripts/pptx_read.py
  • scripts/pptx_render.py
  • tests/test_powerpoint_skill.py

Open the folder on GitHubat commit 2966cb6

Compare with similar skills

Powerpoint 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.

Powerpoint compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Powerpoint this skillNousResearch/hermes-agent252k—~2.7kAutomated safety check: PassMIT
PPTXguyi-a/pi-ling106—~2.3kAutomated safety check: PassProprietary
PPTXnexus-research-lab/nexus150—~484Automated safety check: PassApache-2.0
PPTXholon-run/holon153—~1kAutomated safety check: PassApache-2.0
PPTXHybridAIOne/hybridclaw158—~1kAutomated safety check: PassMIT
PowerPoint Decksanthropics/skills180k7 repos~5.2kAutomated safety check: PassProprietary

Similar skills

  • PPTX

    guyi-a/pi-ling

    PowerPoint 幻灯片(.pptx / .potx)的所有操作:从零生成(pptxgenjs Node 库)、基于模板编辑(unpack XML → 改 → clean → pack)、格式转化(pptx → PDF / 图片、.ppt → .pptx)、读取分析。触发场景:用户说"做份 PPT" / "生成幻灯片" / "演讲 slide" / "培训材料" / "项目汇报" /…

    106 GitHub stars~2.3k tokensUpdated 22 days ago
    Documents & OfficeAuto-check passed
  • PPTX

    nexus-research-lab/nexus

    只要 PowerPoint 演示文稿或模板(.pptx、.potx、旧版 .ppt)是任务的输入或输出,或者需要 被打开、读取、创建、修改,就使用本 Skill。用户提到幻灯片、deck、演示文稿或 PowerPoint 文件时也应触发,包括内容提取、模板套用、页面增删、图表、图片和演讲者备注。

    150 GitHub stars~484 tokensUpdated yesterday
    Documents & OfficeAuto-check passed
  • PPTX

    holon-run/holon

    Create, inspect, edit, render, and validate PowerPoint presentations with local open-source tools while preserving source files and reporting fidelity limits.

    153 GitHub stars~1k tokensUpdated today
    Documents & OfficeAuto-check passed
  • PPTX

    HybridAIOne/hybridclaw

    Create and edit .pptx presentations safely, export thumbnails for QA, and build polished decks with pptxgenjs plus OOXML editing.

    158 GitHub stars~1k tokensUpdated yesterday
    Documents & OfficeAuto-check passed
  • PowerPoint Decks

    anthropics/skills

    Official

    Creates, edits, reads and validates .pptx and .potx files, using pptxgenjs for new decks and direct XML edits for existing ones, with helper scripts for thumbnails and checks.

    180k GitHub starsUsed in 7 repos~5.2k tokens
    Documents & OfficeAuto-check passed
  • PPTX Skill (Chinese)

    agentscope-ai/QwenPaw

    Chinese-language guide for reading, editing and building PowerPoint decks: text extraction, template editing and from-scratch creation with pptxgenjs.

    35k GitHub stars~1.3k tokensUpdated today
    Documents & OfficeAuto-check passed

More from NousResearch/hermes-agent

All 32 skills in this repo
  • Google Workspace

    NousResearch/hermes-agent

    Gmail, Calendar, Drive, Docs, Sheets via gws CLI or Python. An agent skill from NousResearch/hermes-agent.

    252k GitHub starsUsed in 3 repos~3.5k tokens
    Auto-check passed
  • AI Presenter Video

    NousResearch/hermes-agent

    Produces a presenter-led video from a topic or script plus one authorized presenter image, with captions, lip-sync checks and acceptance reports.

    252k GitHub stars~2.3k tokensUpdated today
    Auto-check passed
  • Word DOCX Toolkit

    NousResearch/hermes-agent

    Creates, reads, edits and templates Word .docx files with python-docx scripts, including tracked changes, comments, tables of contents and health checks.

    252k GitHub stars~2.6k tokensUpdated today
    Auto-check passed
  • Grounded Citations

    NousResearch/hermes-agent

    Attaches a numbered, URL-backed citation to every outside fact in an answer or document, rejecting quotes that aren't real.

    252k GitHub stars~3.1k tokensUpdated today
    Auto-check passed
  • PDF

    NousResearch/hermes-agent

    PDF files: create, read, merge, fill, OCR, edit text. An agent skill from NousResearch/hermes-agent.

    252k GitHub stars~3.1k tokensUpdated today
    Auto-check passed
  • Scrollcraft

    NousResearch/hermes-agent

    Premium scroll-driven landing pages; scroll = timeline. An agent skill from NousResearch/hermes-agent.

    252k GitHub stars~3k tokensUpdated today
    Auto-check passed

Questions about Powerpoint

What does Powerpoint do?

Create, read, edit .pptx decks with python-pptx. An agent skill from NousResearch/hermes-agent. Powerpoint is an agent skill from NousResearch/hermes-agent.pptx decks with python-pptx.

When should I use Powerpoint?

Powerpoint fits situations like: tasks that involve PowerPoint presentations.

How do I install Powerpoint in Claude Code?

Run `npx skills add NousResearch/hermes-agent --skill powerpoint -a claude-code`. Or copy the skill folder (skills/productivity/powerpoint in NousResearch/hermes-agent) into .claude/skills/powerpoint in your project. Claude Code loads it when a task matches its description.

How do I install Powerpoint in Codex?

Run `npx skills add NousResearch/hermes-agent --skill powerpoint -a codex`. Or copy the skill folder (skills/productivity/powerpoint in NousResearch/hermes-agent) into .agents/skills/powerpoint in your project. Codex loads it when a task matches its description.

Can I use Powerpoint 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 NousResearch/hermes-agent --skill powerpoint -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/powerpoint, .gemini/skills/powerpoint, .github/skills/powerpoint and .opencode/skills/powerpoint in your project.

What does Powerpoint need to run?

Going by SKILL.md and its folder, Powerpoint needs Python for the scripts in its folder and the command-line tools its instructions call (python, soffice and pip). Our summary lists: Python 3.

Does Powerpoint 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 Powerpoint 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 Powerpoint use?

Powerpoint is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Powerpoint use?

About 2.7k tokens (SKILL.md is roughly 11k 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 Powerpoint?

Skills that share tags, products or a category with Powerpoint: PPTX (guyi-a/pi-ling, 106 stars), PPTX (nexus-research-lab/nexus, 150 stars), PPTX (holon-run/holon, 153 stars) and PPTX (HybridAIOne/hybridclaw, 158 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Powerpoint?

NousResearch (a GitHub organization) maintains it in NousResearch/hermes-agent, which has 251,991 GitHub stars. The repository holds 32 skills in this directory. The repository was last updated on October 8, 2026.

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