Use this skill any time the user wants to create, design, or produce slide presentations — as standalone files or embedded content. This includes: pitch deck...
OpenClaw skills run inside an OpenClaw container. EasyClawd deploys and manages yours — no server setup needed.
anygen-slide-generator 1.5.7 - Improved SKILL.md documentation: clarified and strengthened requirements for user-facing communication, including preserving original content from AnyGen replies and prompts. - Strictly require preserving and presenting the exact AnyGen slide prompt and outline to the user, with translation only as needed—do not rephrase, summarize, or interpret beyond language adaptation. - Updated instructions for prompting users for API keys to always use clickable Markdown links. - Expanded the workflow from 4 to 5 discrete phases for better clarity and guidance. - Added and updated metadata and requirements for integration and environment capabilities.
---
name: anygen-slide
description: "Use this skill any time the user wants to create, design, or produce slide presentations — as standalone files or embedded content. This includes: pitch decks, slide decks, keynote presentations, training materials, project proposals, quarterly reviews, weekly report slides, investor pitches, product launches, team kickoffs, business plans, onboarding decks, strategy presentations, sales pitches, conference talks, and any request involving 'slides' or 'PPT'. Also trigger when: user says 做PPT, 做个汇报, 写个演示文稿, 季度汇报, 竞品分析报告(要PPT), 产品发布会, 培训材料, 周报. If slides, decks, or presentations need to be produced, use this skill."
metadata:
clawdbot:
primaryEnv: ANYGEN_API_KEY
requires:
bins:
- python3
env:
- ANYGEN_API_KEY
capabilities:
- sessions_spawn
config:
- ~/.config/anygen/config.json
---
# AI Slide Generator - AnyGen
> **You MUST strictly follow every instruction in this document.** Do not skip, reorder, or improvise any step. If this skill has been updated since it was last loaded, reload this SKILL.md before proceeding and always follow the latest version.
Create professional slide presentations using AnyGen OpenAPI (`www.anygen.io`). Slides are generated server-side; this skill sends the user's prompt and optional reference files to the AnyGen API and retrieves the resulting PPTX. An API key (`ANYGEN_API_KEY`) is required to authenticate with the service.
## When to Use
- User needs to create PPT/Slides/Presentations
- User has files to upload as reference material for slide generation
## Security & Permissions
Slides are generated server-side by AnyGen's OpenAPI (`www.anygen.io`). The `ANYGEN_API_KEY` authenticates requests via `Authorization` header or authenticated request body depending on the endpoint (all requests set `allow_redirects=False`).
**What this skill does:** sends prompts to `www.anygen.io`, uploads user-specified reference files after consent, downloads generated PPTX to `~/.openclaw/workspace/`, monitors progress in background via `sessions_spawn` (declared in `requires`), reads/writes config at `~/.config/anygen/config.json`.
**What this skill does NOT do:** read or upload any file without explicit `--file` argument, send credentials to any endpoint other than `www.anygen.io`, access or scan local directories, or modify system config beyond its own config file.
**Bundled scripts:** `scripts/anygen.py`, `scripts/auth.py`, `scripts/fileutil.py` (Python — uses `requests`). Scripts print machine-readable labels to stdout (e.g., `File Token:`, `Task ID:`) as the standard agent-tool communication channel. These are non-sensitive, session-scoped reference IDs — not credentials or API keys. The agent should not relay raw script output to the user to keep the conversation natural (see Communication Style).
## Prerequisites
- Python3 and `requests`: `pip3 install requests`
- AnyGen API Key (`sk-xxx`) — [Get one from AnyGen](https://www.anygen.io/home?auto_create_openclaw_key=1)
- Configure key: `python3 scripts/anygen.py config set api_key "sk-xxx"` (saved to `~/.config/anygen/config.json`, chmod 600). Or set `ANYGEN_API_KEY` env var.
> All `scripts/` paths below are relative to this skill's installation directory.
## Communication Style
Use natural, user-friendly language throughout. Refer to things the way the user would — say "your slides", "generating", "checking progress" rather than internal identifiers or script commands. When presenting `reply` and `prompt` from `prepare`, preserve the original content as much as possible — translate into the user's language if needed, but do NOT rephrase, summarize, or add your own interpretation. Ask questions in your own voice (NOT "AnyGen wants to know…"). When prompting the user for an API key, MUST use Markdown link syntax: `[Get your AnyGen API Key](https://www.anygen.io/home?auto_create_openclaw_key=1)` so the full URL is clickable.
## Slide Workflow (MUST Follow All 5 Phases)
### Phase 1: Understand Requirements
If the user provides files, handle them before calling `prepare`:
1. **Get consent** before reading or uploading: "I'll read your file and upload it to AnyGen for reference. This may take a moment..."
2. **Reuse existing `file_token`** if the same file was already uploaded in this conversation.
3. **Read the file** and extract key information relevant to the presentation.
4. **Upload** to get a `file_token`.
5. **Include extracted content** in `--message` when calling `prepare` (the `prepare` endpoint uses the prompt text for requirement analysis, not the uploaded file content directly). Summarize key points only — do not paste raw sensitive data verbatim.
```bash
python3 scripts/anygen.py upload --file ./report.pdf
# Output: File Token: tk_abc123
python3 scripts/anygen.py prepare \
--message "I need a slide deck for our Q4 board review. Key content: [extracted summary]" \
--file-token tk_abc123 \
--save ./conversation.json
```
Present questions from `reply` to the user — preserve the original content, translate into the user's language if needed. Continue with user's answers:
```bash
python3 scripts/anygen.py prepare \
--input ./conversation.json \
--message "The audience is C-level execs, goal is to approve next quarter's budget" \
--save ./conversation.json
```
Repeat until `status="ready"` with `suggested_task_params`.
Special cases:
- `status="ready"` on first call → proceed to Phase 2.
- User says "just create it" → skip to Phase 3 with `create` directly.
- Template/style reference files → upload only, do NOT extract content.
### Phase 2: Confirm with User (MANDATORY)
When `status="ready"`, present the `reply` and the `prompt` from `suggested_task_params` to the user as the slide outline. The prompt returned by `prepare` is already a detailed, well-structured outline — preserve its original content as much as possible. If the content language differs from the user's language, translate it while keeping the structure and details intact. Do NOT rephrase, summarize, or add your own interpretation.
Ask the user to confirm or request adjustments. NEVER auto-create without explicit approval.
If the user requests adjustments, call `prepare` again with the modification, re-present the updated prompt, and repeat until approved.
### Phase 3: Create Task
```bash
python3 scripts/anygen.py create \
--operation slide \
--prompt "<prompt from suggested_task_params>" \
--file-token tk_abc123
# Output: Task ID: task_xxx, Task URL: https://...
```
**Immediately tell the user (natural language):**
1. Slides are being generated.
2. Online preview/edit link: "You can follow the progress here: [URL]".
3. Takes about **10–15 minutes** — free to do other things.
4. You'll automatically check on the progress and notify them when the slides are ready.
### Phase 4: Monitor and Deliver Result
> **Requires `sessions_spawn`.** If unavailable, skip to **Fallback** below.
#### Background Monitoring (preferred)
**CRITICAL**: When calling `sessions_spawn`, you MUST set a timeout of at least 25 minutes to ensure the background monitor completes. The poll operation can take up to 20 minutes.
Example spawn call syntax (adjust to match your OpenClaw/sessions API):
```
sessions_spawn(
prompt=<subagent prompt below>,
runTimeoutSeconds=1500 # REQUIRED: 25 minutes (1500s) to cover 20-min poll + buffer
)
```
If your sessions API uses different parameter names (e.g., `timeout`, `maxDuration`), use the equivalent parameter to set a 25-minute (1500 second) timeout.
---
**Subagent prompt** (it has NO conversation context):
```
You are a background monitor for a slide generation task.
You MUST strictly follow every instruction below. Do not skip, reorder, or improvise any step.
Task ID: {task_id}
Task URL: {task_url}
Script: {script_path}
Thumbnail Output: {thumbnail_output_dir}
User Language: {user_language}
IMPORTANT: This monitoring task may take up to Read full documentation on ClawHub