agentsclimarketplace

Workflow planning

Skill Chenghao-Wu/superscientist/skills/workflow-planning

Use when an experiment design is approved and needs to be turned into a concrete stage-by-stage execution plan with checkpoint filesFrom its SKILL.md

Install
npx -y skills add Chenghao-Wu/superscientist --skill workflow-planning

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

10.2 KB, as published. Nobody here has run it

Workflow Planning

Overview

Turn an approved experiment design into a concrete execution plan with all checkpoint artifacts created.

Core principle: The plan creates the harness. After this skill completes, workflow-state.json, progress.log, and init.sh exist and are ready.

Process

Step 1: Read the Experiment Design Doc

Read the full design doc. Extract: objectives, stages, parameters, success criteria, pitfalls, software, walltimes.

Step 2: Define Concrete Stages

For each stage in the design, define:

FieldContent
idstage-1, stage-2, stage-3, ... (always sequential integers)
nameHuman-readable name
depends_onList of stage IDs this depends on
inputsExact file paths (relative to workflow root) as array of strings
outputsExpected output file paths as array of strings
parametersSoftware-specific parameters from the design (object)
success_criteriaSpecific, measurable criteria as a single string
backendBackend profile name (optional — omit to use default_backend)

Stage ID rules:

  • Always stage-N with sequential integers: stage-1, stage-2, stage-3, stage-4, stage-5
  • Never use sub-labels like stage-2a, stage-2b — even for parallel branches
  • If the design doc uses sub-labels (e.g., "Stage 2a, 2b, 2c"), renumber them to sequential integers
  • Branching is expressed via depends_on, not via IDs

Output directory convention:

  • Each stage writes outputs to a stage-N/ subdirectory
  • Example: stage-2/isotherm.csv, stage-3/output.log
  • Stage 1 may write to a named directory if outputs are shared inputs (e.g., structures/)

Step 2b: Ask About Autonomous Mode

After defining all stages, ask the user:

"This workflow has N stages. Enable autonomous session chaining? If yes, executing-workflows will launch a background runner that automatically chains Claude sessions until the workflow completes or blocks. Requires: tmux installed, tool permissions pre-approved in .claude/settings.json."

  • If the user says yes → set session_config.autonomous: true in the workflow-state.json created in Step 3.
  • If the user says no or skips → leave session_config.autonomous: false (the default).

Step 3: Create workflow-state.json

Create with all stages in pending status. Every stage MUST have all fields shown below — no optional fields, no extra fields.

{
  "workflow_id": "<topic>-YYYY-MM-DD",
  "version": 1,
  "created": "<ISO-timestamp>",
  "updated": "<ISO-timestamp>",
  "experiment_design": "<relative-path-to-design-doc>",
  "workflow_plan": "<relative-path-to-plan-doc>",
  "amendments": [],
  "session_config": {
    "autonomous": false,
    "session_budget": 6,
    "session_count": 0,
    "session_id": null,
    "session_cost": 0,
    "exit_reason": null,
    "stage_weights": {
      "sync": 1,
      "async": 1.5,
      "error_cycle": 2,
      "diagnostic": 2
    }
  },
  "default_backend": "local",
  "backend_profiles": {
    "local": {
      "type": "local",
      "config": {
        "batch_type": "Shell",
        "context_type": "LocalContext"
      }
    },
    "hpc-cluster": {
      "type": "remote",
      "batch_type": "Slurm",
      "config_path": "/home/user/.dpdisp/hpc_config.json",
      "resource_defaults": {
        "number_node": 1,
        "cpu_per_node": 16,
        "gpu_per_node": 0,
        "queue_name": "",
        "group_size": 1
      }
    }
  },
  "stages": [
    {
      "id": "stage-1",
      "name": "Human-readable name",
      "status": "pending",
      "depends_on": [],
      "backend": null,
      "inputs": ["path/to/input.file"],
      "outputs": ["stage-1/output.file"],
      "parameters": {
        "software": "SoftwareName",
        "key_param": "value"
      },
      "success_criteria": "Specific measurable criterion in a single string",
      "started_at": null,
      "completed_at": null,
      "retry_count": 0,
      "last_error": null,
      "running_process": null
    }
  ]
}

Schema rules:

  • stages is an array, not an object
  • inputs and outputs are arrays of strings (file paths), not objects
  • success_criteria is a single string, not an array
  • parameters is an object with key-value pairs
  • Every stage includes ALL operational fields (started_at, completed_at, retry_count, last_error, running_process) initialized to null/0
  • Top-level MUST include version: 1 and amendments: []
  • Top-level MUST include default_backend and backend_profiles (at minimum a "local" profile)
  • Stage backend field is optional — null means use default_backend
  • backend_profiles with type: "remote" must include batch_type (the scheduler type from the machine config, e.g., "Slurm", "PBS", "LSF", "SGE"), config_path (path to external machine config — validated for existence, never read), and resource_defaults
  • Top-level MUST include session_config with session_budget (default 6), session_count (0), session_id (null), session_cost (0), exit_reason (null), and stage_weights (sync: 1, async: 1.5, error_cycle: 2, diagnostic: 2). session_count is incremented by session-resume at each session start — single source of truth for session numbering. User may adjust session_budget and stage_weights after planning.
  • session_config.autonomous is a boolean (default false). Set to true during planning when the user opts in to autonomous session chaining.
  • Do NOT add extra fields (description, known_pitfalls, safeguards, expected_walltime, execution_order) — those belong in the design doc or plan doc, not the state file

