Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add shaharsha/claude-skills --skill gslides-syncgit clone --depth 1 https://github.com/shaharsha/claude-skillsWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/shaharsha/claude-skills/gslides-sync)<a href="https://agentmods.dev/skills/shaharsha/claude-skills/gslides-sync"><img src="https://agentmods.dev/badge/skills/shaharsha/claude-skills/gslides-sync/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/shaharsha/claude-skills/gslides-sync"><img src="https://agentmods.dev/badge/skills/shaharsha/claude-skills/gslides-sync.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00136 | $0.02156 |
| Opus 5.5 | $0.00054 | $0.00862 |
| Sonnet 5.5 | $0.00027 | $0.00431 |
| Haiku 4.5 | $0.00014 | $0.00216 |
Grade A, and why
gslides-sync scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2mo ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
- No other deps — uses Python's `urllib` stdlib for HTTP. How it starts
The opening of the file, as written. The whole thing — 119 lines — stays where its author put it; the contents beside it link to each section on GitHub.
gslides-sync
Pushes a local .pptx into an existing Google Slides via the Drive + Slides APIs, then patches things Google's converter gets wrong: broken in-deck slide links, cross-presentation references to sibling Slides files, and oversized images. Optional final pass applies RTL to every text shape for Hebrew/Arabic decks.
The script is a single Python file (scripts/sync-gslides.py) with no install step beyond the Google auth library. It authenticates via a service-account JSON (recommended) or gcloud ADC (fallback). Sister skill to gdoc-sync — same auth model, same five-step pipeline shape, swapped out for Slides.
Quick start
scripts/sync-gslides.py <pptx-file> --pres-id <FILE_ID> --sa-key <service-account.json> \
[--rtl] [--no-links] [--max-image-width 720] \
[--cross-pres-map "other.pptx=OTHER_PRES_ID" ...]
End-to-end example (Hebrew deck, service account auth):
scripts/sync-gslides.py deck.pptx \
--pres-id 1ImErdoIfgdebBjHvZ7YBbkUaeVLiswlPiA87ae44taI \
--sa-key ~/.config/gdoc-sync/sa-key.json \
--rtl
Output:
[1/5] Pushed pptx: deck.pptx (15,865,389 bytes)
[2/5] Fixed 0 in-deck slide-anchor links
[3/5] Skipped cross-pres link rewriting (no --cross-pres-map)
[4/5] Resized 0 oversized images (max width 720.0pt)
[5/5] Applied RTL to 14 text shapes
Done. https://docs.google.com/presentation/d/1ImErdo.../edit
What it does (five-step pipeline)
| Step | What | Why |
|---|---|---|
| 1. Push | Drive resumable upload: initiate with PATCH /upload/drive/v3/files/{id}?uploadType=resumable, then PUT the bytes to the returned Location. Content-Type: application/vnd.openxmlformats-officedocument.presentationml.presentation. |
Drive's converter natively turns pptx into Slides format. Resumable (not simple media) because pptx files routinely exceed Google's 5 MB simple-upload guideline. |
| 2. Fix slide-anchor links | Walks presentations.get, builds an index → pageObjectId map and a slide-title-slug → pageObjectId map, then rewrites text-run links whose URL matches broken patterns (slide-3.xml, #slide5) to use link.pageObjectId. |
pptx slide-to-slide links sometimes survive conversion as relativeLink (fine, left alone) but sometimes come through as URL strings pointing at the literal pptx XML part name (broken). |
| 3. Fix cross-pres links | For each --cross-pres-map "name=PRES_ID", fetches the target's slide map, then rewrites text-run links containing name into a deep-link URL https://docs.google.com/presentation/d/PRES_ID/edit#slide=id.{OBJECT_ID}. Resolution: anchor-slug match → numeric slide index in anchor → numeric in link text → top of presentation. |
Decks that reference a sibling pptx file (see deck-b.pptx#section-2) import as URL links pointing at the literal filename — broken. This rewrites them to deep-links into the synced sibling Slides. |
| 4. Resize images | Finds image page-elements whose effective width (size.width × transform.scaleX) exceeds --max-image-width, then updatePageElementTransform with a uniform shrink factor; recomputes translate so the image's center stays fixed. |
Defensive sweep — pptx normally sizes images correctly, but some converters scale up beyond the page bounds. Default is the presentation's actual page width (auto-detected from pageSize, e.g. 960pt for 16:9 widescreen) — full-bleed images are not touched. |
| 5. RTL (optional) | batchUpdate with updateParagraphStyle setting direction: RIGHT_TO_LEFT across each text shape's full text range (textRange.type: ALL). Walks every shape and table cell with non-empty text. |
Slides supports paragraphStyle.direction, but pptx → Slides conversion doesn't reliably translate RTL paragraph markers. Without this, Hebrew/Arabic shapes render LTR by default. |
What ships with it
6 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2mo ago First seen · 119 lines · 136 tokens per session scan A 6f5bebb8a09e
gslides-sync is a skill published in the GitHub repository shaharsha/claude-skills (6 stars, last pushed today), licensed MIT. It adds 136 tokens to every session and 2,156 once invoked, about $0.0005 per session on Opus 5.5. A static security scan graded it A with 1 finding (makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
gslides-sync compared with skills from other repositories
| Mod | Type | Stars | Last push | Licence | Scan | Tokens | Works with |
|---|---|---|---|---|---|---|---|
| gslides-syncshaharsha/claude-skills | Skill | 6 | today | MIT | A | 136 | Claude Code |
| orbit-notionnexu-io/open-design | Skill | 106k | yesterday | Apache-2.0 | A | 117 | Claude Code, Codex |
| instrument-data-to-allotropeanthropics/knowledge-work-plugins | Skill | 35k | 3d ago | Apache-2.0 | A | 123 | Claude Code |
| apify-youtube-transcript-scrapersickn33/agentic-awesome-skills | Skill | 49k | yesterday | MIT | A | 48 | Claude Code |
| legal-holdanthropics/claude-for-legal | Skill | 9.9k | 3d ago | Apache-2.0 | A | 68 | Claude Code |
| ppt-reviewOrkas-AI/Orkas | Skill | 9.0k | yesterday | MIT | A | 2 | Claude Code, Codex |
| feishuHmbown/CodeWhale | Skill | 41k | 6d ago | MIT | A | 33 | Claude Code, Codex |