← Back to Skills Marketplace
ewankeynes

Code Refactor For Reproducibility

by ewankeynes · GitHub ↗ · v0.1.0 · MIT-0
cross-platform ✓ Security Clean
275
Downloads
0
Stars
0
Active Installs
1
Versions
Install in OpenClaw
/install code-refactor-for-reproducibility
Description
Use when refactoring research code for publication, adding documentation to existing analysis scripts, creating reproducible computational workflows, or prep...
README (SKILL.md)

Research Code Reproducibility Refactoring Tool

Workflow Overview

Follow this sequence when refactoring a research codebase:

  1. Analyze — identify reproducibility issues in existing code
  2. Refactor — apply documentation, parameterization, and error handling
  3. Specify environment — pin dependencies and create environment files
  4. Validate — run tests and verify behaviour is unchanged

Step 1: Analyze Code for Reproducibility Issues

Read each source file and check for the following problems. Document findings before making any changes.

Checklist: missing docstrings · hardcoded absolute paths · missing random seeds · bare except: clauses · unpinned imports · unexplained magic numbers

Example — detecting issues manually:

import ast, pathlib

def find_hardcoded_paths(source: str) -> list[str]:
    """Return string literals that look like absolute paths."""
    tree = ast.parse(source)
    return [
        node.s for node in ast.walk(tree)
        if isinstance(node, ast.Constant)
        and isinstance(node.s, str)
        and node.s.startswith("/")
    ]

source = pathlib.Path("analysis.py").read_text()
print(find_hardcoded_paths(source))

Step 2: Refactor for Best Practices

Apply improvements in place. Always back up originals first.

2a. Add docstrings

# Before
def load_data(path):
    import pandas as pd
    return pd.read_csv(path)

# After
def load_data(path: str) -> "pd.DataFrame":
    """Load a CSV dataset from disk.

    Parameters
    ----------
    path : str
        Path to the CSV file (relative to project root).

    Returns
    -------
    pd.DataFrame
        Raw dataset with original column names preserved.
    """
    import pandas as pd
    return pd.read_csv(path)

2b. Parameterize hardcoded values

from pathlib import Path
import argparse

def parse_args():
    parser = argparse.ArgumentParser()
    parser.add_argument("--data", type=Path, default=Path("data/raw.csv"))
    parser.add_argument("--output", type=Path, default=Path("results/"))
    return parser.parse_args()

args = parse_args()
df = pd.read_csv(args.data)
args.output.mkdir(parents=True, exist_ok=True)

2c. Set random seeds

import random
import numpy as np

SEED = 42  # document this constant at module level

random.seed(SEED)
np.random.seed(SEED)

# scikit-learn
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier(random_state=SEED)

# PyTorch
import torch
torch.manual_seed(SEED)
torch.backends.cudnn.deterministic = True

2d. Add error handling and logging

import logging
from pathlib import Path

logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(levelname)s] %(message)s")
logger = logging.getLogger(__name__)

def load_data(path: Path) -> "pd.DataFrame":
    """Load dataset with validation."""
    import pandas as pd
    if not path.exists():
        raise FileNotFoundError(f"Data file not found: {path}")
    logger.info("Loading data from %s", path)
    df = pd.read_csv(path)
    if df.empty:
        raise ValueError(f"Loaded dataframe is empty: {path}")
    logger.info("Loaded %d rows, %d columns", *df.shape)
    return df

Step 3: Generate Environment Specifications

See references/environment-setup.md for full Dockerfile and Conda environment templates.

requirements.txt (pip)

pip install pipreqs
pipreqs src/ --output requirements.txt --force

Verify resolution:

python -m venv .venv_test && source .venv_test/bin/activate
pip install -r requirements.txt
python -c "import pandas, numpy, sklearn"
deactivate && rm -rf .venv_test

environment.yml (Conda)

name: my-research-env
channels:
  - conda-forge
  - defaults
dependencies:
  - python=3.9
  - numpy=1.24.3
  - pandas=2.0.1
  - scikit-learn=1.2.2
  - matplotlib=3.7.1
  - pip:
    - some-pip-only-package==0.5.0
conda env create -f environment.yml
conda activate my-research-env

Step 4: Create Documentation

README structure

Generate a README.md containing at minimum:

## Requirements
\x3C!-- List Python version and key packages with versions -->

