analyze-data-quality
Skill0 starsChanged 37 days agoMITView on GitHub
Use this when a participant wants to turn a dataset into a working data quality check, from picking dimensions through a scorecard dashboard built on stored, non-sensitive results.
1 other project uses a version of this.
Adopted by
Most recently taken up by
- openai/pluginstheir own version, first seen Oct 13, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- openai/plugins★ 7.8ksame name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository5 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- closed-loop-visual-feedbackSkill
- inverse-set-kondoSkill
- jobs-quote-uxSkill
- ux-heuristicsSkill
The file
We split this skill into the rules it gives an agent
7 rules. About 0 are common, 4 are distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈4
Distinctive · estimate
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 17
Ask the person which data quality framework to use.
- Very specific: line 26
Before writing a single rule, look at what the data actually contains.
- Distinctive: line 42
Write the rules in one file, one rule per entry.
- Very specific: line 58
Run each rule over every row, never a sample.
- Very specific: line 65
Do not store the full set of failing rows, and never commit the raw dataset itself.
- Distinctive: line 70
Example rows must never contain personal data: Before storing an example row, strip or mask any field that identifies a specific person, …
- Distinctive: line 86
Write this decision down next to the rule.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Analyze data quality
This skill walks through building a data quality check from scratch: agree what to measure, look at the real data before writing any rule, write the rules as plain code, run them over everything, record what each finding actually means, and build a dashboard from the results. Work through the steps in order and check in with the person after each one before moving to the next.
1. Agree on the dimensions
Ask the person which data quality framework to use. If they name one, such as the
dimensions in the DAMA-DMBOK, work from that; if their organization has its own list or its
own names, use those. Do not invent a list of your own. Then ask which dimensions apply to
their data. Not every dimension applies to every dataset: if uniqueness is meaningless for
this data, drop it. Write the short list you land on into the "Data quality checks" section
of PLAN.md before moving on.
2. Profile the data first
Before writing a single rule, look at what the data actually contains. The raw files are
in data/raw/, the local cache; read them from there with DuckDB:
- the list of columns and what each one is supposed to mean
- the data type of each column
- the total row count
- the null rate for each column
- the range of values for numeric and date columns, and the distinct values for coded or categorical columns
This step exists so that rules are written against the data as it really is, not against what the documentation claims or what someone assumes. A column that is supposed to never be empty, but is empty a third of the time, changes what you write next.
3. Write the rules as code
Write the rules in one file, one rule per entry. Each rule needs:
- an id, such as
CMP-01, made of a short dimension prefix and a number - a name
- the dimension it belongs to
- a severity
- the test, in one plain sentence a non-coder can read and agree with
- why it matters to someone who uses this data
- the SQL predicate that is true for a row that fails the rule
Writing the predicate as "true when the row fails" rather than "true when the row passes" keeps every rule readable the same way: run the predicate, and the rows it returns are the problem rows.
4. Run every rule over the whole dataset
Run each rule over every row, never a sample. A sample can hide a problem that only
shows up in one slice of the data. For each rule, store only the following, as small files
in data/summaries/:
- the count and rate of failing rows
- a small number of example failing rows, enough to see the shape of the problem
Do not store the full set of failing rows, and never commit the raw dataset itself; it
stays in data/raw/, which git ignores.
Storing counts, rates and a few examples is what lets these results be committed to a
repository while the underlying data stays out of it entirely.
Example rows must never contain personal data. Before storing an example row, strip or mask any field that identifies a specific person, such as a name, an address, an email, or an account number. If a rule cannot be explained without showing a personal field, describe the example in words instead of storing the row.
5. Record what each finding actually means
A failing rule is not automatically a defect. For each finding, decide which of these it is:
- a defect: the data is simply wrong and should be fixed at the source
- a business rule the check did not know about: the data is correct, and the rule needs to be adjusted to account for it
- a documentation gap: the data and the rule disagree because the written specification never said what actually happens
Write this decision down next to the rule. It is what turns a list of red numbers into something a team can act on.
6. Build the dashboard from the stored results
Build the dashboard from the stored counts and examples only, never from the raw data. A useful shape:
- headline numbers: total rows checked, total rules, overall pass rate
- a scorecard broken down by dimension, so a viewer can see at a glance which dimension is weakest
- a card per rule, showing the plain sentence describing the test, the count and rate, one masked example, and the SQL predicate for anyone who wants to verify it
7. Re-run as new data arrives
Data quality is not a one time check. Re-run the same rules against each new batch of data as it arrives, and watch how the rates move over time. A rate that suddenly jumps is usually more interesting than a rate that stays high but steady, because it points to something that just changed upstream.
Created by Exagrow AI Consulting. Provided under the MIT License.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

