Release Evidence Workflow
Ali-Marandi/ClimateDataAnalyzer
Build an auditable release-evidence workflow for a desktop or packaged application.
Python visual creation and matplotlib/seaborn patterns for PBIR reports.
$ npx skills add data-goblin/power-bi-agentic-development --skill python-visuals -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install data-goblin/power-bi-agentic-development python-visuals --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/data-goblin/power-bi-agentic-development.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/custom-visuals/skills/python-visuals .claude/skills/python-visuals && rm -rf skills-srcUse ~/.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/
Install the "python-visuals" agent skill from https://github.com/data-goblin/power-bi-agentic-development/tree/main/plugins/custom-visuals/skills/python-visuals into .claude/skills/python-visuals/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "python-visuals", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/data-goblin/power-bi-agentic-development/tree/main/plugins/custom-visuals/skills/python-visualsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add data-goblin/power-bi-agentic-development --skill python-visuals -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install data-goblin/power-bi-agentic-development python-visuals --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/data-goblin/power-bi-agentic-development.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/custom-visuals/skills/python-visuals .agents/skills/python-visuals && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "python-visuals" agent skill from https://github.com/data-goblin/power-bi-agentic-development/tree/main/plugins/custom-visuals/skills/python-visuals into .agents/skills/python-visuals/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "python-visuals", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add data-goblin/power-bi-agentic-development --skill python-visuals -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install data-goblin/power-bi-agentic-development python-visuals --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/data-goblin/power-bi-agentic-development.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/custom-visuals/skills/python-visuals .cursor/skills/python-visuals && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "python-visuals" agent skill from https://github.com/data-goblin/power-bi-agentic-development/tree/main/plugins/custom-visuals/skills/python-visuals into .cursor/skills/python-visuals/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "python-visuals", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/data-goblin/power-bi-agentic-development.git --path plugins/custom-visuals/skills/python-visuals--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add data-goblin/power-bi-agentic-development --skill python-visuals -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install data-goblin/power-bi-agentic-development python-visuals --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/data-goblin/power-bi-agentic-development.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/custom-visuals/skills/python-visuals .gemini/skills/python-visuals && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "python-visuals" agent skill from https://github.com/data-goblin/power-bi-agentic-development/tree/main/plugins/custom-visuals/skills/python-visuals into .gemini/skills/python-visuals/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "python-visuals", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install data-goblin/power-bi-agentic-development python-visualsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add data-goblin/power-bi-agentic-development --skill python-visuals -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/data-goblin/power-bi-agentic-development.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/custom-visuals/skills/python-visuals .github/skills/python-visuals && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "python-visuals" agent skill from https://github.com/data-goblin/power-bi-agentic-development/tree/main/plugins/custom-visuals/skills/python-visuals into .github/skills/python-visuals/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "python-visuals", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add data-goblin/power-bi-agentic-development --skill python-visuals -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install data-goblin/power-bi-agentic-development python-visuals --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/data-goblin/power-bi-agentic-development.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/custom-visuals/skills/python-visuals .opencode/skills/python-visuals && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "python-visuals" agent skill from https://github.com/data-goblin/power-bi-agentic-development/tree/main/plugins/custom-visuals/skills/python-visuals into .opencode/skills/python-visuals/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "python-visuals", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
python-visualsPython visual creation and matplotlib/seaborn patterns for PBIR reports.
Python Visuals is an agent skill from data-goblin/power-bi-agentic-development. Python visual creation and matplotlib/seaborn patterns for PBIR reports. Automatically invoke when the user mentions "Python visual", "matplotlib in Power BI", "seaborn in Power BI", "pythonVisual", or asks to "create a Python visual", "add a matplotlib chart", "write a Python visual script".
Its SKILL.md is about 2.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 13 other files, including reference files (for example `examples/script/bar-chart.py`, `examples/script/trend-line.py` and `examples/visual/bar-chart.json`).
It sits in Data & Analytics, covering Data visualization. It works with Python, Power BI, Matplotlib and Seaborn. The repository describes itself as: Power BI AI skills and Power BI agents for Claude Code and GitHub Copilot: a plugin marketplace of Power BI skills, subagents, and hooks for semantic models, DAX, TMDL, reports… The licence is GPL-3.0.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 41886f2. It shows what the files ask for, not the result of running them.
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.
Ships script files (Python), which the agent can run.
From the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
learn.microsoft.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Python Visuals loads about 2.1k tokens when it runs, and up to ~4.9k if it reads all its reference files. Until then it costs about 77 tokens; SKILL.md has 808 words of instructions outside code blocks.
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.
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.
The full file from data-goblin/power-bi-agentic-development at commit 41886f2, republished under its GPL-3.0 licence (© data-goblin). 808 words, ~2,095 tokens.
.claude/skills/python-visuals/SKILL.md (or your agent's skills folder). This skill also uses 9 other files; get the full folder from GitHub.Use
pbirfor every report mutation. Read PBIR metadata only for diagnosis. Ifpbiris unavailable or lacks an operation, stop and report the gap; never edit report JSON directly.
Python visuals execute matplotlib/seaborn scripts to render static PNG images on the Power BI canvas. Prefer seaborn over raw matplotlib for cleaner syntax and better defaults -- it handles most chart types with less code.
pythonVisualValues (columns and measures, multiple allowed)dataset (pandas DataFrame, auto-injected)pbir add visual pythonVisual "Report.Report/Page.Page" --name PythonChart \
--data "Values:Sales.Date" --data "Values:Sales.Revenue"import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(8, 4))
ax.bar(dataset["Date"], dataset["Sales"], color="#5B8DBE")
ax.spines["top"].set_visible(False)
ax.spines["right"].set_visible(False)
plt.tight_layout()
plt.show() # MANDATORYCritical rules:
plt.show() is mandatory as the final line -- nothing renders without itdataset is auto-injected as a pandas DataFrame; do not create itnativeQueryRef (display name) from field bindingsplt.show() call renders; multiple figures not supportedBefore presenting the script to the user, dispatch the python-reviewer agent to validate correctness and provide design feedback.
pbir visuals python "Report.Report/Page.Page/PythonChart.Visual" \
--script-file chart.pyThe CLI handles PBIR string escaping.
pbir visuals bind "Report.Report/Page.Page/PythonChart.Visual" --show
pbir validate "Report.Report" --allFor read-only diagnosis, scripts are stored in visual.objects.script[0].properties:
{
"source": {"expr": {"Literal": {"Value": "'import matplotlib.pyplot as plt\\n...\\nplt.show()'"}}},
"provider": {"expr": {"Literal": {"Value": "'Python'"}}}
}The CLI handles all escaping automatically.
| Package | Version | Purpose |
|---|---|---|
| matplotlib | 3.8.4 | Primary plotting |
| seaborn | 0.13.2 | Statistical visualization |
| numpy | 2.0.0 | Numerical computing |
| pandas | 2.2.2 | Data manipulation |
| scipy | 1.13.1 | Scientific computing |
| scikit-learn | 1.5.0 | Machine learning |
| statsmodels | 0.14.2 | Statistical models |
| pillow | 10.4.0 | Image processing |
Not supported: plotly, bokeh, altair (networking blocked in Service).
Full package list: https://learn.microsoft.com/power-bi/connect-data/service-python-packages-support
Any locally installed package works without restriction.
plt.show() -- mandatory, must be the final linefigsize=(w, h) to match container aspect ratio (72 DPI output)ax.spines["top"].set_visible(False) etc.try/except for robustness in production scriptsdata = dataset.copy() before manipulation| Constraint | Desktop | Service |
|---|---|---|
| Output | Static PNG, 72 DPI | Static PNG, 72 DPI |
| Timeout | 5 minutes | 1 minute |
| Row limit | 150,000 | 150,000 |
| Payload | -- | 30 MB |
| Networking | Unrestricted | Blocked |
| Gateway | Personal only | Personal only |
| Cross-filter FROM | Not supported | Not supported |
| Receive cross-filter | Yes | Yes |
| Publish to web | Not supported | Not supported |
| Embed (app-owns-data) | Not supported | Not supported |
import matplotlib.pyplot as plt
import numpy as np
# 1. Guard against empty data
if dataset.empty:
fig, ax = plt.subplots(1, 1, figsize=(6, 4))
ax.text(0.5, 0.5, "No data available", ha='center', va='center', fontsize=14, color='#888888')
ax.axis('off')
plt.show()
else:
# 2. Data preparation (dataset is auto-injected)
data = dataset.copy()
# 3. Create figure with explicit size
fig, ax = plt.subplots(figsize=(8, 4))
# 4. Plot
ax.plot(data["X"], data["Y"], color="#5B8DBE", linewidth=2)
# 5. Style
ax.spines["top"].set_visible(False)
ax.spines["right"].set_visible(False)
ax.grid(axis="y", alpha=0.3)
# 6. Layout and render
plt.tight_layout()
plt.show()Reach for a Python visual only when all of the following hold:
If interactivity or cross-filtering matters, use Deneb (a static PNG cannot be a selection source). If the need is a small inline mark (sparkline, bar, status pill), use an SVG measure (no row cap, no timeout, no licensing/region gate, renders under publish-to-web). The script visual's niche is narrow: compute-at-render statistical plots for internal or org consumption.
Python vs R once a script visual is the right call: use Python when the computation leans on scikit-learn, statsmodels, or scipy, or when surrounding report logic is already Python. Use R for publication-quality statistical defaults and packages with no Python peer (forecast, corrplot, pheatmap, ridgeline/violin). Where equal, default to whichever language the report's other scripts use; mixing doubles the publish-time package surface to validate.
Do not default to a script visual because a chart type "looks statistical." A box plot, lollipop, or dumbbell is an SVG-measure or Deneb job; reserve scripts for charts that genuinely compute.
references/data-model.md -- dataset grouping mechanic, the row/byte caps, and how to force per-row inputreferences/community-examples.md -- seaborn gallery examples organized by chart type, plus matplotlib and Python Graph Gallery linksreferences/chart-patterns.md -- Common matplotlib/seaborn chart patterns (bar, heatmap, donut, KPI, area)examples/script/ -- Standalone Python scripts (bar-chart, trend-line) -- ready to inject into visual.json after escapingexamples/visual/bar-chart.json -- PBIR visual.json: horizontal stacked bar with PY comparison lines and % change labelsexamples/visual/kpi-card.json -- PBIR visual.json: text-based KPI with value, % change indicator, and PY comparisonexamples/visual/trend-line.json -- PBIR visual.json: area chart with line plot and monthly x-axisTo retrieve current Python visual / package support docs, use microsoft_docs_search + microsoft_docs_fetch (MCP) if available, otherwise mslearn search + mslearn fetch (CLI). Search based on the user's request and run multiple searches as needed to ensure sufficient context before proceeding.
pbi-report-design -- Layout and design best practicesr-visuals -- R Script visuals (same concept, different language)deneb-visuals -- Vega/Vega-Lite visuals (interactive, vector-based alternative)svg-visuals -- SVG via DAX measures (lightweight inline graphics)pbir-format (pbip plugin) -- PBIR JSON format reference© data-goblin, GPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 9 other files (references) in plugins/custom-visuals/skills/python-visuals of data-goblin/power-bi-agentic-development.
Open the folder on GitHubat commit 41886f2
Python Visuals 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Python Visuals this skilldata-goblin/power-bi-agentic-development | 1k | — | ~2.1k | Automated safety check: Pass | GPL-3.0 | |
| Release Evidence WorkflowAli-Marandi/ClimateDataAnalyzer | 107 | — | ~1.6k | Automated safety check: Pass | MIT | |
| Analytics Data AnalysisMindrally/skills | 267 | — | ~1.6k | Automated safety check: Pass | Apache-2.0 | |
| SeabornK-Dense-AI/scientific-agent-skills | 48k | 1 repos | ~3.4k | Automated safety check: Notes | BSD-3-Clause | |
| Plot ML Figureprobabl-ai/skills | 135 | — | ~785 | Automated safety check: Pass | BSD-3-Clause | |
| SeabornzLanqing/codex-claude-academic-skills | 4.6k | 16 repos | ~4.9k | Automated safety check: Pass | BSD-3-Clause |
Ali-Marandi/ClimateDataAnalyzer
Build an auditable release-evidence workflow for a desktop or packaged application.
Mindrally/skills
Best practices for analytics, data analysis, and visualization using Python, pandas, matplotlib, seaborn, and Jupyter notebooks.
K-Dense-AI/scientific-agent-skills
Creates Seaborn statistical visualizations with pandas integration for distributions, relationships, categorical comparisons, regression displays, pair plots, and heatmaps.
probabl-ai/skills
Pick how to write a figure before custom plot code. An agent skill from probabl-ai/skills.
zLanqing/codex-claude-academic-skills
Statistical visualization with pandas integration. An agent skill from zLanqing/codex-claude-academic-skills.
cortega26/chile-hub
Execute Python code in a safe sandboxed environment via [inference.sh](https://inference.sh).
data-goblin/power-bi-agentic-development
Author, validate, publish, and test Power BI paginated reports in the RDL format.
data-goblin/power-bi-agentic-development
Automatically invoke this skill whenever the user asks about Fabric tenant settings or Power BI tenant settings or auditing tenant settings.
data-goblin/power-bi-agentic-development
Interactive BPA rule generation for Power BI semantic models; guided discovery, model investigation, and expert rule authoring.
data-goblin/power-bi-agentic-development
Guidance for Power BI Project (PBIP) structure, thick and thin reports, project renames, forks, and validation.
data-goblin/power-bi-agentic-development
Actionable feedback on the quality, usage, and effectiveness of Power BI reports.
data-goblin/power-bi-agentic-development
This skill should be used whenever the user mentions a "semantic model", "data model", or "dataset", or asks to "build", "model", "design", "optimize", "review", or "audit" one, or to "add a…
Works with
Categories
Python visual creation and matplotlib/seaborn patterns for PBIR reports. Python Visuals is an agent skill from data-goblin/power-bi-agentic-development. Python visual creation and matplotlib/seaborn patterns for PBIR reports.
Python Visuals fits situations like: mentions Python visual; matplotlib in Power BI; seaborn in Power BI; asks to create a Python visual.
Run `npx skills add data-goblin/power-bi-agentic-development --skill python-visuals -a claude-code`. Or copy the skill folder (plugins/custom-visuals/skills/python-visuals in data-goblin/power-bi-agentic-development) into .claude/skills/python-visuals in your project. Claude Code loads it when a task matches its description.
Run `npx skills add data-goblin/power-bi-agentic-development --skill python-visuals -a codex`. Or copy the skill folder (plugins/custom-visuals/skills/python-visuals in data-goblin/power-bi-agentic-development) into .agents/skills/python-visuals in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add data-goblin/power-bi-agentic-development --skill python-visuals -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/python-visuals, .gemini/skills/python-visuals, .github/skills/python-visuals and .opencode/skills/python-visuals in your project.
Going by SKILL.md and its folder, Python Visuals needs Python for the scripts in its folder. Our summary lists: Python 3.
SKILL.md names 1 domain. As links in the text: learn.microsoft.com. This is read from the text; nothing was executed.
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.
Python Visuals is published under the GPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.1k tokens (SKILL.md is roughly 8.4k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 2.8k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Python Visuals: Release Evidence Workflow (Ali-Marandi/ClimateDataAnalyzer, 107 stars), Analytics Data Analysis (Mindrally/skills, 267 stars), Seaborn (K-Dense-AI/scientific-agent-skills, 48k stars) and Plot ML Figure (probabl-ai/skills, 135 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
data-goblin (a GitHub user) maintains it in data-goblin/power-bi-agentic-development, which has 1,026 GitHub stars. The repository holds 33 skills in this directory. The repository was last updated on October 5, 2026.
Source: data-goblin/power-bi-agentic-development on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.