Step 4: Create progress.log

Single line via Bash tool. No more.

echo "[$(date -Iseconds)] Workflow created: <workflow_id>. N stages. Purpose: <purpose>." > progress.log

Note: > (create) not >> (append) — this is the initial creation.

Step 5: Create init.sh

Build environment checks for every software tool in the workflow. This script runs at every session resume — if it's wrong, the workflow breaks.

Critical rules:

  • Use set -e — fail immediately on any error
  • Use direct conda env paths, not conda activate (unreliable in non-interactive shells)
  • Every check MUST exit 1 on failure — never use WARNING for required software
  • Check every software binary, every Python library, every tool

Template:

#!/bin/bash
set -e

# ── Infrastructure (always required) ──
command -v uvx >/dev/null 2>&1 || { echo "FAIL: uvx not found"; exit 1; }
command -v tmux >/dev/null 2>&1 || { echo "FAIL: tmux not found"; exit 1; }
uvx --from dpdispatcher dpdisp --help > /dev/null 2>&1 || { echo "FAIL: dpdispatcher not accessible via uvx"; exit 1; }

# ── Project-specific (derive ALL from design doc) ──
# Use direct conda/venv paths — `conda activate` is unreliable in non-interactive shells.
# Every check MUST `exit 1` on failure — never WARNING for required software.
#
# Examples (adapt to your software stack):
# CONDA_ENV="/path/to/conda/env"
# PYTHON="$CONDA_ENV/bin/python3"
# $PYTHON --version || { echo "FAIL: python3 not found at $PYTHON"; exit 1; }
# $PYTHON -c "import numpy; import torch" || { echo "FAIL: required Python libraries not available"; exit 1; }
# command -v lmp >/dev/null 2>&1 || { echo "FAIL: LAMMPS not found"; exit 1; }
# command -v simpleFoam >/dev/null 2>&1 || { echo "FAIL: OpenFOAM not found"; exit 1; }

echo "Environment ready."

For each software in the design doc, add a check:

  • Computation binaries (e.g., LAMMPS, OpenFOAM, VASP, GROMACS, custom solvers): check binary path
  • Python/R libraries (e.g., numpy, torch, MDAnalysis, pandas, scikit-learn): check import
  • External tools (e.g., AutoPoly, samtools, PLUMED, ffmpeg): check binary if used in scripts

Step 6: Write Plan Doc

Save to docs/superscientist/plans/YYYY-MM-DD-<topic>.md:

# [Topic] Workflow Plan

**Experiment Design:** [relative path to design doc]
**Workflow ID:** [workflow_id]
**Stages:** N total

## Stage Execution Order

1. Stage 1: [name] — [brief description]
2. Stage 2: [name] (depends on: stage-1) — [brief description]
...

## Per-Stage Details

### Stage N: [Name]
- **Dependencies:** [list]
- **Inputs:** [file paths]
- **Commands:** [exact commands to run — not vague descriptions]
- **Outputs:** [expected files]
- **Success criteria:** [specific]
- **Estimated walltime:** [from design]
- **Backend:** [profile name, e.g., "local" or "hpc-cluster"]
- **Dispatch mode:** [sync (local < 2 min) or async (tmux)]

Commands must be exact. Not "Run the simulation at 298K" but the actual command: lmp -in input.lammps or python train.py --config config.yaml. If the exact command depends on stage preparation, describe the command template and what the subagent fills in.

Backend and dispatch: Each stage specifies which backend profile to use. The superscientist:compute-backend skill handles dispatch — sync for local short jobs (< 2 min), async via tmux for everything else (remote backends always, local long jobs).

Step 7: Commit All Artifacts

git add workflow-state.json progress.log init.sh docs/superscientist/plans/
git commit -m "feat: create workflow plan for <topic>"

Step 8: Transition

Announce: "Workflow plan created. Invoke superscientist:executing-workflows to begin execution, or review the plan first."

Red Flags

ThoughtReality
"I'll create the state files later"Create them now. They ARE the plan.
"init.sh can be generic"Add software-specific checks from the design. Every tool.
"Dependencies are obvious"Write them explicitly in depends_on.
"I'll use stage-2a/2b/2c for parallel branches"Always sequential integers. Branching is in depends_on.
"conda activate works fine"Not in non-interactive shells. Use direct paths.
"A WARNING is enough for missing software"Hard fail (exit 1). Session-resume depends on this.
"Commands can be vague in the plan"Exact commands. The executing agent needs them.

Keep looking

Skills are one crate of 627,801. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.