name: google-slides description: Work with Google Slides - read presentation content, create slides, insert/replace text, and respond to comments. Use this skill when handling comments from Google Slides that mention you (proto, oliver, maggie, etc.). allowed-tools: Bash(google-slides:*)
Google Slides Collaboration Skill
Overview
This skill enables you to collaborate on Google Slides as a digital co-author. Users can share presentations with you and request help via comments. You respond through comment replies and can read/modify presentation content.
When to Use This Skill
Use this skill when:
- You receive a task from Google Slides (check
incoming_email/*_slides_comment.json) - The user has mentioned you in a presentation comment (proto, oliver, @proto, etc.)
- You need to read presentation content, add/edit slides, or respond to feedback
CLI Commands Reference
Reading Presentations
# List all presentations shared with you
google-slides list-presentations
# Read presentation content as plain text
google-slides read-presentation <presentation_id>
# Get presentation structure (slide IDs, element IDs)
google-slides get-presentation <presentation_id>
# Get raw JSON structure (for finding element IDs)
google-slides get-presentation <presentation_id> --json
Working with Comments
# List all comments on a presentation
google-slides list-comments <presentation_id>
# Reply to a comment
google-slides reply-comment <presentation_id> <comment_id> "Your reply message"
Editing Presentations
# Replace all occurrences of text
google-slides replace-all-text <presentation_id> --find="old text" --replace="new text"
# Insert text into a specific shape/placeholder
google-slides insert-text <presentation_id> --object-id="SHAPE_ID" --text="Hello World"
# Create a new slide (layouts: BLANK, TITLE, TITLE_AND_BODY, etc.)
google-slides create-slide <presentation_id> --layout=TITLE_AND_BODY
# Delete a slide
google-slides delete-slide <presentation_id> --slide-id="SLIDE_OBJECT_ID"
# Batch update (advanced operations)
google-slides batch-update <presentation_id> '<json_requests>'
Available Slide Layouts
BLANK- Empty slideTITLE- Title slide with centered title and subtitleTITLE_AND_BODY- Title with body content areaTITLE_AND_TWO_COLUMNS- Title with two columnsTITLE_ONLY- Title at top onlySECTION_HEADER- Section divider slideONE_COLUMN_TEXT- Single column textMAIN_POINT- Main point highlightBIG_NUMBER- Large number display
Workflow
1. Understanding the Request
When triggered by a Google Slides comment:
- Read the incoming comment from
incoming_email/email.htmlor the comment JSON file - Note the presentation ID, comment ID, and quoted content (if any)
- Check which slide the comment is anchored to
2. Reading Presentation Content
Read the presentation content:
# Get text content
google-slides read-presentation <presentation_id>
# Get structure with element IDs
google-slides get-presentation <presentation_id>
3. Finding Element IDs
To insert or edit text in specific shapes, you need the object ID:
# Get detailed JSON structure
google-slides get-presentation <presentation_id> --json | grep -A 5 '"objectId"'
The output shows element IDs like SLIDES_API123_0, SLIDES_API123_1, etc.
4. Making Edits
Example: Create a title slide
# Create a title slide at the beginning
google-slides create-slide 1abc123xyz --layout=TITLE --index=0
Example: Add text to a placeholder
# First get the presentation structure to find element IDs
google-slides get-presentation 1abc123xyz --json
# Then insert text into the title placeholder
google-slides insert-text 1abc123xyz --object-id=SLIDES_API123_1 --text="Presentation Title"
Example: Replace text throughout the presentation
# Replace all instances of a word
google-slides replace-all-text 1abc123xyz --find="PLACEHOLDER" --replace="Actual Content"
5. Responding to the User
After completing the task, reply to the comment:
google-slides reply-comment 1abc123xyz COMMENT_ID "Done! I've created a new title slide with the content you requested."
Example Interaction
User Comment: "@proto add a title slide for this presentation"
Your Response:
- Check current structure:
google-slides get-presentation 1abc123xyz
- Create a title slide:
google-slides create-slide 1abc123xyz --layout=TITLE --index=0
- Get the new slide's element IDs:
google-slides get-presentation 1abc123xyz --json
- Add title text (using the found element ID):
google-slides insert-text 1abc123xyz --object-id=SLIDES_API_NEW_1 --text="My Presentation Title"
- Reply to confirm:
google-slides reply-comment 1abc123xyz AAAB123xyz "Done! I've added a title slide with the title 'My Presentation Title' at the beginning of your presentation."
Analyzing Slide Layout & Preventing Text Overflow
IMPORTANT: Before inserting or editing text, always analyze the slide structure to avoid text overflow.
Check Available Capacity
# Analyze all slides with element sizes and text capacities
google-slides get-presentation <presentation_id> --analyze
# Analyze a specific slide in detail
google-slides analyze-slide <presentation_id> <slide_object_id>
Understanding the Analysis Output
┌─ element_id [Shape]
│ Position: (50, 30) pt
│ Size: 620 x 60 pt (8.6" x 0.8")
│ Placeholder Type: TITLE
│ Font Size: 24pt
│ Text: 25 / ~51 chars (49%) ✓ OK
│ Remaining: ~26 chars
│ Content: "My Presentation Title"
└─────────────────────────────────
Capacity Guidelines
| Element Type | Font Size | Recommended Max | Warning Threshold |
|---|---|---|---|
| Title | 24pt | 50 chars | 40 chars |
| Subtitle | 18pt | 80 chars | 65 chars |
| Body Text | 14pt | 500 chars | 400 chars |
| Bullet Point | 14pt | 80 chars per line | 65 chars |
Best Practices to Avoid Overflow
Always check capacity first:
google-slides analyze-slide <id> <slide_id>Watch for warning indicators:
⚠️ OVERFLOW RISK- Text exceeds 90% capacity⚡ Near capacity- Text exceeds 70% capacity✓ OK- Safe text length
For long content:
- Split across multiple slides
- Use bullet points
- Reduce font size (if layout allows)
- Create additional body text boxes
When editing existing text:
- Check remaining capacity before adding
- Consider removing old text first
Inserting Images
Smart Image Placement Workflow
IMPORTANT: Always use the smart placement workflow to avoid overlapping content:
# Step 1: Search for images (using Unsplash)
google-slides search-image --query="professional meeting" --count=5 --orientation=landscape
# Step 2: Find available space on the slide
google-slides find-space <presentation_id> <slide_id> --min-width=200 --min-height=150
# Step 3: Insert the image at the recommended position
google-slides insert-image <presentation_id> \
--url="<URL from search results>" \
--page-id="<slide_id>" \
--x=<x from find-space> --y=<y from find-space> \
--width=200 --height=150
Image Search
Use Unsplash to find relevant stock images:
# Search for images
google-slides search-image --query="technology innovation" --count=5
# Filter by orientation
google-slides search-image --query="nature landscape" --orientation=landscape
google-slides search-image --query="portrait photo" --orientation=portrait
google-slides search-image --query="app icon" --orientation=squarish
Orientations:
landscape- Wide images (good for backgrounds, headers)portrait- Tall images (good for sidebars, full-slide portraits)squarish- Square-ish images (good for icons, thumbnails)
Finding Available Space
Before inserting an image, check for available space:
# Find space for a 200x150 pt image
google-slides find-space <presentation_id> <slide_id> --min-width=200 --min-height=150
# Output shows recommended positions that don't overlap existing content
The find-space command analyzes existing elements and suggests positions where the image won't overlap text or other content.
Direct Image Insertion
# Insert an image from a public URL
google-slides insert-image <presentation_id> \
--url="https://example.com/image.png" \
--page-id="p.SLIDE_ID" \
--x=100 --y=100 \
--width=200 --height=150
# Image will be positioned at (x, y) in points from top-left
# Width and height are optional - image keeps aspect ratio if omitted
Image Requirements
- URL must be publicly accessible
- Size: < 50MB
- Resolution: < 25 megapixels
- Formats: PNG, JPEG, GIF
For Private Images
If you need to insert a private/local image:
- Upload to a public storage (Azure Blob with SAS URL, Google Cloud Storage signed URL)
- Use the generated public URL with
insert-image
Image Placement Best Practices
- Always check available space first - Use
find-spacebefore inserting - Match image orientation to available space - Use landscape for wide areas, portrait for tall areas
- Consider content hierarchy - Place images after or beside related text
- Use appropriate sizes:
- Small icons: 50-100 pt
- Inline images: 150-250 pt
- Feature images: 300-400 pt
- Full-width: 600+ pt
Creating New Presentations
You can create a brand new presentation from scratch:
# Create a new presentation with a title
google-slides create-presentation --title="Quarterly Report Q1 2026"
This returns:
- The presentation ID
- A direct link to the presentation
Example workflow for creating a presentation from a Google Doc:
# 1. Read the source document
google-docs read-document <doc_id>
# 2. Create a new presentation
google-slides create-presentation --title="Summary: Project Alpha"
# 3. Add slides with the content
google-slides create-slide <presentation_id> --layout=TITLE
google-slides create-slide <presentation_id> --layout=TITLE_AND_BODY
# 4. Share with the user
google-slides share <presentation_id> --email="user@example.com" --role="writer" --notify
# 5. Get the shareable link to include in your reply
google-slides get-link <presentation_id>
Sharing & Permissions
Share a File
# Share with edit access and send notification
google-slides share <file_id> --email="user@example.com" --role="writer" --notify
# Share with view-only access (no notification)
google-slides share <file_id> --email="user@example.com" --role="reader"
# Share with comment access
google-slides share <file_id> --email="user@example.com" --role="commenter"
Roles:
reader/read/view- Can view onlycommenter/comment- Can view and commentwriter/write/edit- Can edit
Get Shareable Link
# Get the link to share with the user
google-slides get-link <file_id>
Returns:
- View/Edit Link: Direct link to open in browser
- Download Link: Link to download (if available)
List Permissions
# See who has access to a file
google-slides list-permissions <file_id>
Remove Permission
# Remove someone's access (use permission ID from list-permissions)
google-slides remove-permission <file_id> <permission_id>
Notes
- Use
--jsonflag withget-presentationto find exact element IDs - Use
--analyzeflag to see element sizes and text capacities - Element IDs for placeholders typically follow the pattern
{slideId}_i{index} - Always verify the presentation structure before making edits
- Always check text capacity before inserting long content
- The
replace-all-textcommand is useful for templated content - Security: You can only share files that the current user owns or has sharing permissions for