Subscription usage
Skill nimrodfisher/data-context-layer-studio/examples/subscription-usage
Turn your data team's tribal knowledge into a governed context skill your AI agents (Claude, Cursor) load before answering data questions. Local-first, no telemetry.
npx -y skills add nimrodfisher/data-context-layer-studio --skill subscription-usageAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 13 days oldThe repository was created 13 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Complete context for the Subscription Usage domain at LumenFit (fictional) β trial conversion, active subscribers, engagement minutes, and churn for a consumer fitness subscription. Use when a question is about who is subscribed, whether trials convert, how much members use the app, or who is at risk of cancelling. Example skill β definitions still draft, pending owner sign-off.
SKILL.md
4.9 KB, as published. Nobody here has run it
Subscription Usage β Context Skill (example)
This file is a map, not an encyclopedia. It points at files; it doesn't explain things. If you're tempted to explain a metric here, it belongs in
data_context/metrics.yml. Keep this file under ~90 lines.
Status: π‘ example β definitions draft, pending sign-off Β· see POPULATING.md
| Piece | State |
|---|---|
data_context/verified_queries/ | π’ 3 queries (T1, A1, C1), signed 2026-07-18 by [email protected] |
data_context/metrics.yml | π‘ 4 metrics, all decisions captured β pending flip draft β agreed |
data_context/caveats.md | π’ 6 caveats (C-01βC-06), measured 2026-07-17 |
data_context/semantic_layer/ | π’ 3 tables mapped β _index.md + one .yml per table |
data_context/table_profiling/ | π‘ index + per-table stubs β run scripts/profile_table.sql to fill |
What this domain owns
- Metrics:
trial_conversion_rate,active_subscribers,active_minutes,monthly_churn_rateβ defined indata_context/metrics.yml. - Tables:
FACT_MEMBER_SESSION,FACT_SUBSCRIPTION_CYCLE,DIM_MEMBERβ mapped indata_context/semantic_layer/_index.md. - Boundary: owns subscription status, trial conversion, in-app engagement, and churn. Does not own revenue/MRR (Finance domain), acquisition/ad spend (Growth domain), or content performance (Content domain). For "did engagement drive revenue?", route to Finance.
Non-negotiables
- Check
data_context/verified_queries/before writing any SQL. T1/A1/C1 are signed β swap a date or a plan filter, don't rewrite joins or grain. - Use the metric definition from
metrics.ymlverbatim. Metrics aredraftβ flag answers as provisional until an owner flips them toagreed. Never invent a metric. - Read
caveats.mdbefore any query. Mandatory filter:IS_INTERNAL = FALSEon every table (staff accounts skew every number β C-01). - "Active" is ambiguous β always clarify.
active_subscribers(paying) vsactive_minutes(engaged) are different questions. Ask which one they mean (C-04). - Trial rows are not subscriber rows.
SUBSCRIPTION_STATE = 'trialing'is excluded from subscriber counts by default (C-02). - Never
SELECT *. Always a date filter on the fact tables. AlwaysLIMITwhile exploring. - State the grain of the result (per member, per cycle, per session) and any assumption. One line.
- If it isn't defined here, stop and ask. A correct "X is undefined" beats a confident wrong number.
Routing map
| If the question is about⦠| Read |
|---|---|
| What this product is, who uses it, how it earns | product_context/overview.md |
| "What changed recently", "why did X move" | recent_updates/_index.md, then the month file |
| What a named metric means | data_context/metrics.yml |
| Anything needing SQL β start here | data_context/verified_queries/verified_queries.yml |
| Which table, per-member vs per-cycle grain, how to join | data_context/semantic_layer/_index.md |
| What a column's values actually mean | data_context/table_profiling/<table>.md |
| Known gotchas that change the number | data_context/caveats.md |
| Rules for writing new SQL | guardrails.md |
Load one row. Not the folder.
SQL preflight
1. verified_queries.yml β exact match? run verbatim, stop.
β near match? swap date/plan filter ONLY, load caveats.md, stop.
β no match? β
2. guardrails.md Β· caveats.md Β· semantic_layer/_index.md
Β· the table yamls you need Β· their table_profiling files
β write SQL β propose it back as a verification candidate
Worked examples
"How do we decide which plans to promote?" β product_context/overview.md. No data files.
"Trial-to-paid conversion for the annual plan last quarter?" β verified_queries.yml β T1,
swap the plan filter. Exact-ish match.
"How many active subscribers right now?" β A1. But first confirm: paying subscribers
(A1), or engaged members (that's active_minutes, C-04)?
"Who's about to churn?" β C1 flags at-risk cycles; this domain owns the risk signal, not the revenue impact. For "how much revenue is at risk", name the Finance domain too.
"Did more workouts drive higher revenue?" β Route. This domain owns engagement; Finance
owns revenue. Surface active_minutes and hand off.