
Felo Slides
Generate shareable slide decks from a topic, outline, or notes via the Felo PPT Task API without manual deck building.
Overview
Felo Slides is an agent skill for the Build phase that generates PPT/slide decks through the Felo PPT Task API and returns a shareable ppt_url.
Install
npx skills add https://github.com/felo-inc/felo-skills --skill felo-slidesWhat is this skill?
- End-to-end Felo PPT Task API workflow: API key precheck, task creation, polling, and final ppt_url
- Supports topic/outline-driven decks and explicit page-count requirements
- Triggered by create/generate slides prompts, PPT/presentation keywords, and /felo-slides
- Excludes real-time lookup (use felo-search), local codebase questions, and non-slide text tasks
- Requires FELO_API_KEY from felo.ai Settings → API Keys
- 4-step execute workflow: precheck API key, create task, poll, output ppt_url
Adoption & trust: 456 installs on skills.sh; 204 GitHub stars; 3/3 security scanners passed (skills.sh audits).
What problem does it solve?
You have talking points or an outline but no time to lay out slides manually or babysit an external slide generator API.
Who is it for?
Solo builders who want agent-driven deck generation from prompts and need a linkable PPT output for pitches or walkthroughs.
Skip if: Live fact-finding, codebase exploration, or tasks that only need prose without a slide file—in those cases use felo-search or standard editing instead.
When should I use this skill?
Users ask to create, make, generate, or export presentations or slide decks, or use /felo-slides or felo slides commands.
What do I get? / Deliverables
You get a polled, ready-to-open presentation URL after the Felo task completes, with clear errors if FELO_API_KEY is missing.
- Shareable ppt_url from completed Felo PPT task
- Explicit ERROR when API key is not set
Recommended Skills
Journey fit
Presentation output is a build-time deliverable for docs, demos, and stakeholder-ready artifacts alongside product work. Slides package narrative and structure the same way MDX/docs do—ideal shelf under docs when the goal is a deck file and ppt_url, not live search.
How it compares
API-backed slide generation skill, not a local Markdown-to-slides template or a general web search skill.
Common Questions / FAQ
Who is felo-slides for?
Indie builders and small teams using Claude Code (or similar agents) who want automated presentation files from topics or notes via Felo’s hosted PPT API.
When should I use felo-slides?
Use it in Build (docs) when you need a deck for demos or documentation walkthroughs, in Validate when turning a scope outline into pitch slides, or in Launch when packaging narrative for distribution—always when the deliverable must be slides, not just text.
Is felo-slides safe to install?
It requires a Felo API key and network access to Felo’s services; review the Security Audits panel on this page and treat FELO_API_KEY as a secret you control in your environment.
SKILL.md
READMESKILL.md - Felo Slides
# Felo Slides Skill ## When to Use Trigger this skill for requests about creating presentation files: - Create/generate slides from a topic or outline - Turn notes into a PPT deck - Build a presentation with a page count requirement - Export presentation content into a shareable slide link Trigger keywords: - Chinese prompts about making slides or presentations - English: slides, PPT, presentation deck, generate presentation - Explicit commands: `/felo-slides`, "use felo slides" Do NOT use this skill for: - Real-time information lookup (use `felo-search`) - Questions about local codebase files - Pure text tasks that do not require slide generation ## Setup ### 1. Get API key 1. Visit [felo.ai](https://felo.ai) 2. Open Settings -> API Keys 3. Create and copy your API key ### 2. Configure environment variable Linux/macOS: ```bash export FELO_API_KEY="your-api-key-here" ``` Windows PowerShell: ```powershell $env:FELO_API_KEY="your-api-key-here" ``` ## How to Execute Use Bash tool commands and follow this workflow exactly. ### Step 1: Precheck API key ```bash if [ -z "$FELO_API_KEY" ]; then echo "ERROR: FELO_API_KEY not set" exit 1 fi ``` If key is missing, stop and return setup instructions. ### Step 2: Run Node Script (create + poll) Use the bundled script (no `jq` dependency): ```bash node felo-slides/scripts/run_ppt_task.mjs \ --query "USER_PROMPT_HERE" \ --interval 10 \ --max-wait 1800 \ --timeout 60 ``` To apply a specific theme, first list available themes with `felo ppt-themes`, then pass the theme ID: ```bash node felo-slides/scripts/run_ppt_task.mjs \ --query "USER_PROMPT_HERE" \ --theme "THEME_ID_HERE" \ --interval 10 \ --max-wait 1800 \ --timeout 60 ``` Script behavior: - Creates task via `POST https://openapi.felo.ai/v2/ppts` - Supports optional `--theme <id>` to apply a PPT theme (sends `ppt_config.ai_theme_id`) - Supports optional `--livedoc-id <id>` to reuse an existing LiveDoc instead of auto-creating a new one - Supports optional `--task-id <id>` to resume polling an existing task (skips creation) - Polls via `GET https://openapi.felo.ai/v2/tasks/{task_id}/historical` - Treats `COMPLETED`/`SUCCESS` as success terminal (case-insensitive) - Treats `FAILED`/`ERROR` as failure terminal - Stops polling immediately on terminal status - Prints `ppt_url` on success (fallback: `live_doc_url`) Optional debug output: ```bash node felo-slides/scripts/run_ppt_task.mjs \ --query "USER_PROMPT_HERE" \ --interval 10 \ --max-wait 1800 \ --json \ --verbose ``` This outputs structured JSON including: - `task_id` - `task_status` - `ppt_url` - `live_doc_url` - `livedoc_short_id` - `ppt_business_id` - `error_message` ### Step 3: Confirm terminal status The script polls the historical endpoint automatically. Wait for it to exit before responding: - Success: terminal status is `COMPLETED` or `SUCCESS`, and the script prints `ppt_url` (fallback: `live_doc_url`) - Failure: terminal status is `FAILED` or `ERROR`; return the error format below - Timeout: include the `task_id` and tell the user to resume with `--task-id` instead of creating a duplicate PPT task ### Step 4: Return structured result On success, return: - `ppt_url` immediately (script default output, fallback `live_doc_url`) - if `--json` is used, also include `task_id`, terminal status, and optional metadata ## Output Format Use this response structure: ```markdown ## PPT Generation Result - Task ID: <task_id> - Status: <status> - PPT URL: <ppt_url> - Live Doc URL: <live_doc_url or N/A> ## Notes - livedoc_short_id: <value or N/A> - ppt_business_id: <value or N/A> ``` Error format: ```markdown ##