How to install felo-slides
npx skills add https://github.com/felo-inc/felo-skills --skill felo-slidesFull instructions (SKILL.md)
Source of truth, from felo-inc/felo-skills.
name: felo-slides description: "Generate PPT/slides with Felo PPT Task API in Claude Code. Use when users ask to create/make/generate/export presentations or slide decks, or when explicit commands like /felo-slides are used. Handles API key check, task creation, polling, and final ppt_url output."
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
- Visit felo.ai
- Open Settings -> API Keys
- Create and copy your API key
2. Configure environment variable
Linux/macOS:
export FELO_API_KEY="your-api-key-here"
Windows 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
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):
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:
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 (sendsppt_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/SUCCESSas success terminal (case-insensitive) - Treats
FAILED/ERRORas failure terminal - Stops polling immediately on terminal status
- Prints
ppt_urlon success (fallback:live_doc_url)
Optional debug output:
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_idtask_statusppt_urllive_doc_urllivedoc_short_idppt_business_iderror_message
Step 3: Confirm terminal status
The script polls the historical endpoint automatically. Wait for it to exit before responding:
- Success: terminal status is
COMPLETEDorSUCCESS, and the script printsppt_url(fallback:live_doc_url) - Failure: terminal status is
FAILEDorERROR; return the error format below - Timeout: include the
task_idand tell the user to resume with--task-idinstead of creating a duplicate PPT task
Step 4: Return structured result
On success, return:
ppt_urlimmediately (script default output, fallbacklive_doc_url)- if
--jsonis used, also includetask_id, terminal status, and optional metadata
Output Format
Use this response structure:
## 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:
## PPT Generation Failed
- Error Type: <error code or category>
- Message: <readable message>
- Suggested Action: <next step>
Error Handling
Known API error codes:
INVALID_API_KEY(401): key invalid or revokedPPT_TASK_CREATE_FAILED(502): create task downstream failedPPT_TASK_QUERY_FAILED(502): query task downstream failed
Timeout handling:
- If timeout reached, return last known status and instruct user to retry later
- Include
task_idso user can query again - IMPORTANT: To resume a timed-out task, use
--task-idinstead of--queryto avoid creating a duplicate PPT:
node felo-slides/scripts/run_ppt_task.mjs \
--task-id "TASK_ID_HERE" \
--interval 10 \
--max-wait 1800
Important Notes
- Always execute this skill when user intent is slide generation.
- Always return
task_idso follow-up queries can continue from the same task. - Do not claim completion without a terminal status.
- Keep API calls minimal: create once, then poll.
References
Related skills
More from felo-inc/felo-skills and the wider catalog.

app-store
Search iOS apps, fetch details, reviews, and similar apps across any App Store country—pay-per-call in USDC or prepaid credits.

fetcher
Payment and setup for fetcher.sh's pay-per-call web-data API across 11 services.

google-maps
Google Maps and Places API alternative—pay-per-call in USDC or prepaid credits, no Google Cloud setup.

google-news
Google News API alternative—keyword search, section headlines, and URL decoding via clean HTTP GET, paid per call in USDC or prepaid credits.

google-play
Query Google Play Store apps, reviews, permissions, and data safety without developer access—pay per call in USDC or prepaid credits.

google-search
Pay-per-call Google Search API with native operator support—no quota, no Custom Search Engine setup.