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.
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.
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.
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.
| Check | Severity | Findings | What it catches |
|---|
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.
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 thing | DataHub entity |
|---|---|
| skill | dataset · platform agent-skills |
| MCP tool | dataset · platform agent-tools |
## section of a prompt | schemaField |
| skill cites a tool | upstreamLineage (TRANSFORMED) |
| a section cites a tool | fineGrainedLineage |
| frontmatter | datasetProperties.customProperties |
| audit finding | globalTags + tagProperties |
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.
| Issue | Filed | By | Independent? |
|---|---|---|---|
#24 — /datahub-audit never implemented |
2026-04-16 | jishanahmed-shaikh | yes ~4 months open |
| #100 — MCP tool drift | 2026-08-07 | agentic-build-lab | no another entrant |
#102 — /datahub-govern missing |
2026-08-07 | agentic-build-lab | no 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.
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