Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Lightweight Google Slides integration with standalone OAuth authentication. No MCP server required. Full read/write access.
.claude/skills/sickn33-google-slides-automation/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 34% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -7% | 0% |
| case-05 | ✗→✓ | ▲ Improved | -25% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 3% | 0% |
| case-07 | ✗→✓ | ▲ Improved | -20% | 0% |
Lightweight Google Slides integration with standalone OAuth authentication. No MCP server required. Full read/write access.
> Requires Google Workspace account. Personal Gmail accounts are not supported.
Authenticate with Google (opens browser):
bashpython scripts/auth.py login
Check authentication status:
bashpython scripts/auth.py status
Logout when needed:
bashpython scripts/auth.py logout
All operations via scripts/slides.py. Auto-authenticates on first use if not logged in.
bash# Get all text content from a presentation python scripts/slides.py get-text "1abc123xyz789" python scripts/slides.py get-text "https://docs.google.com/presentation/d/1abc123xyz789/edit" # Find presentations by search query python scripts/slides.py find "quarterly report" python scripts/slides.py find "project proposal" --limit 5 # Get presentation metadata (title, slide count, slide object IDs) python scripts/slides.py get-metadata "1abc123xyz789"
bash# Create a new empty presentation python scripts/slides.py create "Q4 Sales Report" # Add a blank slide to the end python scripts/slides.py add-slide "1abc123xyz789" # Add a slide with a specific layout python scripts/slides.py add-slide "1abc123xyz789" --layout TITLE_AND_BODY # Add a slide at a specific position (0-based index) python scripts/slides.py add-slide "1abc123xyz789" --layout TITLE --at 0 # Find and replace text across all slides python scripts/slides.py replace-text "1abc123xyz789" "old text" "new text" python scripts/slides.py replace-text "1abc123xyz789" "Draft" "Final" --match-case # Delete a slide by object ID (use get-metadata to find IDs) python scripts/slides.py delete-slide "1abc123xyz789" "g123abc456" # Batch update (advanced - for formatting, inserting shapes, images, etc.) python scripts/slides.py batch-update "1abc123xyz789" '[{"replaceAllText":{"containsText":{"text":"foo"},"replaceText":"bar"}}]'
Available layouts for add-slide --layout:
BLANK - Empty slide (default)TITLE - Title slideTITLE_AND_BODY - Title with body textTITLE_AND_TWO_COLUMNS - Title with two text columnsTITLE_ONLY - Title bar onlySECTION_HEADER - Section dividerONE_COLUMN_TEXT - Single column textMAIN_POINT - Main point highlightBIG_NUMBER - Large number displayYou can use either:
1abc123xyz789https://docs.google.com/presentation/d/1abc123xyz789/editThe scripts automatically extract the ID from URLs.
Returns extracted text from all slides, including:
Returns list of matching presentations:
json{ "presentations": [ {"id": "1abc...", "name": "Q4 Report", "modifiedTime": "2024-01-15T..."} ], "nextPageToken": "..." }
Returns presentation details:
json{ "presentationId": "1abc...", "title": "My Presentation", "slideCount": 15, "pageSize": {"width": {...}, "height": {...}}, "hasMasters": true, "hasLayouts": true }
Tokens stored securely using the system keyring:
Service name: google-slides-skill-oauth
Automatically refreshes expired tokens using Google's cloud function.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 34,858 | 43,034 | +23% | 1 | 1 | 0% | 782 | 2,813 | +260% | 0 | 0 | — |
case-02 | fail→pass | 38,701 | 11,397 | -71% | 1 | 1 | 0% | 1,319 | 1,765 | +34% | 0 | 0 | — |
case-03 | fail→fail | 9,747 | 8,325 | -15% | 1 | 1 | 0% | 706 | 1,729 | +145% | 0 | 0 | — |
case-04 | fail→pass | 10,394 | 1,552 | -85% | 1 | 1 | 0% | 1,525 | 1,420 | -7% | 0 | 0 | — |
case-05 | fail→pass | 12,339 | 2,122 | -83% | 1 | 1 | 0% | 1,899 | 1,426 | -25% | 0 | 0 | — |
case-06 | fail→pass | 8,009 | 2,222 | -72% | 1 | 1 | 0% | 1,435 | 1,477 | +3% | 0 | 0 | — |
case-07 | fail→pass | 11,146 | 1,455 | -87% | 1 | 1 | 0% | 1,740 | 1,388 | -20% | 0 | 0 | — |
case-08 | fail→pass | 11,484 | 2,248 | -80% | 1 | 1 | 0% | 1,772 | 1,611 | -9% | 0 | 0 | — |
case-09 | pass→pass | 5,011 | 1,752 | -65% | 1 | 1 | 0% | 978 | 1,521 | +56% | 0 | 0 | — |
case-10 | pass→pass | 7,017 | 2,558 | -64% | 1 | 1 | 0% | 838 | 1,551 | +85% | 0 | 0 | — |
case-11 | fail→pass | 4,875 | 1,939 | -60% | 1 | 1 | 0% | 960 | 1,539 | +60% | 0 | 0 | — |
case-12 | fail→pass | 5,636 | 2,632 | -53% | 1 | 1 | 0% | 1,005 | 1,648 | +64% | 0 | 0 | — |
case-13 | fail→pass | 6,169 | 1,655 | -73% | 1 | 1 | 0% | 1,279 | 1,473 | +15% | 0 | 0 | — |
case-14 | pass→pass | 7,848 | 1,363 | -83% | 1 | 1 | 0% | 1,332 | 1,426 | +7% | 0 | 0 | — |
case-15 | fail→pass | 8,619 | 2,362 | -73% | 1 | 1 | 0% | 1,640 | 1,662 | +1% | 0 | 0 | — |
case-16 | fail→pass | 15,217 | 2,552 | -83% | 1 | 1 | 0% | 2,219 | 1,503 | -32% | 0 | 0 | — |
case-17 | pass→pass | 9,833 | 2,970 | -70% | 1 | 1 | 0% | 1,803 | 1,737 | -4% | 0 | 0 | — |
case-18 | fail→pass | 8,480 | 2,292 | -73% | 1 | 1 | 0% | 1,678 | 1,567 | -7% | 0 | 0 | — |
case-19 | fail→pass | 3,631 | 2,293 | -37% | 1 | 1 | 0% | 633 | 1,631 | +158% | 0 | 0 | — |
case-20 | fail→pass | 11,202 | 1,971 | -82% | 1 | 1 | 0% | 1,859 | 1,463 | -21% | 0 | 0 | — |
case-21 | pass→pass | 4,787 | 4,704 | -2% | 1 | 1 | 0% | 842 | 1,872 | +122% | 0 | 0 | — |
case-22 | pass→pass | 9,680 | 4,823 | -50% | 1 | 1 | 0% | 1,615 | 1,853 | +15% | 0 | 0 | — |
case-23 | fail→pass | 10,793 | 4,245 | -61% | 1 | 1 | 0% | 1,838 | 1,876 | +2% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted, and 21 counted toward the lift figure. The other 2 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +65 percentage points is the difference between those two pass rates over the 21 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.