an agent skill · the analytical & governed data plane

/data

Ask an agent to "track this event" and it ships an ad-hoc payload — no naming grammar, no schema, no test, a warehouse table nobody trusts and nobody can safely change. data builds the analytical and governed data plane — event contracts and tracking plans, ingestion and movement, transformation and modeling, the metrics/semantic layer and BI, data quality and testing, lineage and observability, governance/PII/retention, experiment measurement, and platform/cost — re-verifying every volatile tool, price, and license fact against the live source, and treating trust as a gate a dataset must pass, not a dashboard it decorates. Make product and business data trustworthy, governed, discoverable, usable.

# natural language — no flags, no fixed pipeline /data write an ODCS contract for the orders event, add a DQ suite with the PK floor, and diff the blast radius before merge

runs onClaude CodeCodexCursorAntigravityopencodeGrok BuildHermes

The router is the skill. There is no fixed pipeline to run start-to-finish — each job stands alone and enters where your request is. The animation traces one path; the sections below map the whole surface it routes across.

Own the analytical plane, not the served substrate

data treats data as a product — distinct from backend (data as application state) and ai (data as model context). It owns the event contract and tracking plan, data contracts and schema evolution, ingestion and movement, transformation and modeling, the metrics/semantic layer and BI, data quality and testing, lineage and observability, governance/PII/retention, experiment measurement validity, and platform/cost choices — the analytical and governed data plane, peer of frontend and backend. It references the substrates and outcomes that plane serves rather than re-deriving or overriding them: backend serves the OLTP store, ai decides retrieval behavior, product names the outcomes, growth designs the experiment.

data owns

the analytical/governed plane & the decision record behind it

  • event contract + tracking plan — one naming grammar, entity-first modeling, consent gates collection
  • data contracts + schema evolution — ODCS shape, 7 compatibility modes, write-audit-publish
  • ingestion, transformation + modeling — sync-strategy, CDC/outbox, narrow-the-DAG/widen-tables
  • metrics/semantic layer + BI — one authoritative definition per metric, decision-first serving
  • quality & testing ⭐ — the convergent DQ taxonomy, PK floor, PR-time blast-radius diff
  • lineage, governance + experiment validity — OpenLineage, platform-layer masking, SRM-before-trust

references / hands off to

consume or recommend; own none

  • backend — OLTP schemas, app queries, the DB/vector store *as served substrate*
  • ai — retrieval *behavior* (chunk/rerank tuning), prompts, model evals, agent construction
  • frontend / backend — emit the events/writes; data defines and validates the contract
  • product — which outcomes/metrics matter; data makes them measurable and trustworthy
  • growth — experiment design and interpretation; data guarantees measurement validity
  • architecture · quality · operate · automation — boundaries/NFR/threat model; independent gate; deploy/monitor; deterministic workflows

Implement inside the decision. When compatible upstream artifacts are supplied — a solution-architecture doc, an NFR budget, a threat model, a handoff.yaml — data builds against them. When they don't exist (a standalone run), it says so explicitly rather than inventing a data-classification decision or threat model to fill the gap.

The faceted router

SKILL.md is a router, not a script. Every request selects the smallest sufficient route: one primary job — the ten below — combined with at most one base surface that reshapes how the job applies to the data-plane shape, plus the additive regulated overlay when GDPR/CCPA/HIPAA/SOC2 applies. Read the selected references completely; load two or three at most, never the whole pack. Ten jobs and five surfaces compose across data-plane shapes without ever reading all sixteen references at once.

