> ## Documentation Index
> Fetch the complete documentation index at: https://docs.slideless.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Use Slideless with Claude

> Generate, share, and update presentations from Claude Code via the slideless plugin

## Overview

The [`slideless-ai/plugin`](https://github.com/slideless-ai/plugin) is an [Open Plugin v1](https://github.com/vercel-labs/open-plugin-spec)-conformant plugin that lets Claude Code (and any other compatible agent) do the following:

1. **Generate** an HTML presentation in a curated style — a single self-contained file, or a folder with sibling assets.
2. **Push** it (folder or single file). The first push creates the deck; subsequent pushes from the same folder update it in place.
3. **Share** the deck to get a public viewer URL. Mint as many named tokens as you need.
4. **Pull** a deck onto another machine (or invite a dev collaborator to do the same).
5. **List** and **get** your presentations (owned + shared-with-you) with per-token view counts and version info.
6. **Export** to PDF locally if you need a file artifact.

The skills that push, pull, publish, list, or fetch presentations all delegate to the [`slideless` CLI](/cli/overview). The CLI is the canonical interface; the skills wrap it so Claude can call it cleanly. Publish-side skills require the CLI installed and a profile saved via `slideless login`.

The `generate-presentation` and `export-presentation-pdf` skills are fully self-contained and do not call the backend.

## Step 1 — Install the CLI and the plugin

Install the CLI once:

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
npm install -g slideless
```

Then install the plugin. Either of these works:

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
# Open-Plugin-compatible path (Claude Code, Cursor, …):
npx plugins add slideless-ai/plugin

# Or, Claude Code native:
/plugin marketplace add slideless-ai/plugin
/plugin install slideless@plugin
```

After install, every `/slideless:*` skill is available in any session.

## Step 2 — One-time setup skill

Run [`setup-slideless`](https://github.com/slideless-ai/plugin/blob/main/skills/setup-slideless/SKILL.md):

```
/skill setup-slideless
```

The skill checks the CLI is installed, then picks one of three paths:

* **OTP signup** (fresh account) — runs `slideless auth signup-request --email <you>`, prompts you for the 6-digit code emailed to you, then runs `slideless auth signup-complete`.
* **OTP login** (existing account on a new machine) — runs the `login-request` / `login-complete` pair.
* **Paste a key** (you already have a `cko_` from the dashboard) — runs `slideless login`.

At the end the key is saved to `~/.config/slideless/config.json` and every downstream skill authenticates automatically. See [`cli/auth`](/cli/auth) for the flow in detail.

## Step 3 — Generate, push, and share

Three skills, used together:

```
/skill generate-presentation
> Topic: Q4 results, revenue, churn, headcount
> Style: full-deck (cinematic) or slim-tabbed (workshop)
```

Claude writes either a single self-contained HTML file or a deck folder (if the content needs images, video, or 3D assets). Then push it:

```
/skill push-presentation
> source_path: ./q4-results      (folder) or ./q4-results.html (single file)
> title: Q4 Results
```

The skill runs `slideless push <source_path> --title "Q4 Results" --json` and returns the `presentationId`. Mint a public viewer URL:

```
/skill share-presentation
> share_id: <the presentationId from the previous step>
```

Runs `slideless share <presentationId> --json` and prints the `shareUrl`. Send it to anyone.

## Step 4 — Iterate and re-publish

Tweaks to the deck? Re-run the generator (or edit the source directly), then push again:

```
/skill push-presentation
> source_path: ./q4-results
```

Runs `slideless push ./q4-results`. The skill reads `slideless.json` from the deck folder and knows this is an update — the URL stays the same, recipients refresh and see the new content, and the view counter keeps incrementing from where it was. Unchanged assets (images, video, JS bundles) are deduplicated — only modified files re-upload.

## Step 5 — List and inspect

```
/skill list-presentations
```

Runs `slideless list --json` and prints all your decks with titles, versions, share URLs, and view counts.

```
/skill get-presentation
> share_id: <a presentationId>
```

Runs `slideless get <presentationId> --json` and prints the full metadata, including each share token's individual access count and last-accessed time.

## Local PDF export

For users who need a file artifact (e.g. attach to an email):

```
/skill export-presentation-pdf
> html_path: ./q4-results.html
```

Runs a local Puppeteer process that prints the HTML to a landscape PDF with print-friendly CSS injected. No backend call, purely local.

## Available skills (full list)

See the [Plugin Skills overview](/skills/overview) for the canonical list with descriptions and the CLI command each one wraps.

## Troubleshooting

| Symptom                           | Likely cause                                                             | Fix                                                                                                                                          |
| --------------------------------- | ------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------- |
| `command not found: slideless`    | CLI not installed                                                        | `npm install -g slideless`                                                                                                                   |
| `unauthenticated`                 | Profile not saved or key revoked                                         | Re-run `setup-slideless`, or `slideless auth login-request --email <you>` + `login-complete`                                                 |
| `permission-denied` on push       | Key missing `presentations:write` scope                                  | Re-run `setup-slideless` (OTP-minted keys always have both scopes), or create a new dashboard key with the right scope and `slideless login` |
| `payload-too-large`               | File or total deck exceeds the plan cap (free: 50 MB/file, 250 MB total) | Compress videos, drop unused assets, or upgrade the plan                                                                                     |
| `conflict` on push                | Someone else pushed after your last pull                                 | Run `slideless pull <id>` and `slideless push` again, or pass `--force` to overwrite                                                         |
| `blobs-missing`                   | Manifest references a hash not in the store                              | Should not happen in normal use — re-run `push-presentation`                                                                                 |
| `too-many-files`                  | Manifest exceeds plan max file count                                     | Trim the folder (`.slidelessignore`, drop unused files)                                                                                      |
| Parent-escape error (static scan) | HTML references `../outside/foo.jpg`                                     | Move the asset into the deck folder or use a CDN URL                                                                                         |
| `404` when opening share URL      | Token revoked, token typo, or share ID wrong                             | Mint a fresh token with `share-presentation`, or check `slideless get <id>`                                                                  |
