Use throughout the EXECUTION of any analysis — while running, debugging, modeling, or cleaning data — to decide which decisions you may make on your own and which you must STOP and bring to the user first. Forces a human-in-the-loop checkpoint before any consequential analytical choice: changing the research design, estimand, or identification strategy; deviating from the framed question or pre-analysis plan; dropping/filtering/winsorizing data or changing the sample; choosing between materially different specifications; redefining a metric; or changing any number the user has already seen. Use this whenever you catch yourself about to "just fix it", "upgrade the design", "drop the outliers", or otherwise decide something on the user's behalf — especially mid-debugging, where design changes get smuggled in as bug fixes.
EnglishUse when WRITING or EDITING analysis code, notebooks, or data pipelines in R, Julia, or Python — to keep the code minimal, surgical, and legible rather than over-engineered. Enforces the simplest analysis that answers the question (no speculative pipeline, no premature abstraction, no unrequested config), and surgical edits to existing notebooks/scripts (touch only what the task needs, don't refactor a colleague's working analysis, keep diffs traceable). Use whenever you're about to add a class/framework to a one-off script, refactor a working pipeline you were only asked to tweak, build configurability nobody requested, or rewrite someone's analysis while making an unrelated change — even if the user just says "add a column", "tweak this notebook", or "clean up this script".
EnglishUse when reviewing a data analysis, notebook, script, model, or result — your own before you ship it, a colleague's before it's published, or one handed to you to "check" or "sanity-check" — in R, Julia, or Python. Hunts specifically for the silent-failure classes that pass code review but produce wrong answers: unchecked joins, leakage, fished specifications, unreconciled totals, undefined metrics, and identification gaps. Use when the user says "review this analysis", "can you check my notebook", "does this look right", "sanity-check these numbers", "before I send this", or is about to accept someone else's analytical result. Also use when receiving review feedback on your own analysis, to verify the critique rather than reflexively agreeing.
EnglishUse whenever an analysis makes or implies a CAUSAL claim — "the effect of", "X caused Y", "the policy raised", "the treatment increased", "because we did X, Y changed" — or whenever you're running difference-in-differences, event studies, instrumental variables, regression discontinuity, matching, synthetic control, or panel fixed-effects models. Forces the identification strategy and its assumptions to be stated and tested BEFORE estimating, and treats the design-specific robustness suite (parallel trends, first-stage strength, manipulation tests, balance, placebo, sensitivity) as mandatory, not optional. Use in R, Julia, or Python even when the user just says "regress Y on X", "did it work", or "estimate the impact" — a regression coefficient is not a causal effect until the design earns it.
EnglishData contracts สําหรับกําหนด schema, quality expectations และ SLAs ระหว่าง data producers และ…
EnglishUse when the deliverable is a DESCRIPTION of what's in the data rather than an effect, a counterfactual, or a prediction — stylized facts, raw and indexed trends ("what's the trend in X", "how has Y changed over time", "is X rising", "plot the growth in ..."), summary-statistics / Table-1 tables, distributions, descriptive maps / choropleths (where something is concentrated, how a rate varies across places), and the descriptive-evidence section that motivates an empirical paper. The descriptive layer BENEATH the modeling fork: it is often the deliverable itself, and when it isn't, a stylized fact is what motivates the causal/structural/predictive question (then route to the fork). Forces the comparability choices that silently decide what a fact says — denominator, deflator + base year, per-capita scaling, weighting, unit, window, aggregation level — to be fixed before plotting; makes the signature silent failure LOUD — composition / aggregation artifacts (Simpson's paradox, a shifting denominator or sample, nominal-not-real growth, a mix shift) that make a trend look like a within-group change it isn't; demands a stylized fact be ROBUST to alternative reasonable cuts/definitions/windows or it isn't stylized; and holds the causal firewall — describe in descriptive verbs ("rose alongside", "is higher among"), never causal ones ("raised", "drove", "caused"). Use in R, Julia, or Python whenever someone says "what's the trend", "show me the growth", "summary stats", "Table 1", "describe this data", "stylized facts", "what does the distribution look like", "map where X is concentrated", or "give me some motivating facts" — even when it feels like just a quick plot or map, because a mis-deflated, mis-weighted, composition-driven, or count-not-rate "fact" looks exactly as clean as a real one.
EnglishUse once an analysis brief or pre-analysis plan is APPROVED and it's time to actually run the analysis — build the dataset, estimate the primary specification, run the robustness suite, placebo tests, and alternative designs, then assemble the results. Drives execution through the plan step by step, validating each step (data-contracts) and stopping for the user at consequential decisions (analysis-checkpoints), and fans the INDEPENDENT pieces (robustness specs, competing designs, subsample cuts, placebo tests, multiple outcomes) out to parallel subagents instead of running them one slow serial loop. Use whenever the user says "ok run it", "execute the plan", "now do the analysis", "run all the specs", "do the robustness checks", or you've just gotten sign-off on a plan and need to carry it out.
EnglishUse BEFORE running a confirmatory analysis, an experiment readout, an A/B test, a policy evaluation, or any study whose credibility depends on not having fished for the result — especially causal/econometric work. Locks the hypotheses, estimand, primary specification, sample and exclusions, and the robustness suite while the outcomes are still unseen, so the analysis is confirmatory rather than a specification search. Use whenever the user says "evaluate whether X worked", "test this hypothesis", "did the experiment move the metric", "register this analysis", or is about to estimate an effect they have a stake in — and use it to clearly separate pre-registered confirmatory claims from exploratory findings.
EnglishUse whenever the GOAL is a prediction rather than an effect — predict, score, rank, flag, classify, forecast, or detect-anomalies on units to drive an action ("which pharmacy is likely diverting opioids from its shipments", "which claim to audit", "which account to review", "flag the outliers", "rank by risk", "who's likely to churn"). The third arm of the modeling fork — route here by GOAL, not algorithm: if the deliverable is a prediction it is this skill even when a random forest does the work; if the goal is a causal effect it stays in causal-identification EVEN when ML does the heavy lifting (double/debiased ML, causal forests, ML propensity scores). Forces the prediction workflow — write and sign off the Prediction Spec (decision + cost asymmetry, target/label + regime, prediction-time, features + leakage audit, deployment-matched split, metric-tied-to-decision + baseline, method) BEFORE fitting; PROVE the evaluation is honest (permutation/null leakage probe, deployment-mirroring holdout, calibration, beat-the-baseline) before trusting any metric; and never read feature importance / SHAP as causal. Covers clean-label, proxy/weak-label, unsupervised/anomaly (no label), and ranking/triage regimes, in R, Julia, or Python — a high validation score is not a working model until leakage is ruled out and the split mirrors deployment.
EnglishUse when finishing a piece of analysis and about to commit or push, when a project directory has accreted intermediate or diagnostic files and it's unclear what is a deliverable versus scratch, when setting up or reorganizing a research repository, or when asked to clean up the directory, organize the repo, standardize naming, make a project reproducible for collaborators, or decide what folder structure to use. Also fires throughout the work — when creating a new script, dataset, table, or figure, place and name it per the project's structure instead of dumping it in the root or a flat folder to sort out later, and at phase boundaries (plan agreed, a clean dataset built, a result validated) to commit a local checkpoint so the work is durable. For empirical and structural economics research projects across R, Julia, Python, and Stata, organized around the paper they produce. Triggers on "clean up the repo", "organize the project", "what should the folder structure be", "before I push this", "standardize the naming", "make this reproducible for a collaborator", "commit a checkpoint", or "I haven't committed in a while".
EnglishUse BEFORE starting any data analysis, metric, model, or causal study — the moment someone asks "what's the trend", "is X driving Y", "how many users", "did the policy work", "build me a dashboard metric", or hands you a dataset to "look into". Pins down the estimand/metric definition, population, unit of observation, and the actual decision the number informs before a single line of code is written. Use this even when the request feels clear, because vague metric definitions ("active users", "the effect of X") are the root cause of analyses that answer the wrong question precisely.
EnglishUse BEFORE reporting a number, presenting a finding, sending an analysis to a stakeholder, putting a figure in a deck or paper, or claiming an analysis is "done" or "the result is X". Reconciles totals to source, reproduces the result from a clean session with a fixed seed, runs robustness and sensitivity checks, and confirms every figure and table matches the numbers in the prose — evidence before assertion. Use whenever the user says "the answer is", "let's report this", "put this in the slide", "I'm done with the analysis", "send this to", or is about to treat a computed result as final — in R, Julia, or Python.
EnglishUse whenever an analysis estimates the PRIMITIVES of an economic model rather than a reduced-form relationship — preferences/utility, costs, information/consideration, search, or conduct — or whenever the question requires a COUNTERFACTUAL the data doesn't contain (a merger, a new product, a tax, a removed friction, consumer welfare/surplus, equilibrium re-pricing). Fires for structural demand estimation (logit, random-coefficients/BLP), supply-side markup-and-cost recovery, dynamic discrete choice (Rust/CCP), entry and dynamic games, auctions, limited consideration sets, and search models — estimated by GMM/method of (simulated) moments, NLS, or maximum (simulated) likelihood. Forces the structural workflow: justify going structural over reduced form, name what identifies each parameter, PROVE the algorithm recovers known parameters via Monte Carlo before trusting real data, derive analytical gradients group-by-group when the estimator admits them, re-solve equilibrium for counterfactuals with one scenario per mechanism. Use in R, Julia, or Python even when the user just says "estimate a demand model", "simulate the merger", "recover marginal costs", "what's the welfare effect", or "fit a structural model" — a converged optimizer is not an identified model, and a clean estimation run says nothing about whether the counterfactuals are right.
EnglishUse when starting any data analysis, statistics, econometrics, or causal-inference task in R, Julia, or Python — establishes the Causal Powers discipline and routes to the right skill (question-framing, pre-analysis-plan, data-contracts, analysis-craft, analysis-checkpoints, executing-analysis-plans, wrong-number-debugging, result-verification, causal-identification, structural-estimation, analysis-review). Invoke this whenever someone asks you to analyze data, compute a metric, clean or merge datasets, fit a model, estimate an effect or a structural model, simulate a counterfactual, or check a number — even if they only say "analyze this", "what's the trend", "did it work", or "estimate the model" — so the right discipline skill fires before you touch the data.
EnglishUse the moment a computed result looks wrong, surprising, suspicious, or "off" — a total that doesn't reconcile, revenue that tripled after a join, a mean that moved, a coefficient with the wrong sign, a count that's too high or too low, a metric that disagrees with another team's. Bisects the data pipeline to find the exact step where the number went bad, tracing provenance backward instead of guessing-and-patching. Use whenever the user says "this number looks wrong", "why is this so high", "these don't match", "the totals are off", "that can't be right", or when a data-contracts reconciliation fails — in R, Julia, or Python.
EnglishIncludes Analysis Checkpoints, Analysis Craft, Analysis Review, and other workflows.
Supported by the Atlas install prompt. Skill-specific requirements vary.
Pack stats
What’s included
Analysis Checkpoints
Use throughout the EXECUTION of any analysis — while running, debugging, modeling, or cleaning data — to decide which decisions you may make on your own and which you must STOP and bring to the user first. Forces a human-in-the-loop checkpoint before any consequential analytical choice: changing the research design, estimand, or identification strategy; deviating from the framed question or pre-analysis plan; dropping/filtering/winsorizing data or changing the sample; choosing between materially different specifications; redefining a metric; or changing any number the user has already seen. Use this whenever you catch yourself about to "just fix it", "upgrade the design", "drop the outliers", or otherwise decide something on the user's behalf — especially mid-debugging, where design changes get smuggled in as bug fixes.
Analysis Craft
Use when WRITING or EDITING analysis code, notebooks, or data pipelines in R, Julia, or Python — to keep the code minimal, surgical, and legible rather than over-engineered. Enforces the simplest analysis that answers the question (no speculative pipeline, no premature abstraction, no unrequested config), and surgical edits to existing notebooks/scripts (touch only what the task needs, don't refactor a colleague's working analysis, keep diffs traceable). Use whenever you're about to add a class/framework to a one-off script, refactor a working pipeline you were only asked to tweak, build configurability nobody requested, or rewrite someone's analysis while making an unrelated change — even if the user just says "add a column", "tweak this notebook", or "clean up this script".
Analysis Review
Use when reviewing a data analysis, notebook, script, model, or result — your own before you ship it, a colleague's before it's published, or one handed to you to "check" or "sanity-check" — in R, Julia, or Python. Hunts specifically for the silent-failure classes that pass code review but produce wrong answers: unchecked joins, leakage, fished specifications, unreconciled totals, undefined metrics, and identification gaps. Use when the user says "review this analysis", "can you check my notebook", "does this look right", "sanity-check these numbers", "before I send this", or is about to accept someone else's analytical result. Also use when receiving review feedback on your own analysis, to verify the critique rather than reflexively agreeing.
Causal Identification
Use whenever an analysis makes or implies a CAUSAL claim — "the effect of", "X caused Y", "the policy raised", "the treatment increased", "because we did X, Y changed" — or whenever you're running difference-in-differences, event studies, instrumental variables, regression discontinuity, matching, synthetic control, or panel fixed-effects models. Forces the identification strategy and its assumptions to be stated and tested BEFORE estimating, and treats the design-specific robustness suite (parallel trends, first-stage strength, manipulation tests, balance, placebo, sensitivity) as mandatory, not optional. Use in R, Julia, or Python even when the user just says "regress Y on X", "did it work", or "estimate the impact" — a regression coefficient is not a causal effect until the design earns it.
Data Contracts
Data contracts สําหรับกําหนด schema, quality expectations และ SLAs ระหว่าง data producers และ consumers
Descriptive Evidence
Use when the deliverable is a DESCRIPTION of what's in the data rather than an effect, a counterfactual, or a prediction — stylized facts, raw and indexed trends ("what's the trend in X", "how has Y changed over time", "is X rising", "plot the growth in ..."), summary-statistics / Table-1 tables, distributions, descriptive maps / choropleths (where something is concentrated, how a rate varies across places), and the descriptive-evidence section that motivates an empirical paper. The descriptive layer BENEATH the modeling fork: it is often the deliverable itself, and when it isn't, a stylized fact is what motivates the causal/structural/predictive question (then route to the fork). Forces the comparability choices that silently decide what a fact says — denominator, deflator + base year, per-capita scaling, weighting, unit, window, aggregation level — to be fixed before plotting; makes the signature silent failure LOUD — composition / aggregation artifacts (Simpson's paradox, a shifting denominator or sample, nominal-not-real growth, a mix shift) that make a trend look like a within-group change it isn't; demands a stylized fact be ROBUST to alternative reasonable cuts/definitions/windows or it isn't stylized; and holds the causal firewall — describe in descriptive verbs ("rose alongside", "is higher among"), never causal ones ("raised", "drove", "caused"). Use in R, Julia, or Python whenever someone says "what's the trend", "show me the growth", "summary stats", "Table 1", "describe this data", "stylized facts", "what does the distribution look like", "map where X is concentrated", or "give me some motivating facts" — even when it feels like just a quick plot or map, because a mis-deflated, mis-weighted, composition-driven, or count-not-rate "fact" looks exactly as clean as a real one.
Executing Analysis Plans
Use once an analysis brief or pre-analysis plan is APPROVED and it's time to actually run the analysis — build the dataset, estimate the primary specification, run the robustness suite, placebo tests, and alternative designs, then assemble the results. Drives execution through the plan step by step, validating each step (data-contracts) and stopping for the user at consequential decisions (analysis-checkpoints), and fans the INDEPENDENT pieces (robustness specs, competing designs, subsample cuts, placebo tests, multiple outcomes) out to parallel subagents instead of running them one slow serial loop. Use whenever the user says "ok run it", "execute the plan", "now do the analysis", "run all the specs", "do the robustness checks", or you've just gotten sign-off on a plan and need to carry it out.
Pre Analysis Plan
Use BEFORE running a confirmatory analysis, an experiment readout, an A/B test, a policy evaluation, or any study whose credibility depends on not having fished for the result — especially causal/econometric work. Locks the hypotheses, estimand, primary specification, sample and exclusions, and the robustness suite while the outcomes are still unseen, so the analysis is confirmatory rather than a specification search. Use whenever the user says "evaluate whether X worked", "test this hypothesis", "did the experiment move the metric", "register this analysis", or is about to estimate an effect they have a stake in — and use it to clearly separate pre-registered confirmatory claims from exploratory findings.
Predictive Modeling
Use whenever the GOAL is a prediction rather than an effect — predict, score, rank, flag, classify, forecast, or detect-anomalies on units to drive an action ("which pharmacy is likely diverting opioids from its shipments", "which claim to audit", "which account to review", "flag the outliers", "rank by risk", "who's likely to churn"). The third arm of the modeling fork — route here by GOAL, not algorithm: if the deliverable is a prediction it is this skill even when a random forest does the work; if the goal is a causal effect it stays in causal-identification EVEN when ML does the heavy lifting (double/debiased ML, causal forests, ML propensity scores). Forces the prediction workflow — write and sign off the Prediction Spec (decision + cost asymmetry, target/label + regime, prediction-time, features + leakage audit, deployment-matched split, metric-tied-to-decision + baseline, method) BEFORE fitting; PROVE the evaluation is honest (permutation/null leakage probe, deployment-mirroring holdout, calibration, beat-the-baseline) before trusting any metric; and never read feature importance / SHAP as causal. Covers clean-label, proxy/weak-label, unsupervised/anomaly (no label), and ranking/triage regimes, in R, Julia, or Python — a high validation score is not a working model until leakage is ruled out and the split mirrors deployment.
Project Organization
Use when finishing a piece of analysis and about to commit or push, when a project directory has accreted intermediate or diagnostic files and it's unclear what is a deliverable versus scratch, when setting up or reorganizing a research repository, or when asked to clean up the directory, organize the repo, standardize naming, make a project reproducible for collaborators, or decide what folder structure to use. Also fires throughout the work — when creating a new script, dataset, table, or figure, place and name it per the project's structure instead of dumping it in the root or a flat folder to sort out later, and at phase boundaries (plan agreed, a clean dataset built, a result validated) to commit a local checkpoint so the work is durable. For empirical and structural economics research projects across R, Julia, Python, and Stata, organized around the paper they produce. Triggers on "clean up the repo", "organize the project", "what should the folder structure be", "before I push this", "standardize the naming", "make this reproducible for a collaborator", "commit a checkpoint", or "I haven't committed in a while".
Question Framing
Use BEFORE starting any data analysis, metric, model, or causal study — the moment someone asks "what's the trend", "is X driving Y", "how many users", "did the policy work", "build me a dashboard metric", or hands you a dataset to "look into". Pins down the estimand/metric definition, population, unit of observation, and the actual decision the number informs before a single line of code is written. Use this even when the request feels clear, because vague metric definitions ("active users", "the effect of X") are the root cause of analyses that answer the wrong question precisely.
Result Verification
Use BEFORE reporting a number, presenting a finding, sending an analysis to a stakeholder, putting a figure in a deck or paper, or claiming an analysis is "done" or "the result is X". Reconciles totals to source, reproduces the result from a clean session with a fixed seed, runs robustness and sensitivity checks, and confirms every figure and table matches the numbers in the prose — evidence before assertion. Use whenever the user says "the answer is", "let's report this", "put this in the slide", "I'm done with the analysis", "send this to", or is about to treat a computed result as final — in R, Julia, or Python.
Structural Estimation
Use whenever an analysis estimates the PRIMITIVES of an economic model rather than a reduced-form relationship — preferences/utility, costs, information/consideration, search, or conduct — or whenever the question requires a COUNTERFACTUAL the data doesn't contain (a merger, a new product, a tax, a removed friction, consumer welfare/surplus, equilibrium re-pricing). Fires for structural demand estimation (logit, random-coefficients/BLP), supply-side markup-and-cost recovery, dynamic discrete choice (Rust/CCP), entry and dynamic games, auctions, limited consideration sets, and search models — estimated by GMM/method of (simulated) moments, NLS, or maximum (simulated) likelihood. Forces the structural workflow: justify going structural over reduced form, name what identifies each parameter, PROVE the algorithm recovers known parameters via Monte Carlo before trusting real data, derive analytical gradients group-by-group when the estimator admits them, re-solve equilibrium for counterfactuals with one scenario per mechanism. Use in R, Julia, or Python even when the user just says "estimate a demand model", "simulate the merger", "recover marginal costs", "what's the welfare effect", or "fit a structural model" — a converged optimizer is not an identified model, and a clean estimation run says nothing about whether the counterfactuals are right.
Using Causal Powers
Use when starting any data analysis, statistics, econometrics, or causal-inference task in R, Julia, or Python — establishes the Causal Powers discipline and routes to the right skill (question-framing, pre-analysis-plan, data-contracts, analysis-craft, analysis-checkpoints, executing-analysis-plans, wrong-number-debugging, result-verification, causal-identification, structural-estimation, analysis-review). Invoke this whenever someone asks you to analyze data, compute a metric, clean or merge datasets, fit a model, estimate an effect or a structural model, simulate a counterfactual, or check a number — even if they only say "analyze this", "what's the trend", "did it work", or "estimate the model" — so the right discipline skill fires before you touch the data.
Wrong Number Debugging
Use the moment a computed result looks wrong, surprising, suspicious, or "off" — a total that doesn't reconcile, revenue that tripled after a join, a mean that moved, a coefficient with the wrong sign, a count that's too high or too low, a metric that disagrees with another team's. Bisects the data pipeline to find the exact step where the number went bad, tracing provenance backward instead of guessing-and-patching. Use whenever the user says "this number looks wrong", "why is this so high", "these don't match", "the totals are off", "that can't be right", or when a data-contracts reconciliation fails — in R, Julia, or Python.
Quick start
- Choose your skills. Select individual skills above, or choose the entire pack.
- Copy the install prompt. Use Copy install prompt above the list.
- Send it to your agent. Paste into your coding agent’s chat. Your agent reviews the source and guides the setup.
Try it with your agent
After installation, start with a request like:
Use the Analysis Checkpoints skill to help with my task.
Ask me for the context you need before getting started.Requirements & license
- A coding agent that can access your project files and install skills.
- Your agent checks each skill’s instructions, dependencies, and permissions during setup.
- Reported license for the skills shown: MIT. The author’s terms apply.