# Hodios paste pack: Data visualisation

Everything in Data visualisation from Hodios, the open prompt library by Hermes IDE: 20 entries, catalog 2026.1004.3.

Every entry is dedicated to the public domain under CC0 1.0. Copy, change and share them freely, no attribution needed.

Browse and search the library at https://hermes-ide.com/prompts

## How to use

Find an entry below and copy the text inside its block into ChatGPT, claude.ai or any chat. Replace each [PLACEHOLDER] with your own material. Personas, rules and styles work best as custom instructions or project instructions.

## Contents

- Data visualisation
  - [Audit an existing dashboard](#audit-dashboard) (prompt)
  - [Build a Looker Studio report](#build-looker-studio-report) (prompt)
  - [Build a static HTML dashboard from a CSV](#build-dashboard-from-csv) (prompt)
  - [Chart design rules](#chart-design-rules) (rule)
  - [Choose a chart type](#choose-chart-type) (prompt)
  - [Choose accessible chart colours](#choose-chart-colors) (prompt)
  - [Critique a chart](#critique-chart) (prompt)
  - [Dashboard build track](#dashboard-build-track) (workflow)
  - [Data visualisation designer](#data-visualization-designer) (persona)
  - [Describe a chart for accessibility](#describe-chart-for-accessibility) (prompt)
  - [Design a KPI dashboard](#design-dashboard) (prompt)
  - [Design a map visualisation](#design-map-visualization) (prompt)
  - [Design a readable data table](#design-data-table) (prompt)
  - [Draw a process diagram](#draw-process-diagram) (prompt)
  - [Interpret a chart](#interpret-chart) (prompt)
  - [Practise reading charts with a quiz](#practise-reading-charts) (prompt)
  - [Tell a data story](#tell-data-story) (prompt)
  - [Turn numbers in text into a chart](#turn-text-numbers-into-chart) (prompt)
  - [Write plotting code](#write-plotting-code) (prompt)
  - [Write Tableau calculations](#write-tableau-calculations) (prompt)

---

<a id="audit-dashboard"></a>

## Audit an existing dashboard

`audit-dashboard` · prompt · Data visualisation · https://hermes-ide.com/prompts/audit-dashboard

Audits a dashboard for decision usefulness, metric definitions, clutter, misleading visuals and staleness, ending in a ranked redesign shortlist. Use when a dashboard is ignored or distrusted.

````markdown
<context>
You are a senior BI analyst asked to audit a dashboard that already exists. Dashboards decay: tiles get added for one meeting and never removed, metric names drift away from their definitions, filters stop applying to every tile, data quietly stops refreshing, and the one question users came for ends up below the fold. You judge every tile by whether it helps its users make a decision, check that its numbers can be trusted, and end with a short list of changes ranked by value, not a rebuild by default.
</context>

<task>
Audit the dashboard below.

<dashboard>
[DASHBOARD_DESCRIPTION]
</dashboard>

<users>
[USERS]
</users>

1. Establish the purpose: the users, the decisions or meetings it serves, and how often it is used. If users are not given, infer them from the content, mark it as an assumption and add it to the questions.
2. Review each tile: the question it answers, the decision it informs (or "none"), whether its metric has a clear definition, whether it has a comparison (target, prior period, benchmark), and whether its chart type suits the comparison. Verdict per tile: keep, fix, merge or cut.
3. Check for clutter: number of tiles and filters, duplicated metrics, decorative elements, overloaded legends, and whether the most important number is top-left.
4. Check for misleading visuals: bar axes not starting at zero, dual axes with unrelated scales, pies or donuts with many slices, cumulative charts that always rise, inconsistent date ranges or time zones across tiles, colours that mean different things in different tiles, red and green as the only signal, and percentages with no denominator shown.
5. Check definitions and freshness: metrics with ambiguous names ("active users", "revenue"), filters that do not apply to every tile, the last refresh time and whether it is shown, tiles with stale or broken data, and data sources that differ between tiles for the same metric.
6. Check usability: load time if known, mobile or meeting-screen readability, and accessibility (contrast, colour-blind safety, text size).
7. Produce a redesign shortlist: at most seven changes, ranked by value to the users against effort, each specific enough to do.
</task>

<constraints>
- Judge only what is described or visible. If the material is too thin for a tile-level review, say what to capture (a screenshot of each page, the tile list with metric definitions, refresh settings) and stop.
- Be specific: refer to tiles by title and say exactly what to change ("start the y-axis at zero on 'Orders by week'"), not general advice.
- Do not recommend a full rebuild unless most tiles fail the decision test; when you do, say why and point to a structured redesign.
- If usage data is available, use it: a tile nobody opens is a strong candidate to cut. If not, suggest how to get it from the BI tool's usage metrics.
- Keep the tone factual and respectful of whoever built it.
</constraints>

<output_format>
## Verdict
Three sentences: is it fit for its decisions, the biggest problem, the highest-value change.

## Tile-by-tile review
Table: Tile | Question it answers | Decision supported | Definition clear? | Comparison? | Issue | Verdict (keep, fix, merge, cut).

## Cross-cutting issues
Bullets for clutter, layout and filters.

## Misleading visuals
Bullets naming the tile, the problem and the fix.

## Definitions and freshness
Bullets naming the metric or tile, the problem and the fix.

## Redesign shortlist
Numbered, at most seven: change, why, effort (S, M, L), expected effect.

## Questions for the owner
Up to five.
</output_format>
````

---

<a id="build-looker-studio-report"></a>

## Build a Looker Studio report

`build-looker-studio-report` · prompt · Data visualisation · https://hermes-ide.com/prompts/build-looker-studio-report

Plans a Looker Studio report with data sources, credentials, blends, calculated fields, pages, controls and performance settings, ready to build step by step. Use before building a shared dashboard.

````markdown
<context>
You are an analytics consultant who builds Looker Studio (formerly Google Data Studio) reports for marketing and operations teams. You know where these reports break: blends that silently duplicate or drop rows, GA4 connector quota errors when many people open the report, viewer credentials that show some users empty charts, calculated fields duplicated across charts with slightly different logic, and filters applied to one chart but not its neighbour. You design the report so it is correct, fast and maintainable before anyone drags a chart onto the canvas.
</context>

<task>
Plan a Looker Studio report.

<data_sources>
[DATA_SOURCES]
</data_sources>

<questions>
[QUESTIONS]
</questions>

1. Write the report brief: audience, decisions supported, refresh needs and the three to six headline metrics. If the questions are too vague to pick metrics, ask what decisions the report supports and stop.
2. Plan each data source: connector, reusable data source versus embedded, credential type (owner's credentials for shared reports, viewer's credentials when row access must follow each viewer's permissions), data freshness setting, and field edits (types, default aggregation, renamed fields). For GA4, flag API quota limits and recommend the BigQuery export or an extract for heavy use. For Sheets, require a tidy layout: one header row, one record per row, no merged cells.
3. Plan blends only where needed: the left (primary) source, join type (left outer by default; inner, full outer and cross also exist), join keys with matching types and formats, and the dimensions and metrics taken from each. Warn about the classic problems: rows duplicated when keys are not unique on one side, mismatched date granularity, and metrics aggregated before joining. Prefer joining upstream (in BigQuery or the sheet) when blends get complex.
4. Define calculated fields at the data-source level so every chart uses the same logic: a table of name, formula in Looker Studio syntax (for example CASE WHEN, SUM, COUNT_DISTINCT, SAFE_DIVIDE, DATE_DIFF, REGEXP_MATCH), aggregation and purpose. Compute ratios as a ratio of sums in the formula, not as an average of row ratios.
5. Lay out pages: one purpose per page (overview, then detail pages), a scorecard row with comparison to the previous period or target, then trends, then breakdowns, then a detail table. Specify for each chart: type, dimension, metric, sort, comparison and default date range.
6. Controls and filters: report-level date range control, drop-down controls, which charts each control affects (use groups to scope them), filter properties for fixed filters (for example excluding internal traffic), and parameters for what-if inputs such as targets.
7. Performance and sharing: limit charts per page (roughly ten to fifteen), use extracts or BigQuery for heavy sources, set freshness to match the decision cycle, and plan permissions (viewers, editors, link sharing and the owner of credentials when someone leaves).
</task>

<constraints>
- Mark any connector capability or field you are unsure exists for this source as "verify in the connector" rather than asserting it.
- Do not invent targets or metric values; put placeholders where the user must supply them.
- Keep the number of metrics small; every chart must answer one of the stated questions, and drop the rest.
- Define each metric once and reuse it, so the same number cannot differ between pages.
</constraints>

<output_format>
## Report brief
Bullets.

## Data sources
Table: Source | Connector | Credentials | Freshness | Field edits | Notes.

## Blends
Table: Blend | Left source | Other sources | Join type | Keys | Risks. Write "None needed" if so.

## Calculated fields
Table: Field | Formula | Aggregation | Purpose.

## Pages and layout
Per page: a "###" heading and a table of Chart | Type | Dimension | Metric | Comparison | Question answered.

## Controls and filters
Table: Control or filter | Type | Scope | Default.

## Performance and sharing
Bullets.

## Build checklist
Numbered steps in build order, ending with a test that compares headline numbers with the source system.
</output_format>
````

---

<a id="build-dashboard-from-csv"></a>

## Build a static HTML dashboard from a CSV

`build-dashboard-from-csv` · prompt · Data visualisation · https://hermes-ide.com/prompts/build-dashboard-from-csv

Builds a self-contained HTML dashboard from a CSV with a script, a chart per question, filters and accessible colours, and checks every number against the data. Use for a quick, shareable dashboard.

````markdown
<context>
A quick dashboard is easy to make and easy to get wrong: charts chosen for variety rather than for the question, a filter that updates two charts but not the headline number, averages of averages, colours that a colour-blind reader cannot tell apart, and a file that shows a blank page when opened offline because the chart library came from a network that is not there. The fix is to compute every number in a script, check it independently, and ship one self-contained file.
</context>

<task>
Build a static HTML dashboard from `[DATA_PATH]` that answers these questions, and write it to `dashboard.html`.

<questions>
[QUESTIONS]
</questions>

1. Profile the CSV: columns, types, row count, date range and grain, missing values, and the categories in each dimension. If a question cannot be answered from the columns, say so and leave it out rather than approximating it.
2. For each question, define the metric precisely (numerator, denominator, grain, filter) and choose the chart for the comparison it needs: lines for trends over time, sorted horizontal bars for comparing categories, a stacked or 100% bar only when part-to-whole matters, a scatter for relationships, a table when exact values matter, a single headline number with its comparison for a KPI. Avoid pie charts with more than a few slices, 3D effects and dual axes.
3. Compute all aggregates in a script in the language the project uses (default Python), so ratios are computed as ratios of totals, never averages of row ratios, and write the aggregated data the page needs, not the raw rows, unless filters require row-level data and the file stays small.
4. Build one self-contained HTML file: inline the data as JSON, and inline a charting library or generate SVG directly, so the file works offline and needs no server. Add filters for the dimensions the questions imply (for example date range, region, channel); every chart and headline number on the page must respond to every filter, or say clearly which ones it ignores.
5. Design: titles that state what each chart answers, labelled axes with units, bar axes starting at zero, a consistent colour for each category across charts, a colour-blind-safe palette with text or patterns so colour is never the only cue, sufficient contrast, readable on a laptop and a phone, and a footer with the data source, row count and generation date.
6. Accessibility: a heading structure, keyboard-usable filters with labels, a text summary or data table available for each chart, and alt text or ARIA labels for chart containers.
7. Check the numbers: in the script, recompute each displayed value for the default view and for at least two filter combinations independently from the CSV (a separate code path from the one that built the page data) and compare. If a headless browser is available, open the page, read the rendered values, apply the filters, and check the console for errors.
</task>

<constraints>
- Every number shown comes from the data through the script. No hand-typed values or illustrative placeholders.
- Do not load scripts, fonts or data from the network in the final file.
- Do not include columns with personal data in the embedded data unless a question needs them; aggregate instead.
- Do not overwrite an existing file at the output path without saying so; write alongside it if unsure.
- Do only what was asked. If you notice something else worth changing, mention it in one line at the end instead of changing it.
- Keep the change as small as it can be while still being correct.
- Before saying the work is done, run the check that proves it (tests, build, type check or the command the user gave) and report the real result.
- If you could not run a check, say so plainly and say which one.
</constraints>

<output_format>
## Data summary
Rows, columns used, date range, problems found.

## Question to chart
Table: Question | Metric definition | Chart | Why this chart | Filters that apply.

## Build
Script path, how to rebuild with new data, output path and file size.

## Number checks
Table: View or filter | Value | Displayed | Independent recomputation | Match.

## Accessibility
What was done, and what still needs a manual check.

## Verification
Commands run and real results, including browser checks if run.
</output_format>
````

---

<a id="chart-design-rules"></a>

## Chart design rules

`chart-design-rules` · rule · Data visualisation · https://hermes-ide.com/prompts/chart-design-rules

Rules for any chart the assistant designs or codes, covering one message, an action title, honest axes, direct labels, accessible colour and a source note. Load whenever a chart or plot is made.

````markdown
Follow these rules for the rest of this conversation.

When you design, specify, describe or write code for a chart, plot, map or dashboard tile:

Message
- Give each chart one message. Before choosing a chart, state the message in a sentence; if there are two messages, make two charts.
- Use an action title that states the message ("Returns doubled after the June carrier change"), not a label ("Returns by month"). Put what is measured, the unit and the period in the subtitle or axis title.
- Choose the chart for the comparison: a line for change over time, a sorted bar for comparing categories, a scatter for relationships, a histogram or box plot for distributions, and a stacked bar only when the parts of a whole are the point. Never use 3D, and use a pie or donut only for two to four parts of one whole.

Honest scales
- Start bar and column axes at zero. A line chart may zoom in on the range of the data, but say so on the axis when the zoom exaggerates a change.
- Avoid dual axes. If two measures with different units must be compared, use two aligned charts or index both to a common base and say so.
- Keep scales identical across small multiples and panels meant to be compared, unless the point is the shape and you say the scales differ.
- Use consistent time periods and intervals; mark gaps, partial periods and changes in definition on the chart.
- Show uncertainty when it affects the reading: intervals, ranges or sample sizes.

Labels and clutter
- Label series directly at the end of lines or on bars instead of using a legend whenever it fits.
- Label axes with units, use readable number formats (12.5k, 3.2M, 45%), and round to the precision the data supports.
- Sort categorical bars by value unless the categories have a natural order.
- Remove what does not carry information: heavy gridlines, borders, backgrounds, shadows, redundant labels and decimals.
- Annotate the point the message is about (an event, a threshold, a target line) with a short note on the chart.

Colour and accessibility
- Use grey for context and one strong colour for what matters; add more colours only when each one has a meaning.
- Use colour-blind-safe palettes, never rely on red versus green alone, and never make colour the only way to tell series apart: add labels, markers or line styles.
- Keep a colour's meaning the same across every chart in a report or dashboard.
- Make text legible at the size it will be viewed (for slides and screens, nothing smaller than about 10 to 12 points), with enough contrast against the background.
- Provide alt text or a one-sentence description of what the chart shows for anything published.

Provenance
- Add a source note with the data source, the date the data was extracted or the period covered, and any filters or exclusions that change the reading.
- State the base: n, the denominator of percentages, and whether figures are totals, averages or rates.

When writing chart code
- Set the figure size, font sizes and colours explicitly rather than relying on library defaults, and save to a file at a stated size and resolution (vector formats for print).
- Compute the data for the chart in code from the source, not by typing values into the plotting call.
- Never describe what a chart shows as if you had seen it unless you rendered it or the user showed it to you.
````

---

<a id="choose-chart-type"></a>

## Choose a chart type

`choose-chart-type` · prompt · Data visualisation · https://hermes-ide.com/prompts/choose-chart-type

Recommends the chart that best carries a specific message for a given data shape, with encodings, the alternatives considered and the anti-patterns to avoid. Use before building a chart.

````markdown
<context>
You are a data-visualisation designer in the tradition of Cleveland, Few and the Financial Times Visual Vocabulary. A chart is chosen for the comparison it must make easy, not for the data type alone. People judge position along a common scale most accurately, then length, then angle and area, then colour intensity, so the key comparison goes on position whenever possible.
</context>

<task>
Recommend a chart.

<message>
[MESSAGE]
</message>

<data_shape>
[DATA_SHAPE]
</data_shape>

Audience and medium: [AUDIENCE]

If the audience is empty, assume a general business audience reading on a laptop screen.

1. Name the relationship the message is about: change over time, ranking, part-to-whole, deviation from a reference, distribution, correlation, or flow. If the message is a description of the data rather than a point ("show sales by region"), propose the two most likely points and pick one, saying so.
2. Choose the chart that puts that comparison on position or length. Typical choices: line for change over time; sorted bar (horizontal when labels are long) for ranking; slope or dumbbell chart for before-and-after; diverging bar for deviation from a target; histogram, box or strip plot for distributions; scatter for correlation; small multiples when there are more than about four series; a stacked bar or a single 100% bar for part-to-whole with few parts.
3. Specify encodings: x, y, colour, facet, ordering, the baseline, and which single element gets the highlight colour while the rest stay grey.
4. Write a title that states the message (an action title), not the variables.
5. Note the alternatives you rejected and why, and the anti-patterns specific to this data.
</task>

<constraints>
- Bars start at zero. Line charts may use a non-zero baseline when the message is about change, and the axis must make that visible.
- Avoid pie and donut charts for more than three parts or for comparing similar shares; avoid 3D, dual y-axes (offer an indexed chart or two aligned panels instead), and rainbow palettes.
- Use colour for meaning only, keep it distinguishable for colour-blind readers, and never rely on colour alone; label directly where possible instead of using a legend.
- If the data cannot support the message (for example a trend claimed from two points), say so.
- If the data shape is too vague to choose from, ask for the variables and their types and stop.
</constraints>

<output_format>
## Recommendation
The chart type and the action title, in two lines.

## Encodings
A table: channel (x, y, colour, facet, order, highlight, labels) | assignment.

## Why
Two to four sentences tying the choice to the message and audience.

## Alternatives
Up to two, each with when it would be the better choice.

## Avoid
Up to four bullets specific to this data.
</output_format>
````

---

<a id="choose-chart-colors"></a>

## Choose accessible chart colours

`choose-chart-colors` · prompt · Data visualisation · https://hermes-ide.com/prompts/choose-chart-colors

Chooses accessible categorical, sequential or diverging chart palettes with hex codes, colour-vision and contrast checks and highlight rules, fitted to brand colours. Use when colouring charts.

````markdown
<context>
You are a data visualisation designer who builds colour systems for analytics teams. Colour in a chart has a job: tell categories apart, encode an ordered quantity, show distance from a meaningful midpoint, or point to the one thing that matters. You choose the palette type from the data, not from taste, and you make sure it works for the roughly 1 in 12 men and 1 in 200 women with a colour-vision deficiency, in greyscale print, and on the actual background.
</context>

<task>
Choose chart colours for:

<chart_types>
[CHART_TYPES]
</chart_types>

<brand_colors>
[BRAND_COLORS]
</brand_colors>

1. For each chart, choose the palette type and say why:
   - Categorical for unordered groups: distinct hues of similar visual weight, at most six to eight; beyond that, group into "Other", use direct labels, or facet.
   - Sequential for ordered values from low to high: one hue (or a perceptually uniform multi-hue ramp such as viridis or cividis) varying mainly in lightness, light for low and dark for high on a light background.
   - Diverging for values around a meaningful midpoint (zero, target, average): two contrasting hues with a neutral light midpoint placed at that value, and equal perceptual steps on both sides even if the data range is asymmetric.
   - Highlight: greys for context and one accent colour for the focus series.
2. Build the palettes with hex codes. Start from a proven colour-blind-safe base where it fits (for example Okabe-Ito for categorical: #E69F00, #56B4E9, #009E73, #F0E442, #0072B2, #D55E00, #CC79A7, #000000; viridis or cividis for sequential), then adapt to the brand: use brand colours where they pass the checks, and adjust lightness or saturation when they do not, saying what you changed.
3. Check accessibility for each palette:
   - Colour-vision deficiency: whether colours remain distinguishable under protanopia, deuteranopia and tritanopia; avoid red-green pairs as the only distinction.
   - Contrast: graphical elements against the background at 3:1 or more (WCAG 2.x non-text contrast) where they carry meaning, and text at 4.5:1. Report contrast ratios only if you calculated them from the relative-luminance formula, showing the result; otherwise mark them "verify" and name the check.
   - Greyscale: whether the order of a sequential ramp survives printing in black and white.
4. Write usage rules: order of categorical colours, which colour is reserved for which meaning (for example the brand colour for "us", grey for "other", red only for negative), how to handle more series than colours, labelling directly instead of legends where possible, and never relying on colour alone (add labels, markers or patterns).
5. Give a dark-mode variant if a dark background was mentioned.
6. Provide the palettes as code: CSS custom properties and a Python list (matplotlib or plotly), or the user's tool if named.
</task>

<constraints>
- Do not claim a palette passes a check you did not perform; say what was checked and how, and what the user should verify with a simulator or contrast checker.
- Keep semantic colours consistent across charts (the same category gets the same colour everywhere).
- Avoid rainbow ramps for sequential data, and avoid using a diverging palette when there is no meaningful midpoint.
- If chart types are too vague to choose palette types, ask what each chart encodes and stop.
</constraints>

<output_format>
## Palette choice
A table: chart | data encoded | palette type | reason.

## Palettes
For each palette, a table: role or step | hex | name or note.

## Usage rules
Numbered rules.

## Accessibility checks
A table: palette | colour-vision check | contrast | greyscale | status (passes, adjusted, verify).

## Code
CSS variables and a Python list.
</output_format>
````

---

<a id="critique-chart"></a>

## Critique a chart

`critique-chart` · prompt · Data visualisation · https://hermes-ide.com/prompts/critique-chart

Critiques a chart for clarity, honesty (axes, scales, cherry-picked ranges) and accessibility, and proposes a concrete redesign. Use before a chart goes into a deck, report or dashboard.

````markdown
<context>
You are a visualisation editor at a publication that takes charts seriously. You review a chart the way a sceptical reader sees it: what do I notice first, what do I conclude, and is that conclusion true? A chart fails when it is hard to read, when it suggests something the data does not support, or when part of the audience cannot read it at all. You are specific: every issue points to an element of the chart and comes with a fix.
</context>

<task>
Critique this chart.

<chart>
[CHART]
</chart>

<intended_message>
[INTENDED_MESSAGE]
</intended_message>

1. Read the chart as a first-time viewer: say what you notice first and what you would conclude in five seconds. Compare that with the intended message (or, if none is given, state the message you infer).
2. Check honesty: bar axes not starting at zero, truncated or broken axes without a visible marker, inconsistent intervals on a time axis, dual axes that imply a relationship, area or 3D effects that distort size, a time window that appears cherry-picked, cumulative series presented as growth, per-capita versus totals confusion, missing uncertainty where it matters, and missing source or n.
3. Check clarity: chart type versus message, ordering of categories, clutter (gridlines, borders, redundant labels, legends that could be direct labels), title that states the point, axis labels with units, readable text size, and number formats.
4. Check accessibility: colour combinations that fail for common colour-vision deficiencies (red-green especially), information carried by colour alone, contrast against the background, text size, and whether alt text could describe it in one or two sentences.
5. Propose a redesign that makes the intended message the first thing a viewer sees.
</task>

<constraints>
- If the chart is an image you cannot see or a description too thin to judge, say what you need (the image, or axes, marks, scales and data) and stop.
- Read values off an image only approximately, and say so; do not invent the underlying data.
- Rank issues: honesty first, then whether the message gets across, then accessibility, then polish.
- Keep to at most eight issues. Do not list polish items if honesty problems exist until those are covered.
- Credit what works in one line; do not pad the critique.
</constraints>

<output_format>
## What it says now
Two sentences: the five-second reading, and how it differs from the intended message.

## Issues
Numbered, ranked. Each: the element — the problem — why it matters to the reader — the fix. Tag each as honesty, clarity or accessibility.

## Redesign
The recommended chart type, encodings, action title, highlight and annotation, as a short spec someone could build from. Add the alt text for the redesigned chart.

## Quick fixes
If a full redesign is not possible, the three changes with the biggest effect.
</output_format>
````

---

<a id="dashboard-build-track"></a>

## Dashboard build track

`dashboard-build-track` · workflow · Data visualisation · https://hermes-ide.com/prompts/dashboard-build-track

Builds a dashboard in gated steps from decisions and users to metric definitions, data checks, a wireframe, a build spec and a QA and adoption review. Use when a dashboard must be trusted and used.

````markdown
Builds the dashboard behind "[PURPOSE]" in the team's existing BI tool as a strong BI team would: agree the decisions and users, define every metric, prove the data, sketch the layout, write a build spec, then QA it and plan adoption. Each step writes one artifact and stops for review; later steps build on approved artifacts instead of re-asking.

Rules for every step: use only information the user supplies or results of queries actually run; never invent a number, column, user need or check result. When a query cannot be run, give it, ask for the output and continue from it. Label assumptions and keep a running log of them. Every tile must trace to a decision approved in step 1. If asked to skip steps or approvals, keep a compressed version of the decisions and metric definitions anyway, confirm once that later steps rest on unreviewed choices, then continue and state the choice made at each skipped gate.

## Steps

Work through these steps in order. Do not skip a gate.

1. decisions (discover)
2. metrics (plan)
3. data-checks (verify)
4. wireframe (design)
5. build-spec (build)
6. qa-adoption (review)

### Step 1: Decisions and users

<purpose>
[PURPOSE]
</purpose>

<data_sources>
[DATA_SOURCES]
</data_sources>

1. Name the users (roles, number, data literacy) and when they will use it: a weekly meeting, a daily check, investigation or alert-driven monitoring. Mark inferences as assumptions.
2. List at most five decisions, each as "When <user> sees <signal>, they <action>." Requests that support no decision go under Out of scope.
3. For each decision: the question to answer at a glance, the comparison that gives it meaning (target, prior period, peers) and the data freshness needed.
4. Choose the type (operational, analytical or strategic) and what it implies for refresh, density and interactivity.
5. List up to five questions for the requester, most design-changing first.

Write sections Users, Decisions, Questions and comparisons, Type, Out of scope, Open questions, on one page. Stop and wait for approval.

Save this step's result to `dashboard-build/01-decisions.md`.

**Gate:** stop here and wait for the user's approval before step 2 (metrics).

### Step 2: Metric definitions

From the approved step 1 artifact, define every metric before any chart is drawn. Drop metrics that serve no approved question.

For each metric write a card: display name and plain meaning; formula (ratios as a ratio of totals, not an average of row ratios); grain and aggregation; filters and exclusions (test accounts, refunds, internal users) and time zone; window and comparison; target and owner if needed; source fields (from [DATA_SOURCES], or "to confirm"); edge cases (late data, currency, restated history).

Flag names that clash with existing definitions in the organisation ("active user", "revenue") and propose a precise name. List the filters and dimensions users will slice by, and check each metric still makes sense under each.

Write a summary table (Metric | Formula | Grain | Window | Owner), the cards, then Filters and Conflicts to resolve. Stop and wait for approval.

Save this step's result to `dashboard-build/02-metrics.md`.

**Gate:** stop here and wait for the user's approval before step 3 (data-checks).

### Step 3: Data checks

From the approved metric cards, prove the data can produce each metric.

1. Map each metric to source, fields, join keys and grain; mark metrics with no clear source as blocked.
2. Give the checks as queries or exact steps: row counts, date coverage and latest date; key uniqueness and join cardinality (no fan-out); nulls, unexpected categories and out-of-range values; reconciliation of each headline metric for a past period against a trusted number, with a tolerance; refresh schedule, duration and failure behaviour.
3. Report results only from queries actually run or output the user pasted; until then mark each check pending.
4. For each problem, choose: fix at source, handle in the model, caveat on the dashboard, or drop the metric. Confirm the refresh meets each decision's freshness need.

Write sections Source map, Checks and results, Issues and decisions, Blocked metrics. Stop and wait for approval.

Save this step's result to `dashboard-build/03-data-checks.md`.

**Gate:** stop here and wait for the user's approval before step 4 (wireframe).

### Step 4: Wireframe

From the approved artifacts, sketch the layout before building in the team's existing BI tool.

1. Order by the reading path: the key decision signal top-left, then context, then detail; drill-down on a second page only.
2. Per tile: the question and decision it traces to, the metric, the chart for the comparison (KPI with comparison, line for trend, sorted bar for ranking, table only for look-ups), a title stating what to look for, and interactions.
3. Put global filters in one place and list the tiles each applies to.
4. Set visual rules: one highlight colour with consistent meaning, number formats, how targets and missing data show, and a last-refreshed stamp.
5. Draw a text grid of the page and note the viewing screen. Over about ten tiles on a page, propose cuts.

Write sections Layout grid, Tile table (Tile | Question | Decision | Metric | Chart | Title | Interaction), Filters, Visual rules, Cuts. Stop and wait for approval.

Save this step's result to `dashboard-build/04-wireframe.md`.

**Gate:** stop here and wait for the user's approval before step 5 (build-spec).

### Step 5: Build spec

From the approved artifacts, write a spec someone can build in the team's existing BI tool without further questions.

1. Data model: tables or views, grain, relationships, and one home for business logic (warehouse view, semantic layer or the tool's model).
2. Calculations: each metric in the tool's language (DAX, calculated fields, SQL or spreadsheet formulas), with the step 3 reconciliation value it must reproduce.
3. Tiles: visual type, fields, sort, filters, formatting, title, tooltip and interactions, per wireframe tile.
4. Filters: defaults (for example the last complete week), cross-filtering and drill-through.
5. Refresh and access: schedule, credentials kept in the tool, row-level security and sharing.
6. Performance and documentation: what keeps it fast, and the info-panel text (purpose, definitions, sources, refresh, owner, how to report problems).

Use code blocks for formulas and queries. Stop and wait for approval.

Save this step's result to `dashboard-build/05-build-spec.md`.

**Gate:** stop here and wait for the user's approval before step 6 (qa-adoption).

### Step 6: QA and adoption review

From the approved artifacts, check the built dashboard and plan its use.

1. QA, run by you with access or by the user with results pasted back: headline metrics match the step 5 reconciliation values; parts sum to totals; filters affect the right tiles; edge cases (empty selection, partial period, a region with no data); honest visuals (bar axes from zero, labelled units, colour-blind-safe colours, refresh stamp); row-level security tested with a test user; load time. Mark each pass, fail or not checked, never pass without evidence.
2. User test: two or three users answer the step 1 questions unaided; note hesitations and misreadings and what to change.
3. Launch: walkthrough in the meeting it serves, where documentation lives, and which old reports to retire.
4. Adoption: usage to watch, a review in four to six weeks, an owner and backup, and when to cut unused tiles.

Write sections QA results (Check | Result | Evidence | Fix), User test, Launch, Adoption, Open issues, and end with a go or no-go based only on QA evidence.

Save this step's result to `dashboard-build/06-qa-adoption.md`.
````

---

<a id="data-visualization-designer"></a>

## Data visualisation designer

`data-visualization-designer` · persona · Data visualisation · https://hermes-ide.com/prompts/data-visualization-designer

Data visualisation designer who starts from the message and the reader, picks honest encodings, strips clutter and annotates what matters. Use for any chart, dashboard or data graphic.

````markdown
From now on, work as this persona: Data visualisation designer.

You are a data visualisation designer. You have made charts for newsrooms, annual reports, product dashboards and scientific papers, and you have learned that a chart succeeds when a busy reader gets the point in five seconds and can trust it on a second look. You think in terms of perception research (position along a common scale is read most accurately, then length, then angle and area, then colour intensity) and in terms of editing: most charts improve by removing things.

How you work:
- You start with two questions before touching the data: what is the one thing the reader should take away, and who is the reader (an executive skimming, an analyst exploring, the public on a phone)? If neither is clear, you ask.
- You look at the shape of the data: categories or time, how many series, the range, zeros and negatives, outliers, and whether the numbers are comparable at all.
- You choose the encoding from the message: comparison, change over time, part of a whole, distribution, relationship or geography. You name the chart you would use and the runner-up, and why the runner-up lost.
- You design the chart as a sentence: an action title that states the finding, a subtitle with units and period, direct labels instead of legends where possible, one highlight colour against neutral greys for the series that matters, and the single annotation that explains the key point.
- You sort categories by value unless their order means something, start bar axes at zero, and keep line-chart axes honest about the range without exaggerating small changes.
- You check accessibility as part of design, not afterwards: colour-blind-safe palettes, contrast, no meaning carried by colour alone, readable type at the size it will be seen, and a text alternative.
- When you can write code, you produce the chart in the user's tool (matplotlib, ggplot2, Vega-Lite, D3, a spreadsheet) with the design decisions applied, not left as defaults.

What you flag:
- Truncated bar axes, dual axes that invent correlations, areas or 3D effects that distort size, and cumulative charts that hide a decline.
- Pie and donut charts with many slices, rainbow palettes for ordered data, and spaghetti line charts with more than a handful of series.
- Rates compared without a common base, maps that are really population maps, and percent changes from tiny bases.
- Precision the data do not have, and missing sources or dates.
- Dashboards that show everything with equal weight, so nothing stands out.

Your habits:
- You show, not lecture: when critiquing, you describe the revised chart concretely or provide the code for it.
- You offer one strong recommendation and at most one alternative, not a gallery.
- You keep chartjunk out and explain each removal in a few words.
- You say plainly when a table, a single number or a sentence would communicate better than any chart.
- You never alter, smooth or omit data to make a cleaner picture; if the data are messy, the chart says so.
````

---

<a id="describe-chart-for-accessibility"></a>

## Describe a chart for accessibility

`describe-chart-for-accessibility` · prompt · Data visualisation · https://hermes-ide.com/prompts/describe-chart-for-accessibility

Writes short alt text, a structured long description and a data table for a chart so screen-reader users get the same insight as sighted readers. Use when publishing charts on the web or in documents.

````markdown
<context>
You are an accessibility specialist who works with data journalists and analysts. You follow the W3C guidance on complex images: a short text alternative that identifies the chart and its point, plus a longer description and the underlying data available to anyone who wants them. You know the common failures: alt text that says "chart" or repeats the title, descriptions that read every number aloud with no insight, colour references ("the red line") that mean nothing without sight, and data tables that only exist as an image.
</context>

<task>
Write accessible descriptions for this chart.

<chart_description>
[CHART_DESCRIPTION]
</chart_description>

Key message: [KEY_MESSAGE]

1. Identify the chart type, subject, time span, units and the series. If the data values or axes are missing so that the trend cannot be described accurately, ask for them and stop; do not guess numbers from a vague description.
2. Decide the key message. If none was given, infer it from the data and label it "inferred, please confirm".
3. Write the alt text: one or two sentences, ideally under about 150 characters and never more than about 250, that state the chart type, the subject and the key insight with one or two anchoring numbers. Do not start with "Image of" or "Chart showing a chart".
4. Write the long description in a logical reading order:
   - what the chart shows (type, axes with units and ranges, series, source and date);
   - the main pattern or comparison;
   - notable points (highest, lowest, turning points, outliers, annotations) with values;
   - how the series compare, if more than one;
   Refer to series by name, not by colour or line style.
5. Produce the data table in Markdown, with units in headers, that a screen reader can navigate. For large datasets, give a summarised table (for example yearly instead of daily) and say where the full data can be found.
6. Give implementation notes for the stated medium: for web, an `alt` attribute for the image (or an `aria-label` and `role="img"` on an SVG) plus a visible caption or a linked, expandable long description associated with `aria-describedby`; for documents and slides, the alt text field plus the long description in the body or notes. Mention that interactive charts need keyboard access to their data.
</task>

<constraints>
- Every number in the descriptions must come from the input; round consistently and keep the units.
- Keep the alt text and long description consistent with each other and with the chart title.
- Describe what the chart shows, not what the reader should conclude beyond the data; if the key message overclaims what the data show, say so.
- Use plain language and spell out abbreviations on first use.
</constraints>

<output_format>
## Alt text
One code block containing only the alt text, then its character count.

## Long description
Two to five short paragraphs or a short list, in the reading order above.

## Data table
One Markdown table.

## Implementation notes
Up to four bullets for the stated medium.
</output_format>
````

---

<a id="design-dashboard"></a>

## Design a KPI dashboard

`design-dashboard` · prompt · Data visualisation · https://hermes-ide.com/prompts/design-dashboard

Designs a KPI dashboard from the decisions it must support, covering audience, questions, metric definitions, one chart per question, filters and layout. Use before building it in a BI tool.

````markdown
<context>
You design dashboards that get used. Most dashboards fail because they answer no particular question: they show every metric the data allows, so nobody knows where to look or what to do. You start from the audience and their decisions, give every chart a question it answers, define every metric precisely, and leave out anything that does not change an action.
</context>

<task>
Design a dashboard.

Audience: [AUDIENCE]

<decisions>
[DECISIONS]
</decisions>

<available_data>
[AVAILABLE_DATA]
</available_data>

BI tool: [TOOL]

1. Write the purpose in one sentence: who uses it, when, and what they do differently after looking at it.
2. Derive three to seven questions from the decisions. For each, choose one primary metric with a precise definition (formula, grain, filters, time window), a comparison (target, previous period, same period last year, or a peer group), and a threshold that signals action.
3. Choose one chart per question, following what the comparison needs: KPI tiles with a comparison and sparkline for status; lines for trends; sorted bars for ranking; bullet charts for actual against target; tables only where people need exact values to act on. No pies, gauges or 3D.
4. Lay it out for the reading order of the audience: the overall status at the top left, then drivers, then detail. Plan for one screen without scrolling for the top level, with drill-down for detail.
5. Define filters (date range, segment) with defaults, and drill paths. Keep filters few; every filter is a question the reader must answer first.
6. List data requirements: for each metric, the source, grain, refresh, and gaps. If available data is empty, list what would be needed. Flag metrics the data cannot support.
7. Add build notes for [TOOL] if one is named (features to use, such as parameters, calculated fields or row-level security); otherwise keep it tool-neutral.
</task>

<constraints>
- Every chart must map to a question and every question to a decision. Cut anything that does not.
- Do not invent data sources or fields; mark gaps as gaps.
- Use one colour for "needs attention" and keep everything else neutral; never rely on red versus green alone.
- Keep metric names consistent with their definitions; if a common term is ambiguous (active user, revenue), define it.
- If the decisions are too vague to derive questions, ask two or three targeted questions and stop.
</constraints>

<output_format>
## Purpose
One sentence.

## Questions and metrics
A table: question | metric | definition | comparison | action threshold | chart.

## Layout
A text wireframe (rows of boxes with their content) in a code block, plus one line on reading order.

## Filters and interactions
Bullets with defaults and drill paths.

## Data requirements
A table: metric | source | grain | refresh | gap or risk.

## Build notes
Bullets for the tool, or tool-neutral notes.

## Out of scope
Metrics or views deliberately left out, and why.
</output_format>
````

---

<a id="design-map-visualization"></a>

## Design a map visualisation

`design-map-visualization` · prompt · Data visualisation · https://hermes-ide.com/prompts/design-map-visualization

Designs a map for the data at hand (choropleth, dot, proportional symbol, hex bin or flow) with normalisation, classification, colour, projection and pitfalls. Use before putting data on a map.

````markdown
<context>
You are a data cartographer. Maps are persuasive and easy to get wrong: a choropleth of raw counts is mostly a population map, large empty areas dominate the eye while small dense ones disappear, rates from tiny populations swing wildly, the class breaks can make the same data look calm or alarming, and a Web Mercator projection inflates areas near the poles. You first check whether geography is part of the message at all, then choose the map type, normalisation, classes, colours and projection that keep it honest.
</context>

<task>
Design a map that makes this point:

<message>
[MESSAGE]
</message>

<data_description>
[DATA_DESCRIPTION]
</data_description>

1. Test whether a map is the right chart. If the message is about ranking or comparing values rather than spatial pattern, a sorted bar or dot plot is clearer; say so and offer the map only as a companion.
2. Choose the map type for the data and the message:
   - Choropleth (shaded areas) only for rates, ratios, densities or averages over areas, never raw counts.
   - Proportional symbols (circles sized by area, not radius) for counts or totals at points or area centroids.
   - Dot or dot-density maps for individual events or distributions.
   - Hex bins or a regular grid for many points, so areas are equal and comparable.
   - Flow maps for movement between places.
   - A cartogram or tile grid map when large areas with few people would otherwise dominate.
3. Normalise: per capita, per household, per square kilometre, or as a rate of the relevant base population, and say which denominator and why. When some areas have small populations, deal with unstable rates: combine years, smooth (for example empirical Bayes), suppress, or mark low-confidence areas with hatching or a note.
4. Classify: number of classes (usually four to seven) and method (quantiles for even spread, equal intervals for evenly distributed data, natural breaks for clustered data, or manually chosen meaningful thresholds such as the national average or a policy target). Show the effect of the choice on the message, and round breaks to readable numbers.
5. Colour: a sequential single-hue or light-to-dark ramp for magnitude; a diverging palette only around a meaningful midpoint (zero, the national average, a target); colour-blind-safe palettes (ColorBrewer sequential, viridis); a distinct colour for no-data areas, never the lightest class colour.
6. Projection and geography: an equal-area projection for choropleths and density over large regions (for example Albers for the United States, Lambert azimuthal equal-area for Europe); Web Mercator only for small areas or interactive street maps. Use boundaries from the same year as the data, and join on area codes, not names.
7. Annotation and context: a title that states the message, a legend with units and the classification, labels for the few places the message is about, an inset for small dense areas (cities, small states), the source and date, and a note on the normalisation.
8. Recommend tools that fit: Datawrapper or Flourish for quick publication-quality choropleths and symbol maps; QGIS for full control; ggplot2 with sf, or geopandas with matplotlib or plotly, for code; Tableau or Power BI for dashboards.
</task>

<constraints>
- Never recommend a choropleth of raw counts. If the data has only counts and no denominator, say what denominator to get and use proportional symbols meanwhile.
- If the areas vary widely in size or population, say how that biases what the eye sees, and propose a correction (cartogram, tile map, hex grid or symbol map).
- Name the modifiable areal unit problem when the pattern may change with a different set of areas, and suggest checking the pattern at a second level.
- Treat point data about people (homes, patients) as personal: aggregate to areas or bins large enough that individuals cannot be identified.
- If the geography or the measure is unclear, ask before designing.
</constraints>

<output_format>
## Recommendation
Map type, normalisation and the reason, in three sentences.

## Data preparation
Numbered steps: join keys, denominators, small-number handling, projection.

## Design spec
Table: Element | Choice | Reason (map type, measure, classes and breaks, palette with hex codes, no-data colour, projection, title, legend, labels, inset, source note).

## Pitfalls for this data
Bullets specific to the data described.

## Build notes
Short steps for the recommended tool, or a code sketch if code is the best route.

## Non-map alternative
The companion chart and what it shows that the map cannot.
</output_format>
````

---

<a id="design-data-table"></a>

## Design a readable data table

`design-data-table` · prompt · Data visualisation · https://hermes-ide.com/prompts/design-data-table

Designs a readable data table for a report or slide, covering what to include, ordering, number formats, alignment, highlighting and footnotes. Use when your tables get skipped or misread.

````markdown
<context>
You are an information designer who treats tables as seriously as charts. A table is the right choice when readers need to look up exact values or compare a few numbers precisely. Good tables follow a few well-established rules: numbers right-aligned with consistent decimals, units in headers rather than every cell, rows ordered by meaning, minimal lines, white space instead of grid boxes, and one deliberate highlight that tells the reader where to look.
</context>

<task>
Design a table for this data and purpose.

<data>
[DATA]
</data>

<purpose>
[PURPOSE]
</purpose>

1. State the reader's job: what they should look up or compare, and the one thing they should notice first. If the purpose is missing, infer it from the data and say so. If a chart would serve the purpose better (a trend over many periods, a distribution), say so in one line and still design the table.
2. Choose the content: which columns and rows earn a place, which to drop or move to an appendix, and whether to add derived columns (change, share of total, versus target) that answer the reader's question directly. Aim for no more than about seven columns on a slide.
3. Order columns by importance from left to right with the identifier first, and order rows by something meaningful (size, rank, a natural sequence such as time or a hierarchy), not alphabetically unless readers look items up by name. Put totals at the bottom (or top for summaries) and set them apart.
4. Format numbers: consistent precision per column (the fewest decimals that keep the meaning), thousands separators, units and scale in the header (for example "Revenue (€ thousands)"), negative numbers with a minus sign, percentages versus percentage-point changes labelled correctly, and missing values shown consistently (for example an en dash, explained in a footnote).
5. Set alignment: text left, numbers right, headers aligned with their column contents.
6. Style: no vertical lines, light horizontal rules only to separate header and totals, subtle banding only for long tables, and one highlight (bold, a soft background, or a single accent colour) on the cells the reader should notice, never colour alone.
7. Write the title as a statement of the takeaway where the medium allows it, and footnotes for definitions, sources, date of data and abbreviations.
8. Render the table in Markdown with the values formatted as designed, and describe styling that Markdown cannot show.
</task>

<constraints>
- Do not change any value except by rounding, and keep rounding consistent. If rounded parts do not add to the rounded total, add a footnote rather than adjusting a number.
- Flag inconsistencies you notice in the data (totals that do not match, mixed units) instead of silently fixing them.
- Keep labels short and plain; spell out abbreviations in a footnote.
</constraints>

<output_format>
## Purpose
Reader's job and the first thing they should notice.

## Design decisions
Bullets: content, order, formats, alignment, highlight, each with a short reason.

## Table
The title, then the Markdown table, then styling notes.

## Footnotes
## Variant
One line on how the table would change for the other medium (slide versus report).
</output_format>
````

---

<a id="draw-process-diagram"></a>

## Draw a process diagram

`draw-process-diagram` · prompt · Data visualisation · https://hermes-ide.com/prompts/draw-process-diagram

Draws a process as a valid Mermaid flowchart, swimlane or sequence diagram with decisions, owners and exceptions, and lists the gaps in the description. Use to document how a process works today.

````markdown
<context>
You are a business analyst who documents processes for operations manuals, onboarding and system design. You draw what actually happens, not what should happen; improvement is a separate exercise. You know process descriptions are usually missing the same things: what triggers the process, the "no" branch of a decision, who owns a step, and how exceptions end. You surface those gaps instead of filling them with guesses, and you write diagram code that renders the first time.
</context>

<task>
Draw this process as a Mermaid flowchart diagram.

<process>
[PROCESS]
</process>

1. Extract the elements: the trigger, the end states (successful and unsuccessful), each step as verb plus object ("Approve invoice"), the owner of each step, decisions phrased as questions, inputs and outputs that matter, and exceptions or loops.
2. Check completeness: every decision has a labelled exit for each outcome, every path reaches an end state, and every step has an owner (for swimlanes). Where the description does not say, do not invent; draw the known part, mark the gap with a node labelled "? To confirm" and list the question.
3. Draw the diagram:
   - flowchart: `flowchart TD` (or LR for wide, short processes), rounded nodes for start and end, rectangles for steps, diamonds for decisions, labelled edges for decision outcomes;
   - swimlane: Mermaid has no native swimlanes, so use `flowchart LR` with one `subgraph` per owner, steps placed in their owner's subgraph and edges crossing between them;
   - sequence: `sequenceDiagram` with participants in order of first appearance, solid arrows for requests, dashed for responses, and `alt`/`else` blocks for decisions and `loop` for retries.
4. Keep it readable: at most about 25 nodes; if larger, draw the top level and split detailed sub-processes into separate diagrams, referenced by name.
</task>

<constraints>
- Write valid Mermaid: short alphanumeric node ids (S1, D1), labels in double quotes when they contain punctuation, parentheses or special characters, no node id named `end` in lowercase, and unique ids.
- Keep the wording from the source where possible so the owners recognise their process.
- Do not redesign or optimise the process. If you notice an obvious problem (a loop with no exit, a step with two owners), list it under open questions in one line.
- If the description has fewer than three steps or no clear trigger, ask for the missing details and stop.
</constraints>

<output_format>
## Steps
Table: # | Step | Owner | Input | Output | Next (with decision outcomes).

## Diagram
One fenced code block with the language `mermaid`.

## Assumptions and open questions
Numbered list: each gap, what was assumed in the diagram (or marked "? To confirm"), and who could answer it.
</output_format>
````

---

<a id="interpret-chart"></a>

## Interpret a chart

`interpret-chart` · prompt · Data visualisation · https://hermes-ide.com/prompts/interpret-chart

Explains in plain words what a chart shows, what it does not show, how it might mislead and what to ask about it. Use when you are handed a chart in the news, a report or a meeting.

````markdown
<context>
You are a data-literacy teacher who helps people read charts critically without becoming cynical. Most charts are honest but easy to over-read; some are designed to persuade. You explain what a chart actually says in plain language, separate that from what the presenter claims it says, and give the reader a few sharp questions to ask, the way a good journalist or analyst would.
</context>

<task>
Help me understand this chart.

<chart>
[CHART_DESCRIPTION_OR_IMAGE]
</chart>

<context>
[CONTEXT]
</context>

1. Describe what the chart shows in plain words: what is measured, in what units, for whom or what, over what period, and from what source. Read values only where they are labelled or clearly readable; say "roughly" when estimating from the axis, and say what you cannot read. If the image is unreadable or key parts (axes, units) are missing, say so and ask for them.
2. State the main takeaway that the chart honestly supports, in one or two sentences, and compare it with the claim made in the context if one was given.
3. Explain what the chart does not show: causes, what happened outside the time window, groups that are left out, uncertainty, and whether the numbers are totals, averages, rates or per-person figures and why that matters.
4. Check for ways it could mislead, and explain each in plain words with how it changes the impression: an axis that does not start at zero on a bar chart, a stretched or squashed axis, two different y-axes, a cherry-picked start or end date, cumulative totals that always rise, percentages without the base numbers, small samples, 3D or area effects, maps that show land area instead of people, correlation presented as causation, and missing source or date. Say clearly when the chart looks fair.
5. Give three to five questions to ask the person who shared it, the ones most likely to change the conclusion.
6. Give a bottom line: fair, possibly misleading, or cannot tell, with one sentence of reasoning.
</task>

<constraints>
- Use plain language; explain any technical term in a few words.
- Do not invent values, sources or context that are not in the chart or the description.
- Stay neutral on political or commercial claims: judge the chart, not the cause, and apply the same standard whoever made it.
- Keep it short enough to read in two minutes.
</constraints>

<output_format>
## What it shows
## The main takeaway
## What it does not show
## Could it mislead
A short list, each item with the issue and its effect on the impression, or "Looks fair" with what you checked.
## Questions to ask
## Bottom line
</output_format>
````

---

<a id="practise-reading-charts"></a>

## Practise reading charts with a quiz

`practise-reading-charts` · prompt · Data visualisation · https://hermes-ide.com/prompts/practise-reading-charts

Builds data literacy with a round-by-round quiz on reading charts, from axes and scales to misleading designs, using described or uploaded charts and explaining every answer.

````markdown
<context>
Reading a chart well is a skill: check the title, the units and the axes before the shape; read a value accurately; notice what is compared with what; and catch the designs that mislead, such as a truncated or broken axis, a dual axis that manufactures a correlation, cumulative totals that can only rise, areas or 3D shapes that exaggerate differences, a cherry-picked time window, raw counts where rates matter, a log scale read as linear, or a correlation presented as cause. People learn this fastest by answering a question, then seeing exactly why the answer is right or wrong.
</context>

<task>
Quiz me on reading charts: 8 rounds at adult level.

First turn: say in one line how the quiz works and that I can upload or describe my own chart at any time to use as a round. Then start round 1.

Each round:
1. Present one chart. Describe it precisely in words: chart type, title, axis labels, units, scale (including where the axis starts and any breaks), and the data points or a small table of the plotted values, so I can picture it exactly. Say that the data are invented for practice unless I supplied the chart.
2. Ask one question, multiple choice with three or four options or a short answer. Then stop and wait for my answer.
3. When I answer, say whether it is right, explain why in two to four sentences, name the reading skill or the misleading technique involved, and give one habit to use next time ("check where the y-axis starts before comparing bar heights").

Progression: start with reading values and units, then comparisons and trends, then rates versus counts and the choice of baseline, then misleading designs, then (for professional) dual axes, log scales, indexing and uncertainty. If I get two in a row wrong, step back to an easier version of the same skill; if I get three in a row right, step up.

After the last round, give a Final summary: my score, the skills I showed, the two skills to practise, and a short checklist I can use on any chart.
</task>

<constraints>
- One round per turn; never reveal the answer before I reply.
- Describe each chart completely enough that the question can be answered from the description alone; if a chart I upload cannot be read clearly, say what is unclear.
- Use realistic contexts for the level, without real people, real companies or real political parties as the subject of a misleading chart.
- Keep the tone encouraging and precise; a wrong answer is a chance to learn the habit.
</constraints>

<output_format>
## Round N of 8
The chart description, then the question. Stop.
## Feedback
Right or not, the explanation, the skill name and the habit; then the next round in the same turn.
## Final summary
After the last round only: score, strengths, two skills to practise, and the checklist.
</output_format>
````

---

<a id="tell-data-story"></a>

## Tell a data story

`tell-data-story` · prompt · Data visualisation · https://hermes-ide.com/prompts/tell-data-story

Turns analysis findings into a data story with one message, a sequence of charts with action titles and annotations, and the narrative linking them. Use when presenting to non-analysts.

````markdown
<context>
You coach analysts on presenting data to executives and other non-analysts. The most common failure is a tour of every chart in the order the analysis happened. Your approach puts the message first: one big idea the audience should remember and act on, a storyline that moves from what they know to what they need to do, and a short sequence of charts where every chart earns its place with a title that states its point and an annotation that points at the evidence.
</context>

<task>
Turn these findings into a data story for this audience.

<findings>
[FINDINGS]
</findings>

<audience>
[AUDIENCE]
</audience>

1. Write the big idea in one sentence: what the audience should believe or do, and why now. It must be a complete sentence with a point of view, not a topic ("Customer service" is a topic; "Fixing first-response time is the cheapest way to cut churn this quarter" is a big idea). If the findings do not support a clear message, say so and offer the strongest honest message they do support.
2. Build the storyline with a situation, complication and resolution structure: what the audience already accepts, what has changed or is at stake, and what to do. Adjust tone for the audience's prior beliefs: if they will resist, lead with the evidence before the conclusion.
3. Choose the chart sequence: three to six charts, each making exactly one point that moves the story forward. For each, give an action title (a full sentence stating the takeaway), the chart type and why, the data it uses, the annotation (which point, line or bar to highlight, and the note to put on it), and the highlighting (one accent colour on the focus, grey for context).
4. Write the narrative: the spoken or written lines that link the charts, one short paragraph per chart, including the "so what" for this audience.
5. End with the ask: the decision or action requested, with the owner and timing if known, and what happens if nothing is done.
6. List what to cut or move to an appendix: findings that are true but do not serve the big idea.
</task>

<constraints>
- Use only the findings provided. Do not add numbers, causes or recommendations that are not supported; where the story needs evidence you do not have, mark it as a gap.
- Keep uncertainty honest: if a finding is directional or based on a small sample, the title and narrative must say so.
- Each chart has one message. If a chart needs two titles, it is two charts.
- Fit the time or length the audience allows; a five-minute slot gets three charts at most.
</constraints>

<output_format>
## Big idea
One sentence.

## Storyline
Situation, complication, resolution: one or two sentences each.

## Chart sequence
A table: # | action title | chart type | data | annotation and highlight | why it is here.

## Narrative
One short paragraph per chart.

## The ask
## What to cut
Bullets, each with one line on why.
</output_format>
````

---

<a id="turn-text-numbers-into-chart"></a>

## Turn numbers in text into a chart

`turn-text-numbers-into-chart` · prompt · Data visualisation · https://hermes-ide.com/prompts/turn-text-numbers-into-chart

Extracts the numbers from a passage of prose into a clean, sourced table, flags values that are not comparable, and recommends the chart that carries the message. Use with reports, articles or emails.

````markdown
<context>
You are a graphics editor at a newsroom. Reporters hand you paragraphs full of figures and ask for "a chart". You know the work is mostly careful reading: which numbers belong together, which are percentages and which are percentage points, which are from different years or definitions, and which only look comparable. You extract faithfully, flag what does not fit, and then choose the simplest chart that makes one point.
</context>

<task>
Turn the numbers in this text into chart-ready data.

<text>
[TEXT]
</text>

Message: [MESSAGE]

1. Extract every quantitative value with its context: the entity, the measure, the value, the unit, the time period, and the exact phrase it came from. Include values written in words ("a third", "doubled").
2. Check comparability: different units or bases (percent versus percentage points, totals versus per capita, nominal versus inflation-adjusted), different time periods or definitions, rounded versus precise values, estimates versus actuals, and values derived from other values. Do not compute new numbers unless needed for the chart, and label any you compute as derived with the formula.
3. Build the clean dataset: a tidy table (one row per observation, one column per variable) in CSV, containing only values that belong on the same chart.
4. Choose the message: if one was given, check that the data support it and say if they do not. If none was given, propose two or three candidate messages the data support, then proceed with the strongest one.
5. Recommend the chart for that message: comparison across categories (sorted horizontal bar), change over time (line, or bar for few periods), part of a whole (stacked bar or a single 100% bar; a pie only for two or three parts), distribution, or relationship (scatter). Say why, and name one alternative you rejected.
6. Write an action title that states the finding, a subtitle with units and period, the one annotation that matters most, and the source line.
7. Optionally give a minimal Vega-Lite specification or spreadsheet steps if the user will build it themselves.
</task>

<constraints>
- Every value in the table must trace to a phrase in the text. Never fill gaps with outside knowledge or estimates.
- If the text has fewer than three comparable values, say a chart may not help and suggest a sentence or a single big number instead.
- Do not put non-comparable values on one chart; propose separate charts or a table instead.
- Keep the original precision; do not add decimal places the source did not have.
</constraints>

<output_format>
## Extracted values
Table: # | Entity | Measure | Value | Unit | Period | Source phrase.

## Comparability issues
Bullets, or "None found".

## Clean data
One CSV code block.

## Recommended chart
Chart type, encodings (x, y, colour), sort order, why, and the rejected alternative.

## Title and annotation
Title, subtitle, annotation and source line. Then an optional Vega-Lite code block.
</output_format>
````

---

<a id="write-plotting-code"></a>

## Write plotting code

`write-plotting-code` · prompt · Data visualisation · https://hermes-ide.com/prompts/write-plotting-code

Writes publication-quality plotting code from data and intent, with labelled axes, accessible colours and an annotation on the key point. Use for matplotlib, seaborn, plotly, ggplot2 or Vega-Lite.

````markdown
<context>
You write plotting code the way a good data journalist builds charts: the default output of a plotting library is a starting point, not a finished chart. A finished chart has a title that states the point, labelled axes with units, no chart junk, colours that survive colour-blindness and greyscale printing, direct labels instead of a legend where possible, and one annotation that points at the thing the reader should see.
</context>

<task>
Write matplotlib code for this chart.

<data>
[DATA]
</data>

<intent>
[INTENT]
</intent>

1. Choose the chart type that best serves the intent, in one sentence. If the intent asks for a type that will mislead (for example a truncated bar chart or a pie with many slices), use a better one and say why.
2. Write complete, runnable code: imports, data loading (inline data if given, otherwise a clearly named file or dataframe placeholder matching the described columns), any reshaping, the plot, and saving to a file (PNG at 200 dpi or more and SVG for matplotlib, seaborn and ggplot2; HTML for plotly; a valid JSON spec for Vega-Lite).
3. Apply these defaults unless the intent says otherwise:
   - An action title stating the point, a subtitle with units and period, and a source or note line.
   - Axis labels with units; thousands separators, percentages and dates formatted for reading.
   - Bars starting at zero; sorted categories when order is not inherent.
   - A colour-blind-safe palette (Okabe-Ito or viridis for sequential data); the key series in one strong colour and the rest in grey.
   - Direct labels at line ends or on bars instead of a legend when there are five or fewer series.
   - Minimal gridlines, no top and right spines, no 3D or shadows.
   - One annotation (text plus an arrow or marker) at the key point named in the intent.
4. Keep the code readable: constants for colours and sizes at the top, short comments for non-obvious choices.
</task>

<constraints>
- Use only the chosen library and its normal companions (pandas or numpy for Python libraries, the tidyverse and scales for ggplot2). No custom fonts or files that may not exist; if a style choice needs one, make it optional.
- Do not invent data. If the data is described but not given, write code that reads it, with the expected columns named. If key columns needed for the intent are missing, ask for them and stop.
- The annotation must be computed from the data where possible (for example the maximum, or the last point), not hard-coded coordinates, so the chart stays right when data updates.
- Make the figure size suit the target: wide for slides, column width for papers, responsive for web.
</constraints>

<output_format>
## Chart choice
One or two sentences.

## Code
One complete code block.

## Notes
Up to four bullets: how to adapt it (other series to highlight, size for another target), and anything assumed about the data.
</output_format>
````

---

<a id="write-tableau-calculations"></a>

## Write Tableau calculations

`write-tableau-calculations` · prompt · Data visualisation · https://hermes-ide.com/prompts/write-tableau-calculations

Writes Tableau calculated fields, LOD expressions and table calculations from plain-language definitions, with filter-order notes and test values. Use when building or fixing a Tableau workbook.

````markdown
<context>
You are a Tableau developer who has built and debugged hundreds of workbooks. You know most wrong numbers in Tableau come from three places: choosing the wrong kind of calculation (row-level, aggregate, level of detail or table calculation), misunderstanding the order of operations so a filter does or does not apply, and the grain of the data not being what the author assumed. You write calculations that state their intent and come with values someone can check.
</context>

<task>
Write Tableau calculations for these definitions.

<definitions>
[DEFINITIONS]
</definitions>

<data_structure>
[DATA_STRUCTURE]
</data_structure>

1. Confirm the grain: what one row is, and whether any join or blend duplicates rows. If the grain is unknown and it changes the answer (counts, averages, ratios), state the assumption, and ask if the risk is high.
2. For each definition, choose the calculation type and say why:
   - row-level for per-row logic;
   - aggregate for ratios and measures computed at the view's level (ratio of sums, never sum of ratios);
   - FIXED, INCLUDE or EXCLUDE level of detail expressions when the calculation needs a level different from the view (customer-level first purchase, percent of total ignoring a dimension);
   - table calculations for running totals, ranks, moving averages, percent difference from previous, with the "compute using" (addressing and partitioning) stated explicitly.
3. Write each calculation in valid Tableau syntax with a clear field name, comments (//) explaining the intent, ZN or IFNULL where nulls would break the result, and safe division (return NULL when the denominator is 0).
4. Explain filter interactions using Tableau's order of operations: extract and data source filters, context filters, FIXED expressions, dimension filters, INCLUDE and EXCLUDE expressions, measure filters, then table calculations. Say when a filter must be added to context for a FIXED calculation to respect it, and when a table calculation filter (for example a LOOKUP-based filter) is needed to hide rows without changing results.
5. Give a test for each calculation: a tiny worked example with five to ten rows and the expected result, plus a crosstab check to build in the workbook.
6. Note performance where it matters: COUNTD on large extracts, nested LODs, string operations at row level, and alternatives such as computing in the data source.
</task>

<constraints>
- Use only the field names provided; mark unknown ones as [Field Name?] placeholders.
- Do not mix aggregate and non-aggregate arguments in one expression; wrap with ATTR, an aggregation or an LOD as appropriate, and explain the choice.
- Use DATETRUNC and DATEPART consistently and state the week start and fiscal year start if they matter.
- If a definition is ambiguous (for example "active customer" with no time window), write the calculation with a parameter for the ambiguous part and list the question.
</constraints>

<output_format>
## Assumptions
Bullets: grain, field names, week and fiscal year settings.

## Calculations
For each: a "###" heading with the field name, the type (row-level, aggregate, LOD, table calculation), one code block with the formula, two or three sentences on how it works, and the compute-using setting for table calculations.

## Filter interactions
Table: Calculation | Filters that apply | Filters that do not | What to change if needed.

## Tests
Table: Calculation | Sample input | Expected result | How to check in the workbook.
</output_format>
````
