Claude Keynote Skill banner
aperrault aperrault

Claude Keynote Skill

Development community

Description

Claude Code skill: read, render and edit Apple Keynote decks, including the LaTeX of every equation

Installation

This entry records only its repository, not the path inside it, so there is no exact command to give. Open the source below and copy the folder into ~/.claude/skills/, or the file into ~/.claude/agents/.

README

claude-keynote-skill

A [Claude Code](https://docs.anthropic.com/en/docs/claude-code) skill for reading, rendering and editing Apple Keynote decks on macOS — including the LaTeX of every equation, which no AppleScript interface exposes.

Two layers, used together:

scripts/keynote.py scripts/keynote_iwa.py
mechanism AppleScript/JXA against the running Keynote edits the .key package directly (via keynote-parser)
reads text, presenter notes, layouts, images, geometry; renders slides to JPEG text with inline $latex$, every equation's source
writes notes, plain text, text boxes, images, slides (add / move / delete / rebuild), sizes equation LaTeX (edit and create), text that contains math, paragraph/list styles
needs Keynote open (opens it for you) closed — refuses to run otherwise

Why the package layer: each Keynote equation is a rendered PDF plus its LaTeX source; Keynote re-typesets from the source on open, so editing math is editing a string, and new equations need no PDF. Details in `SKILL.md`.

Install

git clone https://github.com/aperrault/claude-keynote-skill ~/.claude/skills/keynote

Requirements: macOS with Keynote (tested on Keynote 15.1.1; keynote-parser officially supports ≤ 14.5 but round-trips 15.x decks), Python 3.11+, and [`uv`](https://docs.astral.sh/uv/) (the package layer runs as `uv run --with keynote-parser --with pyyaml python scripts/keynote_iwa.py …`). The first AppleScript call prompts for Automation permission.

Safety

This tool rewrites presentation files, so it is built around not losing work:

  • every package edit backs the deck up first; mutating AppleScript commands keep a rolling backup (keynote.py backups DECK lists them);
  • save/close wait until the bytes are on disk and fail loudly if Keynote did not write (Keynote's save is asynchronous — a close right after a save can cancel the wri