Claude
Skills
Sign in
Back

gws-slides

Included with Lifetime
$97 forever

Google Slides CLI operations via gws. Use when users need to create, read, or edit Google Slides presentations. Triggers: slides, presentation, google slides, deck.

Productivity

What this skill does


# Google Slides (gws slides)

`gws slides` provides CLI access to Google Slides with structured JSON output.

> **Disclaimer:** `gws` is not the official Google CLI. This is an independent, open-source project not endorsed by or affiliated with Google.

## Dependency Check

**Before executing any `gws` command**, verify the CLI is installed:
```bash
gws version
```

If not found, install: `go install github.com/omriariav/workspace-cli/cmd/gws@latest`

## Authentication

Requires OAuth2 credentials. Run `gws auth status` to check.
If not authenticated: `gws auth login` (opens browser for OAuth consent).
For initial setup, see the `gws-auth` skill.

## Quick Command Reference

| Task | Command |
|------|---------|
| Get presentation info | `gws slides info <id>` |
| List all slides | `gws slides list <id>` |
| Read slide content | `gws slides read <id>` |
| Read specific slide | `gws slides read <id> 3` |
| Read with speaker notes | `gws slides read <id> --notes` |
| Create presentation | `gws slides create --title "My Deck"` |
| Add a slide | `gws slides add-slide <id> --title "Slide Title" --body "Content"` |
| Add blank slide | `gws slides add-slide <id> --layout BLANK` |
| Delete a slide | `gws slides delete-slide <id> --slide-number 3` |
| Duplicate a slide | `gws slides duplicate-slide <id> --slide-number 2` |
| Add a shape | `gws slides add-shape <id> --slide-number 1 --type RECTANGLE` |
| Add an image | `gws slides add-image <id> --slide-number 1 --url "https://..."` |
| Add text to shape | `gws slides add-text <id> --object-id <obj-id> --text "Hello"` |
| Add text to table cell | `gws slides add-text <id> --table-id <tbl-id> --row 0 --col 0 --text "Cell"` |
| Add speaker notes | `gws slides add-text <id> --notes --slide-number 1 --text "Notes here"` |
| Clear speaker notes | `gws slides delete-text <id> --notes --slide-number 1` |
| Find and replace | `gws slides replace-text <id> --find "old" --replace "new"` |
| Delete any element | `gws slides delete-object <id> --object-id <obj-id>` |
| Clear text from shape | `gws slides delete-text <id> --object-id <obj-id>` |
| Style text | `gws slides update-text-style <id> --object-id <obj-id> --bold --color "#FF0000"` |
| Move/resize element | `gws slides update-transform <id> --object-id <obj-id> --x 200 --y 100` |
| Create a table | `gws slides create-table <id> --slide-number 1 --rows 3 --cols 4` |
| Insert table rows | `gws slides insert-table-rows <id> --table-id <tbl-id> --at 1 --count 2` |
| Delete table row | `gws slides delete-table-row <id> --table-id <tbl-id> --row 2` |
| Style table cell | `gws slides update-table-cell <id> --table-id <tbl-id> --row 0 --col 0 --background-color "#FFFF00"` |
| Style table border | `gws slides update-table-border <id> --table-id <tbl-id> --row 0 --col 0 --color "#000000"` |
| Paragraph style | `gws slides update-paragraph-style <id> --object-id <obj-id> --alignment CENTER` |
| Shape properties | `gws slides update-shape <id> --object-id <obj-id> --background-color "#0000FF"` |
| Reorder slides | `gws slides reorder-slides <id> --slide-ids "slide1,slide2" --to 0` |
| Set slide background color | `gws slides update-slide-background <id> --slide-number 1 --color "#005843"` |
| Set slide background image | `gws slides update-slide-background <id> --slide-number 1 --image-url "https://..."` |
| List available layouts | `gws slides list-layouts <id>` |
| Add slide with custom layout | `gws slides add-slide <id> --layout-id <layout-id>` |
| Add a line | `gws slides add-line <id> --slide-number 1 --start-x 50 --start-y 50 --end-x 300 --end-y 200` |
| Group elements | `gws slides group <id> --object-ids "obj1,obj2,obj3"` |
| Ungroup elements | `gws slides ungroup <id> --group-id <group-id>` |
| Get slide thumbnail | `gws slides thumbnail <id> --slide <slide-id-or-number>` |

