charting-vega-lite — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited charting-vega-lite (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
This skill creates interactive Vega-Lite visualizations from uploaded data. The workflow:
Claude artifacts cannot use fetch() for computer:// URLs.
All data must be embedded as an inline JavaScript constant:
const DATA = [ /* embedded data array */ ];
// Later in chart specs:
spec.data = { values: DATA };DO NOT:
This is the only pattern that works in Claude's artifact environment.
Execute this sequence when user uploads data without specifying chart type:
python /mnt/skills/user/charting-vega-lite/scripts/analyze_data.py /mnt/user-data/uploads/<filename>Extract from output:
fields[] (with types and statistics)suggested_charts[] (suggested chart types with encodings)sample_data (first 10 rows for understanding context)If script fails: Use manual pandas analysis
import pandas as pd
df = pd.read_csv('/mnt/user-data/uploads/<filename>')
# Classify: numeric→quantitative, datetime→temporal, <20 unique→nominalRead sample data and column names to infer what the data represents:
Ask: What questions would someone analyzing this data want answered?
Examples:
Filter analyze_data.py suggestions based on context and readability:
Apply readability filters:
Prioritize charts that answer domain questions:
Don't suggest charts just because data types match - choose charts that reveal insights.
Build specs programmatically using analyze_data.py encodings:
For each suggested chart type, construct spec using:
assets/templates/ for basic types (bar, line, scatter, pie, heatmap, area)references/spec-builder-patterns.md for variations (histogram, boxplot, grouped-bar, etc.)references/vega-lite-examples-inventory.md for uncommon typesStructure each chart as:
{"type": "Chart Name", "reason": "Why this chart", "spec": {/* vega-lite spec */}}Load data, read template, replace __DATA__ and __CHART_SPECS__ placeholders, write using bash heredoc.
[View chart explorer](computer:///mnt/user-data/outputs/ChartExplorer.jsx)
Created 7 contextually relevant charts for your data.When user specifies chart type (e.g., "make a bar chart"):
python /mnt/skills/user/charting-vega-lite/scripts/analyze_data.py /mnt/user-data/uploads/<filename>Check requirements:
If data doesn't fit:
Use templates or programmatic builders based on chart type complexity.
Same pattern as Primary Workflow step 5, but with single chart.
Common failures:
spec.data = {values: DATA}Scripts:
scripts/analyze_data.py - analyze structure, suggest 8-12 chart typesComponents:
assets/components/ChartExplorer.jsx - multi-chart explorer templateTemplates:
assets/templates/*.json - 6 basic chart templates (bar, line, scatter, pie, heatmap, area)References - Progressive Disclosure:
Read spec-builder-patterns.md when building charts programmatically (histogram, boxplot, grouped/stacked bars, multi-line, etc.)
Read vega-lite-examples-inventory.md when user requests uncommon chart type not in spec-builder-patterns
Read chart-types.md when validating specific chart requirements or user asks "what chart should I use for..."
Read advanced-charts.md for complete specs of specialized charts (sankey, waterfall, violin plots, complex layered compositions)
Read contextual-chart-selection.md for extended domain examples if unfamiliar with data domain (biomedical, financial, IoT, etc.)
Read online-resources.md to fetch Vega-Lite docs for advanced features (custom selections, transforms, conditional encoding)
User uploads assay data CSV (51 assays, 74 samples)
# 1. Analyze
python /mnt/skills/user/charting-vega-lite/scripts/analyze_data.py /mnt/user-data/uploads/assay_data.csv
# 2. Understand context: Multi-analyte immunoassay
# Questions: Which biomarkers strongest? Patterns across samples? Variability?
# 3. Build contextual charts (5-7 specs)
# Bar: Mean signal by assay
# Heatmap: Sample × Assay
# Box plot: Signal distribution by assay
# Histogram: Overall signal distribution
# etc.
# 4. Load data and template
df = pd.read_csv('/mnt/user-data/uploads/assay_data.csv')
data = df.to_dict(orient='records')
template = open('/mnt/skills/user/charting-vega-lite/assets/components/ChartExplorer.jsx').read()
# 5. Replace placeholders and write
artifact = template.replace('__DATA__', json.dumps(data)).replace('__CHART_SPECS__', json.dumps(charts))
# Use bash heredoc to avoid XML conflicts in tool parameters
# 6. Provide linkView chart explorer
Created 7 charts for your assay data - bar charts show biomarker signals, heatmap reveals sample patterns, box plots display variability.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.