Developing In Lightdash logo

Developing In Lightdash

OrganizationPopular
lightdash
developing-in-lightdash

Use when reading, creating, and editing Lightdash dashboards and charts as JSON, including dashboard layout and chart-type-specific configuration.

Overview

Publisherlightdash
Repositorylightdash
Skill namedeveloping-in-lightdash
Stars
6.1K
Forks
778
Bundled files
14
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 14 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by lightdash on GitHub. Read the source before you install it.

Installation

Install the Developing In Lightdash AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/lightdash/lightdash.git /tmp/lightdash
mkdir -p .claude/skills
cp -r /tmp/lightdash/packages/backend/src/ee/services/ai/skills/builtInSkills/developing-in-lightdash .claude/skills/developing-in-lightdash
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Developing In Lightdash in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Developing In Lightdash on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Developing In Lightdash is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Developing in Lightdash

For in-process agents and MCP clients working with JSON content tools; Autopilot reuses the chart references with its own workflow.

Use this skill when working with Lightdash dashboards and charts.

MCP tool names

This skill is shared with Lightdash's native agent, so its workflows use camelCase tool names. When reading it through MCP:

  • Use read_content, edit_content, and create_content for readContent, editContent, and createContent.
  • Use grep_fields and get_metadata for native grepFields and getMetadata.
  • Use generate_hashes for native generateHashes.
  • Replace runContentQuery with run_metric_query to validate a chart's governed semantic-layer metricQuery. Do not use run_sql for this validation.

What You Can Do

TaskTools/ActionReferences
Read dashboards and chartsreadContentdashboard-reference, chart refs
Read data apps (read-only)readContent with type: data_appmanifest-shaped JSON, no source code
Edit dashboardseditContent with RFC6902 JSON Patchdashboard-reference
Edit charts and tileseditContent, then update referencing dashboards if neededChart refs, dashboard-reference
Create chartsgrepFields, getMetadata, runContentQuery, createContentChart refs
Create dashboardsgrepFields, getMetadata, createContentdashboard-reference, best practices
Add period comparisonsEdit chart metricQuery and configperiod-over-period-reference
Verify changed metric queriesrunContentQuery with source.type: "metricQuery"Chart refs

Rules:

  • Always read content before editing if you have not read it since the last user message.
  • Preserve unrelated fields.
  • Prefer minimal patches.
  • Follow the dashboard or chart shape from the resource instead of inventing structure.
  • When you create or edit content, please provide links for them in the final response

Common Mistakes

MistakeConsequencePrevention
Guessing filter valuesCase mismatches like "Payment" vs "payment" can make a chart silently return no dataVerify exact values before editing filters. Do not guess string filter values
Not updating dashboard tiles after renaming a chartDashboard tile still shows the old title because tile title and chartName do not auto-updateIf you change a chart's name or purpose, also update dashboard tiles that reference its chartSlug
Including unused dimensions in metricQueryExtra dimensions change grouping and can produce wrong numbersEvery dimension in metricQuery.dimensions must be used by the chart configuration
Leaving invalid touched tile positionsEdited tiles overlap, sit outside the 36-column grid, or leave unintended gapsValidate touched tiles against dashboard-reference grid layout rules after tile actions
Missing contentTypeContent type becomes ambiguousAlways keep contentType: "chart" or contentType: "dashboard"

Core Workflows

Edit Dashboards

  1. Call readContent and inspect the current JSON shape.
  2. Always read the dashboard-reference resource.
  3. Build the smallest possible JSON Patch.
  4. Call editContent with that patch.
  5. Re-read if needed to verify the final state.

Edit Charts and Dashboard Tiles

  1. Call readContent for the chart slug.
  2. Always read the chart reference for chart type (see Choosing the Right Chart Type below).
  3. If you add or change filters, verify exact filter values before patching.
  4. If you change the chart's name or purpose, also update dashboards that reference that chart.
  5. Build the smallest possible JSON Patch.
  6. If you changed the chart's metricQuery, call runContentQuery with source.type: "metricQuery" and the edited chart's tableName/metricQuery.
  7. Call editContent with that patch.
  8. Re-read if needed to verify the final state.

Create Charts

  1. Use grepFields, then getMetadata, to explore available fields and plan your chart.
  2. Always read the chart reference for chart type (see Choosing the Right Chart Type below) to understand required fields and configuration.
  3. Build the full chart JSON with that metric query and other required fields.
  4. Call runContentQuery with source.type: "metricQuery" and the chart's tableName/metricQuery.
  5. Call createContent with the verified chart JSON.

Create Dashboards

  1. Always read the dashboard-reference and dashboard-best-practices resources.
  2. Explore existing dashboards and charts to find reusable content and inspiration for layout and design.
  3. Use grepFields, then getMetadata, to explore available fields and plan which charts to include.
  4. Create an empty dashboard shell first.
  5. Start building charts and adding them to the dashboard one by one, using the workflow above for creating charts.