## Detailed Usage

### info — Get presentation info

```bash
gws slides info <presentation-id> [--notes]
```

**Flags:**
- `--notes` — Include speaker notes in output

### list — List all slides

```bash
gws slides list <presentation-id> [--notes]
```

Lists all slides with their content and object IDs.

**Flags:**
- `--notes` — Include speaker notes in output

### read — Read slide content

```bash
gws slides read <presentation-id> [slide-number] [--notes]
```

Reads text content. Omit slide number to read all slides. Slide numbers are **1-indexed**.

**Flags:**
- `--notes` — Include speaker notes in output

### create — Create a presentation

```bash
gws slides create --title <title>
```

### add-slide — Add a slide

```bash
gws slides add-slide <presentation-id> [flags]
```

**Flags:**
- `--title string` — Slide title
- `--body string` — Slide body text
- `--layout string` — Layout type (default: "TITLE_AND_BODY")
- `--layout-id string` — Custom layout ID from presentation's masters (overrides --layout)

**Available predefined layouts:** `TITLE_AND_BODY`, `TITLE_ONLY`, `BLANK`, `SECTION_HEADER`, `TITLE`, `ONE_COLUMN_TEXT`, `MAIN_POINT`, `BIG_NUMBER`

For custom layouts, use `gws slides list-layouts <id>` to discover layout IDs.

### delete-slide — Delete a slide

```bash
gws slides delete-slide <presentation-id> [flags]
```

**Flags:**
- `--slide-number int` — Slide number (1-indexed)
- `--slide-id string` — Slide object ID (alternative)

### duplicate-slide — Duplicate a slide

```bash
gws slides duplicate-slide <presentation-id> [flags]
```

**Flags:**
- `--slide-number int` — Slide number (1-indexed)
- `--slide-id string` — Slide object ID (alternative)

### add-shape — Add a shape

```bash
gws slides add-shape <presentation-id> [flags]
```

**Flags:**
- `--slide-number int` — Slide number (1-indexed)
- `--slide-id string` — Slide object ID
- `--type string` — Shape type (default: "RECTANGLE")
- `--x float` — X position in points (default: 100)
- `--y float` — Y position in points (default: 100)
- `--width float` — Width in points (default: 200)
- `--height float` — Height in points (default: 100)

**Shape types:** `RECTANGLE`, `ELLIPSE`, `TEXT_BOX`, `ROUND_RECTANGLE`, `TRIANGLE`, `ARROW`, etc.

### add-image — Add an image

```bash
gws slides add-image <presentation-id> --url <image-url> [flags]
```

**Flags:**
- `--url string` — Image URL (required, must be publicly accessible)
- `--slide-number int` — Slide number (1-indexed)
- `--slide-id string` — Slide object ID
- `--x float` — X position in points (default: 100)
- `--y float` — Y position in points (default: 100)
- `--width float` — Width in points (default: 400)
- `--height float` — Height in points (default: auto-calculated from image aspect ratio)

### add-text — Add text to shape, table cell, or speaker notes

```bash
# For shapes/text boxes:
gws slides add-text <presentation-id> --object-id <id> --text <text> [flags]

# For table cells:
gws slides add-text <presentation-id> --table-id <id> --row <n> --col <n> --text <text> [flags]

# For speaker notes:
gws slides add-text <presentation-id> --notes --slide-number <n> --text <text> [flags]
```

**Flags:**
- `--object-id string` — Shape/text box ID (mutually exclusive with --table-id and --notes)
- `--table-id string` — Table object ID (requires --row and --col)
- `--row int` — Row index, 0-based (required with --table-id)
- `--col int` — Column index, 0-based (required with --table-id)
- `--notes` — Target speaker notes shape (mutually exclusive with --object-id and --table-id)
- `--slide-id string` — Slide object ID (required with --notes)
- `--slide-number int` — Slide number, 1-indexed (required with --notes)
- `--text string` — Text to insert (required)
- `--at int` — Position to insert at (0 = beginning)

Get object IDs from `gws slides list <id>` output. For tables, find elements with `"type": "TABLE"` and use their `objectId` as the `--table-id` value.

### replace-text — Find and replace text

```bash
gws slides replace-text <presentation-id> --find <text> --replace <text> [flags]
```

**Flags:**
- `--find string` — Text to find (required)
- `--replace string` — Replac

Related in Productivity