Monthly report visuals
ivy.agent.monthly-report-visuals · v0.1.0
ivyx
Draws the month's charts for a client's report from the rows posted (sessions, leads, spend, whatever the report tracks) and a cover card naming the month; a model writes the three findings as captions when a brief is given, the charts need none. The Monthly Reporting service's visible output; kind deliverables for IVYX Agency.
Steps
In the order the agent's file lists them, each with where its inputs come from and the values the file fixes. A branch or a loop is a step too.
- 01Ivy NodePut the request together for the modelivy.node.design-brief
Puts the request together as one text for the model's turn: the client, the service, the month, the brief and the figures, so the model writes for the right client.
- takes
brieffrom the agent's inputclientfrom the agent's inputservicefrom the agent's inputrequest_idfrom the agent's inputchartsfrom the agent's inputmonthfrom the agent's input
- 02Model turnName the month's findings
The context is a client's monthly report brief with the month and the figures as rows. Return a JSON object with: headline (the month and the client, at most 7 words), subline (the one finding that matters most, at most 16 words, from the rows), cta (at most 3 words, e.g. "Read the report"), palette (bg, accent, text as 6-digit hex; a calm report palette), layout (minimal), brand (the client's name), caption (one sentence). Answer with the JSON object only. Colours are 6-digit hex. Keep the words short and concrete; no exclamation marks; no claims the brief does not make.
- takes
contextfrom step 1
- 03Ivy NodeDraw the cover cardivy.node.design-svg-card
Draws a social post, a poster or a banner as SVG from a spec (headline, subline, cta, palette, layout, brand) in the sizes asked for.
- takes
specfrom step 2,outputfallback_textfrom the agent's input,monthname_prefixfrom the agent's input,client- set
sizes["1200x628"]
- 04Ivy NodeDraw the chartsivy.node.design-chart-svg
Draws bar or line charts of rows as SVG, one per chart asked for: axes with nice ticks, labels, a legend, the values on the bars.
- takes
chartsfrom the agent's inputpalettefrom step 2,output.palettename_prefixfrom the agent's input,client- set
size900x500
- 05Ivy NodePack the deliverablesivy.node.design-pack
Gathers the files the steps before it made into one answer of kind deliverables (request, client, service, brief, the spec, the files with their bytes).
- takes
specfrom step 2,outputrequest_idfrom the agent's inputclientfrom the agent's inputservicefrom the agent's inputbrieffrom the agent's inputfiles_afrom step 3,filesfiles_bfrom step 4,files- returns
kind,request_id,client,service,brief,spec,files,count
Nodes it brings
Adding this agent in IVYX Studio adds these nodes with it. A node your workspace already has is kept as it is, even at another version.
What it touches
Collected from what each of its nodes declares, plus the model call when a step is a model turn. A declaration is the author's statement, and it is what policy rules select on.
Inputs
| Field | Type | Description |
|---|---|---|
| briefrequired | string | What the client asked for, in their words or the account lead's: the subject, the audience, the tone, the colours if any. |
| client | string | The client's name, as IVYX Agency knows it. |
| service | string | The service this is work for, as IVYX Agency knows it (e.g. Content Production). |
| request_id | string | The request's id on the channel it came from; the key that keeps one request from running twice. |
| charts | array | One object per chart: title, rows, x, series, kind (bar, line). |
| month | string | The month reported, e.g. October 2026. |
| palette | object | Not declared |
Outputs
| Field | Type | Description |
|---|---|---|
| kindrequired | string | deliverables: what this output is, for a receiver that takes several kinds. |
| request_id | string | Not declared |
| client | string | Not declared |
| service | string | Not declared |
| brief | string | Not declared |
| spec | object | The design spec the model wrote from the brief, as rendered. |
| filesrequired | array | The files made: name, mime, kind, bytes, data (base64), width, height, caption, variant. |
| countrequired | integer | Not declared |
Tests
2 of 2 test cases passed on Oct 25, 2026, in the publisher's own environment, before this version was published. The registry keeps that record; it does not run the cases again.
Requires: python:3.9, a model core
- october
A month's two charts of figures and a cover are three SVG files, the charts drawn from the rows given.
- given
briefBluefin's October report: sessions and leads by week.clientBluefinserviceMonthly Reportingrequest_idcase-report-1monthOctober 2026charts[{"title":"Sessions by week","rows":[{"week":"W1","sessions":1200},{"week":"W2","sessions":1500},{"week":"W3","sessio...- expects
kindequals deliverablescountequals 3files.0.datamatches ^PHN2Zy
- no-figures
A report brief with no figures is the cover alone.
- given
briefBluefin's quiet month.clientBluefinmonthNovember 2026- expects
kindequals deliverablescountequals 1files.0.variantequals 1200x628