Not in the top 1,000 by GitHub stars
EveryInc/hands-on-deck
Agent-native PowerPoint manipulation — one CLI lets AI agents inspect, edit, create, and verify .pptx files through atomic JSON patches. Packaged as an Agent Skill.
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
skills/hands-on-deck/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Local scripts
First observation → a24b996ecff6
No earlier version was observed for comparison.
Verified commit a24b996ecff6393ccf39c4fee2b88c493fb0b693
git clone --filter=blob:none --no-checkout https://github.com/EveryInc/hands-on-deck.git .hotskills/everyinc-hands-on-deck && git -C .hotskills/everyinc-hands-on-deck checkout --detach a24b996ecff6393ccf39c4fee2b88c493fb0b693
# Copy each selected skill directory from .hotskills/everyinc-hands-on-deck into .claude/skills/<skill-name>/Heat
4.0- Star growth, last 7 daysNot available
- Star growth, last 24 hoursNot available
- Rank movement, last 7 daysNot available
- Commits, last 30 daysNot available
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekNot available
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
30-day change not yet available: not enough history.
Individual skills in this repository
- hands-on-deck
skills/hands-on-deck
How it works
hands-on-deck
When your agent uses it
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.
What it loads into context
Frontmatter
107 tokensAlways available to the agent
SKILL.md
3,094 tokensWhen the skill is activated
Reference documents
1,610 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- The edit loop
- Patch ops at a glance
- Creating slides from HTML (html2patch)
- Deck structure (subcommands, not patch ops)
- Building a deck from a template (the human workflow)
- Verification
- Escape hatch
- Dependencies
Scripts executed separately
scripts/deck.pyscripts/html2patch.pyscripts/inventory.pyscripts/merge_decks.pyscripts/rearrange.pyscripts/replace.pyscripts/thumbnail.py
Files
../../.claude-plugin/marketplace.jsonasset624 bytes../../.claude-plugin/plugin.jsonasset365 bytesSKILL.mdcore11,685 bytesSKILL.mdcore11,685 bytesSKILL.mdcore11,685 bytesSKILL.mdcore11,685 bytesSKILL.mdcore11,685 bytesdesigning-slides.mddoc6,883 bytesscripts/deck.pyruns142,519 bytesscripts/html2patch.pyruns35,702 bytesscripts/inventory.pyruns41,294 bytesscripts/merge_decks.pyruns10,648 bytesscripts/rearrange.pyruns8,496 bytesscripts/replace.pyruns13,957 bytesscripts/thumbnail.pyruns15,484 bytes
Read SKILL.md
# 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
```bashView the complete source on GitHubSkills included
- hands-on-deck
Repository facts
- License
- MIT
- Created
- Jun 9, 2026
- Last pushed
- Aug 4, 2026
- Forks
- 17
- Open issues
- 4
- Project activity
- Slowing
Before you install
Local scriptsAutomated signals, not a guarantee
Checked Nov 6, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 4 notes
skills/hands-on-deck/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/hands-on-deck/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/hands-on-deck/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/hands-on-deck/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- No dangerous shell commands
- 23 network referencesin 4 files: hands-on-deck/scripts/deck.py:101 hands-on-deck/scripts/merge_decks.py:46 hands-on-deck/scripts/rearrange.py:102 and 1 more
- 1 obfuscation signalin 1 file: hands-on-deck/scripts/html2patch.py:480
- No instruction overrides
- 7 executable scriptsin 7 files: hands-on-deck/scripts/deck.py:1 hands-on-deck/scripts/html2patch.py:1 hands-on-deck/scripts/inventory.py:1 and 4 more
- No access to secrets
- No requests to vote in Hot
Show all 31 signals by file
skills/hands-on-deck/scripts/deck.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 101
EMU_PER_IN = 914400 IMAGE_RELTYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" - Network accessline 102
IMAGE_RELTYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" - Network accessline 1257
raise PatchError("background image not found: %s" % path) image_part, rid = slide.part.get_or_add_image_part(str(path)) a = "http://schemas.openxmlformats.org/drawingml/2006/main" - Network accessline 1258
image_part, rid = slide.part.get_or_add_image_part(str(path)) a = "http://schemas.openxmlformats.org/drawingml/2006/main" bg_el = csld.makeelement(qn("p:bg"), {}) - Network accessline 1259
a = "http://schemas.openxmlformats.org/drawingml/2006/main" - Network accessline 1285
THEME_COLOR_KEYS = ("dk1", "lt1", "dk2", "lt2", "accent1", "accent2", "accent3", "accent4", "accent5", "accent6", "hlink", "folHlink") A_NS = "http://schemas.openxmlformats.org/drawingml/2006/main" - Network accessline 1287
A_NS = "http://schemas.openxmlformats.org/drawingml/2006/main" - Network accessline 2856
Every run inherits the OLD paragraph's first-run font, then its own keys override (per-run keys: bold, italic, underline, font_size, font_name, color, theme_color, link). "link":"https://…" makes the run a hyperlink - Network accessline 2857
override (per-run keys: bold, italic, underline, font_size, font_name, color, theme_color, link). "link":"https://…" makes the run a hyperlink (null/"" removes one); works on plain paragraph objects too. Paragraph - Network accessline 2858
color, theme_color, link). "link":"https://…" makes the run a hyperlink
skills/hands-on-deck/scripts/html2patch.py
skills/hands-on-deck/scripts/inventory.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 208
): pPr = paragraph._p.pPr ns = "{http://schemas.openxmlformats.org/drawingml/2006/main}" - Network accessline 209
pPr = paragraph._p.pPr ns = "{http://schemas.openxmlformats.org/drawingml/2006/main}" if ( - Network accessline 210
ns = "{http://schemas.openxmlformats.org/drawingml/2006/main}"
skills/hands-on-deck/scripts/merge_decks.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 46
IMAGE_RELTYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" - Network accessline 47
HYPERLINK_RELTYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink" - Network accessline 49
STRUCTURAL_RELTYPES = { "http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout", - Network accessline 50
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout", - Network accessline 51
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesSlide",
skills/hands-on-deck/scripts/rearrange.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 102
for blip in blips: old_rId = blip.get( "{http://schemas.openxmlformats.org/officeDocument/2006/relationships}embed" - Network accessline 103
old_rId = blip.get( "{http://schemas.openxmlformats.org/officeDocument/2006/relationships}embed" ) - Network accessline 104
"{http://schemas.openxmlformats.org/officeDocument/2006/relationships}embed" - Network accessline 114
blip.set( "{http://schemas.openxmlformats.org/officeDocument/2006/relationships}embed", - Network accessline 115
"{http://schemas.openxmlformats.org/officeDocument/2006/relationships}embed",
skills/hands-on-deck/scripts/replace.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/hands-on-deck/scripts/thumbnail.py
- Executable scriptline 1
#!/usr/bin/env python3
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Declared and executed: 4 facts
- Contacts schemas.openxmlformats.org, which SKILL.md, the README and the plugin manifest do not mentionhands-on-deck/scripts/deck.py:102High confidence
- Contacts schemas.openxmlformats.org, which SKILL.md, the README and the plugin manifest do not mentionhands-on-deck/scripts/inventory.py:210High confidence
- Contacts schemas.openxmlformats.org, which SKILL.md, the README and the plugin manifest do not mentionhands-on-deck/scripts/merge_decks.py:46High confidence
- Contacts schemas.openxmlformats.org, which SKILL.md, the README and the plugin manifest do not mentionhands-on-deck/scripts/rearrange.py:104High confidence
Signal confidence: 31 facts
- Executable script in code of a file that runshands-on-deck/scripts/deck.py:1High confidence
- Network access in code of a file that runshands-on-deck/scripts/deck.py:101High confidence
- Network access in code of a file that runshands-on-deck/scripts/deck.py:102High confidence
- Network access in code of a file that runshands-on-deck/scripts/deck.py:1257High confidence
- Network access in code of a file that runshands-on-deck/scripts/deck.py:1258High confidence
- Network access in code of a file that runshands-on-deck/scripts/deck.py:1259High confidence
- Network access in code of a file that runshands-on-deck/scripts/deck.py:1285High confidence
- Network access in code of a file that runshands-on-deck/scripts/deck.py:1287High confidence
- Network access in code of a file that runshands-on-deck/scripts/deck.py:2856High confidence
- Network access in code of a file that runshands-on-deck/scripts/deck.py:2857High confidence
- Network access in code of a file that runshands-on-deck/scripts/deck.py:2858High confidence
- Executable script in code of a file that runshands-on-deck/scripts/html2patch.py:1High confidence
- Possible obfuscation in code of a file that runshands-on-deck/scripts/html2patch.py:480High confidence
- Executable script in code of a file that runshands-on-deck/scripts/inventory.py:1High confidence
- Network access in code of a file that runshands-on-deck/scripts/inventory.py:208High confidence
- Network access in code of a file that runshands-on-deck/scripts/inventory.py:209High confidence
- Network access in code of a file that runshands-on-deck/scripts/inventory.py:210High confidence
- Executable script in code of a file that runshands-on-deck/scripts/merge_decks.py:1High confidence
- Network access in code of a file that runshands-on-deck/scripts/merge_decks.py:46High confidence
- Network access in code of a file that runshands-on-deck/scripts/merge_decks.py:47High confidence
- Network access in code of a file that runshands-on-deck/scripts/merge_decks.py:49High confidence
- Network access in code of a file that runshands-on-deck/scripts/merge_decks.py:50High confidence
- Network access in code of a file that runshands-on-deck/scripts/merge_decks.py:51High confidence
- Executable script in code of a file that runshands-on-deck/scripts/rearrange.py:1High confidence
- Network access in code of a file that runshands-on-deck/scripts/rearrange.py:102High confidence
- Network access in code of a file that runshands-on-deck/scripts/rearrange.py:103High confidence
- Network access in code of a file that runshands-on-deck/scripts/rearrange.py:104High confidence
- Network access in code of a file that runshands-on-deck/scripts/rearrange.py:114High confidence
- Network access in code of a file that runshands-on-deck/scripts/rearrange.py:115High confidence
- Executable script in code of a file that runshands-on-deck/scripts/replace.py:1High confidence
- Executable script in code of a file that runshands-on-deck/scripts/thumbnail.py:1High confidence
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Manifest .claude-plugin/marketplace.json | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md skills/hands-on-deck/SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md skills/hands-on-deck/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md skills/hands-on-deck/SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md skills/hands-on-deck/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md skills/hands-on-deck/SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.