← shahar.sh

Agent skills

A curated set of Agent Skills I've built and use day-to-day. They work in Claude Code, claude.ai, Codex, Cursor, and any other harness that reads the SKILL.md format.

20 skills · shaharsha/claude-skills on GitHub

Install all 20 in Claude Code with two commands:

/plugin marketplace add shaharsha/claude-skills
/plugin install shaharsha-skills@shaharsha-skills

Documents & decks

gdoc-sync↗

Push a local Markdown file to an existing Google Doc and fix the four things Google's converter botches: broken internal anchors, broken cross-doc links, oversized inline images, and missing RTL.

gslides-sync↗

Sister to gdoc-sync for .pptx → existing Google Slides - rewrites broken slide-anchor and cross-presentation links, scales overflowing images, applies RTL per text shape.

gsheets↗

Comprehensive Google Sheets API v4 CLI - the third Google sibling. Read / write / append / clear cells; create and rearrange tabs; freeze rows, resize columns, merge ranges; style headers with bold colored backgrounds; add filters, banding, and conditional formatting; or drop to a raw batchUpdate escape hatch for charts, pivots, data validation, and gradients.

presentation-generator↗

Generate 16:9 PDF + PPTX decks where every slide is a custom AI-rendered image - not a templated layout with stock photos. Style locks globally; composition varies per slide.

narrating-pptx↗

Turn any .pptx into a self-presenting deck: presenter-style narration scripts in any language (Hebrew, English, mixed), speech via ElevenLabs v3, one clip embedded per slide, autoplay set through real PowerPoint - the one method that doesn't corrupt the file with hand-written timing XML.

deck-to-video↗

Slides + per-slide narration audio → a self-playing mp4: each slide holds for its narration's length then advances, with a filling progress bar, seconds-remaining countdown, and an N/M slide counter. Overlays baked per-second with PIL - because ffmpeg's animated drawbox silently renders a full bar from frame 0, and Homebrew ffmpeg ships without drawtext.

self-presenting-decks↗

The orchestration map for decks that explain themselves: content → narration → video, which skill owns each stage, the three-artifacts rule (clean pptx / narrated pptx / mp4 - each for a different audience), and an update matrix for exactly what to rebuild when slides, narration text, pace, or overlays change.

Brand & visuals

brand-system↗

Author a production-grade brand book: long-form BRAND.md (20 sections), printable PDF sibling, and matched tokens.css (Tailwind v4) + tokens.json (W3C DTCG). WCAG 2.2 AA audited at authoring time.

brand-assets↗

Mechanical logo pipelines: vectorize raster → multi-color SVG, snap fills to brand hexes, rasterize back to pristine PNG, and generate a full favicon + apple-touch-icon + PWA icon pack.

image-generation↗

Generate logos, icons, mockups, and product shots via OpenAI gpt-image-2 or Gemini Nano Banana 2 / Pro. Picks the right model and writes the prompt in each provider's native grammar.

excalidraw-diagrams↗

Build architecture, flow, and system diagrams on an Excalidraw+ canvas via its MCP - with real tech/logo icons (Postgres, React, Docker, AWS services…) pulled live from the ~230-pack community catalog. Encodes the layout/alignment math and the quirks that silently break a diagram: unrendered text in screenshots, the z-order trap that hides icons under fills even on a fresh build, and unbound arrows that detach.

Engineering decisions

tech-design-doc↗

Author technical design review documents (RFCs, ADRs, KEPs, partner-mode TDRs) sized correctly for the audience. Triages format first, scaffolds from research-grounded templates, enforces load-bearing sections (BLUF, goals/non-goals, ≥3 alternatives, decision log), inserts C4 + sequence diagrams, and audits against anti-patterns before stakeholder review.

codex-review↗

Get an independent second opinion on a plan or a diff from OpenAI Codex - fresh context, no write access - then adjudicate every finding against the source before acting on it. Forces the read-only sandbox on every run, promotes CLAUDE.md to a real Codex instruction file so no AGENTS.md is needed, and returns schema-constrained findings that each require a concrete failure scenario. Sessions are labelled: resume one to argue a finding, start a fresh one to re-review after fixes.

Building agents

prompt-engineer↗

Expert prompt-engineering reference for AI agents on Claude / GPT / Gemini APIs - system prompts, tool descriptions, context engineering, provider differences, and evaluation/judge-prompt design.

writing-project-instructions↗

Author or audit a CLAUDE.md / AGENTS.md project-instruction file. Encodes Anthropic's cardinal include/exclude rules, the under-200-line target, the falsifiability test, locations and loading semantics, and Boris Cherny's compounding-engineering loop.

Utilities

namecheap-domains↗

Check domain availability via the Namecheap API - one domain, batches up to 50, or TLD sweeps. Surfaces premium and EAP fees so you don't fall in love with a $2,999 "available" name.

office-render↗

Render a .docx / .pptx / .xlsx to PDF and page images using the real installed Office apps on macOS - pixel-faithful, unlike LibreOffice, which substitutes fonts and re-flows complex layouts. Bakes in the Automation-consent, sandbox, and Full-Disk-Access gotchas.

viewing-videos↗

Claude can't watch video - this skill is how it sees one anyway: extract the fewest ffmpeg frames that answer the question, via targeted seeks, scene-change detection, or interval sampling, plus a contact-sheet triage and a crop+upscale recipe for edge-of-legibility text.

proton-pass↗

Manage credentials and secrets from the CLI via Proton Pass (pass-cli): vaults, items, password generation, and pass:// secret-reference resolution - with never-print-secrets guardrails baked in.

tavily-extract↗

Fetch the pages the built-in fetcher can't - the JavaScript-rendered SPAs and bot-protected (403) hosts where WebFetch returns an empty shell. Wraps the Tavily Extract API to run the page's JS and return clean markdown, batches up to 20 URLs, and flags soft 404s (HTTP 200 "page not found" bodies) so a nav shell isn't mistaken for content.