Find and triage data quality issues in CSV datasets: profile columns, run reproducible checks for completeness, uniqueness, validity, consistency, and timeliness, log each issue with evidence, grade severity, and decide fix, quarantine, or block. Triggers when an agent needs to audit a dataset, profile a table, investigate bad or duplicate data, or set up repeatable quality checks before publishing or loading data.
./install.sh data-quality-auditorname: "data_quality_auditor" description: "Find and triage data quality issues in CSV datasets: profile columns, run reproducible checks for completeness, uniqueness, validity, consistency, and timeliness, log each issue with evidence, grade severity, and decide fix, quarantine, or block. Triggers when an agent needs to audit a dataset, profile a table, investigate bad or duplicate data, or set up repeatable quality checks before publishing or loading data."
Most bad data is found by a consumer, after it has already shaped a report or a model. This skill moves that discovery earlier. It profiles a CSV, runs a fixed set of checks from a checks file that lives with the data, and writes an issue log where every finding has evidence: how many rows, what share, which values, which row numbers. Each issue gets a severity grade and a decision, fix, quarantine, or block, so the next step is clear instead of argued from scratch each time.
The checks map to the six DAMA UK dimensions used in DAMA-DMBOK: completeness, uniqueness, timeliness, validity, accuracy, and consistency. The bundled script covers five of them directly. Accuracy, whether a value matches the real world, needs a trusted second source to compare against. The reference check is the closest scripted proxy. Label accuracy findings as comparisons against a named source, never as proof on their own.
assets/example-checks.json. Thresholds and value lists come from the owner or the contract, never from a guess.--quarantine. Read summary.md, then issues.json for the evidence behind any grade you plan to act on.references/triage-guide.md: confirm the check is right, assign one owner, apply fix, quarantine, or block, and tell consumers what is affected when a HIGH or CRITICAL issue is open.bin/profile_csv.py writes to the out dir:
profile.json: row count plus per-column null count and rate, distinct count, inferred type (int, float, date, bool, string, mixed, empty), top values, and min, max, and mean for numeric columns.issues.json: one entry per failed check with id (DQ-001 and up), check, dimension, columns, severity (LOW, MEDIUM, HIGH, CRITICAL), decision (log_and_monitor, quarantine, block), affected_rows, affected_share, up to 5 sample_values, up to 10 sample_row_numbers (spreadsheet rows, header is row 1), evidence, and suggested_fix.summary.md: the same issues in one readable list, for consumers and owners.--quarantine: clean.csv with the rows that passed every quarantine or block check, and quarantine.csv with the failing rows plus a _dq_reasons column listing the issue ids each row failed.Exit codes: 0 when no HIGH or CRITICAL issue is found, 1 when one is, 2 on a usage or input error. The same input and checks file always produce the same issues, which is what makes a re-run a real verification.
bash
# 1. Profile only, to see what you are dealing with
python3 bin/profile_csv.py orders.csv --out-dir dq-out
# 2. Audit with checks, splitting clean from quarantined rows
cp assets/example-checks.json checks.json # then edit it for your columns
python3 bin/profile_csv.py orders.csv --checks checks.json --out-dir dq-out --quarantine
echo "exit=$?" # 1 means a HIGH or CRITICAL issue needs triage
cat dq-out/summary.md
Worked example: a 5-row orders file checked with the example checks plus a reference check against a customers file. The orders file has a duplicated order_id, one null customer_id, one customer_id missing from customers, a status of unknown, amounts of -5 and 99999 against a 0 to 10000 range, one malformed email, and one row dated before the freshness floor. It produces 7 issues: 3 CRITICAL (block), 4 HIGH (quarantine), a clean.csv with the 3 good rows, and a quarantine.csv with the 2 bad rows and their issue ids. That exact case was run and verified when this skill was written.
Supported check types in the checks file: required_columns, not_null, unique (a column name, or a list of column names for a composite key), accepted_values, ranges (min and max), patterns (regex), reference ({"file": "customers.csv", "column": "id"} per column), and freshness ({"column": "updated_at", "min_date": "2026-09-15"}). critical_columns lists the columns graded at critical weight. For severity grades and the fix, quarantine, or block decision rules, read references/triage-guide.md.
publisher key 2e43c913833850e6d80f939677e3de76e806d47785c0f1caaca90f9d18c98e1e
No ratings yet — be the first to rate it.