The UI is half the job. cre8-data is the other half.
A dashboard is only as good as the query behind it. cre8-data gives the same agent the analyst half of the work — writing SQL that holds up, profiling a dataset before trusting it, and validating a result before it reaches a stakeholder.
Nine skills, query through presentation
Writing and optimizing SQL, including where dialects actually diverge rather than where they are merely spelled differently.
Profiling, quality assessment, and pattern discovery — what the data is, before anything is concluded from it.
Descriptive statistics, trend analysis, outlier detection, and hypothesis testing that names its assumptions.
Choosing the chart the data calls for, and the code to render it — form following the question being asked.
Dashboards with real filters and interaction, built to be handed to someone else rather than screenshotted.
Pre-delivery QA and sanity checks — the pass that catches the join that silently doubled your row count.
Typed contracts generated from an OpenAPI spec so a UI agent can build against the shape of your data without ever seeing the data.
Packages your domain’s quirks — the table that lies, the column that means something else — into a reusable skill.
Getting an agent through the front door of a credentialed source with Clerk machine auth — M2M tokens, API keys, or OAuth, chosen by whose data is being read.
Four MCP servers, configured on install
Query the warehouse directly with your own role and warehouse — schemas, metadata, and live results without copy-paste.
Product analytics alongside warehouse data, so behavioural questions and revenue questions get answered in one place.
Jira context for the analysis — what shipped, when, and what it was supposed to change.
Clerk's own MCP server, for writing machine-auth code correctly against current SDK patterns.
One thing we’re explicit about. Adding the Clerk connector does not authenticate your agent to anything — it serves SDK snippets, and both of its tools are read-only. Reaching a gated source is separate code you write, using Clerk machine auth in the service being called. The auth-gated-data-sources skill leads with that distinction, because believing otherwise costs you an afternoon debugging a 401 that was never going to resolve.
Snowflake, Amplitude, and Atlassian each run their own OAuth. If one of those returns 401, the fix is in that connector’s own login — no amount of Clerk configuration changes it.
Getting an agent through the front door
Which strategy you want is decided by whose data is being read. An M2M token carries the machine’s identity and no user’s, so a user-scoped endpoint can’t scope the query from it.
import { createClerkClient } from '@clerk/backend' const clerk = createClerkClient({ secretKey: process.env.CLERK_SECRET_KEY }) const m2mToken = await clerk.m2m.createToken({ machineSecretKey: process.env.CLERK_MACHINE_SECRET_KEY, secondsUntilExpiration: 300, // defaults to null — never expires minRemainingTtlSeconds: 60, // reuse; opaque tokens only })
await fetch(dataSourceUrl, { headers: { Authorization: `Bearer ${m2mToken.secret}` }, })
const verified = await clerkClient.m2m.verify({ token })
Set an expiry on every agent token — secondsUntilExpiration defaults to null, which means it never expires. Prefer opaque tokens when revocation matters: a revoked JWT stays valid until it expires.
Question to dashboard
A capture of an exploration session: profile, query, validate, then present.
A capture of the dashboard builder producing a filterable surface from query results.
Nine skills, four sources
claude plugin install cre8-data@tmorrow_ai
codex plugin add cre8-data@tmorrow_ai
// Clone the marketplace, install the extension root gemini extensions install ./tmorrow_ai/cre8-data