Dissecting AI
From the paper: SkillGym: Internalizing Human Skills into LLMs for Real-World Problem Solving

Contrastive Testing for Empirical Skill Dependence

A task being built from a skill does not prove the skill matters; SkillGym tests dependence by comparing verifier outcomes with and without the target skill and keeps other valid tasks as fallback environments.

Read the paper ↗
The short version

What it is

  • Two-level acceptance First check that the task and its verifier work; separately check whether the target skill changes the reference agent’s result.
  • Contrastive dependence A task earns the skill-dependent label when the reference agent passes the verifier with the skill and fails without it.
  • Fallback label A verified task that does not show that exact contrast can still be retained as a fallback environment.

Why it matters

A task’s origin does not prove that its skill was needed. Separating executable validity from the with-and-without comparison gives the label a narrower meaning while preserving other verified practice tasks.

Before getting into the rule, here is the short version: SkillGym does not call a task skill-dependent just because someone built it from a skill. It checks whether a reference agent can pass the task’s verifier with the skill and cannot pass without it. If the task is still executable and verified but that contrast is missing, it can remain useful as a fallback.

  1. Validity: First, the task itself has to work. Think of a small software task with a test suite: if the environment is broken or the test cannot recognize a correct solution, comparing runs tells you little about the skill. SkillGym’s acceptance check includes design, structure, end-to-end execution, a working verifier, and a verifier-passed solution. That is the floor, not evidence of dependence.

  2. Attribution: The concrete comparison is the same reference agent on the same task, once with the target skill and once without it. The skill-dependent case is the clean contrast: it passes with the skill and fails without it. In words, supplying the skill changes the verifier outcome from failure to success. This is closer to an ablation than a benchmark score: you remove one input and watch what changes. The analogy has a limit, because it is evidence under that reference setup, not a law about every agent.

So the real question is not “Did a skill inspire this task?” It is “Did this skill make a measurable difference in the tested execution?” What about tasks that pass both ways, or fail both ways?

  1. Retention: SkillGym keeps the distinction rather than forcing every accepted task into the skill-dependent bucket. A verifier-passed task without the required contrast can be labeled as a fallback environment. That does not mean it is broken; it means the specific dependence claim was not established. I like this separation because it avoids turning a source label into a causal claim, though it does leave the result tied to the chosen reference agent and setup.

The important boundary is easy to miss: passing with the skill alone is not enough if you have not also checked the without-skill run, and failing that contrast does not invalidate an otherwise verified task. What should a reader infer from the label when the agent or configuration changes?

Read the deep dive

Why People Wanted It

A task can come from a human-written skill and still be solvable without that skill. If you call every such task “skill-dependent,” you confuse where a task came from with what actually helped solve it. The real question is not whether the skill inspired the task, but whether an agent’s success changes when that skill is available.

There is a second concern: a task that fails this dependence test may still be a perfectly usable executable environment. Rejecting it would throw away verified practice merely because the skill’s contribution was not demonstrated under one particular comparison.

The Core Move

Keep feasibility and skill dependence as separate decisions: first require an executable task with a working verifier and a verifier-passed solution, then compare a reference agent’s outcomes with and without the target skill.

Let Fi=1F_i=1 mean task ii passes the design, structure, end-to-end execution, verifier, and verifier-passed-solution checks. Let ri+r_i^+ and ri−r_i^- be the verifier outcomes with and without the target skill. The contrastive label is triggered by (ri+,ri−)=(1,0)(r_i^+,r_i^-)=(1,0), conditional on Fi=1F_i=1.

Quiz
A task passes feasibility checks and has a working verifier. The reference agent passes with the target skill and also passes without it. Which label follows the contrastive rule?
Verifier-Passed fallback, because the required with-success/without-failure contrast is absent.
Rejected, because both runs passed.
Skill-Dep., because the task was built from a skill.

Why Acceptance Has Two Levels

Here is the part that goes beyond the basics: acceptance checks two different claims, and passing the first does not imply the second. Feasibility asks whether the environment and its verifier work; dependency asks whether the skill changes the reference agent’s verified outcome.

A task first has to survive design, structure, and end-to-end execution checks, including a working verifier and a solution that passes it. That gives the task a valid outcome signal to compare. Only then does the with-skill versus without-skill test make sense: without a functioning verifier, a changed outcome could be a broken test rather than evidence about skill use.

This separation also prevents a category mistake. A task may be accepted as executable without earning the narrower Skill-Dep. label. The label describes evidence under the reference configuration, not a universal property of the task for every possible agent. What should happen to a verified task that clears feasibility but not the contrastive bar?

Why the With/Without Contrast Is the Dependency Test

Now the deeper comparison: the skill-dependent condition is not merely “success with the skill.” It requires a paired contrast, with verifier success when the target skill is present and verifier failure when it is absent.

The outcomes are binary: ri+,ri−∈{0,1}r_i^+,r_i^-\in\{0,1\}. In words, each run either passes the task’s verifier or does not. The qualifying pair is (1,0)(1,0); the other pairs do not establish the specified contrast. In particular, success in both runs means the reference agent solved the task without needing the supplied skill in that tested setup, while failure in both gives no evidence that the skill enabled success.

This is an empirical dependence test, not a proof of necessity. The comparison holds the reference-agent setup as its frame: it says what changed in those executions when the target skill was supplied, not what every agent must do. Why preserve the tasks that fail to show this contrast instead of discarding them?

Why Non-Qualifying Tasks Become Fallbacks

Here is the final layer of the machinery: the labels preserve the difference between “valid environment” and “demonstrated skill dependence.” Once accepted environments pass feasibility and outcome-verification checks, the contrastive condition sorts them into Skill-Dep. tasks and verifier-passed fallback tasks.

A task without the specified (1,0)(1,0) evidence does not become useless; it remains a Verifier-Passed fallback environment. The dataset analysis reports these as distinct groups, rather than treating a task’s human-skill origin as sufficient proof of dependence. This makes the label conservative about causal interpretation while retaining verified tasks for practice. What can the label tell you—and what can it not tell you—about a different agent?

Minimal Causal Code

This deliberately plain loop makes the two acceptance decisions visible. The verifier and run_agent are placeholders for the task-specific environment and reference-agent execution.

def accept_and_label(task, target_skill, run_agent, verifier):
    # Level 1: establish that the environment and its outcome check work.
    if not task.design_checks_pass():
        return "rejected"
    if not task.structure_checks_pass():
        return "rejected"
    if not task.end_to_end_checks_pass():
        return "rejected"
    if not verifier.is_working(task):
        return "rejected"
    if not verifier(run_agent(task, reference_solution=True)):
        return "rejected"

    # Level 2: compare the same reference setup with and without the skill.
    with_skill = verifier(run_agent(task, skill=target_skill))
    without_skill = verifier(run_agent(task, skill=None))

    if with_skill and not without_skill:
        return "Skill-Dep."
    return "Verifier-Passed fallback"

What You Gain, and What You Lose

The two-level rule avoids conflating executable correctness with demonstrated dependence, and the fallback label retains verified environments that do not meet the contrastive condition. The comparison is interpretable because the verifier supplies an outcome signal and the skill is the factor being contrasted.

But the conclusion stays narrow: Skill-Dep. means the reference agent passed with the target skill and failed without it under the tested configuration. It does not prove that the skill is necessary for every agent, or that no alternative skill or strategy could solve the task. And a fallback label is not a claim that the task is easy, low quality, or irrelevant; it says only that the specified dependence test was not met.

Core Takeaway

A task is Skill-Dep. only when the reference agent passes with the target skill and fails without it; otherwise a valid verified task can still be a fallback.