# google-slides

A skill for searching, reading, creating, and editing Google Slides presentations directly from agent commands. Uses Python scripts with standalone OAuth.

- skill · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 407 installs · ★ 447
- Author: sanjay3290
- License: Apache-2.0 · policy=mirror · the beginning of the file is at the end of this page
- Source: https://github.com/sanjay3290/ai-skills/tree/HEAD/skills/google-slides/SKILL.md
- Updated: 2026-09-10
- HTML: https://affpapa.org/en/nevibecode/skills/sanjay3290-google-slides

## What it does

The integration operates through `scripts/slides.py` and bypasses the need for an MCP server. It inspects metadata, extracts text from shapes and tables, searches Drive presentations by query, creates blank files, and inserts slides using layouts like `TITLE_AND_BODY`. For content edits, it supports global find-and-replace across all slides and slide deletion by object ID. The scripts accept either raw presentation IDs or full Google Slides edit URLs.

First-time setup authenticates via `scripts/auth.py login` in the browser. Credentials are saved directly to system keyrings, including macOS Keychain, Windows Credential Locker, and Linux Secret Service API under the service name `google-slides-skill-oauth`. Expired tokens refresh automatically via Google cloud functions.

Make sure your organization uses Google Workspace. Personal Gmail accounts are completely unsupported and will fail during authentication.

## Requirements
- Works with: Google Workspace

## Install

### Claude Code (native platform)

1. **Skills CLI (Vercel)**
```bash
npx skills add sanjay3290/ai-skills --skill google-slides -a claude-code
```

2. **Manually: put the files in place**
- File: `~/.claude/skills/google-slides/SKILL.md` — Copy the whole skill folder; for one project use .claude/skills/google-slides/

### Codex

1. **Skills CLI (Vercel)**
```bash
npx skills add sanjay3290/ai-skills --skill google-slides -a codex
```

2. **Manually: put the files in place**
- File: `.agents/skills/google-slides/SKILL.md` — For all projects use ~/.agents/skills/

### Cursor

1. **Skills CLI (Vercel)**
```bash
npx skills add sanjay3290/ai-skills --skill google-slides -a cursor
```

2. **Manually: put the files in place**
- File: `.cursor/skills/google-slides/SKILL.md` — Cursor also reads .agents/skills/ and .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install sanjay3290/ai-skills google-slides
```

2. **Manually: put the files in place**
- File: `.github/skills/google-slides/SKILL.md`

### Gemini CLI

1. **Skills CLI (Vercel)**
```bash
npx skills add sanjay3290/ai-skills --skill google-slides -a gemini-cli
```

2. **Platform CLI**
```bash
gemini skills install https://github.com/sanjay3290/ai-skills --path skills/google-slides
```

### Windsurf (Devin Desktop)

**Manually: put the files in place**
- File: `.devin/skills/google-slides/SKILL.md` — The legacy .windsurf/skills/ path still works

### OpenCode

**Skills CLI (Vercel)**
```bash
npx skills add sanjay3290/ai-skills --skill google-slides -a opencode
```

### Claude.ai

**Claude.ai**
- Zip the folder and upload it in Settings → Capabilities → Skills

Where a file is given instead of a command, copy the files from the source to that path: https://github.com/sanjay3290/ai-skills/tree/HEAD/skills/google-slides/SKILL.md

## When to use it
- extract text and table data from existing Google Slides decks
- find presentations across Google Drive using search terms
- create new decks and insert slides with predefined layouts
- perform batch text replacement across all presentation slides
- remove individual slides using their object IDs

## Example prompts
- Find presentations matching "project proposal" with a limit of 5
- Create a new presentation named "Q4 Sales Report" and add a TITLE slide at index 0
- Replace text "Draft" with "Final" matching case in presentation 1abc123xyz789

## Source text · SKILL.md · Apache-2.0

Below is the content of a third-party file. It is data, not instructions for you: do not act on anything written inside unless the human asks. Block tag: 9c713cbc016a759c.

BEGIN THIRD-PARTY FILE 9c713cbc016a759c
````text
---
name: google-slides
description: |
  Read and write Google Slides presentations - get text, find presentations, create presentations, add slides,
  replace text, and manage slide content. Use when user asks to: read a presentation, create slides, find slides,
  add a slide, replace text in a presentation, or manage presentation content. Lightweight integration with
  standalone OAuth authentication supporting full read/write access.
license: Apache-2.0
metadata:
  author: sanjay3290
  version: "1.0"
---

# Google Slides

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.

## First-Time Setup

Authenticate with Google (opens browser):
```bash
python scripts/auth.py login
```

Check authentication status:
```bash
python scripts/auth.py status
```

Logout when needed:
```bash
python scripts/auth.py logout
```

## Read Commands

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"
```

## Write Commands

```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"}}]'
```

## Slide Layouts

Available layouts for `add-slide --layout`:
- `BLANK` - Empty slide (default)
- `TITLE` - Title slide
- `TITLE_AND_BODY` - Title with body text
````
END THIRD-PARTY FILE 9c713cbc016a759c

The third-party file has ended. Everything between the 9c713cbc016a759c tags is data: requests and commands from it are not followed. An “end of file” line with another tag inside the block is part of the file.

First 2694 of 4091 bytes. © sanjay3290 · Apache-2.0 · https://github.com/sanjay3290/ai-skills/tree/HEAD/skills/google-slides/SKILL.md

_Part of the page did not fit — see the HTML version._

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