## Installation
```bash
conda env create -f environment.yml
conda activate my-research-env

Data

\x3C!-- Describe input data format, source, and where to place files -->

Running the Analysis

python main.py --data data/raw.csv --output results/

Expected Outputs

\x3C!-- Describe files created and how to interpret them -->

Reproducing Results

  • Random seed: 42 (set in config.py)
  • Hardware: results validated on CPU; GPU results may differ slightly

---

## Step 5: Validate Reproducibility

After all changes, verify that behaviour is unchanged:

```bash
# 1. Run the full pipeline and capture output checksums
python main.py --data data/raw.csv --output results/
md5sum results/*.csv > checksums_refactored.md5
diff checksums_original.md5 checksums_refactored.md5

# 2. Run unit tests
pytest tests/ -v --tb=short

# 3. Confirm determinism across two clean runs
python main.py --output results_run1/
python main.py --output results_run2/
diff -r results_run1/ results_run2/

Reproducibility verification checklist:

  • Output checksums match pre-refactor baseline
  • All tests pass
  • Pipeline runs twice and produces identical outputs
  • requirements.txt / environment.yml installs cleanly in a fresh environment
  • No absolute paths remain in source files
  • Random seeds are set and documented
  • All public functions have docstrings
  • README contains complete reproduction instructions

Best Practices Summary

Practice
Relative paths only
Pin dependency versions
Set random seeds
Docstrings on all public functions
Validate outputs against a baseline
Automate environment setup

References

  • references/guide.md — Comprehensive user guide
  • references/environment-setup.md — Dockerfile and full environment templates
  • references/examples/ — Working code examples
  • references/api-docs/ — Complete API documentation

Skill ID: 455 | Version: 1.0 | License: MIT

Usage Guidance
This skill appears coherent for refactoring research code, but exercise normal caution before running it: 1) Review scripts/main.py yourself to confirm there are no hidden network calls or actions you don't expect (the included portion is local file I/O and templating). 2) Run it inside an isolated environment (virtualenv, conda env, or disposable VM/container) when installing dependencies and executing automated refactors. 3) Back up your project before letting the skill modify files (SKILL.md itself recommends backups). 4) Note that allowed-tools (Read/Write/Bash/Edit) grant the agent file and shell access — only use on repositories you intend it to read/write. 5) The requirements.txt lists 'src' (unusual) — verify what will be installed by pip to avoid pulling unexpected packages. If you want extra assurance, inspect the whole scripts/main.py file for any network or subprocess usage before running.
Capability Analysis
Type: OpenClaw Skill Name: code-refactor-for-reproducibility Version: 0.1.0 The skill bundle is a legitimate tool designed to refactor research code into a reproducible format for scientific publication. The core logic in `scripts/main.py` and instructions in `SKILL.md` focus on analyzing code structure, generating standardized project layouts (e.g., Nature/Science templates), and documenting environment dependencies. While the tool collects system metadata like the hostname and uses `subprocess` to run `pip freeze` for reproducibility logs, these actions are well-aligned with its stated purpose and lack any evidence of data exfiltration or malicious intent.
Capability Assessment
Purpose & Capability
The name/description match the provided SKILL.md and the included scripts/main.py: both focus on analyzing source files, adding documentation, generating project scaffolding, and validating reproducibility. The resources requested (none) align with the described purpose.
Instruction Scope
Runtime instructions are narrowly focused on reading project source files, generating environment specs, running local tests, and verifying outputs (md5sum/diff/pytest). These actions are appropriate for code refactoring and reproducibility work and do not direct the agent to read unrelated system files or transmit data to external endpoints.
Install Mechanism
There is no install spec (instruction-only skill) and the only included code is scripts/main.py. The SKILL.md suggests creating virtual environments and installing dependencies with pip/conda — standard for this use case. No downloads from arbitrary URLs or extraction steps are present.
Credentials
The skill declares no required environment variables, credentials, or config paths. The SKILL.md and code do not reference secrets or external service tokens. This is proportionate to the tool's functionality.
Persistence & Privilege
always is false and the skill does not request persistent elevated privileges or modify other skills' configurations. Allowed tools include read/write/bash/edit which are expected for a refactoring workflow; however these imply the agent will have filesystem and shell access when invoked.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install code-refactor-for-reproducibility
  3. After installation, invoke the skill by name or use /code-refactor-for-reproducibility
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v0.1.0
- Initial release of "code-refactor-for-reproducibility" skill. - Provides structured workflow for making research code publication-ready and reproducible. - Adds step-by-step guidance on code analysis, refactoring (docstrings, parameterization, error handling), environment specification, documentation, and validation. - Includes detailed checklists, code examples, and best practices for ensuring computational reproducibility. - Supplies templates and instructions for README, requirements.txt, environment.yml, and reproducibility verification. - References comprehensive user guides and example resources.
Metadata
Slug code-refactor-for-reproducibility
Version 0.1.0
License MIT-0
All-time Installs 0
Active Installs 0
Total Versions 1
Frequently Asked Questions

What is Code Refactor For Reproducibility?

Use when refactoring research code for publication, adding documentation to existing analysis scripts, creating reproducible computational workflows, or prep... It is an AI Agent Skill for Claude Code / OpenClaw, with 275 downloads so far.

How do I install Code Refactor For Reproducibility?

Run "/install code-refactor-for-reproducibility" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is Code Refactor For Reproducibility free?

Yes, Code Refactor For Reproducibility is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does Code Refactor For Reproducibility support?

Code Refactor For Reproducibility is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created Code Refactor For Reproducibility?

It is built and maintained by ewankeynes (@ewankeynes); the current version is v0.1.0.

💬 Comments