Editing Charts

Dashboard tiles have their own titles. A saved_chart tile's title and chartName are independent overrides and do not automatically change when a chart is renamed. If you change a chart from "Total Revenue" to "Gross Profit", update the dashboard tile too.

json
{
    "tiles": [
        {
            "properties": {
                "chartName": "Gross Profit",
                "chartSlug": "total-revenue-kpi",
                "title": "Gross Profit"
            },
            "type": "saved_chart"
        }
    ]
}

Slug Fields

slug is a read-only stable identifier.

Dashboards

  • spaceSlug is the dashboard's space path. Changing it moves the dashboard to another space.
  • Dashboard tile properties.chartSlug references an existing reusable or dashboard-owned chart.

Charts

Charts are either reusable space charts or dashboard-owned charts.

  • Reusable chart: no dashboardSlug; spaceSlug is its space path and changing it moves the chart.
  • Dashboard-owned chart: has dashboardSlug; both dashboardSlug and spaceSlug are read-only, and spaceSlug is the owning dashboard's space.

Chart Types

All charts share a common base structure:

json
{
    "chartConfig": {
        "config": {},
        "type": "<type>"
    },
    "contentType": "chart",
    "dashboardSlug": "my-dashboard",
    "metricQuery": {
        "dimensions": ["my_explore_category"],
        "exploreName": "my_explore",
        "filters": {},
        "limit": 500,
        "metrics": ["my_explore_total_sales"],
        "sorts": []
    },
    "name": "Chart Name",
    "slug": "unique-chart-slug",
    "spaceSlug": "target-space",
    "tableConfig": {
        "columnOrder": []
    },
    "tableName": "my_explore",
    "version": 1
}

Spaces can be nested. Use parent/child syntax in spaceSlug for sub-spaces, for example "sales/forecasts". A bare slug like "sales-forecasts" is a flat top-level space; the slash defines the hierarchy.

Choosing the Right Chart Type

Data PatternRecommended ChartWhy
Trends over timeLine or area (cartesian)Shows continuous change with time on the X-axis
Category comparisonsBar (cartesian)Easy visual comparison between discrete categories
Part-of-whole relationshipspie or treemapShows proportions or composition
Single KPI metricbig_numberFocuses attention on one important value
Conversion stagesfunnelShows drop-off between sequential stages
Progress toward targetgaugeShows current value relative to a goal
Geographic datamapPlaces values on points or regions
Flow between categoriessankeyShows how values move from source to target
Detailed recordstableShows row-level or pivoted data clearly
Advanced custom needscustomFull Vega-Lite control
TypeUse CaseResource
cartesianBar, line, area, scattercartesian-chart-reference
pieParts of wholepie-chart-reference
tableData tablestable-chart-reference
big_numberKPIsbig-number-chart-reference
funnelConversion funnelsfunnel-chart-reference
gaugeProgress indicatorsgauge-chart-reference
treemapHierarchical compositiontreemap-chart-reference
mapGeographic datamap-chart-reference
sankeyFlow diagramssankey-chart-reference
customVega-Litecustom-viz-reference

For period comparisons, read period-over-period-reference in addition to the chart type reference.

Resources

Charts

  • cartesian-chart-reference - Bar, line, area, scatter
  • pie-chart-reference - Parts of whole
  • table-chart-reference - Data tables
  • big-number-chart-reference - KPIs
  • funnel-chart-reference - Conversion funnels
  • gauge-chart-reference - Progress indicators
  • treemap-chart-reference - Hierarchical composition
  • map-chart-reference - Geographic data
  • sankey-chart-reference - Flow diagrams
  • custom-viz-reference - Vega-Lite
  • period-over-period-reference - PoP comparisons
  • field-formatting-reference - Chart-level field formatting overrides for metrics and dimensions

Dashboards

  • dashboard-reference - Dashboard structure, layout, tabs, tiles, and filters
  • dashboard-best-practices - Dashboard design guidance

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Developing In Lightdash AI skill do?

Use when reading, creating, and editing Lightdash dashboards and charts as JSON, including dashboard layout and chart-type-specific configuration.

Why use Developing In Lightdash on TypingMind?

Because you install it once and use it with any model. Developing In Lightdash is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Developing In Lightdash in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/lightdash/lightdash/tree/main/packages/backend/src/ee/services/ai/skills/builtInSkills/developing-in-lightdash. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Developing In Lightdash?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Developing In Lightdash?

As many as you like. As long as a model supports skills, you can use Developing In Lightdash with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Developing In Lightdash AI skill free?

It is published on GitHub by lightdash. Check the repository for licensing terms. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