Agent skill

Malloy Analysis Report

by malloydata in malloydata/publisher

Combine validated Malloy queries into a notebook report. An agent skill from malloydata/publisher.

MITAuto-check passed

Install Malloy Analysis Report

skills CLI
$ npx skills add malloydata/publisher --skill malloy-analysis-report -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install malloydata/publisher malloy-analysis-report --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/malloydata/publisher.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/malloy-analysis-report .claude/skills/malloy-analysis-report && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
malloy-analysis-report
GitHub stars
116
Token cost
~2.1k tokens
SKILL.md length
889 words
Files
1
Skills in repo
29
Repo updated
First seen
Licence
MIT

At a glance

Combine validated Malloy queries into a notebook report. An agent skill from malloydata/publisher.

  • Works in 3 steps: Run each query first via execute_query… → Explain the results to the user as you… → Then assemble the notebook once the…
  • The user asks to create a report
  • SKILL.md covers Before building a report, Filters are inherited from the…, What goes in the report and Choosing chart types and…, plus 2 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Malloy Analysis Report is an agent skill from malloydata/publisher. Combine validated Malloy queries into a notebook report. Use when the user asks to "create a report", "combine these into a report", or wants a persistent multi-query artifact.

Its SKILL.md is about 2.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

The repository describes itself as: Publisher is the open-source analytics engine for Malloy. It lets you define data models once — and use them everywhere. The licence is MIT.

When your agent uses it

  • The user asks to create a report
  • Combine these into a report
  • Wants a persistent multi-query artifact

Example prompts

  • “create a report”
  • “combine these into a report”
  • “/malloy-analysis-report”

Workflow steps

3 steps, taken from the first numbered list in SKILL.md.

  1. Run each query first via execute_query to verify it works and returns expected results.
  2. Explain the results to the user as you go: walk through the analysis step by step.
  3. Then assemble the notebook once the analysis is validated.

What it can do on your machine

Read from SKILL.md and the folder at commit b9a1a19. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are malloy).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Malloy Analysis Report loads about 2.1k tokens when it runs. Until then it costs about 50 tokens; SKILL.md has 889 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~50
When it runs · the whole SKILL.md, loaded when a task matches
~2.1k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from malloydata/publisher at commit b9a1a19, republished under its MIT licence (© malloydata). 889 words, ~2,079 tokens.

