agent/skills/tools/kuva/SKILL.md
Create CLI plots from tabular data — 27 chart types from stdin/CSV/TSV. Use when generating bar, line, scatter, or box charts from DuckDB pipe output.
npx skillsauth add knoopx/pi kuvaInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
27 chart types from stdin, CSV, or TSV. Output format is inferred from -o extension: .png, .svg, or .pdf.
Every generated plot MUST be shown to the user. Never generate a plot and silently save it.
Save plots to /tmp by default. Never write plots to the current working directory unless the user explicitly requests it.
kuva ... -o /tmp/plot.pngread /tmp/plot.png to show the userWhen rendering several plots:
kuva ... -o /tmp/plot1.png, then kuva ... -o /tmp/plot2.png, etc.)read tool (e.g., read /tmp/plot1.png followed by read /tmp/plot2.png)Always prefer DuckDB pipe over file input. Kuva reads CSV directly via positional argument, but DuckDB gives you ignore_errors=true for messy data, CAST/aggregations on the fly, and no intermediate files. When piping, do NOT pass a file argument to kuva (it will read the file instead of stdin).
duckdb :memory: -csv << 'EOF' 2>/dev/null | kuva bar --label-col Vendor --value-col cnt \
--theme dark --color "#fad000" --background "#191033" \
--title 'Vendor Counts' -o plot.png
SELECT Vendor, COUNT(*) AS cnt FROM read_csv('data.csv', header=true, ignore_errors=true) GROUP BY Vendor ORDER BY cnt DESC;
EOF
CAST failures. Filter non-numeric rows: WHERE col != '' AND col NOT LIKE '%—%'."Payment Method".<< 'EOF' ... EOF) with duckdb for complex queries — -c struggles with quoting.kuva strip only.2>/dev/null so kuva receives clean CSV on stdin.See chart reference for full chart type table, parameter naming, and examples.
Single-color charts: --color "#hex" sets all bars/elements to one color. Works on bar, histogram, box, violin, strip.
Strip plot caveat: Does NOT support --color-by — use --color for a single fill, or switch to kuva violin / kuva box with --color-by if per-group coloring is needed.
duckdb :memory: -csv << 'EOF' 2>/dev/null | kuva bar --label-col x --value-col y --color "#fad000" \
--theme dark --background "#191033" -o plot.png
SELECT x, CAST(y AS DOUBLE) AS y FROM read_csv('data.csv', header=true, ignore_errors=true);
EOF
Multi-series charts: --color-by column + --palette name. Palette cycles per series. Not all chart types support --color-by — check --help.
Available palettes: category10, wong, okabe-ito, pastel, bold, tol-bright, tol-muted, tol-light, ibm
Pie charts: use --palette (it overrides --color). No per-slice color control via CLI.
Custom background: --background "#191033" overrides the theme's canvas color.
No custom themes via CLI. Only 4 built-in: light, dark, solarized, minimal. Use these defaults:
| kuva flag | Your palette value | Usage |
| -------------- | ------------------------- | -------------------------------- |
| --background | #191033 (base00) | Canvas background for all charts |
| --color | #fad000 (base0A/yellow) | Default bar/histogram fill color |
| --theme | dark | Dark theme as base |
Example: kuva bar --label-col x --value-col y --theme dark --color "#fad000" --background "#191033" -o plot.png
All chart types accept:
--theme light|dark|solarized|minimal--palette category10|wong|okabe-ito|pastel|bold|tol-bright|tol-muted|tol-light|ibm--cvd-palette deuteranopia|protanopia|tritanopia (overrides --palette)--background <CSS> — canvas background color--x-label, --y-label, --ticks N, --no-grid, --log-x/y--interactive (SVG only), --width, --height, --scale, --titleBar chart extras: --bar-width, --agg sum|mean|median|min|max, --count-by column
--color-by overrides --color; --count-by ignores --value-col--palette overrides --color on pie charts and multi-series charts--terminal is incompatible with -o file output--x "my column"SUM, GROUP BY, etc.)year*12+month)27 chart types: scatter, line, bar, histogram, pie, box, violin, strip, density, ridgeline, heatmap, sankey, chord, upset, volcano, manhattan, forest, candlestick. Check kuva <chart> --help.
See chart examples for complete working examples for each chart type.
tools
Inform the user what is happening — skip passive lookups
development
Renders markdown to self-contained HTML with a custom dark stylesheet and opens in browser. Use when previewing markdown documents, generating styled HTML from README or report files.
testing
Programmatic hunk selection for Jujutsu — split, commit, or squash specific hunks without interactive prompts. Use when making partial commits or selective squashes.
content-media
Manage version control with Jujutsu (jj) — no staging area, immediate changes, smart rebasing. Use when navigating history, squashing, or pushing to Git remotes.