academic-writing
Write or revise thesis and paper prose section by section (abstract, introduction, related work, method, results, discussion,…
Make a thesis's computational experiments reproducible by the examiner and by the student three months later: pinned environments, seeded randomness, a single config per run, a run manifest that records code version, data version, parameters, hardware, and timings, results
Claude Code
$ npx -y skills add KhaledSaeed18/dotclaude --skill experiment-reproducibility --agent claude-code
Codex
$ npx skills add KhaledSaeed18/dotclaude --skill experiment-reproducibility -a codex -y
Cursor
$ npx skills add KhaledSaeed18/dotclaude --skill experiment-reproducibility -a cursor -y
Gemini CLI
$ npx skills add KhaledSaeed18/dotclaude --skill experiment-reproducibility -a gemini-cli -y
GitHub Copilot
$ npx skills add KhaledSaeed18/dotclaude --skill experiment-reproducibility -a github-copilot -y
OpenCode
$ npx skills add KhaledSaeed18/dotclaude --skill experiment-reproducibility -a opencode -y
Windsurf
$ npx skills add KhaledSaeed18/dotclaude --skill experiment-reproducibility -a windsurf -y
name: experiment-reproducibility description: "Make a thesis's computational experiments reproducible by the examiner and by the student three months later: pinned environments, seeded randomness, a single config per run, a run manifest that records code version, data version, parameters, hardware, and timings, results written to versioned files that figures and tables are generated from, and a one-command rerun. Use when setting up experiments, before the first real run, or when a result cannot be regenerated." argument-hint: "(optional) the experiment directory, the framework, and where results should go"
A result that cannot be regenerated from a command is an anecdote. Reproducibility is cheap at the start and impossible at the end, so this is set up before the first run that will appear in the thesis.
experiments/ env/ environment.yml or requirements.txt with exact pins; Dockerfile if system deps matter configs/ one YAML per experiment: exp01-baseline.yaml, exp02-ours.yaml data/ raw/ (never modified), processed/ (generated by scripts), DATA.md (source, licence, version, checksum) src/ the code; run.py takes --config and --seed runs/ one directory per run: <exp>-<seed>-<timestamp>/ with manifest.json, metrics.json, log.txt results/ aggregated tables (CSV) generated from runs/ by aggregate.py figures/ generated from results/ by figure scripts (research-figures) Makefile or justfile: `make exp01` runs all seeds; `make results` aggregates; `make figures`
Everything under `runs/`, `results/`, and `figures/` is generated; regenerate rather than edit. Commit `results/` and `figures/` (they are small) so the thesis builds from a clean clone; do not commit `runs/` unless small (use DVC or a release asset otherwise).
`runs/<run>/manifest.json`, written at start and completed at end:
{
"experiment": "exp02-ours", "seed": 1, "started": "2026-09-21T10:00:00Z", "finished": "...",
"git": { "commit": "a1b2c3d", "dirty": false, "branch": "main" },
"config_sha256": "...", "data_version": "v3 (sha256 ...)",
"env": { "python": "3.12.4", "packages_sha256": "...", "cuda": "12.4", "gpu": "A100 40GB", "host": "..." },
"duration_s": 1832.4, "status": "ok"
}Refuse to start a run that will appear in the thesis from a dirty working tree (`git status --porcelain` non-empty): commit first, so the commit hash means something. Log the refusal.
`data/DATA.md`: source URL, download date, licence, version, checksum of the raw archive, the preprocessing script and its parameters, the resulting row counts and split sizes. Splits are made once with a seed and saved as index files; every run reads the same splits.
`aggregate.py` reads every `runs/*/metrics.json`, joins with the manifests, and writes `results/<table>.csv` with one row per (experiment, seed) and a summary with mean, SD, n. Figure scripts read only `results/`. The thesis `\input`s tables generated from `results/` (`benchmark-reporting`), so a rerun updates the document.
`make all` (or `just all`): environment check, all experiments for all seeds, aggregate, figures, tables. Document it in `experiments/README.md` with the expected total runtime and hardware. The examiner, or a future student, runs it and gets the thesis's numbers.
Reusable Claude Code extension registry. skills, subagents, slash commands, and hooks for engineering, git, testing, and security workflows. Distributed as a shadcn GitHub registry and as installable plugins.
Write or revise thesis and paper prose section by section (abstract, introduction, related work, method, results, discussion,…
Report computational benchmarks and experimental comparisons the way examiners and reviewers expect: fair baselines run under the…
Maintain the thesis .bib file as a single source of truth: fetch verified BibTeX from a DOI, arXiv id, or title via CrossRef and…
Expand a set of key papers into the literature around them by walking the citation graph with the Semantic Scholar and OpenAlex…
Audit every citation in a chapter, paper, or proposal against the .bib file and the real world: each cite key must exist, each…
Structure a thesis whose contribution is a built artifact (tool, system, method, model) using design science research: explicit…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.