Download SKILL.mdSave it as .claude/skills/malloy-analysis-report/SKILL.md (or your agent's skills folder).
name
malloy-analysis-report
description
Combine validated Malloy queries into a notebook report. Use when the user asks to "create a report", "combine these into a report", or wants a persistent multi-query artifact.
<!--
Copyright (c) Credible Data Inc.
SPDX-License-Identifier: MIT
-->

Creating Reports

An ad-hoc report is a .malloy notebook, notebooks/<slug>.malloy, that combines markdown narrative with live Malloy queries. An ad-hoc report is written as run: cells, which Publisher still reads and which convert to the one-column tile layout when saved in the Console; when the queries are views on a source, skill:malloy-notebooks describes the layout form (tiles=[…]) to author instead. Load skill:malloy-notebooks for the full format and authoring rules; this skill covers when to build one and how to design good report content (cells, chart annotations, narrative structure). Never write a new .malloynb.

Tool names are written bare here - get_context, execute_query, search_malloy_docs. The exact prefixed name depends on the host surface; match each against the tools you actually have.

Before building a report

  1. Run each query first via execute_query to verify it works and returns expected results.
  2. Explain the results to the user as you go: walk through the analysis step by step.
  3. Then assemble the notebook once the analysis is validated.

Do NOT build the notebook in the same turn as execute_query. Explain first, then build.

Filters are inherited from the model, don't declare them in the report

Do not declare filters in an ad-hoc report. If the source declares given: parameters (or legacy #(filter) annotations), Publisher renders the controls, parses caller parameters, and applies them server-side automatically: the report inherits and displays them with no extra work. If the analysis needs a knob the source doesn't expose, the right move is to add a given: to the source itself, not to wedge a filter widget into the report. #(filter) is deprecated in favour of native Malloy given: parameters. Never add a #(filter) annotation: every use, including required, implicit, and date/number ranges, has a given: form. The malloy-model skill covers this under § Legacy: Parameterizable Filters. For curated notebooks with their own per-notebook filter UI on top of the model, see skill:malloy-notebooks instead.

What goes in the report

Do NOT add an H1 heading in any markdown (use H2 and below for sections); the title in the ## artifact tag serves as the title. To redo the structure rather than tweak one cell, rewrite the notebook file end-to-end.

Markdown cells own narrative; query cells own a single Malloy query whose chart annotation tells the renderer how to display the result. Markdown supports H2 headings, lists, bold, and inline code. Keep narrative cells short, one idea per cell, so the rendered output reads as a story instead of a wall of text.

The file starts with ## artifact { kind=notebook title="..." }, then the import for the model file. Definitions (import, source:, query:, given:) come before the first markdown or run:. Prose is ##|(markdown) ... |## for a block (body on the lines between) or ##(markdown) text for one line. Each run: is a query cell, and its tags sit directly above it with nothing between. A #" directly above the run: is its caption. Trailing prose is ##(markdown), never #(markdown) or #".

This is the cell format, the quick form for an ad-hoc report; for a notebook that will be kept and edited, write the layout form in skill:malloy-notebooks (## artifact { kind=notebook tiles=[…] }) instead.

Each run: must be a standalone query (for example run: source -> { ... }). The import is file-wide: query cells never repeat it. Compile the file with /compile ("scope": "file", at the path notebooks/<slug>.malloy) before saving; a .malloy notebook compiles as a model, so its errors come back there. A complete report:

malloy
## artifact { kind=notebook title="Sales report" }
import "../order_analysis.malloy"

##|(markdown)
## Overview
What is driving sales, and which categories carry it? The queries below cover every order in the model.
|##

# big_value
run: order_analysis -> {
  aggregate:
    # label="Revenue"
    # currency
    total_revenue

    # label="Orders"
    # number=auto
    order_count
}

##(markdown) ## Trend: how does revenue move over time?

#" Revenue by month
# line_chart
run: order_analysis -> {
  group_by: order_date.month
  aggregate: total_revenue
  order_by: 1
}

##|(markdown)
## Breakdown
Which categories account for the most revenue?
|##

#" Top ten categories by revenue
# bar_chart
run: order_analysis -> {
  group_by: category
  aggregate: total_revenue
  order_by: total_revenue desc
  limit: 10
}

##(markdown) ## Key takeaways: what to look at next.

A well-structured report typically follows this pattern:

[Markdown]  ## Overview: what question are we answering, what data is in scope (date range, entity count)
[Malloy]    KPI cell: headline numbers (e.g., # big_value, or # dashboard with nested # big_value cells)
[Markdown]  ## Trend: describe what we should look for over time
[Malloy]    Time-series cell (e.g., # line_chart on a date dimension)
[Markdown]  ## Breakdown: where the signal is
[Malloy]    Categorical cell (e.g., # bar_chart on a categorical dimension)
[Markdown]  ## Key takeaways: what the user should walk away with

Use this as a default; deviate when the analysis warrants. A grounded report names the time range and entity count up front so every number that follows has context.

Show full SKILL.md (286 more words)Show less

Choosing chart types and annotations

Read skill:malloy-charts before picking visualizations: it owns chart-type selection, properties, and the placement rules for chart annotations. skill:malloy-queries covers Malloy query patterns and the critical placement rules for chart-annotation tags.

When in doubt:

  • KPIs / single numbers -> # big_value, often nested inside # dashboard.
  • Trend over time -> # line_chart, usually on the primary date dimension.
  • Category comparisons -> # bar_chart, ordered by the metric.
  • Tabular data with many columns -> a plain table cell with # table.size=fill.
  • Multiple coordinated charts -> # dashboard with nest: blocks.

Annotations go before run:, never inside curly braces:

malloy
# bar_chart
run: source -> {
  group_by: category
  aggregate: revenue
  order_by: revenue desc
  limit: 10
}

A # dashboard cell composes nested views, useful for KPIs alongside a trend in a single cell. Each nest: is a tile; any top-level aggregate: measures render as KPI cards. For a fixed grid, use # dashboard { columns=N } with # colspan on each tile (see skill:malloy-charts):

malloy
# dashboard { columns=2 }
run: source -> {
  nest:
    # colspan=2
    # big_value
    kpis is {
      aggregate:
        # label="Revenue"
        # currency
        total_revenue

        # label="Orders"
        # number=auto
        order_count
    }
  nest:
    # line_chart
    trend is {
      group_by: order_date.month
      aggregate: total_revenue
      order_by: 1
    }
}

Key rendering rules to keep in mind when shaping a cell:

  • FIRST group_by = x-axis, FIRST aggregate = y-axis.
  • Override field roles with # x, # y, # series on individual fields.
  • For multiple measure series, place # y above the aggregate: keyword.
  • One aggregate per chart view: use # dashboard with nested views for multiple charts.
  • Use # table.size=fill for standalone table queries.

Editing an existing report

For small targeted changes (fix one cell, insert one new cell), edit the cell's statement or markdown in place rather than recreating the whole notebook. For structural rewrites (reordering many cells, changing the narrative arc), rewrite the notebook file. An existing .malloynb is read, not edited: to change its story, write a .malloy notebook.

IMPORTANT

You CANNOT see the rendered output of notebook cells. Do not claim to see charts, values, or patterns from report cells you haven't explicitly executed via execute_query. If you need to analyze results, run the query via execute_query first.

© malloydata, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in skills/malloy-analysis-report of malloydata/publisher.

Open the folder on GitHubat commit b9a1a19

Compare with similar skills

Malloy Analysis Report next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Malloy Analysis Report compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Malloy Analysis Report this skillmalloydata/publisher116—~2.1kAutomated safety check: PassMIT
Monte Carlo Validation Notebooksickn33/agentic-awesome-skills47k1 repos~1.1kAutomated safety check: PassMIT
ClickHouse Query Performance Validationcomet-ml/opik22k—~2.1kAutomated safety check: PassApache-2.0
Sqlx Query Validatormacro-inc/macro4.6k—~1.1kAutomated safety check: NotesAGPL-3.0
Jupyter Notebookmicrosoft/ai-agents-for-beginners77k—~1.1kAutomated safety check: PassMIT
Jupyter Notebookmicrosoft/ai-agents-for-beginners77k—~1.2kAutomated safety check: WarnMIT

Similar skills

  • Monte Carlo Validation Notebook

    sickn33/agentic-awesome-skills

    Generates SQL validation notebooks for dbt PR changes with before/after comparison queries.

    47k GitHub starsUsed in 1 repo~1.1k tokens
    Data & AnalyticsAuto-check passed
  • Measures what a ClickHouse query change actually costs, turning a suspicion that a query is slow into numbers a reviewer can act on before it merges.

    22k GitHub stars~2.1k tokensUpdated today
    DatabasesAuto-check passed
  • Sqlx Query Validator

    macro-inc/macro

    Inspect Rust changes for SQLx queries. An agent skill from macro-inc/macro.

    4.6k GitHub stars~1.1k tokensUpdated today
    Business, Finance & HRAuto-check: notes
  • Jupyter Notebook

    microsoft/ai-agents-for-beginners

    Official

    ใช้เมื่อผู้ใช้ร้องขอให้สร้าง จัดโครงร่าง หรือแก้ไข Jupyter notebooks (.ipynb) สำหรับการทดลอง การสำรวจ หรือบทแนะนำ; ควรใช้เทมเพลตที่มาพร้อมและรันสคริปต์ช่วยเหลือ newnotebook.py…

    77k GitHub stars~1.1k tokensUpdated 20 days ago
    Data & AnalyticsAuto-check passed
  • Jupyter Notebook

    microsoft/ai-agents-for-beginners

    Official

    ប្រើនៅពេលដែលអ្នកប្រើស្នើឲ្យបង្កើត រៀបចំ (scaffold) ឬកែសម្រួល Jupyter notebooks (.ipynb) សម្រាប់សាកល្បង ស្វែងរក ឬមេរៀន; អនុសាសន៍ឲ្យប្រើទំរង់គំរូដែលភ្ជាប់មកជាមួយ និងរត់ស្គ្រីបជំនួយ newnotebook.py…

    77k GitHub stars~1.2k tokensUpdated 20 days ago
    Data & AnalyticsAuto-check: warnings
  • Jupyter Notebook

    microsoft/ai-agents-for-beginners

    Official

    အသုံးပြုပါသည်။ အသုံးပြုသူက စမ်းသပ်မှုများ၊ ရှာဖွေမှုများ သို့မဟုတ် သင်ခန်းစာများအတွက် Jupyter notebook (.ipynb) များကို ဖန်တီးရန်၊ အခြေခံဖွဲ့စည်းရန် သို့မဟုတ် တည်းဖြတ်ရန် တောင်းဆိုသောအခါ အသုံးပြုပါ။…

    77k GitHub stars~1.4k tokensUpdated 20 days ago
    Data & AnalyticsAuto-check passed

More from malloydata/publisher

All 29 skills in this repo
  • Eval Answer

    malloydata/publisher

    Score one analytical answer against a verified golden, and score which of the entities the golden depends on retrieval delivered to the answerer.

    116 GitHub stars~4.3k tokensUpdated today
    Auto-check passed
  • Fix Scan Finding

    malloydata/publisher

    Fix a CRITICAL Trivy finding that is failing CI in this repo (a vulnerability, misconfiguration, or secret from security-scan.yml or image-scan.yml), or add, review, or retire an entry in…

    116 GitHub stars~5.1k tokensUpdated today
    Auto-check passed
  • Eval Import

    malloydata/publisher

    Turn a list of questions into an eval set, whatever shape it arrived in: a JSONL a customer sent, a CSV, a spreadsheet export, a markdown doc, an email thread, or a pull from production logs.

    116 GitHub stars~5.9k tokensUpdated today
    Auto-check passed
  • Eval Loop

    malloydata/publisher

    Conduct a local Publisher evaluation loop in five steps: scrape/run, eval, diagnose, improve, checkpoint.

    116 GitHub stars~7.8k tokensUpdated today
    Auto-check passed
  • Eval Improve

    malloydata/publisher

    Make the smallest safe Malloy model edit that closes a diagnosed model-owned gap, with a probe receipt for every factual claim.

    116 GitHub stars~2.8k tokensUpdated today
    Auto-check passed
  • Eval Judge

    malloydata/publisher

    Decide whether ONE answer matches its golden, and say whether you believe the golden.

    116 GitHub stars~3.4k tokensUpdated today
    Auto-check passed

Questions about Malloy Analysis Report

What does Malloy Analysis Report do?

Combine validated Malloy queries into a notebook report. An agent skill from malloydata/publisher. Malloy Analysis Report is an agent skill from malloydata/publisher. Combine validated Malloy queries into a notebook report.

When should I use Malloy Analysis Report?

Malloy Analysis Report fits situations like: the user asks to create a report; combine these into a report; wants a persistent multi-query artifact.

How do I install Malloy Analysis Report in Claude Code?

Run `npx skills add malloydata/publisher --skill malloy-analysis-report -a claude-code`. Or copy the skill folder (skills/malloy-analysis-report in malloydata/publisher) into .claude/skills/malloy-analysis-report in your project. Claude Code loads it when a task matches its description.

How do I install Malloy Analysis Report in Codex?

Run `npx skills add malloydata/publisher --skill malloy-analysis-report -a codex`. Or copy the skill folder (skills/malloy-analysis-report in malloydata/publisher) into .agents/skills/malloy-analysis-report in your project. Codex loads it when a task matches its description.

Can I use Malloy Analysis Report in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add malloydata/publisher --skill malloy-analysis-report -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/malloy-analysis-report, .gemini/skills/malloy-analysis-report, .github/skills/malloy-analysis-report and .opencode/skills/malloy-analysis-report in your project.

What does Malloy Analysis Report need to run?

SKILL.md names no scripts, command-line tools or credentials: Malloy Analysis Report is instructions for the agent only.

Does Malloy Analysis Report access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Malloy Analysis Report safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Malloy Analysis Report use?

Malloy Analysis Report is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Malloy Analysis Report use?

About 2.1k tokens (SKILL.md is roughly 8.3k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Malloy Analysis Report?

Skills that share tags, products or a category with Malloy Analysis Report: Monte Carlo Validation Notebook (sickn33/agentic-awesome-skills, 47k stars), ClickHouse Query Performance Validation (comet-ml/opik, 22k stars), Sqlx Query Validator (macro-inc/macro, 4.6k stars) and Jupyter Notebook (microsoft/ai-agents-for-beginners, 77k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Malloy Analysis Report?

malloydata (a GitHub organization) maintains it in malloydata/publisher, which has 116 GitHub stars. The repository holds 29 skills in this directory. The repository was last updated on October 9, 2026.

Source: malloydata/publisher on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.