An agent that turns raw data into polished, interactive web visualizations under the direction of a human operator. A single orchestrator coordinates a set of deterministic tools — profiler, designer, code generator, renderer, and critic — rather than a loose swarm of autonomous sub-agents.
The payoff of that choice is restraint: behavior stays inspectable and the failure surface stays small. The system is legible end to end, so when something goes wrong you can see exactly where.
Two stable intermediate representations form the spine — one for what the data is, one for what the chart should be. Both are defined in a TypeScript schema, typechecked under strict mode.
An interaction taxonomy spans three capability bands, and a scope field — single versus linked — routes the work to the right generation tier without redesign. New data sources become thin adapters into the profile; new output formats become packagers out of the spec.
Charts are generated on Observable Plot, with a continuous escape hatch down to raw D3 for anything the grammar can’t express. (Vega-Lite sits in reserve as an optional tier for coordinated multi-view dashboards.) Generated code is then exercised through two distinct failure channels and a closing loop.
Generator and critic share the same rubric, so the system is graded against the very standard it is trying to meet.
Throughout, the human operator stays at the center, and the architecture is built to surface exactly the points where their judgment matters. Their goals, functional requirements, and — above all — their visual taste are treated as first-class inputs.
Because intent lives in an explicit, human-readable spec rather than buried in generated code, the operator intervenes at the level of design, not syntax — accepting, rejecting, or redirecting at any stage. The goal is convergence on what the operator finds correct and compelling, not a fixed house style.