grind-lab-core/night_owl_research_agent/deploy-experiment
Claude Code and agent skill by grind-lab-core/night_owl_research_agent
- community
Checking that the SKILL.md file is still in the repository.
Deploy and run experiments for ML/DL training (local, remote, or Modal GPU) AND spatial data science / GIScience experiments (local, data-driven). Reads from output/refine-logs/EXPERIMENT_PLAN.md and output/refine-logs/FINAL_PROPOSAL.md, writes to output/experiment/. Use when user says "run experiment", "deploy experiment", "execute experiment plan", or needs to launch training / spatial analysis jobs.
Install
npx vskill@latest install grind-lab-core/night_owl_research_agent/deploy-experimentSKILL.md
Deploy Experiment
Execute the experiment described in output/refine-logs/EXPERIMENT_PLAN.md (with context from output/refine-logs/FINAL_PROPOSAL.md) and write all results to output/experiment/.
Scope override (optional): $ARGUMENTS
Inputs
| File | Purpose | |
|---|---|---|
output/refine-logs/EXPERIMENT_PLAN.md | Authoritative experiment plan: objectives, claims, run order, commands, success criteria, data needs | |
output/refine-logs/FINAL_PROPOSAL.md | Final refined proposal: problem anchor, method, expected contribution, constraints | |
CLAUDE.md | Environment config (gpu location, conda env, SSH, wandb, code_sync) |
If either required input is missing, stop and tell the user which file to produce first (likely via /refine-research and /experiment-design).
Outputs (all under output/experiment/)
| File | Content | |
|---|---|---|
EXPERIMENT_RESULT.md | Final results report: per-claim outcomes, tables, key numbers, figures referenced | |
EXPERIMENT_LOG.md | Chronological run log: commands executed, environment, timings, stdout/stderr pointers, failures, retries | |
data/ | Intermediate data artifacts ready for visualization (CSV, Parquet, GeoJSON, GeoPackage, NetCDF, .npz, model predictions, metrics.json) | |
figures/ (optional) | Quick-look figures produced during the run (final paper figures come from paper-figure) | |
scripts/ (optional) | Any inline runner scripts created to execute the plan |
Create the output/experiment/, output/experiment/data/, output/experiment/figures/, and output/experiment/scripts/ directories at the start if they do not exist.
Step 0: Mandatory Local GPU Availability Check (pilot AND full experiments)
This check is REQUIRED before classification, regardless of whether the run is a pilot, a full experiment, Track A, Track B, or mixed. The goal is to guarantee that when a local GPU is present, every ML / DL component runs on it — never silently on CPU.
Run the local GPU presence check first:
Local CUDA:
Local Mac MPS (only if `nvidia-smi` is missing or returns zero rows):
Decision rules (apply in order):
- If
nvidia-smiexits 0 and returns at least one GPU row → recordLOCAL_GPU=cuda, capture the<gpu_id>and the chosen device for use in Step A5 and any pilot launch. Do NOT gate on idle memory; a desktop GPU with a display attached normally reports 0.7–1.5 GiB used. - Else if
torch.backends.mps.is_available()returnsTrue→ recordLOCAL_GPU=mps. - Else → record
LOCAL_GPU=none. Only in this case may an ML / DL component fall back to CPU or to remote / Modal as defined inCLAUDE.md.
Write the result as the first lines of output/experiment/EXPERIMENT_LOG.md:
Hard rule: if LOCAL_GPU is cuda or mps, every ML / DL pilot AND every ML / DL full-experiment run launched by this skill MUST use that local GPU. Do not switch to remote / Modal / CPU just because the plan's default is set elsewhere — local GPU takes precedence whenever it is present. Record any deviation as a CONTRACT_VIOLATION.md with the user's explicit override.
If LOCAL_GPU=none and CLAUDE.md lists gpu: remote or gpu: modal, route ML / DL work there as documented in Step A1; otherwise stop and report to the user before proceeding.
This check applies equally to:
- Pilot experiments invoked from
/generate-idea(Phase 5) - Full experiments invoked from
/full-pipelineStage 2 - Any mixed GeoAI experiment whose Track A leg requires GPU
Step 0.1: Classify the Experiment
Read EXPERIMENT_PLAN.md and FINAL_PROPOSAL.md, then classify into ONE of the two tracks below. Record the choice at the top of EXPERIMENT_LOG.md.
| Track | Signals | Route | |
|---|---|---|---|
| A. ML / Deep Learning | Model training, fine-tuning, gradient descent, epochs, GPU/TPU required, checkpoints, benchmarks on splits, wandb-style tracking | → Step A1 | |
| B. Spatial / GIScience | Spatial regression, ESDA (Moran's I, LISA, Getis-Ord), GWR/MGWR, spatial clustering, accessibility (2SFCA, isochrones), cartographic description, spatiotemporal analysis, network analysis, choropleth-driven claims, no GPU needed (mostly CPU + geospatial libs) | → Step B1 |
Mixed experiments (e.g., GeoAI: deep learning applied to spatial data) run both tracks in sequence — Track A for model training/inference, Track B for downstream spatial evaluation.
Invoke supporting skills when needed:
- If the plan requires datasets not yet in
data/raw/→ call `data-download` skill with the data requirements from the plan. - For Track B (spatial analysis execution and diagnostics) → call `spatial-analysis` skill to run the analysis under guideline-driven decisions. This skill (deploy-experiment) orchestrates and records results;
spatial-analysisis the executor for spatial methods.
Track A — ML / Deep Learning Experiments
A1. Detect Environment
From CLAUDE.md:
- Local GPU (
gpu: local): local CUDA or Apple MPS - Remote server (
gpu: remote): SSH alias, conda env, code directory - Modal (
gpu: modal): use Modal serverless GPU app
A2. Pre-flight GPU Check
The local presence check from Step 0 has already determined LOCAL_GPU. Re-use that result — do not re-decide here. Only run remote / multi-GPU contention checks below.
Remote (SSH), only when `LOCAL_GPU=none` and `CLAUDE.md` says `gpu: remote`:
Contention check (optional, only when sharing a multi-GPU box): pick a GPU where memory.free / memory.total > 0.7 to avoid colliding with another running job. On a single-GPU workstation, skip this and proceed once presence is confirmed in Step 0.
A3. Sync Code (Remote Only)
Read code_sync in CLAUDE.md (default rsync).
rsync:
git:
A4. W&B Integration (only when wandb: true)
Skip entirely if not enabled. Otherwise, ensure scripts contain:
Verify login: ssh <server> "wandb status".
A5. Launch
Remote (SSH + screen):
Local:
Use run_in_background: true for long local jobs. Each experiment gets its own screen/process and one GPU.
A6. Collect Artifacts
After completion (detected via /monitor-experiment or screen ending):
Place tabular metrics as metrics.csv / metrics.json, learned checkpoints' evaluation predictions as predictions.parquet (or .npz), and any training curves as curves.csv — all under output/experiment/data/ so they are visualization-ready.
Track B — Spatial / GIScience Experiments
These experiments are typically CPU-bound, run locally, and rely on PyGeoAI / GeoPandas / PySAL / libpysal / esda / spreg / mgwr / rasterio / xarray / networkx / scikit-mobility. GPU is irrelevant unless the plan specifies a deep-learning component (then also run Track A).
B1. Verify / Acquire Data
- Read the Data section of
EXPERIMENT_PLAN.md. - Check
data/DATA_MANIFEST.mdanddata/raw/for each required dataset. - For any missing dataset → invoke the `data-download` skill with the precise data need (geography, time range, spatial resolution, variables, format). Do NOT ad-hoc download; rely on the skill so provenance is recorded in
DATA_MANIFEST.md. - After download, re-check presence and basic integrity (file exists, non-zero size, opens with the expected library).
B2. Pre-flight Environment Check
If anything is missing, report to the user and stop — do NOT silently pip install into a shared env. Suggest the conda env from CLAUDE.md.
B3. Plan-to-Run Mapping
For every claim listed in EXPERIMENT_PLAN.md, identify:
| Plan field | Concrete execution artifact | |
|---|---|---|
| Claim / hypothesis | Section heading in EXPERIMENT_RESULT.md | |
| Spatial unit | CRS, geometry file in output/experiment/data/ | |
| Method | Call into spatial-analysis skill (ESDA / regression / GWR / accessibility / etc.) | |
| Diagnostics required | Only the diagnostics the claim actually needs (see spatial-analysis/SKILL.md §5.1 / §5.3). Do NOT run Moran's I residuals, MAUP sweeps, GWR, alternative-W sensitivity, or spatial CV by default — they apply only when the claim depends on them. When the plan is silent, follow spatial-analysis §5.3 and ask the user before adding heavyweight checks (and before omitting one that a strict GIScience reviewer would expect). Capture whatever diagnostics are run in data/diagnostics.json. | |
| Success criterion | Pass/fail row in the results table |
B4. Execute via the spatial-analysis Skill
Invoke the spatial-analysis skill per claim (or per grouped set of claims). Pass the research question verbatim from EXPERIMENT_PLAN.md and the resolved data paths. The skill will write analysis artifacts to output/spatial-analysis/ — this skill (deploy-experiment) is then responsible for:
- Copying / linking the resulting tables and figures into
output/experiment/data/andoutput/experiment/figures/with stable filenames. - Writing a short per-claim summary row (numbers, CI, p-values, effect sizes, diagnostics) to
EXPERIMENT_RESULT.md.
Intermediate data files to persist — decide which artifacts are actually needed based on the claims, methods, and visualizations the plan implies. The list below is illustrative, not mandatory; produce only what is genuinely useful for downstream visualization, paper figures, or reproducibility, and skip the rest.
Examples (pick, rename, or add as appropriate):
data/features.gpkgor.parquet— joined analytical table with geometriesdata/moran_results.csv— global + local indicatorsdata/lisa_clusters.gpkg— LISA cluster/outlier labelsdata/regression_coefficients.csv— OLS / spatial lag / error / GWR coefficientsdata/gwr_local_estimates.gpkg— per-location coefficients, t-values, local R²data/predictions.parquet— out-of-sample predictions with geometry keysdata/diagnostics.json— VIF, condition number, Moran's I on residuals, CV scoresdata/metrics.json— aggregate pass/fail per claim (machine-readable)
Always accompany data with metadata so the next step (figure generation, paper writing, review) can interpret it without re-reading code:
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/deploy-experiment/SKILL.md
Popularity
- Repository stars
- 80
- Repository forks
- 21
- 7-day trend score
- 22
Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 15 May 2026, 5 months ago.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/grind-lab-core/night_owl_research_agent/deploy-experiment)