portaljs-check-data-quality

portaljs-check-data-quality is a skill for Claude Code from datopian/portaljs. It costs 76 tokens per session (1,457 once invoked), scanned A, original, MIT.

A read-only checker for one CSV or TSV file, either on your computer or at a web address. It examines the file's columns, missing values, data types, ranges, dates, and duplicates.

In plain words
What is it for?
Use it before publishing a dataset in PortalJS or when investigating incorrect data in a PortalJS showcase.
Why use it?
It finds data problems that can cause a published dataset or website display to show blank cells, unreadable numbers, or dates that cannot be sorted. It does not change the source file.

Skill for Claude Code

Written for Claude Code: allowed-tools in frontmatter. Also seen: reads .claude/ paths; mentions Claude Code.

Needs its repository: it runs a file that does not travel with it, so clone the repository first. The line is /portaljs-check-data-quality ./public/data/trash.csv.

Part of the portaljs plugin — 14 skills, 25 commands shipped together

Good fit Use it before publishing a dataset in PortalJS or when investigating incorrect data in a PortalJS showcase.

Compare 6 skills from other repositories ↓
About the project

PortalJS is a framework for building data portals that present searchable datasets through a home page, catalog, and dataset showcase. It is for teams that want to choose a data backend, scaffold a Next.js portal, load CSV or JSON data, connect services such as CKAN, and deploy the result. The catalogue entries are agent commands, skills, instructions, and a plugin that guide portal creation and data loading.

datopian/portaljs · 2,350 stars · on GitHub · portaljs.com

Install

Getting it into your agent

It runs from inside its repository, so the clone comes first — what it calls does not travel with the file alone.

Clone the repo
git clone --depth 1 https://github.com/datopian/portaljs
agentmods
npx agentmods add skills/datopian/portaljs/portaljs-check-data-quality

Made for: Claude Code.

Or install portaljs, the plugin that ships this one along with the rest of its 14 skills, 25 commands.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for portaljs-check-data-quality

README.md
[![agentmods](https://agentmods.dev/badge/skills/datopian/portaljs/portaljs-check-data-quality/github.svg)](https://agentmods.dev/skills/datopian/portaljs/portaljs-check-data-quality)
Your own site
<a href="https://agentmods.dev/skills/datopian/portaljs/portaljs-check-data-quality"><img src="https://agentmods.dev/badge/skills/datopian/portaljs/portaljs-check-data-quality/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for portaljs-check-data-quality

Your own site · 80×15
<a href="https://agentmods.dev/skills/datopian/portaljs/portaljs-check-data-quality"><img src="https://agentmods.dev/badge/skills/datopian/portaljs/portaljs-check-data-quality.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 76 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,457 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 1 finding. A grade says what 26 rules found in the file — not that it is safe. Third-party audits
  • NVIDIA SkillSpector pass 7 Sept 2026
How audits are shown
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00076 $0.01457
Opus 5 $0.00038 $0.00728
Sonnet 5 $0.00015 $0.00291
Haiku 4.5 $0.00008 $0.00146

Measured 10d ago against content hash 857d831e3194, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-10, from the pricing page.

Security

Grade A, and why

portaljs-check-data-quality scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 10d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Makes network callslowCapability

Not a fault in itself. Listed so you know the mod talks to something, and to what.

allowed-tools: Bash(curl:*), Bash(awk:*), Bash(sort:*), Bash(head:*), Bash(wc:*)
skills/portaljs-check-data-quality/SKILL.md · 125 lines

How it starts

The opening of the file, as written. The whole thing — 125 lines — stays where its author put it; the contents beside it link to each section on GitHub.

PortalJS — Check Data Quality

Overview

Run a read-only quality audit of one CSV or TSV file, local or remote, and return a structured JSON report. The audit profiles every column — null/blank counts, inferred value types, numeric ranges, likely year/date fields — and flags duplicate rows, duplicate values in identifier-like columns, ambiguous overlapping year columns (e.g. calendar year vs fiscal year), and mixed-type columns. It never edits the source file, datasets.json, or any other project file; it only reads the target file (a remote URL is downloaded to a temp file that is deleted before the run ends) and prints a report. Use it before publishing a dataset with portaljs-add-dataset, or to diagnose why a showcase renders wrong.

Prerequisites

  • python3 on PATH — the audit logic runs as an embedded Python script; nothing is installed.
  • One CSV or TSV file, given as a local path or an http/https URL. Only one file per run.

Instructions

The canonical, full step-by-step workflow is .claude/commands/portaljs-check-data-quality.md — the single source of truth. Read and follow it when executing. Summary:

  1. Gather input — the file path or URL to audit. If missing, ask for it; never dead-end.
  2. Resolve the source: if it's an http/https URL, download it to a temp file first; otherwise use the local path as given.
  3. Validate the extension is .csv or .tsv. If not, or the file is missing, or the header row is empty, stop and surface the error JSON as-is — do not guess a fix.
  4. Profile every column: null/blank counts, distinct values, sample values, inferred per-value type (boolean/integer/float/date/string), numeric min/max, and year range for columns whose name looks year-like.
  5. Derive findings from the profiles — duplicate rows, missing-value ratios, invalid year values, mixed types, suspect negative values, duplicate identifier values, and ambiguous overlapping year columns — each tagged critical, warning, or info.
  6. Assemble the JSON report (status, file metadata, findings, recommendations, column_profiles), print it, and clean up the temp file if one was created.
  7. Relay the report to the user as-is; do not modify the source file, datasets.json, or any other project file based on the findings — that's a separate, explicit step.

Read the full file on GitHub · 125 lines

Files

What ships with it

1 file beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 10d ago First seen · 125 lines · 76 tokens per session scan A 857d831e3194

Subscribe to this mod's changes

portaljs-check-data-quality is a skill published in the GitHub repository datopian/portaljs (2,350 stars, last pushed 2d ago), licensed MIT. It adds 76 tokens to every session and 1,457 once invoked, about $0.0004 per session on Opus 5. A static security scan graded it A with 1 finding (makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.

Related

Other skills, from other repositories

data-cleaning

Use when a raw table is too dirty to trust — nulls, sentinels, duplicate rows, category sprawl, mixed types, bad dates — and you need a re-runnable clean() plus a schema gate that fails loud. NOT emitting .xlsx (that is spreadsheet-ops), NOT acquiring rows (that is data-scraper), NOT parsing PDF/HTML into rows (that…

ericrisco/rsc-harness · 88 tokens

visual-data-dictionary

Build a Data Schematic with its Data Dictionary beside it — an interactive qsv viz smart dashboard driven by an LLM-inferred JSON Schema data dictionary, browsable in-page next to the charts. Use when the user asks for a Data Schematic, a visual data dictionary, a documented dashboard or a dictionary-driven dashboard…

dathere/qsv · 92 tokens

build-dashboard

Build an interactive HTML dashboard — a Data Schematic — with charts, filters, and tables. Use when creating a dashboard, an executive overview with KPI cards, turning query results into a shareable self-contained report, building a team monitoring snapshot, or needing multiple charts with filters in one…

dathere/qsv · 65 tokens

data-profile

Profile a CSV/TSV/Excel file - detect format, compute statistics, show value distributions.

dathere/qsv · 22 tokens

data-validate

Validate data and analysis before sharing - methodology, accuracy, bias, and data quality checks.

dathere/qsv · 21 tokens

infer-ontology

Infer a semantic ontology from all files in the working directory - entities, attributes, relationships, domain taxonomy, and cross-file join paths. Outputs ONTOLOGY.md.

dathere/qsv · 37 tokens