Skip to main content
T2 chain · data → picture: nika:read loads the CSV, nika:convert types it into rows, nika:jq aggregates by region, nika:chart renders the bar chart as a real image, and nika:write assembles the markdown report around it. Five tasks, zero model calls — the whole pipeline is deterministic data plumbing.

The job

The Monday deck needs one chart and one table, and the ritual is always the same: open the sheet, pivot, screenshot, paste. This workflow replaces the ritual with a file — drop the CSV, run once, and the report (chart image + aggregate table) is on disk, identical every time the data is identical.

The shape

The file

csv-chart-report.nika.yaml

What this file teaches

  • nika:convert is the typed seam — CSV text becomes structured rows once, at one task, and everything downstream works on data, not strings. The jq aggregation reads fields, never re-parses.
  • A chart is an artifact, not a side effectnika:chart returns a rendered image the report links by path. Re-running with the same CSV produces the same bytes: the chart can live in git, and a diff on it means the data moved.
  • No model, no bill, no networknika check shows an empty cost interval, and the run works on a plane. Determinism is the feature: this is the workflow you trust in a cron.

Run it

Swap the bundled sample for your own export by pointing const.sales_csv at it — the aggregation key and the chart spec are the only two lines to adapt.