ChartGen AI — Data Analysis & Visualization Skill
name: chartgen
by chartgen-ai · published 2026-04-01
$ claw add gh:chartgen-ai/chartgen-ai-chartgen---
name: chartgen
description: >
Use this skill when the user wants to create visualizations (charts, dashboards, diagrams, Gantt, PPT), analyze data (Excel/CSV upload, cross-file analysis, trends, outliers) or generate reports. Also use when the user mentions ChartGen or uploads spreadsheet files.
user-invocable: true
homepage: https://github.com/chartgen-ai/chartgen-skill
metadata:
openclaw:
primaryEnv: CHARTGEN_API_KEY
requires:
runtime:
- node >= 14
---
# ChartGen AI — Data Analysis & Visualization Skill
ChartGen is an AI platform for **visualization**, **data analysis** and **report generation**.
You call its API to analyze data, uncover insights, and produce visual outputs.
**Visualization** (PNG): All ECharts chart types (Bar, Line, Pie, Area, Scatter, Heatmap, Combo, Waterfall, Funnel, Radar, Treemap, Sunburst, etc.); Diagrams (Flowchart, Sequence, Class, State, ER, Mind Map, Timeline, Kanban, Gantt);
Dashboards (multi-chart layouts).
**Data Analysis**: text-only (describe scenario / sample data), file upload (Excel/CSV, multi-file joins), or web/external sources. Supports stats, trends, outliers, YoY.
**Reports & PPT**: analysis reports with findings; PPT slides with visualizations.
---
Tool — `tools/chartgen_api.js`
| Command | Args | Purpose |
|---------|------|---------|
| `submit` | `"<query>" <channel> [files...]` | Submit request → returns `task_id` |
| `wait` | `<task_id>` | Poll until done (~25 min max) |
| `poll` | `<task_id>` | Single status check |
---
Workflow — 5 Steps
STEP 1 — Confirm Before Submitting
Always respond in the user's language. **Must** mention using **ChartGen** to complete the task, and include numbered options, each on its own line:
> **1** ✅ Go ahead
> **2** ✏️ Modify
> **0** ❌ Cancel
**Confirmation rules:**
1. **Cancel = abandon forever.** Never proceed with a cancelled task.
2. **Replies bind to the most recent prompt only.** If the task was cancelled, completed, or the conversation moved on — start a new confirmation from scratch.
3. **When in doubt, ask** — never guess.
**Query rule — text requests (no files):**
The `<query>` is **always the user's original message, copied word-for-word**. Do NOT translate, rephrase, expand, polish, or "improve" it in any way. Show this exact text in the confirmation. If user confirms → submit this exact text. If user edits → the edited text becomes the new verbatim query.
**File upload:** Do NOT submit immediately. Recommend 3–5 analysis tasks (numbered, noting which files). Each option's text is the exact query that will be submitted. User picks a number, types custom text, or cancels.
Text request example (**reply in user's language, mention ChartGen**):
> Sure! Here's what I'll ask **ChartGen** to do for you:
> 📊 **"Generate a monthly sales trend line chart for 2025"**
> **1** ✅ Go ahead
> **2** ✏️ Modify
> **0** ❌ Cancel
File upload example (**reply in user's language, mention ChartGen**):
> Got your files! Here are a few things **ChartGen** can do — pick one or tell me what you'd like:
> **1.** 📊 "Monthly order trend chart" — *orders.xlsx*
> **2.** 🥧 "Category breakdown pie chart" — *orders.xlsx, products.xlsx*
> **3.** 📋 "Full analysis report with all files"
> **0.** ❌ Cancel
> Or just type your own request!
---
STEP 2 — Notify User, Then Submit
**CRITICAL**: Send the notification message BEFORE calling the tool — do NOT batch them.
**Notify** (adapt to language and context):
**Then call the tool:**
node tools/chartgen_api.js submit "<query>" <channel> [files...]
`<query>`: **Copy-paste the confirmed text from STEP 1** — the user's original words or, for file uploads, the chosen option text. Never rewrite.
`<channel>`: current channel name, e.g. `Signal`, `WhatsApp`, `Web`.
`[files...]`: optional, space-separated absolute paths to data files.
Save the returned `task_id` for STEP 3.
**Error handling:**
---
STEP 3 — Background Polling
Choose based on platform capabilities:
**A. Background exec** (OpenClaw, or agent supports background execution with exit notification):
{ "tool": "exec", "params": { "command": "node tools/chartgen_api.js wait {task_id}", "background": true } }
When done, read output → STEP 4.
**B. Cron** (generic): poll every 90s with `poll {task_id}`. On terminal status (`finished`/`error`/`not_found`), remove cron → STEP 4. Timeout after 25 min.
**C. Inline** (last resort): run `wait {task_id}` synchronously → STEP 4.
If user asks to check a task: run `poll {task_id}` and report.
---
STEP 4 — Handle Completion
Read the output JSON `status`:
---
STEP 5 — Deliver Results
1. **Summarize `text_reply`** — extract key points from ChartGen's analysis and present them concisely to the user. Keep it clear and informative.
2. **Send artifacts:**
- Charts/Dashboards/Diagrams: send image at `image_path` with title as caption.
- PPT: tell user page count, send each `preview_paths` image, send `.pptx` file at `download_path` if it exists and channel supports attachments.
- Excel/file: show `summary` (columns, rows), send file at `download_path` if it exists and channel supports attachments.
3. **Show `edit_url`** — link to edit on ChartGen.
4. **HTML content**: if `html_content` exists, send it as HTML message (skip separate text+images). Still show `edit_url`.
5. **Suggest next steps**: "You can ask me to generate another visualization!"
---
Rules
More tools from the same signal band
Order food/drinks (点餐) on an Android device paired as an OpenClaw node. Uses in-app menu and cart; add goods, view cart, submit order (demo, no real payment).
Sign plugins, rotate agent credentials without losing identity, and publicly attest to plugin behavior with verifiable claims and authenticated transfers.
The philosophical layer for AI agents. Maps behavior to Spinoza's 48 affects, calculates persistence scores, and generates geometric self-reports. Give your...