google-slides
Skill0 starsChanged 2 months agoMITView on GitHub
Google Slides API integration with managed OAuth via Maton. Create, read, edit, and update Google Slides online cloud presentations. Use this skill ONLY for online Google Slides cloud presentations (Google Workspace docs.google.com/presentation or Presentation IDs). Do NOT use this skill for local presentation files (.pptx or .ppt files on the local file system); use the pptx skill for local PowerPoint files. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway).
- Pipes a download into a shell
- Reads credentials
- Installs packages
- Sends data out
9 other projects use a version of this.
Adopted by
Most recently taken up by
- okou-ai/okou-skillstheir own version, first seen Nov 4, 2026
- 0mlkrizzz655335v/claude-skills-zhtheir own version, first seen Oct 15, 2026
- openai/pluginstheir own version, first seen Oct 13, 2026
- willlee1995/skillstheir own version, first seen Oct 13, 2026
- vm0-ai/vm0-skillstheir own version, first seen Oct 8, 2026
- gemini-cli-extensions/workspacetheir own version, first seen Oct 8, 2026
Used with
Projects with it also use computer-use and brand-guidelines.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
HK-hubSkillcomputer-use
Use Orca's computer-use CLI to inspect and operate local desktop app windows through accessibility trees, screenshots, and safe UI actions. Use for desktop app interaction: list apps/windows, get app state, read visible UI, click controls, type, press keys, scroll, drag, set values, or perform accessibility actions. Also use for browser windows, webviews, Orca app UI, or other desktop UI. Triggers include "computer use", "orca computer", "read Spotify", "read Slack", "control/click/read in a desktop app", and "get app state".
Also in 3 projects that use this
JetBrainsSkillbrand-guidelines
Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.
Also in 3 projects that use this
Other versions9 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 9
- openai/plugins★ 7.8ksame name
- gemini-cli-extensions/workspace★ 646same name
- sanjay3290/ai-skills★ 452same name
- okou-ai/okou-skills★ 81same name
- vm0-ai/vm0-skills★ 81same name
- wfukatsu/slide-forge★ 5same name
- 0mlkrizzz655335v/claude-skills-zh★ 2same name
- willlee1995/skills★ 1same name
- luis63e/google-workspace-agent-pack★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository4 other files it gives its agents.
- google-calendarSkill
- google-docsSkill
- google-sheetsSkill
- google-tasksSkill
The file
We split this skill into the rules it gives an agent
11 rules. 0 are common, 5 are distinctive, and 6 are very specific to this project.
0
Common
Most of the 9 edited versions we read keep these.
5
Distinctive
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 96
After installation, verify with:
- Distinctive: line 196
If you have multiple Google Slides connections, specify which one to use:
- Distinctive: line 216
If you have multiple connections, always specify the connection to ensure requests go to the intended account.
- Distinctive: line 246
Create a blank presentation.
- Distinctive: line 266
Add slides, delete slides, insert text, create shapes, add images, or transform element positioning on pages.
- Very specific: line 295
createSlide: Add a new slide page with a layout (TITLE, TITLE_AND_BODY, SECTION_HEADER, BLANK). - Very specific: line 296
createShape: Add shapes (rectangles, text boxes, callouts) to a slide page. - Very specific: line 298
replaceAllText: Search and replace text across all slides in the deck. - Very specific: line 310
createImage: Add an image element to a slide given an image URL. - Very specific: line 311
deleteObject: Delete a slide, shape, image, or table element by ID. - Very specific: line 428
Ensure your URL path starts with google-slides.
“Common” is measured: kept by at least 6 in 10 of the 9 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Google Slides (Cloud Presentation Skill)
Access the Google Slides API (v1) with managed OAuth authentication via Maton. Create presentations, inspect slide layouts, insert shapes/text/images, and update slide content.
⚠️ Cloud vs. Local File Scope Distinction:
google-slides(This Skill): Exclusively for online Google Slides cloud presentations (docs.google.com/presentation/d/{presentationId}). Interacts directly with Google's cloud servers via Maton OAuth API proxy.pptxSkill: For reading, creating, or editing local.pptx/.pptfiles stored on the local disk.
Quick Start
CLI:
# Get Presentation structure & slides
maton api '/google-slides/v1/presentations/<presentationId>'# Create a new Google Presentation
maton api -X POST /google-slides/v1/presentations -d '{"title": "Q3 Keynote Pitch"}'Python:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/google-slides/v1/presentations/<presentationId>')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOFBase URL
https://api.maton.ai/google-slides/{native-api-path}Maton proxies requests to slides.googleapis.com and automatically injects your OAuth token.
Note: Unlike Calendar, Tasks, Docs, and Sheets, Maton CLI currently accesses Google Slides via the generic
maton apiproxy command (maton api /google-slides/v1/...).
CLI Installation (optional — agent decides)
Maton CLI is optional. Agent can decide whether to install it based on the environment.
macOS / Linux
curl -fsSL https://maton.ai/install.sh | bashWindows
irm https://maton.ai/install.ps1 | iexnpm (cross-platform)
npm install -g @maton/cliHomebrew (macOS)
brew install maton-ai/cli/matonAfter installation, verify with:
maton --versionAuthentication
CLI:
maton login # Opens browser for API key
maton login --interactive # Skip browser, paste API key directly
maton whoami # Show current auth stateManual:
- Sign in or create an account at maton.ai
- Go to maton.ai/settings
- Copy your API key
- Set your API key as
MATON_API_KEY:
export MATON_API_KEY="YOUR_API_KEY"Connection Management
Manage your Google Slides OAuth connections at https://api.maton.ai.
List Connections
CLI:
maton connection list google-slides --status ACTIVEmaton api -X GET /connections -f app=google-slides -f status=ACTIVECreate Connection
CLI:
maton connection create google-slidesmaton api /connections -f app=google-slidesResponse:
{
"connection": {
"connection_id": "{connection_id}",
"status": "ACTIVE",
"url": "https://connect.maton.ai/?session_token=...",
"app": "google-slides"
}
}Open the returned url in a browser to complete OAuth authorization.
Get Connection
CLI:
maton connection get {connection_id} # alias: maton connection viewmaton api /connections/{connection_id}Delete Connection
CLI:
maton connection delete {connection_id} --yesmaton api -X DELETE /connections/{connection_id}Specifying Connection
If you have multiple Google Slides connections, specify which one to use:
CLI:
maton api /google-slides/v1/presentations/<presentationId> --connection {connection_id}Python:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/google-slides/v1/presentations/<presentationId>')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Maton-Connection', '{connection_id}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOFIf you have multiple connections, always specify the connection to ensure requests go to the intended account.
Security & Permissions
- Access is scoped to Google Slides within the connected Google account.
- All write, update, create slide, and delete operations require explicit user approval. Confirm target presentation ID and modification details with the user before executing.
API Reference
1. Get Presentation
Retrieve presentation metadata, total slides count, page elements (shapes, text frames, images, tables), and slide dimensions.
GET /google-slides/v1/presentations/{presentationId}Example CLI:
maton api '/google-slides/v1/presentations/<presentationId>'2. Create Presentation
Create a blank presentation.
POST /google-slides/v1/presentations
Content-Type: application/json
{
"title": "Product Roadmap 2026"
}Example CLI:
maton api -X POST /google-slides/v1/presentations -d '{"title": "Product Roadmap 2026"}'3. Batch Update Slides & Page Elements
Add slides, delete slides, insert text, create shapes, add images, or transform element positioning on pages.
POST /google-slides/v1/presentations/{presentationId}:batchUpdate
Content-Type: application/json
{
"requests": [
{
"createSlide": {
"objectId": "slide_page_02",
"insertionIndex": 1,
"slideLayout": {
"predefinedLayout": "TITLE_AND_BODY"
}
}
}
]
}Example CLI:
maton api -X POST /google-slides/v1/presentations/<presentationId>:batchUpdate \
-d '{"requests":[{"createSlide":{"objectId":"slide_page_02","insertionIndex":1,"slideLayout":{"predefinedLayout":"TITLE_AND_BODY"}}}]}'Common Request Types for batchUpdate:
createSlide: Add a new slide page with a layout (TITLE,TITLE_AND_BODY,SECTION_HEADER,BLANK).createShape: Add shapes (rectangles, text boxes, callouts) to a slide page.insertText: Insert text into a shape or text box byobjectId.replaceAllText: Search and replace text across all slides in the deck.{ "replaceAllText": { "containsText": { "text": "{{COMPANY}}", "matchCase": true }, "replaceText": "Acme Corp" } }createImage: Add an image element to a slide given an image URL.deleteObject: Delete a slide, shape, image, or table element by ID.
Code Examples
CLI
# Create a presentation
maton api -X POST /google-slides/v1/presentations -d '{"title": "Demo Pitch"}'
# Get presentation details
maton api '/google-slides/v1/presentations/<presentationId>'JavaScript
// Get presentation details
const response = await fetch(
'https://api.maton.ai/google-slides/v1/presentations/<presentationId>',
{
headers: {
'Authorization': `Bearer ${process.env.MATON_API_KEY}`
}
}
);
const pres = await response.json();
console.log('Title:', pres.title);
console.log('Slide Count:', pres.slides?.length);
// Create new presentation
const createRes = await fetch(
'https://api.maton.ai/google-slides/v1/presentations',
{
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.MATON_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
title: 'Q3 All-Hands'
})
}
);
const newPres = await createRes.json();
console.log('Presentation ID:', newPres.presentationId);Python: List Slide Titles in a Presentation
import os, json, urllib.request
presentation_id = "<presentationId>"
url = f"https://api.maton.ai/google-slides/v1/presentations/{presentation_id}"
req = urllib.request.Request(url)
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
pres = json.load(urllib.request.urlopen(req))
slides = pres.get('slides', [])
print(f"Presentation Title: {pres.get('title')}")
print(f"Total Slides: {len(slides)}")
for idx, slide in enumerate(slides, 1):
slide_id = slide.get('objectId')
page_elements = slide.get('pageElements', [])
print(f"Slide {idx} (ID: {slide_id}): {len(page_elements)} elements")Notes
- Presentation IDs are opaque strings (extracted from
https://docs.google.com/presentation/d/<presentationId>/edit). - Slides modifications require
batchUpdate. Each modification request insiderequestsis processed atomically. - IMPORTANT: When using curl commands, use
curl -gwhen URLs contain brackets to disable glob parsing. - IMPORTANT: When piping curl output to
jqor other commands, environment variables like$MATON_API_KEYmay not expand correctly in some shell environments. You may get "Invalid API key" errors when piping.
Error Handling
| Status | Meaning |
| 400 | Missing Google Slides connection or invalid batchUpdate request schema |
| 401 | Invalid or missing Maton API key |
| 404 | Presentation ID not found or access denied |
| 429 | Rate limit exceeded |
| 5xx | Google Slides API backend error |
Troubleshooting: API Key Issues
CLI:
maton whoami
maton connection list google-slidesManual:
echo $MATON_API_KEY
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOFTroubleshooting: Invalid App Name
- Ensure your URL path starts with
google-slides. For example:
- Correct:
https://api.maton.ai/google-slides/v1/presentations/<presentationId> - Incorrect:
https://api.maton.ai/slides/v1/presentations/<presentationId>
Resources
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

