
Explore Run
- 405 installs
- 513 repo stars
- Updated July 26, 2026
- lllllllama/ai-paper-reproduction-skill
This is a copy of explore-run by lllllllama - installs and ranking accrue to the original listing.
explore-run is a machine-learning skill that explores an AI research paper codebase, installs dependencies, and runs baseline experiments to confirm claims before committing to full reproduction.
About
explore-run is a paper-reproduction scouting skill for ML engineers evaluating whether an AI research repository is worth fully replicating. It guides exploring repository layout, installing dependencies, and executing baseline experiments to verify stated results before investing in a complete reproduction pipeline. The workflow catches broken setups, missing assets, and overstated claims early. Use explore-run when onboarding to a new paper codebase, benchmarking reproducibility risk, or deciding if full replication belongs on the roadmap.
- Paper repo exploration workflow
- Dependency and env setup
- Baseline experiment execution
- Claim verification checkpoints
- Fast feasibility assessment
Explore Run by the numbers
- 405 all-time installs (skills.sh)
- +12 installs in the week ending Aug 2, 2026 (Skillselion tracking)
- Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/lllllllama/ai-paper-reproduction-skill --skill explore-runAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 405 |
|---|---|
| repo stars | ★ 513 |
| Last updated | July 26, 2026 |
| Repository | lllllllama/ai-paper-reproduction-skill ↗ |
How do you validate an AI paper codebase quickly?
Explore an AI research paper codebase, install deps, and run baseline experiments to confirm claims before committing to full reproduction.
Who is it for?
ML engineers triaging AI paper codebases who need baseline experiment confirmation before full reproduction effort.
Skip if: Teams already committed to full replication or researchers who only need citation summaries without running code.
When should I use this skill?
A new AI paper repository needs quick exploration, dependency setup, and baseline runs to validate claims.
What you get
Dependency-installed repo, executed baseline runs, and a reproducibility assessment before full replication.
- baseline experiment logs
- reproducibility assessment
- configured dev environment
Files
explore-run
Use this as the Rigor Improve / Rigor Explore run leaf skill. The installed slug remains explore-run for compatibility.
Use the shared operating principles in ../../references/agent-operating-principles.md; this skill should guide candidate run planning while preserving model judgment about the active repo.
When to apply
- When the researcher explicitly authorizes exploratory runs.
- When the task is a small-subset validation, short-cycle training probe, batch sweep, idle-GPU search, or quick transfer-learning trial.
- When the output should rank candidate runs rather than certify trusted success.
When not to apply
- When the user wants trusted training execution or conservative verification.
- When there is no explicit exploratory authorization.
- When the task is repository setup, intake, or debugging.
Clear boundaries
- This skill owns exploratory execution planning and summary only.
- Use
ai-research-exploreinstead when the task spans both current_research coordination and exploratory code changes. - It may hand off actual command execution to
minimal-run-and-auditorrun-train. - It should keep experiment state isolated from the trusted baseline.
- It should prefer small-subset and short-cycle checks before heavier exploratory runs.
- It should label run results as bounded evidence and explain when a comparison
is not directly fair.
Ranking Semantics
- Pre-execution candidate selection uses three factors:
cost,success_rate, andexpected_gain. - Default weights should stay conservative unless the researcher explicitly provides
selection_weights. - Budget pruning still applies after scoring through
max_variantsandmax_short_cycle_runs. - If runs are executed later, downstream ranking should switch to real execution evidence, not stay purely heuristic.
Variant Spec Hints
- Use
variant_axesto define the candidate dimension grid. - Use
subset_sizesandshort_run_stepsto express exploratory run scale. - Use
selection_weightsto rebalancecost,success_rate, andexpected_gain. - Use
primary_metricandmetric_goalso downstream ranking can order executed candidates consistently.
Output expectations
explore_outputs/CHANGESET.mdexplore_outputs/SCIENTIFIC_CHANGELOG.mdexplore_outputs/COMPARABILITY_REPORT.mdexplore_outputs/TOP_RUNS.mdexplore_outputs/status.json
Notes
Use references/execution-policy.md, ../../references/explore-variant-spec.md, ../../references/deep-learning-experiment-principles.md, scripts/plan_variants.py, and scripts/write_outputs.py.
display_name: Rigor Improve / Rigor Explore
short_description: Rigor Improve / Rigor Explore run leaf mode for isolated exploratory experiment runs.
default_prompt: Plan isolated exploratory runs conservatively, prefer small-subset or short-cycle checks first, and write CHANGESET.md TOP_RUNS.md and status.json into explore_outputs.
Rigor Improve / Rigor Explore Run Policy
Purpose
Use this skill only when exploratory execution has been explicitly authorized.
Requirements
- keep experiment runs isolated from the trusted baseline
- prefer small-subset or short-cycle checks before heavier exploratory runs
- record
current_research, experiment branch, variant count, and top runs - summarize candidates for human review instead of claiming trusted success
Avoid
- default or implicit exploration
- rewriting training logic inside this skill
- promoting exploratory results into the trusted lane automatically
- using this skill as the end-to-end
current_researchexplore orchestrator
#!/usr/bin/env python3
"""Generate a budget-aware exploratory variant matrix for isolated runs."""
from __future__ import annotations
import argparse
import itertools
import json
from pathlib import Path
from typing import Any, Dict, List, Sequence
DEFAULT_SELECTION_WEIGHTS = {
"cost": 0.25,
"success_rate": 0.35,
"expected_gain": 0.40,
}
def load_spec(path: Path) -> Dict[str, Any]:
return json.loads(path.read_text(encoding="utf-8-sig"))
def current_research_value(spec: Dict[str, Any]) -> str:
return str(spec.get("current_research") or spec.get("baseline_ref") or "unknown")
def normalize_metric_goal(value: Any) -> str:
text = str(value or "maximize").strip().lower()
if text in {"min", "minimize", "lower", "lower_is_better"}:
return "minimize"
return "maximize"
def safe_float(value: Any) -> float:
if value is None:
return 0.0
if isinstance(value, (int, float)):
return float(value)
try:
return float(str(value))
except ValueError:
return 0.0
def clamp_score(value: float) -> float:
return max(0.0, min(1.0, value))
def can_float(value: Any) -> bool:
try:
float(str(value))
return True
except (TypeError, ValueError):
return False
def unique_preserving_order(values: Sequence[Any]) -> List[Any]:
ordered: List[Any] = []
for item in values:
if item not in ordered:
ordered.append(item)
return ordered
def rank_lookup(values: Sequence[Any]) -> Dict[Any, int]:
ordered_values = unique_preserving_order(values)
if not ordered_values:
return {}
has_none = any(item is None for item in ordered_values)
non_none = [item for item in ordered_values if item is not None]
if non_none and all(can_float(item) for item in non_none):
ordered_non_none = sorted(non_none, key=lambda item: (safe_float(item), str(item)))
else:
ordered_non_none = non_none
ordered = ([None] if has_none else []) + ordered_non_none
return {item: index for index, item in enumerate(ordered)}
def normalized_lookup_score(value: Any, lookup: Dict[Any, int]) -> float:
if not lookup:
return 0.0
index = lookup.get(value, 0)
max_index = max(lookup.values(), default=0)
if max_index <= 0:
return 0.0
return index / max_index
def normalize_weights(spec: Dict[str, Any]) -> Dict[str, float]:
raw = dict(DEFAULT_SELECTION_WEIGHTS)
raw.update(spec.get("selection_weights", {}))
total = sum(max(0.0, safe_float(value)) for value in raw.values())
if total <= 0:
return dict(DEFAULT_SELECTION_WEIGHTS)
return {
"cost": max(0.0, safe_float(raw.get("cost"))) / total,
"success_rate": max(0.0, safe_float(raw.get("success_rate"))) / total,
"expected_gain": max(0.0, safe_float(raw.get("expected_gain"))) / total,
}
def axis_aggressiveness_score(axis_values: Dict[str, Any], axes: Dict[str, Sequence[Any]]) -> float:
if not axis_values:
return 0.0
scores: List[float] = []
for key, value in axis_values.items():
options = list(axes.get(key, []))
if not options:
scores.append(0.0)
continue
lookup = {option: index for index, option in enumerate(options)}
max_index = max(len(options) - 1, 1)
scores.append(lookup.get(value, 0) / max_index)
return sum(scores) / len(scores)
def annotate_variant_scores(
raw_variants: List[Dict[str, Any]],
spec: Dict[str, Any],
subset_lookup: Dict[Any, int],
step_lookup: Dict[Any, int],
) -> List[Dict[str, Any]]:
axes = spec.get("variant_axes", {})
weights = normalize_weights(spec)
annotated: List[Dict[str, Any]] = []
for item in raw_variants:
subset_scale = normalized_lookup_score(item.get("subset_size"), subset_lookup)
step_scale = normalized_lookup_score(item.get("short_run_steps"), step_lookup)
axis_scale = axis_aggressiveness_score(item.get("axes", {}), axes)
raw_cost = 0.50 * step_scale + 0.35 * subset_scale + 0.15 * axis_scale
cost_efficiency_score = clamp_score(1.0 - raw_cost)
predicted_success_score = clamp_score(1.0 - (0.45 * axis_scale + 0.35 * step_scale + 0.20 * subset_scale))
predicted_gain_score = clamp_score(0.50 * axis_scale + 0.30 * step_scale + 0.20 * subset_scale)
total_score = (
weights["cost"] * cost_efficiency_score
+ weights["success_rate"] * predicted_success_score
+ weights["expected_gain"] * predicted_gain_score
)
annotated_item = dict(item)
annotated_item.update(
{
"cost_score": round(raw_cost, 4),
"cost_efficiency_score": round(cost_efficiency_score, 4),
"predicted_success_score": round(predicted_success_score, 4),
"predicted_gain_score": round(predicted_gain_score, 4),
"total_score": round(total_score, 4),
"estimated_runtime_units": round(1.0 + 3.0 * step_scale + 2.0 * subset_scale + axis_scale, 4),
"feasibility_annotations": [],
}
)
annotated.append(annotated_item)
return annotated
def build_raw_variants(spec: Dict[str, Any]) -> List[Dict[str, Any]]:
axes = spec.get("variant_axes", {})
keys = sorted(axes)
values = [axes[key] for key in keys]
subset_sizes = spec.get("subset_sizes", [None])
short_run_steps = spec.get("short_run_steps", [None])
current_research = current_research_value(spec)
subset_rank = rank_lookup(subset_sizes)
step_rank = rank_lookup(short_run_steps)
variants: List[Dict[str, Any]] = []
index = 1
for combo in itertools.product(*values):
axis_values = dict(zip(keys, combo))
axis_position_penalty = sum(axes[key].index(axis_values[key]) for key in keys)
for subset_size in subset_sizes:
for step_limit in short_run_steps:
subset_position = subset_rank.get(subset_size, 0)
step_position = step_rank.get(step_limit, 0)
variants.append(
{
"id": f"variant-{index:03d}",
"axes": axis_values,
"subset_size": subset_size,
"short_run_steps": step_limit,
"current_research": current_research,
"baseline_ref": spec.get("baseline_ref", current_research),
"base_command": spec.get("base_command"),
"axis_position_penalty": axis_position_penalty,
"subset_rank": subset_position,
"step_rank": step_position,
}
)
index += 1
return annotate_variant_scores(variants, spec, subset_rank, step_rank)
def prune_variants(raw_variants: List[Dict[str, Any]], spec: Dict[str, Any]) -> List[Dict[str, Any]]:
max_variants = int(spec.get("max_variants") or 0)
max_short_cycle_runs = int(spec.get("max_short_cycle_runs") or 0)
ordered = sorted(
raw_variants,
key=lambda item: (
-item.get("total_score", 0.0),
-item.get("predicted_gain_score", 0.0),
-item.get("predicted_success_score", 0.0),
-item.get("cost_efficiency_score", 0.0),
item.get("cost_score", 0.0),
item.get("id", ""),
),
)
selected: List[Dict[str, Any]] = []
short_cycle_count = 0
for item in ordered:
is_short_cycle = item.get("short_run_steps") is not None
if max_short_cycle_runs > 0 and is_short_cycle and short_cycle_count >= max_short_cycle_runs:
continue
selected.append(item)
if is_short_cycle:
short_cycle_count += 1
if max_variants > 0 and len(selected) >= max_variants:
break
return selected
def build_variants(spec: Dict[str, Any]) -> Dict[str, Any]:
current_research = current_research_value(spec)
raw_variants = build_raw_variants(spec)
variants = prune_variants(raw_variants, spec)
raw_variant_count = len(raw_variants)
variant_count = len(variants)
return {
"schema_version": "1.0",
"current_research": current_research,
"baseline_ref": spec.get("baseline_ref", current_research),
"base_command": spec.get("base_command"),
"raw_variant_count": raw_variant_count,
"variant_count": variant_count,
"pruned_variant_count": raw_variant_count - variant_count,
"variant_budget": {
"max_variants": int(spec.get("max_variants") or 0),
"max_short_cycle_runs": int(spec.get("max_short_cycle_runs") or 0),
},
"selection_policy": {
"factors": ["cost", "success_rate", "expected_gain"],
"weights": normalize_weights(spec),
"scores": {
"cost_score": "Lower is cheaper; derived from steps, subset size, and axis aggressiveness.",
"cost_efficiency_score": "Higher is cheaper after inverting cost_score.",
"predicted_success_score": "Higher means the candidate is more likely to run cleanly.",
"predicted_gain_score": "Higher means the candidate is more likely to produce a measurable improvement.",
"total_score": "Weighted composite used for pre-execution candidate ranking.",
},
},
"metric_policy": {
"primary_metric": spec.get("primary_metric"),
"metric_goal": normalize_metric_goal(spec.get("metric_goal")),
},
"variants": variants,
}
def main() -> int:
parser = argparse.ArgumentParser(description="Build a budget-aware exploratory variant matrix.")
parser.add_argument("--spec-json", required=True, help="Path to the exploration spec JSON file.")
parser.add_argument("--output-json", help="Optional output path for the generated matrix.")
parser.add_argument("--json", action="store_true", help="Emit the matrix to stdout.")
args = parser.parse_args()
payload = build_variants(load_spec(Path(args.spec_json).resolve()))
if args.output_json:
Path(args.output_json).write_text(json.dumps(payload, indent=2, ensure_ascii=False), encoding="utf-8")
if args.json or not args.output_json:
print(json.dumps(payload, indent=2, ensure_ascii=False))
return 0
if __name__ == "__main__":
raise SystemExit(main())
#!/usr/bin/env python3
"""Compatibility wrapper for exploratory run output bundles."""
from __future__ import annotations
import importlib.util
from pathlib import Path
def load_shared_module():
module_path = Path(__file__).resolve().parents[3] / "shared" / "scripts" / "write_explore_bundle.py"
spec = importlib.util.spec_from_file_location("write_explore_bundle", module_path)
if spec is None or spec.loader is None:
raise RuntimeError(f"Unable to load shared writer module from {module_path}")
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
return module
def main() -> int:
module = load_shared_module()
return module.main(default_mode="run", default_output_dir="explore_outputs")
if __name__ == "__main__":
raise SystemExit(main())
Related skills
FAQ
What is the goal of explore-run?
explore-run explores an AI paper codebase, installs dependencies, and runs baseline experiments to confirm claimed results before a team commits to a full reproduction effort.
How is explore-run different from full paper reproduction?
explore-run performs a lightweight validation pass—repo exploration, setup, and baseline runs—whereas full reproduction rebuilds methods, datasets, and complete experiment matrices.