Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add StamKavid/last-ds-mile --skill causal-vs-predictivegit clone --depth 1 https://github.com/StamKavid/last-ds-mileWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/stamkavid/last-ds-mile/causal-vs-predictive)<a href="https://agentmods.dev/skills/stamkavid/last-ds-mile/causal-vs-predictive"><img src="https://agentmods.dev/badge/skills/stamkavid/last-ds-mile/causal-vs-predictive/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/stamkavid/last-ds-mile/causal-vs-predictive"><img src="https://agentmods.dev/badge/skills/stamkavid/last-ds-mile/causal-vs-predictive.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00085 | $0.01153 |
| Opus 5.5 | $0.00034 | $0.00461 |
| Sonnet 5.5 | $0.00017 | $0.00231 |
| Haiku 4.5 | $0.00009 | $0.00115 |
Grade A, and why
causal-vs-predictive scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 1mo ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 83 lines — stays where its author put it; the contents beside it link to each section on GitHub.
causal-vs-predictive
Overview
A model can be an excellent predictor of an outcome while being silent on what causes it — and the two get conflated constantly, because the same word ("driver," "important feature") is used for both. This skill is the check that catches "X reduces/causes/drives Y, confirmed" language when only an associational comparison actually ran.
When to Use
- Writing up feature importance, SHAP findings, or a bivariate/EDA relationship in
/ds-explainor/ds-explore. - Writing a recommendation in
/ds-reportthat implies intervening on a feature (targeting a segment for a changed offer, pushing customers toward an option, recommending a policy change) — as opposed to ranking or scoring individuals using that feature, which doesn't need this check. - NOT for: the model's predictive validity itself (that's
/ds-evaluate) — a model can be a perfectly valid predictor and still say nothing about causal effects. Using a score to prioritize outreach or flag transactions needs the score to be predictively valid, not causally identified.
Core Process
- For every feature described as a "driver" of the target, ask which of two claims
is actually being made:
- Predictive/ranking claim: "this feature helps distinguish who is more likely to have outcome Y" — supported directly by permutation importance/SHAP/correlation. No further check needed.
- Causal/interventional claim: "changing this feature (for a given individual) would change their outcome" — this is what "reduces," "causes," "drives" (in the active sense), or a recommendation to intervene actually asserts.
- If it's a causal claim, ask what would have to be true for the correlation to reflect a real causal effect rather than a confound. The single most common confound to check explicitly: self-selection — did the subject choose this feature's value themselves (a contract length, a plan tier, a loyalty program, an opt-in)? If so, the feature may be a symptom of the outcome's underlying propensity, not a cause of it.
- If no causal identification strategy is available or stated (a randomized experiment, a natural experiment, an instrument, or at minimum an explicit, defensible argument for why the obvious confound doesn't apply), reword the claim as an association: "X is associated with Y," not "X reduces/causes/ drives Y."
- Effect size is not evidence either way — a large, clean, monotonic correlation is exactly as consistent with a large confound as with a large causal effect. Don't let a dramatic effect size substitute for the identification argument.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 1mo ago First seen · 83 lines · 85 tokens per session scan A 8399aedc0ac0
causal-vs-predictive is a skill published in the GitHub repository StamKavid/last-ds-mile (3 stars, last pushed 7d ago), licensed MIT. It adds 85 tokens to every session and 1,153 once invoked, about $0.0003 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
audit-ml-pipeline
Read-only audit of one persisted skore report: audit/NN .py (jupytext percent), 1:1 with experiments/ and journal/. Do not execute it. Run materialize.py once. Never call skore.evaluate or project.put. TRIGGER when a completed run needs an audit, the user asks to audit, show, or re-audit an experiment, a re-run…
model-ml-pipeline
Deterministic entry point for modeling. On a first landing, write the locked baseline design note and ask for approval. Later landings offer only the choices the workspace justifies (an EDA proposal, Backlog, discussion). A missing modeling lock loads frame-ml-problem and stops. After a design is approved, coordinate…
evaluate-ml-pipeline
Evaluate one learner with skore.evaluate. The splitter and any non-default score are already on the DataOp from build-ml-pipeline. This skill writes the call without splitter=, persists the report, and records the locator. When the locked split is the training table and test table that shipped with the data, fit on…
frame-ml-problem
Record the problem, the deployment setting, the comparison metric, the baseline, and the fold count in the journal before model code. Ask every missing decision in one turn, from frame show. Does not write Python, estimator hyperparameters, or splitter constructors. TRIGGER when the user asks which metric to compare…
export-ml-notebook
Write a jupytext percent # %% Python file out as an .ipynb. dataanalysis/, experiments/, and audit/ are filled with empty outputs. Pass --html when that notebook should also become a viewer on the site. Kernel notebook convert stays for a source that is itself the execution. Trigger on notebook, ipynb, HTML, or…
search-ml-literature
Search scientific and technical sources for a query and, after the user picks and confirms one direction, write one idea file and its Ideas row. Comes after review, beside the backlog. Do not call research-ml-practice. Do not write History, Backlog, or a design note. Do not pick a winner.