SkillGraph

DataHub for the agent layer

An agent is a prompt with tools. That prompt depends on tools existing, on other skills existing, on reference files existing — and dependencies are lineage. So the agent layer is a data estate with exactly the problems DataHub was built to catch.

Pointed at DataHub's own agent skills, SkillGraph finds provably broken references.

The finding

One line of a prompt, and the reason an agent fails in a way no stack trace explains.

$ skillgraph audit

# skills/datahub-enrich/SKILL.md:65
| **Tags** | `add_tag`, `remove_tag` | addTag, batchAddTags, createTag |
            ▲ no such MCP tool          the real tools are add_tags / remove_tags

The skill tells an agent to call add_tag. The registered tool is add_tags. The agent calls something that does not exist, gets nothing back, and fails for a reason that looks nothing like a docs typo. That is schema drift — between a prompt and a tool server — and it is sitting in DataHub's own agent layer.

Section-level lineage

Pick a skill. Table-level lineage says this skill depends on add_tags. Section-level says which paragraph does — so a renamed tool gives you the exact span to rewrite. It is the same fineGrainedLineages aspect DataHub uses for column lineage in a warehouse, pointed at prose.

section → tool (fineGrained) broken reference — no URN to point at

The six checks

All deterministic: a reference either resolves or it does not, and no model gets a vote. A check that finds nothing reports clean rather than being omitted — an audit that only lists failures cannot distinguish a passing check from one that never ran.

CheckSeverityFindingsWhat it catches

Repair, made provable

The usual failure mode of "AI fixes your repo" is that the agent declares success and nobody can check it. Here the patch is applied to a scratch copy and the checker re-runs on the patched tree. A patch is accepted only if the error count drops and no new finding appears — a measurement, not a judgement.

$ skillgraph repair --no-agy

--- skills/datahub-enrich/SKILL.md:65  (mechanical: `add_tag` -> `add_tags`)
- | **Tags** | `add_tag`, `remove_tag`   | addTag, batchAddTags, createTag |
+ | **Tags** | `add_tags`, `remove_tags` | addTag, batchAddTags, createTag |

Errors: 16 -> 10
VERIFIED: 6 error(s) fixed, none introduced.

16 → 10, not 16 → 0, deliberately. set_deprecation has no MCP equivalent at all, so the honest fix is prose pointing at the CLI — a test fails if the mechanical path touches it, because silently dropping a finding would let the error count fall without the bug being addressed. The nine dangling skill routes need a maintainer to decide whether to write the skill or delete the route. A tool that hid those to get a prettier number would not be worth running.

What lands in DataHub

Nothing is invented. DataHub already catalogs dashboards, ML features and glossary terms — assets that are not tables but do have dependencies. A skill is the same shape.

Agent-layer thingDataHub entity
skilldataset · platform agent-skills
MCP tooldataset · platform agent-tools
## section of a promptschemaField
skill cites a toolupstreamLineage (TRANSFORMED)
a section cites a toolfineGrainedLineage
frontmatterdatasetProperties.customProperties
audit findingglobalTags + tagProperties

Provenance

Every error matches a bug someone else already filed — but "already filed" is not all one thing, and the difference matters if you are weighing how independent the corroboration really is.

IssueFiledByIndependent?
#24/datahub-audit never implemented 2026-04-16jishanahmed-shaikhyes ~4 months open
#100 — MCP tool drift 2026-08-07agentic-build-labno another entrant
#102/datahub-govern missing 2026-08-07agentic-build-labno same

So 6 of the 16 errors are corroborated by a genuinely independent, months-old issue. The other 10 match issues filed three days before this tool existed, by another hackathon participant working from the same corpus. That is still third-party confirmation — nobody involved had seen SkillGraph's output — but it is weaker than "independently discovered," and worth stating plainly given that trustworthy findings are this project's whole argument.

Run it yourself

The audit needs no DataHub, no Docker and no API key. The diagnosis is the load-bearing part, so anyone should be able to reproduce every number on this page in one command.

# clone, install, audit
git clone  && cd skillgraph
git clone --depth 1 https://github.com/datahub-project/datahub-skills corpus/datahub-skills
uv venv --python 3.11 && uv pip install -e .

skillgraph audit              # 16 errors, every one with a file:line
skillgraph repair --no-agy    # 16 -> 10, verified by re-running the checker
skillgraph ingest --gms http://localhost:8080