Install any skill in seconds. Free to start, no credit card required.
Get Started Free →You MUST use this before any data analysis or investigation - before exploring a dataset, loading or profiling data, running a model, computing a statistic, or testing an idea, and before any outcome data is touched
.claude/skills/k-dense-ai-framing-research-questions/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 208% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 32% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 55% | 0% |
| case-20 | ✗→✓ | ▲ Improved | 78% | 0% |
| case-18 | ✗→✓ | ▲ Improved | 373% | 0% |
Help turn a fuzzy research interest into a precise, falsifiable question with explicit hypotheses, the data required, and what would count as an answer — through natural collaborative dialogue.
Start by understanding the context (the data on hand, the domain, what your human partner already knows), then ask questions one at a time to sharpen the interest. Once you understand what is being investigated, present the framing and get approval.
<HARD-GATE> Do NOT load the dataset, compute any statistic, fit any model, plot any outcome, or invoke any execution skill until you have presented a research framing and your human partner has approved it. This applies to EVERY investigation regardless of perceived simplicity.
Why this gate is strict for science specifically: Looking at outcomes before the question and predictions are fixed contaminates a confirmatory analysis. Once you have seen the data, you cannot un-see it, and every later choice (which test, which subgroup, which cutoff) becomes suspect. Framing first is what keeps a result confirmatory rather than a story told after the fact.
What this gate does NOT forbid: measuring whether the computation can run — assembly size, peak memory, wall clock, iteration counts, convergence behavior. Those are provenance and structure, not outcomes. Resource measurement never contaminates a confirmatory analysis, because the outcome variable is untouched. </HARD-GATE>
If it is not yet known whether the computation can run at all — an unbenchmarked solver, an unproven pipeline, a configuration whose memory or wall-clock ceiling is estimated rather than measured — say so during framing and offer feasibility mode:
> "Whether this can run at scale is unknown, and the design depends on the answer. I can establish feasibility first — a minimal runner, three scaling probes, one exploratory campaign — and defer the survey, plan, and pre-registration until we know what is runnable. Nothing produced that way can support a confirmatory claim. Or we proceed with the standard sequence. Which?"
Only your human partner can choose it. If they do, use science-superpowers:establishing-feasibility-first after a short framing. If they decline or say nothing, continue the standard sequence below.
Separate the two questions in the framing either way: the feasibility question (a measurable threshold) and the scientific question it gates. Tangling them produces predictions written over runs that may not be possible.
Every investigation goes through this process. A single t-test, a quick correlation, a "just look at the trend" — all of them. "Simple" questions are where unexamined assumptions and undeclared researcher degrees of freedom do the most damage. The framing can be short (a few sentences for a truly simple question), but you MUST present it and get approval.
You MUST create a task for each of these items and complete them in order:
docs/science-superpowers/questions/YYYY-MM-DD-<topic>.md and commitdotdigraph framing { "Explore context" [shape=box]; "Ask clarifying questions" [shape=box]; "Propose 2-3 framings" [shape=box]; "Present framing sections" [shape=box]; "Partner approves framing?" [shape=diamond]; "Write question doc" [shape=box]; "Self-review (fix inline)" [shape=box]; "Partner reviews doc?" [shape=diamond]; "Invoke surveying-prior-work" [shape=doublecircle]; "Explore context" -> "Ask clarifying questions"; "Ask clarifying questions" -> "Propose 2-3 framings"; "Propose 2-3 framings" -> "Present framing sections"; "Present framing sections" -> "Partner approves framing?"; "Partner approves framing?" -> "Present framing sections" [label="no, revise"]; "Partner approves framing?" -> "Write question doc" [label="yes"]; "Write question doc" -> "Self-review (fix inline)"; "Self-review (fix inline)" -> "Partner reviews doc?"; "Partner reviews doc?" -> "Write question doc" [label="changes requested"]; "Partner reviews doc?" -> "Invoke surveying-prior-work" [label="approved"]; }
The terminal state is invoking surveying-prior-work (then designing-the-analysis). Do NOT jump to loading data or fitting models. The ONLY skills you invoke after framing are surveying-prior-work and designing-the-analysis — or, if and only if your human partner opted into feasibility mode, establishing-feasibility-first.
Understanding the interest:
A good research question is:
Exploring framings:
Presenting the framing:
Documentation — write the approved framing to docs/science-superpowers/questions/YYYY-MM-DD-<topic>.md:
markdown# <Question title> **Research question:** <one precise, falsifiable sentence> **Background / motivation:** <why this matters, what decision it informs> **Hypotheses:** - H0 (null): <...> - H1 (alternative, directional if justified): <...> **Population & unit of analysis:** <who/what, the sample, the unit> **Key variables (operationalized):** - Outcome: <construct> → <measure / column / computation> - Predictor(s) / exposure: <...> → <...> - Covariates / potential confounders: <...> **What counts as an answer:** <the confirmatory criterion, stated qualitatively here; exact decision rules come later in pre-registration> **Scope & exclusions:** <what is explicitly out of scope> **Open questions for prior-work survey:** <methods to check, known confounds to look up>
Commit the document to git.
Self-Review — look at the document with fresh eyes:
Fix issues inline. No need to re-review — just fix and move on.
Partner Review Gate — after the self-review passes:
> "Framing written and committed to <path>. Please review it and let me know if you want changes before we survey prior work and design the analysis."
Wait for the response. If they request changes, make them and re-run the self-review. Only proceed once they approve.
Transition:
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 9,557 | 10,093 | +6% | 1 | 1 | 0% | 1,648 | 2,784 | +69% | 0 | 0 | — |
case-02 | fail→fail | 13,817 | 7,607 | -45% | 1 | 1 | 0% | 2,658 | 3,641 | +37% | 0 | 0 | — |
case-03 | pass→fail | 25,347 | 6,028 | -76% | 1 | 1 | 0% | 3,996 | 2,712 | -32% | 0 | 0 | — |
case-04 | fail→fail | 21,452 | 13,523 | -37% | 1 | 1 | 0% | 3,887 | 4,561 | +17% | 0 | 0 | — |
case-05 | pass→fail | 14,693 | 9,951 | -32% | 1 | 1 | 0% | 2,833 | 3,078 | +9% | 0 | 0 | — |
case-06 | fail→fail | 10,835 | 6,531 | -40% | 1 | 1 | 0% | 1,596 | 2,701 | +69% | 0 | 0 | — |
case-07 | fail→pass | 6,024 | 6,820 | +13% | 1 | 1 | 0% | 1,018 | 3,131 | +208% | 0 | 0 | — |
case-08 | pass→fail | 8,004 | 11,528 | +44% | 1 | 1 | 0% | 1,246 | 3,070 | +146% | 0 | 0 | — |
case-09 | fail→pass | 16,645 | 6,311 | -62% | 1 | 1 | 0% | 2,477 | 3,273 | +32% | 0 | 0 | — |
case-10 | fail→pass | 14,212 | 5,676 | -60% | 1 | 1 | 0% | 2,047 | 3,170 | +55% | 0 | 0 | — |
case-11 | pass→pass | 14,886 | 7,231 | -51% | 1 | 1 | 0% | 2,070 | 3,336 | +61% | 0 | 0 | — |
case-12 | pass→pass | 9,997 | 6,891 | -31% | 1 | 1 | 0% | 1,670 | 3,320 | +99% | 0 | 0 | — |
case-13 | fail→fail | 11,951 | 5,750 | -52% | 1 | 1 | 0% | 1,902 | 2,591 | +36% | 0 | 0 | — |
case-14 | fail→fail | 11,831 | 8,261 | -30% | 1 | 1 | 0% | 1,695 | 2,958 | +75% | 0 | 0 | — |
case-20 | fail→pass | 11,239 | 6,943 | -38% | 1 | 1 | 0% | 1,723 | 3,063 | +78% | 0 | 0 | — |
case-15 | pass→fail | 15,783 | 6,335 | -60% | 1 | 1 | 0% | 2,444 | 2,748 | +12% | 0 | 0 | — |
case-16 | pass→fail | 12,163 | 4,343 | -64% | 1 | 1 | 0% | 1,871 | 2,918 | +56% | 0 | 0 | — |
case-17 | pass→pass | 11,047 | 5,911 | -46% | 1 | 1 | 0% | 1,651 | 3,151 | +91% | 0 | 0 | — |
case-18 | fail→pass | 4,565 | 6,530 | +43% | 1 | 1 | 0% | 697 | 3,296 | +373% | 0 | 0 | — |
case-19 | fail→pass | 8,439 | 3,509 | -58% | 1 | 1 | 0% | 1,232 | 2,798 | +127% | 0 | 0 | — |
case-21 | fail→fail | 5,070 | 3,782 | -25% | 1 | 1 | 0% | 787 | 2,703 | +243% | 0 | 0 | — |
case-22 | pass→pass | 11,882 | 4,176 | -65% | 1 | 1 | 0% | 1,641 | 2,899 | +77% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 17 counted toward the lift figure. The other 5 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +5 percentage points is the difference between those two pass rates over the 17 comparable cases. 5 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.