facetoptionsrule
① Primary job event-tracking · data-contracts · ingestion/movement · transformation/modeling · metrics/BI · quality-testing ⭐ · lineage/observability · governance/PII · experiment-measurement · platform/cost Exactly one. Pick the single job the request needs; the default entry is the surface's spine (e.g. the tracking plan for product analytics).
② Base surface product-analytics (default / start-simplest) · warehouse-platform · operational-activation · ai-data-plane At most one. The data-plane shape reshapes how every job applies — it points to the job references, it doesn't redefine them.
③ Regulated overlay surface-regulated — GDPR/CCPA/HIPAA/SOC2 on top of any base surface Additive. Stacks on top of the base surface, never replaces it. A regulated warehouse platform is warehouse-platform + regulated.
Retrieval-first before any code — or any tool name. The warehouse/ orchestrator/price/license layer churns quarterly; memorized numbers and license labels are stale. Before recommending a tool or quoting a price, version, or spec revision, re-verify it against the live source — the pricing page, npm view/PyPI, the tool's own changelog — and read the actual LICENSE file, never a repo's API license field (this stack is a minefield of stale-root-LICENSE traps and open-core splits, e.g. soda-core's ELv2).

The ten primary jobs

Each job is one reference, read fully only when its route is selected — grounded in named canon, producing a running pipeline/contract plus the decision record behind it. This is the whole surface, not a headline slice.

I need to…ReadProduces
Design/repair event tracking — naming grammar, tracking plan, instrumentation QA, consent-aware collection event-taxonomy-and-tracking.md One enforced naming grammar, entity-first modeling, validate-at-ingestion/quarantine, consent gates collection ("denied" is tested)
Write/enforce a data contract; evolve a schema safely across producers and consumers data-contracts-and-schema-evolution.md ODCS contract shape, the 7 compatibility modes + who-upgrades-first, contract-as-executable-test, write-audit-publish under the brand
Move data — ELT/ETL, sync strategy, CDC, streaming decision, reverse-ETL, failed-sync diagnosis ingestion-and-movement.md Sync-type decision table (by table shape), at-least-once/resumability semantics, CDC + outbox, symptom→cause→fix with destructive-action gating
Transform and model — staging→marts layering, materialization, SQL style, modeling choice transformation-and-modeling.md Narrow-the-DAG/widen-the-tables, lint-rule thresholds (1:1 staging, ≤7 joins, chained views), materialization ladder, Kimball/OBT/Vault trade-offs
Define metrics once — semantic layer, BI serving, dashboards-as-code vs GUI, NL-to-data metrics-semantics-and-bi.md Metric-type taxonomy, one-authoritative-definition anti-drift, code-first vs GUI-first BI line, 4-tier NL fallback, decision-first serving
Prove the data is right — checks, anomaly detection, PR-time diff, test placement quality-and-testing.md The convergent DQ taxonomy (9 core buckets + PR-diff + PII), known- vs unknown-unknowns layering, where-to-run-checks, PK test floor, blast-radius diff before merge
Trace lineage and observe pipelines — impact analysis, incident response for data lineage-and-observability.md OpenLineage model + facet gotchas, five pillars/data downtime, blast-radius workflow, catalog choice
Govern the data — PII classification/masking, retention/erasure, catalogs, mesh-vs-central governance-pii-and-retention.md Platform-layer masking (app-layer is bypassed), Art.17-with-exceptions erasure, tombstone + scheduled hard-delete, federated-governance caveat
Make experiment measurement trustworthy — assignment, SRM, variance reduction, peeking experiment-measurement-foundations.md SRM-before-trust, deterministic salted assignment + namespaces, CUPED + non-applicability, peek-safe sequential testing
Pick the platform — warehouse/lakehouse/engine choice, table formats, orchestrator, cost, licenses platform-and-cost.md Small-data-first (COST rule), workload-shape-before-pricing, Iceberg-REST interop, task-vs-asset-vs-flow orchestrators, the licensing map

Full router table & invariants: SKILL.md.

Five surface overlays

One base surface, at most, reshapes every job for the data-plane shape — the same quality job is bounded differently on a single product's event stream than on a central platform serving many teams. The regulated overlay is additive — it stacks on top of whichever base you picked, never replaces it — and carries a distinct teal identity throughout this page.

Product analytics surface-product-analytics.md

A product emitting its own usage events (the default / start-simplest): tracking plan is the spine, identity resolution across anonymous/known users, small-data default engine, self-serve SQL vs BI split.

reshapestracking-plan-first · identity resolution · self-serve default

Warehouse platform surface-warehouse-platform.md

A central analytical platform serving an org: ELT + staging→marts spine, a semantic layer with real BI serving, org-scale trust gates, mesh-vs-central and cost governance as first-class decisions.

reshapesELT spine · semantic layer · mesh-vs-central

Operational activation surface-operational-activation.md

Warehouse data flowing back into operations: CDC/outbox + reverse-ETL, freshness SLAs, idempotency under at-least-once delivery, diagnosis with destructive-action gating on any resync/backfill.

reshapesCDC/reverse-ETL · freshness SLA · idempotency

AI data plane surface-ai-data-plane.md

The data substrate of an AI product: the RAG corpus modeled as governed ETL, LLM-trace/token warehousing, point-in-time correctness for served context, eval datasets treated as governed data.

reshapesRAG-as-ETL · point-in-time correctness · trace warehousing

Regulated additive ⭐

GDPR/CCPA/HIPAA/SOC2 applies. Stacks on, does not replace. Verified consent gating, mandatory platform-layer masking, Art.17-with-exceptions erasure operations, retention schedules, audit trails — on top of any base surface.

reshapesconsent gating · platform-layer masking · erasure ops

The quality-and-testing flagship

Most of the field treats data quality as a dashboard someone checks after the fact; here trust is a gate. Five independent tools (Great Expectations, Soda, Elementary, Deequ, OpenMetadata) plus two lineage/catalog systems converged on nearly the same check buckets without coordinating — that convergence is the evidence the taxonomy below is complete enough to build a check plan from, not one vendor's opinion.

Trust is a gate, not a dashboard — the convergent DQ taxonomy, known + unknown unknowns, audited, never auto-remediated.

The convergent taxonomy — 9 core buckets + PR-diff + PII

schema:      structural drift       # col add/remove/type
freshness:   staleness lag          # cheapest at source/staging
volume:      row-count anomaly
completeness: null-rate
uniqueness:  duplicates             # PK floor: unique + not_null
validity:    domain / set
statistical: distributional drift   # unknown unknowns
referential: cross-table / pair
custom:      business-rule SQL
+ PR-diff:   blast-radius review    # before merge, never after
+ PII:       recognizer → anonymizer # governance-pii-and-retention.md

Where to run — and what each layer catches

  • source / stagingschema, volume, freshness — cheapest; catch upstream breakage before it propagates
  • martsuniqueness, referential, business-rule — grain and joins are finalized there
  • all layers, over timedistributional/anomaly — needs a metrics-history store to establish a baseline

Known unknowns vs unknown unknowns — you need both

  • rule testscatch failure modes you can name in advance — cheap, and catch more than credited
  • anomaly detectioncatches "never anomalous before, suddenly is" — the class rules can't name
The sharp distinction: data builds DQ checks into the pipeline — the completion gate that says a dataset is trustworthy. quality verifies independently — the adversarial release gate; it re-derives its own pass rather than re-running data's suite and calling that independent. Quality concerns are first-class:
PK floor on every modelvalidate-at-ingestion / quarantinePR-time blast-radius difftool license flagsaudit, never auto-remediate

What makes this different

Two stances set data apart from the tool-comparison guides and single-topic write-ups: it subtracts the buzzword where the field only renames the same primitive, and it treats the churning warehouse/tool/license layer as a first-class, date-stamped concern rather than frozen trivia.

Subtract the buzzword, narrow the DAG

The field debates abstractions more than it implements them. Name the durable primitive under each brand and recommend that, not the label.

  • mesh → ownership — domain ownership with federated enforcement, not a new platform to buy
  • contracts → write-audit-publish — the durable primitive under the "data contracts" brand
  • modern data stack → a database + SQL — name what's actually being bought before adding a tool
  • narrow the DAG, widen the tables — staging is 1:1 no joins; marts are wide; climb the materialization ladder only on measured pain
  • small-data-first (the COST rule) — a distributed system must beat one laptop thread before its complexity is justified

Anti-staleness & the license spread

The warehouse/tool/price layer churns quarterly — read the LICENSE file, never a repo's API license field. Every volatile fact is date-stamped and re-verified; volatile_facts travels in the handoff so a frozen value can't leak downstream.

  • re-verify before quoting — pricing page · npm view/PyPI · the tool's own changelog
  • read the LICENSE file — a repo's API license field is not proof of what you can actually do with it
Apache-2.0
truly open — Great Expectations, Elementary, dbt + dbt_utils, Recce
soda-core
Elastic License 2.0 — non-OSI, source-available; no hosted-service, no license-key circumvention
dbt-expectations
unmaintained — flag the staleness risk; prefer native dbt tests + dbt_utils + Elementary

The universal invariants

These rules govern every route, whichever references it loads — the behavioral spine, condensed.

What a pass produces

data's deliverable is a working data asset plus the decision record behind it, closed on a trust gate that was run, not asserted. A full pass emits up to four kinds of artifact — the working asset, its contract + tests, its lineage/telemetry, and the fillable checklists in assets/ — plus the machine-readable handoff.yaml companion when downstream work is expected. Each records the decision and options, the trade-off accepted (including what was removed), and — for any version/price/license fact — the date it was verified and how to re-verify it.

phase 1inspectrequest, codebase, upstream artifacts
phase 2routeone job · ≤1 base · +regulated
phase 3re-verifyvolatile tool/price/license facts, live
phase 4produceconcrete pick + what-NOT, subtract
phase 5provethe trust gate appropriate to the artifact

The working data asset

dbt/SQLMesh project · tracking plan · pipeline config

The pipeline, contract, or plan itself — the implementation, not a plan — wired to the chosen surface.

Contract + DQ suite

assets/data-contract-starter.odcs.yaml · dq-check-matrix.md

The ODCS contract and the DQ suite — PK floor + known/unknown-unknowns layered, run, not asserted.

Lineage + telemetry

OpenLineage facets · catalog config · freshness/cost hooks

The lineage graph and the freshness/cost telemetry hooks — instrumented, ready for operate to monitor.

Decision checklists

tracking-plan-starter · schema-compatibility-cheatsheet · warehouse-cost-checklist · pii-audit-checklist

Fillable checklists for the tracking plan, schema compatibility, platform cost, and PII audit — the record behind the call.

handoff.yaml + volatile_facts

assets/handoff.yaml · references/handoff.md

The routing index into the asset, its contract, and its telemetry — carrying volatile_facts so frozen tool/price/license numbers can't leak.

The handoff seams

data consumes architecture's artifacts upstream — data-classification decisions, NFR budgets, build-vs-buy on ingestion/warehouse — and, when downstream work is expected, emits a compact handoff.yaml beside the working asset: a routing index into it, never a copy. The clearest seam to name explicitly is the three-way retrieval seam shared with ai and backend around a RAG system.

The RAG three-way seam

Retrieval behavior (chunking, fusion, rerank, retrieval eval) is ai's. The vector store as served infrastructure (deployment, connection pooling, backup, uptime) is backend/operate's. The vector store and LLM traces as governed datasets — the ingestion pipeline, source-of-truth lineage, PII classification, access control on what gets indexed, and the trace/token warehouse — is data's.

ai — behavior

Chunking, fusion, rerank, decomposition, retrieval eval. Consumes data's vector-store schema and freshness assumptions rather than re-deriving them.

backend — served infra

Deployment, connection pooling, backup, uptime of the vector store. The infrastructure data's pipeline writes into.

data — governed dataset

Ingestion as governed ETL, source-of-truth lineage, PII classification, access control on what's indexed, the trace/token warehouse.

Name the layer before absorbing the complaint: "the RAG app is slow" or "answers are stale" can be any of the three. State which layer a given question actually belongs to before doing any work at this seam.

The general handoff

data builds

skill: data
status: complete
objective: ""   # only required field
artifacts_created: [tracking-plan,
  data-contract, pipeline-config, dq-suite]
decisions: · assumptions: · constraints:
volatile_facts: [tool, price, license +
  date + re-verify pointer]
recommended_next: frontend · backend
  · ai · quality · operate · growth

frontend · backend

The tracking plan / event contract to emit against, and the operational-store read contract (CDC schema, freshness SLA) their own schema changes must not silently break.

ai

The vector-store/dataset schema and freshness cadence a retrieval design can assume is current — and how it's kept that way.

quality · operate · growth

The DQ suite as a starting point for independent verification, the freshness/cost telemetry hooks to monitor, and the SRM/assignment guarantees an experiment can trust.

Six distinct consumers, not one. Each is a consumer, not a co-author — data ships the contract, pipeline, and DQ suite; it does not write UI instrumentation, own the operational store, design retrieval behavior, run the independent compliance audit, own the monitoring dashboard, or design the experiment. Only objective is required; every other field may be empty. Never silently invoke a sibling skill; name it in recommended_next.

Start here

Install once. It's a plain SKILL.md router — no flags, no config, no scripts — so it activates on natural-language phrasing ("write a data contract," "add DQ tests with a PK floor," "pick a sync strategy," "govern this PII field," "check SRM before trusting this experiment") rather than a fixed command.

# skills.sh ecosystem (installs globally to supported clients) npx skills add gabros20/data-skill -g -y # clone + installer (per-host targets) git clone https://github.com/gabros20/data-skill && cd data-skill ./install.sh codex # or: claude | cursor | antigravity | opencode | grok | hermes | agents | all # use — natural language, any host /data design a tracking plan for the checkout flow, with identity resolution across anon/known users /data add a DQ suite to the orders mart — PK floor, freshness check, PR-time blast-radius diff /data classify PII in the users table and mask it at the platform layer, not the app # → + surface-regulated

The same install runs on any Agent Skills host. Codex installs to ${CODEX_HOME:-$HOME/.codex}/skills and triggers with $data; agents remains a separate cross-agent installation target.

install targets by host
hostinstall targetcommand
Claude Code~/.claude/skills./install.sh claude
Codex${CODEX_HOME:-$HOME/.codex}/skills./install.sh codex
Cross-agent path~/.agents/skills./install.sh agents
Cursor CLI~/.cursor/skills./install.sh cursor
Antigravity (IDE + agy)~/.gemini/…/skills./install.sh antigravity
opencode~/.config/opencode/skills./install.sh opencode
Grok Build~/.grok/skills./install.sh grok
Hermes~/.hermes/skills./install.sh hermes

Prefer npx skills add gabros20/data-skill -g -y when you have Node — it maps supported clients itself.

what's in the repo
skills/data/ the skill: SKILL.md (router) + 15 references/ + assets/ docs/ installation · usage · recipes site/ this guide — deploys to data-skill.vercel.app install.sh installer (claude | codex | cursor | antigravity | opencode | grok | hermes | agents | all) README.md · CHANGELOG.md · LICENSE

More docs: docs/installation.md · docs/usage.md · docs/recipes.md.