diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 42bb31f..c6fce60 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -13,7 +13,7 @@ "name": "nextflow", "source": "./", "description": "Build, migrate, test, debug, and run Nextflow pipelines with Nextflow Platform, Wave, and nf-core.", - "version": "0.2.2", + "version": "0.3.0", "author": { "name": "Seqera", "url": "https://seqera.io" diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index 954f2bb..533e318 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "nextflow", - "version": "0.2.2", + "version": "0.3.0", "description": "Build, migrate, test, debug, and run Nextflow pipelines with Nextflow Platform, Wave, and nf-core.", "icon": "./assets/nextflow-uploaded-logo.png", "author": { diff --git a/.codex-plugin/plugin.json b/.codex-plugin/plugin.json index 98f7d7c..1c13844 100644 --- a/.codex-plugin/plugin.json +++ b/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "nextflow", - "version": "0.2.2", + "version": "0.3.0", "description": "Build, migrate, test, debug, and run Nextflow pipelines with Nextflow Platform, Wave, and nf-core.", "author": { "name": "Seqera", diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index ee67851..fa3837c 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -62,9 +62,9 @@ jobs: codex plugin marketplace add ./ codex plugin add nextflow@nextflow-plugin codex plugin list | tee codex-plugins.txt - grep -q "nextflow@nextflow-plugin installed, enabled" codex-plugins.txt + grep -Eq '^nextflow@nextflow-plugin[[:space:]]+installed, enabled[[:space:]]' codex-plugins.txt codex mcp list | tee codex-mcp.txt - grep -q "seqera https://mcp.seqera.io/mcp" codex-mcp.txt + grep -Eq '^seqera[[:space:]]+https://mcp[.]seqera[.]io/mcp[[:space:]]' codex-mcp.txt expected=$(ls skills | wc -l) actual=$(codex debug prompt-input "hi" | grep -o "nextflow:[a-z0-9-]*" | sort -u | wc -l) test "$actual" -eq "$expected" diff --git a/NOTICE b/NOTICE index fc0c769..c6fa56a 100644 --- a/NOTICE +++ b/NOTICE @@ -16,6 +16,6 @@ the Apache License, Version 2.0: License: licenses/nextflow-agent-skills-Apache-2.0.txt - nextflow-development skill (bio-research skills) - License: skills/nextflow-development/LICENSE.txt + License: skills/launch-workflow/references/nextflow-development/LICENSE.txt Per-file origin and hashes are recorded in sources.json. diff --git a/README.md b/README.md index f7f35f2..22c4954 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,8 @@ Build, migrate, test, debug and run [Nextflow](https://www.nextflow.io) pipelines with Claude or Codex, connected to [Nextflow Platform](https://seqera.io), Wave containers and nf-core. -The plugin bundles 28 skills and the hosted Seqera MCP server (`https://mcp.seqera.io/mcp`). +The plugin bundles **11 skills** and the hosted Seqera MCP server (`https://mcp.seqera.io/mcp`). +Specialist procedures remain available as selectively loaded references; no extra plugins are needed. ## Install @@ -54,14 +55,19 @@ and takes its listing (name, logo, starter prompts) from `.codex-plugin/plugin.j ## What's included -| Area | Skills | +| Area | Skills and selectively loaded procedures | | --- | --- | -| Build pipelines | `build-nextflow-pipeline`, `nf-pipeline-design`, `nextflow-config`, `nextflow-schema`, `nextflow-output-patterns`, `search-existing-modules`, `run-module`, `create-container` | -| Convert to Nextflow | `build-nextflow-pipeline` (Python, R and notebook playbooks), `migrate-from-snakemake`, `audit-conversion-readiness`, `nextflow-schema` (parameter triage), `find-alternative-tools` | -| Migrate and modernise | `migrate-nextflow-code` (version, strict-syntax and boolean references), `nextflow-schema` (schema migration), `nf-plugin-development`, `nf-plugin-legacy-migration`, `maintain-nf-core-pipeline` | -| Test and debug | `nf-test` (authoring and failure repair), `repair-workflow` (including static diagnostics), `debug-local-run`, `debug-seqera-failed-run`, `nextflow-history` (history, cache and narrative recaps), `nf-data-lineage`, `nf-docker-scripts` | -| Nextflow Platform | `launch-workflow` (with shared MCP connection reference), `ce-credentials-setup`, `seqera-data-links`, `seqerakit` | -| General | `nextflow-development`, `install-nextflow` | +| Build and convert | `build-nextflow-pipeline` — Python/R/notebooks/Snakemake, readiness audits, module discovery/native runs, requested tool comparisons and runtime setup | +| Design and package | `nf-pipeline-design` — code structure and output correctness; `create-container` — containers and script staging/packaging | +| Configure and validate | `nextflow-config`, `nextflow-schema` — parameters, schemas and validation migrations | +| Test and repair | `nf-test`, `repair-workflow` | +| Debug and trace | `debug-local-run` — local failures, run/cache history and lineage; `debug-seqera-failed-run` — Platform failures | +| Modernise | `migrate-nextflow-code` — language migrations, plugin authoring/legacy migration and nf-core maintenance | +| Run and launch | `launch-workflow` — local/Platform execution, nf-core/GEO/SRA analyses, compute readiness, data links and Seqerakit | + +Each skill links its specialist playbooks and keeps their supporting assets. Read only the +matching playbook and stop at the requested task: an audit does not require pipeline creation, +compute setup does not authorize a launch, and a launch does not authorize committing or pushing. ## Licensing diff --git a/skills/build-nextflow-pipeline/SKILL.md b/skills/build-nextflow-pipeline/SKILL.md index 6eb17b6..b3cc802 100644 --- a/skills/build-nextflow-pipeline/SKILL.md +++ b/skills/build-nextflow-pipeline/SKILL.md @@ -1,17 +1,12 @@ --- name: build-nextflow-pipeline description: > - Plan and scaffold a new Nextflow DSL2 pipeline from source material — - scripts, repositories, Jupyter/R notebooks, papers, or informal - instructions. Drives the planning phases before any .nf code is written: - mapping the data flow, critiquing it, shaping channels and metadata, - scoping subworkflows, hunting for existing modules, and only then building - containers and writing code. Use this skill whenever the user asks to - "build a pipeline", "compose registry modules", "port this to Nextflow", "turn this notebook/repo/script - into a pipeline", or otherwise wants to go from an existing body of work to - a clean Nextflow pipeline. Pair with `nf-pipeline-design`, which owns the - code-level rules (layout, main.nf, subworkflow/module shape); this skill - owns the planning process that precedes them. + Build or convert Nextflow pipelines from scripts, notebooks, repositories + or Snakemake workflows. Also use for read-only conversion readiness audits, + discovering or directly running registry modules, requested tool comparisons, + and Nextflow installation or upgrade help. Choose the bounded task path; + only full pipeline construction uses the planning phases. Pair with + nf-pipeline-design for code structure and output contracts. --- @@ -30,9 +25,15 @@ manages OAuth for the connected MCP server. # Build a Nextflow Pipeline +## Choose the requested task + +Audit, module discovery/execution, tool comparison and installation requests use only their matching playbook; skip construction phases and stop at the requested result. Pass the playbook to a helper agent rather than invoking a removed skill. + +For nf-core analysis or Platform setup, use `launch-workflow`; for extension-plugin work or nf-core maintenance, use `migrate-nextflow-code`; for history or lineage, use `debug-local-run`. These specialist tasks do not enter pipeline construction. + ## Choose the construction path -For composing existing Registry modules, read [registry composition](references/create-workflow/README.md) and follow its plan → approval → module validation → composition → end-to-end verification loop. For a single module, use `run-module`; a wrapper workflow is unnecessary. +For composing existing Registry modules, read [registry composition](references/create-workflow/README.md) and follow its plan → approval → module validation → composition → end-to-end verification loop. For a single module, use [native module execution](references/run-module/README.md); a wrapper workflow is unnecessary. For scripts, notebooks, repositories or analysis descriptions, use the source-material phases below. Load `nf-pipeline-design` for code-level rules in either path. @@ -50,12 +51,12 @@ Delegate only when the host supports subagents; otherwise perform the same steps | Phase step | Delegate? | Companion skill | |---|---|---| -| Auditing what the source material actually points at | **Yes** — hand the source material to one subagent | `audit-conversion-readiness` | +| Auditing what the source material actually points at | **Yes** — hand the source material to one subagent | [conversion readiness](references/audit-conversion-readiness/README.md) | | Mapping the data flow | No — this is the core act of planning, keep it in the main conversation | — | | Triaging parameters and drafting `nextflow_schema.json` | **Yes** — hand the source material to one subagent | `nextflow-schema` | | Designing channels and metadata | No — needs the data flow map as live context | — | -| Comparing alternatives, only when requested or the selected tool is blocked | **Optional** — delegate the bounded comparison when useful | `find-alternative-tools` | -| Searching for existing Nextflow modules for each chosen tool | **Yes — one subagent per tool, in parallel** | `search-existing-modules` | +| Comparing alternatives, only when requested or the selected tool is blocked | **Optional** — delegate the bounded comparison when useful | [tool comparison](references/find-alternative-tools/README.md) | +| Searching for existing Nextflow modules for each chosen tool | **Yes — one subagent per tool, in parallel** | [module discovery](references/search-existing-modules/README.md) | | Building and verifying the container for each tool branch | **Yes — one subagent per tool, in parallel** | `create-container` | | Writing `main.nf`, subworkflows, and modules | No — this is a synthesis step that uses every prior artifact | — | @@ -100,7 +101,7 @@ available: absolute paths into a lab NAS, reference bundles nobody can reach fro here, a helper script that never made it into the handover. Finding that out after the modules exist is the most expensive way to learn it. -Run `audit-conversion-readiness` on the source material first. It +Run [conversion readiness](references/audit-conversion-readiness/README.md) on the source material first. It returns a blockers-first report — unreachable paths, missing tool code, tools with no distributable container — plus one consolidated list of what to ask the user. Fold the surviving references into Phase 1's data flow map and parameter triage. @@ -346,7 +347,7 @@ Each subworkflow should: Use the tool requested by the user or required to preserve the source analysis. If none is specified, recommend one suitable default and resolve material license, compute or output-contract constraints before implementation. -Use `find-alternative-tools` only when the user requests a comparison or the selected tool is blocked. Research produces candidates; it does not authorize implementing them. +Use [tool comparison](references/find-alternative-tools/README.md) only when the user requests a comparison or the selected tool is blocked. Research produces candidates; it does not authorize implementing them. Add multiple tool branches only when the user explicitly requests or approves them. For approved branches: @@ -365,7 +366,7 @@ For each selected tool, search for existing implementations in this priority ord 2. **The inputted source.** Check the scripts, notebooks, or repository you were given — is there already a containerized version, a Dockerfile, a conda env? Reuse it. 3. **Online: papers, preprints, GitHub, biorxiv, arxiv.** Look for community implementations, reference pipelines, or tool authors' recommended invocations. A five-minute search often finds a canonical invocation that saves hours of trial and error. -**Delegate this search when available.** For each tool selected, use the `search-existing-modules` skill with the tool name, the path to the pipeline's source material, and — if the prior enumerate step flagged one — the nf-core module hint. The hint enables a quick verification instead of re-running the full priority-order search. These tasks can run in parallel with one subagent per tool. Each search produces a verdict (reuse / vendor / write new) plus the structured metadata needed by the next phase. Paste the verdicts into the planning document's "Module sourcing" section. +**Delegate this search when available.** For each tool selected, use the [module discovery](references/search-existing-modules/README.md) skill with the tool name, the path to the pipeline's source material, and — if the prior enumerate step flagged one — the nf-core module hint. The hint enables a quick verification instead of re-running the full priority-order search. These tasks can run in parallel with one subagent per tool. Each search produces a verdict (reuse / vendor / write new) plus the structured metadata needed by the next phase. Paste the verdicts into the planning document's "Module sourcing" section. If a verdict reveals tool-argument parameters that were not captured in Phase 1's schema draft (e.g. the canonical invocation uses a `--kmer-size` flag that the source material omitted), add them to `nextflow_schema.json` now — this is the second expected schema augmentation. Keep `nextflow.config` in sync. @@ -387,7 +388,7 @@ Why this ordering matters: most "Nextflow bugs" when porting existing work are n **Delegate per-tool container builds when available.** For each tool that came back as "vendor" or "write new" from the module search, use the `create-container` skill with: - The tool name and target version. -- The target command line (from the `CANONICAL CLI` field of the search-existing-modules verdict). +- The target command line (from the `CANONICAL CLI` field of the [module discovery](references/search-existing-modules/README.md) verdict). - The test-input row for that tool from the planning document's "Test inputs" section (produced by `nextflow-schema` in Phase 1). Include path, format, size, and expected output shape. - Any constraints the main conversation has committed to (executor, GPU, container registry). @@ -418,7 +419,7 @@ Writing the actual `main.nf`, subworkflows, and modules should now be a mechanic - [ ] Cheap operations are assigned to operators/Groovy; expensive ones to modules - [ ] Each subworkflow has a one-sentence rationale and a named underlying tool (or set of alternative tools with branching) - [ ] The selected tools match the requested analysis; any additional implemented branches were explicitly requested or approved -- [ ] Existing-module search has been done for every chosen tool, using `search-existing-modules`, with verdicts in the planning document +- [ ] Existing-module search has been done for every chosen tool, using [module discovery](references/search-existing-modules/README.md), with verdicts in the planning document - [ ] Test inputs exist at the user's selected test data (or are specified to be derived) for every heavy tool - [ ] Containers are built and tool commands verified, delegated to `create-container` subagents where possible, with verified image references in the planning document - [ ] `nf-pipeline-design` has been re-read for the code-level rules @@ -445,3 +446,27 @@ When converting R source into Nextflow, preserve statistical semantics, dependen ## Notebook conversion playbook When converting a Jupyter notebook, inventory cell dependencies and hidden state before extracting executable steps. Read [notebook conversion](references/convert-jupyter-notebook/README.md) before proceeding. + +## Snakemake conversion playbook + +When converting a Snakefile, preserve DAG, wildcard, scheduler and golden-output semantics. Read [snakemake conversion](references/migrate-from-snakemake/README.md) before proceeding. + +## Conversion readiness playbook + +For an audit-only request, inventory and probe inputs, code and dependencies; stop with a blockers-first report without editing pipeline code. Read [conversion readiness](references/audit-conversion-readiness/README.md) before proceeding. + +## Module discovery playbook + +When selecting a tool implementation, return a verified reuse, vendor/adapt or write-new verdict. Read [module discovery](references/search-existing-modules/README.md) before proceeding. + +## Native module execution playbook + +For a module-only request, inspect the module contract and run it natively on verified inputs; no wrapper workflow or construction phases are needed. Read [native module execution](references/run-module/README.md) before proceeding. + +## Tool comparison playbook + +For requested comparisons or a blocked selected tool, compare alternatives; implementation needs separate user approval. Read [tool comparison](references/find-alternative-tools/README.md) before proceeding. + +## Runtime setup playbook + +For installation or upgrade help, check the selected release and operation first; ask before changing the environment. Read [runtime setup](references/install-nextflow/README.md) before proceeding. diff --git a/skills/audit-conversion-readiness/SKILL.md b/skills/build-nextflow-pipeline/references/audit-conversion-readiness/README.md similarity index 77% rename from skills/audit-conversion-readiness/SKILL.md rename to skills/build-nextflow-pipeline/references/audit-conversion-readiness/README.md index a4cec13..827d918 100644 --- a/skills/audit-conversion-readiness/SKILL.md +++ b/skills/build-nextflow-pipeline/references/audit-conversion-readiness/README.md @@ -1,18 +1,3 @@ ---- -name: audit-conversion-readiness -description: > - Read-only first-pass audit of source material (scripts, notebooks, - Snakemake/WDL/CWL workflows, legacy in-house pipelines) before converting or - migrating it to Nextflow. Inventories every hardcoded or external file path, - probes which of them are actually reachable from this session, and flags tool - code and dependencies that are referenced but were never provided. Run this - before any conversion work, and whenever the user asks to "audit this before - converting", "find the hardcoded paths", "can you actually access these files - or reference data", "what's missing before we convert this", "what will block - this port to Nextflow", or "why can't you read this path". Output is a - blockers-first report plus one consolidated list of what the user needs to - supply — no pipeline code. ---- ## Using this skill @@ -22,7 +7,7 @@ pipeline, input data and execution environment from their request or current context. Use user-selected locations for files and results. Consult companion skills, bundled references and optional helpers by name when available. -For Seqera operations, read the [MCP connection](../launch-workflow/references/seqera-mcp/README.md) connection reference. Any `platform_*` examples +For Seqera operations, read the [MCP connection](../../../launch-workflow/references/seqera-mcp/README.md) connection reference. Any `platform_*` examples describe API operations. Discover their exact names and parameter schemas with `search_seqera_api`, then invoke `call_seqera_api` using those schemas. The host manages OAuth for the connected MCP server. @@ -106,7 +91,7 @@ names — you must then `call_seqera_api` to list them (the authenticated MCP co returned by an authenticated workspace lookup 3. Match each `s3://` / `gs://` / `az://` URI against the returned links -Load `seqera-data-links` only if you then need to *create* a link. +Load [data links](../../../launch-workflow/references/seqera-data-links/README.md) only if you then need to *create* a link. An existing data link is usually the answer to "how will the pipeline read this". ## Step 3 — audit tool and helper code availability @@ -145,16 +130,16 @@ exists to prevent. With the audit answered, route onward: -- [parameter triage](../nextflow-schema/references/triage-pipeline-parameters/README.md) — turn the surviving paths and +- [parameter triage](../../../nextflow-schema/references/triage-pipeline-parameters/README.md) — turn the surviving paths and constants into a parameter surface and schema -- `create-container` or `nf-docker-scripts` — tools +- `create-container` or [script packaging](../../../create-container/references/nf-docker-scripts/README.md) — tools with no usable image -- `search-existing-modules` — tools that may already have a module -- `find-alternative-tools` — tools blocked by license, GPU +- [module discovery](../search-existing-modules/README.md) — tools that may already have a module +- [tool comparison](../find-alternative-tools/README.md) — tools blocked by license, GPU requirements, or abandonment -- `seqera-data-links` — cloud data the pipeline must read -- Then the conversion skill itself: [Python conversion](../build-nextflow-pipeline/references/convert-python-script/README.md), [R conversion](../build-nextflow-pipeline/references/convert-r-script/README.md), - [notebook conversion](../build-nextflow-pipeline/references/convert-jupyter-notebook/README.md), `migrate-from-snakemake`, or [registry composition](../build-nextflow-pipeline/references/create-workflow/README.md) +- [data links](../../../launch-workflow/references/seqera-data-links/README.md) — cloud data the pipeline must read +- Then the conversion skill itself: [Python conversion](../convert-python-script/README.md), [R conversion](../convert-r-script/README.md), + [notebook conversion](../convert-jupyter-notebook/README.md), [snakemake conversion](../migrate-from-snakemake/README.md), or [registry composition](../create-workflow/README.md) ## Guardrails @@ -165,5 +150,5 @@ With the audit answered, route onward: - Never treat a missing file as a reason to drop the step from the conversion — it is a question for the user. - Hardcoded paths are findings, not bugs to fix in place. The pipeline's - parameter surface is where they get resolved, in [parameter triage](../nextflow-schema/references/triage-pipeline-parameters/README.md). + parameter surface is where they get resolved, in [parameter triage](../../../nextflow-schema/references/triage-pipeline-parameters/README.md). - Keep the audit read-only. No edits to the source material, no scaffolding. diff --git a/skills/audit-conversion-readiness/references/reference-patterns.md b/skills/build-nextflow-pipeline/references/audit-conversion-readiness/references/reference-patterns.md similarity index 100% rename from skills/audit-conversion-readiness/references/reference-patterns.md rename to skills/build-nextflow-pipeline/references/audit-conversion-readiness/references/reference-patterns.md diff --git a/skills/audit-conversion-readiness/references/report-template.md b/skills/build-nextflow-pipeline/references/audit-conversion-readiness/references/report-template.md similarity index 100% rename from skills/audit-conversion-readiness/references/report-template.md rename to skills/build-nextflow-pipeline/references/audit-conversion-readiness/references/report-template.md diff --git a/skills/audit-conversion-readiness/references/tool-availability.md b/skills/build-nextflow-pipeline/references/audit-conversion-readiness/references/tool-availability.md similarity index 98% rename from skills/audit-conversion-readiness/references/tool-availability.md rename to skills/build-nextflow-pipeline/references/audit-conversion-readiness/references/tool-availability.md index d3788e4..5179582 100644 --- a/skills/audit-conversion-readiness/references/tool-availability.md +++ b/skills/build-nextflow-pipeline/references/audit-conversion-readiness/references/tool-availability.md @@ -67,7 +67,7 @@ just the Dockerfile: cannot fetch these unattended; they become a staged input or a data link. - **GPU-only** — a GPU requirement constrains the compute environment. Record the CUDA/driver expectation. If the target environment has no GPU, route to - `find-alternative-tools` for a CPU path. + [tool comparison](../../find-alternative-tools/README.md) for a CPU path. - **Interactive or GUI-only** — cannot be a pipeline step at all. It needs either a headless mode or removal from scope. - **Abandoned with no image and no source release** — treat like a missing tool diff --git a/skills/build-nextflow-pipeline/references/convert-jupyter-notebook/README.md b/skills/build-nextflow-pipeline/references/convert-jupyter-notebook/README.md index 5bce8de..adb6dbd 100644 --- a/skills/build-nextflow-pipeline/references/convert-jupyter-notebook/README.md +++ b/skills/build-nextflow-pipeline/references/convert-jupyter-notebook/README.md @@ -28,7 +28,7 @@ Identify meaningful executable tasks rather than making each cell a process. Ext ### Plan First 0. **Audit** what the notebook points at — run - `audit-conversion-readiness` to find hardcoded paths you cannot + [conversion readiness](../audit-conversion-readiness/README.md) to find hardcoded paths you cannot reach and helper modules the notebook imports but that were not provided 1. **Analyze** the notebook: understand the analysis steps, inputs, outputs, and dependencies between cells 2. **Outline** the Nextflow process structure: identify logical groupings of cells that form distinct pipeline steps @@ -54,7 +54,7 @@ After generating the pipeline: Run validation with an available Nextflow installation and host execution tools. If either is unavailable, report validation as unverified and read -`install-nextflow` for installation guidance. +[runtime setup](../install-nextflow/README.md) for installation guidance. ### Common Patterns diff --git a/skills/build-nextflow-pipeline/references/convert-python-script/README.md b/skills/build-nextflow-pipeline/references/convert-python-script/README.md index 0efefe6..b5497b5 100644 --- a/skills/build-nextflow-pipeline/references/convert-python-script/README.md +++ b/skills/build-nextflow-pipeline/references/convert-python-script/README.md @@ -27,7 +27,7 @@ Load this skill when the user wants to: ## Workflow -0. **Audit readiness** — `audit-conversion-readiness` for anything +0. **Audit readiness** — [conversion readiness](../audit-conversion-readiness/README.md) for anything beyond a self-contained script: it finds hardcoded paths you cannot reach and imports or helper scripts that were never provided, before you design around them. @@ -228,7 +228,7 @@ Map Python's `shutil.copy(result, output_dir)` or `os.rename()` calls → `publi ## Snakemake Migration -For full Snakemake workflow conversion, load the dedicated `migrate-from-snakemake` skill. +For full Snakemake workflow conversion, load the dedicated [snakemake conversion](../migrate-from-snakemake/README.md) skill. This skill focuses on standalone Python script conversion. ## Common Pitfalls diff --git a/skills/build-nextflow-pipeline/references/convert-r-script/README.md b/skills/build-nextflow-pipeline/references/convert-r-script/README.md index 005c38c..d7b821d 100644 --- a/skills/build-nextflow-pipeline/references/convert-r-script/README.md +++ b/skills/build-nextflow-pipeline/references/convert-r-script/README.md @@ -22,7 +22,7 @@ Convert R source while preserving statistical behavior. Wrap tested R code when ### 0. Audit readiness For anything beyond a self-contained script, run -`audit-conversion-readiness` first. `setwd()` plus relative reads, +[conversion readiness](../audit-conversion-readiness/README.md) first. `setwd()` plus relative reads, `source()` of files outside the handover, and reference paths on a lab share are the usual blockers, and they are cheaper to surface now than mid-conversion. @@ -60,7 +60,7 @@ After generating the pipeline: Run validation with an available Nextflow installation and host execution tools. If either is unavailable, report validation as unverified and read -`install-nextflow` for installation guidance. +[runtime setup](../install-nextflow/README.md) for installation guidance. ## Guidelines diff --git a/skills/build-nextflow-pipeline/references/create-workflow/README.md b/skills/build-nextflow-pipeline/references/create-workflow/README.md index 2280718..49a24fb 100644 --- a/skills/build-nextflow-pipeline/references/create-workflow/README.md +++ b/skills/build-nextflow-pipeline/references/create-workflow/README.md @@ -30,12 +30,12 @@ include { FASTQC } from 'nf-core/fastqc' workflow { FASTQC(Channel.fromPath(params.input)) } ``` -✅ **CORRECT** - Use the `run-module` skill: +✅ **CORRECT** - Use the [native module execution](../run-module/README.md) skill: ``` -run-module +[native module execution](../run-module/README.md) ``` -**The `run-module` skill:** +**The [native module execution](../run-module/README.md) skill:** - Uses `nextflow module search/view` to discover and get proper inputs/parameters - Runs modules directly via `nextflow module run /` - No wrapper workflow needed @@ -74,13 +74,13 @@ run-module 1. Determine appropriate **test data** for validation 2. For EACH module in the plan, sequentially: - - **Install and run with test data**: Invoke `run-module` + - **Install and run with test data**: Invoke [native module execution](../run-module/README.md) - **Verify outputs** - confirm expected data is produced - Only proceed to next module after current one succeeds 3. Record ALL module run commands and their outputs in a validation record selected by the user 4. If a command fails, stop and show the user the command used and the output generated before trying something else -> **Note**: The `run-module` skill uses `nextflow module` commands for discovery, configuration, and execution — modules are installed on-the-fly. +> **Note**: The [native module execution](../run-module/README.md) skill uses `nextflow module` commands for discovery, configuration, and execution — modules are installed on-the-fly. **DO NOT proceed to Step 4 until ALL modules have been individually validated.** @@ -125,7 +125,7 @@ Only after ALL modules run successfully: ### Module Selection - Prefer single-tool modules over sub-workflows -- Do not write wrapper workflows to test single modules - use `run-module` instead +- Do not write wrapper workflows to test single modules - use [native module execution](../run-module/README.md) instead - Use `nextflow module search` to find modules, then `nextflow module view` for details ### Debugging Protocol @@ -140,17 +140,17 @@ Only after ALL modules run successfully: | Task | Invoke Skill | |------|--------------| -| Install/run/test a module | `run-module` | +| Install/run/test a module | [native module execution](../run-module/README.md) | ### When to Delegate -- **Step 3 (Validate Modules)**: Use `run-module` skill for each module validation +- **Step 3 (Validate Modules)**: Use [native module execution](../run-module/README.md) skill for each module validation ### Example: Step 3 Validation For each module in your plan: ``` -1. Invoke: run-module → install, run with test data, and verify outputs +1. Invoke: [native module execution](../run-module/README.md) → install, run with test data, and verify outputs 2. Only proceed to next module after success ``` diff --git a/skills/find-alternative-tools/SKILL.md b/skills/build-nextflow-pipeline/references/find-alternative-tools/README.md similarity index 79% rename from skills/find-alternative-tools/SKILL.md rename to skills/build-nextflow-pipeline/references/find-alternative-tools/README.md index d1d5324..17ad06a 100644 --- a/skills/find-alternative-tools/SKILL.md +++ b/skills/build-nextflow-pipeline/references/find-alternative-tools/README.md @@ -1,7 +1,3 @@ ---- -name: find-alternative-tools -description: Given a named bioinformatics analysis step (e.g. "multiple sequence alignment", "somatic variant calling", "protein structure prediction", "single-cell demultiplexing"), find the credible alternative tools that could implement it, with pros/cons, license notes, typical compute requirements, maintenance status, and a ranked recommendation. Output is a structured comparison to inform tool selection; research does not authorize implementation of additional branches. Use whenever a subworkflow is being scoped and needs multiple tool options, when asked to "list alternatives for X", "what could we use instead of Y", "what tools exist for Z", or as a subagent task inside the `build-nextflow-pipeline` flow at the alternative-tools step. Self-contained — needs only the analysis step and any constraints, no prior conversation context. ---- ## Using this skill @@ -11,7 +7,7 @@ pipeline, input data and execution environment from their request or current context. Use user-selected locations for files and results. Consult companion skills, bundled references and optional helpers by name when available. -For Seqera operations, read the [MCP connection](../launch-workflow/references/seqera-mcp/README.md) connection reference. Any `platform_*` examples +For Seqera operations, read the [MCP connection](../../../launch-workflow/references/seqera-mcp/README.md) connection reference. Any `platform_*` examples describe API operations. Discover their exact names and parameter schemas with `search_seqera_api`, then invoke `call_seqera_api` using those schemas. The host manages OAuth for the connected MCP server. @@ -52,7 +48,7 @@ For each tool, a short block: - **Maintenance status** — last release date, commit activity, responsive issue tracker - **Compute profile** — CPU-only / GPU-required / memory footprint / typical runtime per sample - **Container availability** — official Docker image, bioconda package, or needs-build-from-source -- **nf-core module hint** — if you happen to notice an existing nf-core module for this tool during your research on a public module page or in the user's source, record it here. This is not the job of this skill (that is `search-existing-modules`), but free signal is free signal — the next phase can verify and skip redundant discovery. +- **nf-core module hint** — if you happen to notice an existing nf-core module for this tool during your research on a public module page or in the user's source, record it here. This is not the job of this skill (that is [module discovery](../search-existing-modules/README.md)), but free signal is free signal — the next phase can verify and skip redundant discovery. - **Output format** — what downstream tools need to consume - **Strengths** — 1–3 bullets, concrete not marketing - **Weaknesses / caveats** — 1–3 bullets, honest; include known bugs, quality issues, or sharp edges diff --git a/skills/install-nextflow/SKILL.md b/skills/build-nextflow-pipeline/references/install-nextflow/README.md similarity index 87% rename from skills/install-nextflow/SKILL.md rename to skills/build-nextflow-pipeline/references/install-nextflow/README.md index 3d38792..2928647 100644 --- a/skills/install-nextflow/SKILL.md +++ b/skills/build-nextflow-pipeline/references/install-nextflow/README.md @@ -1,7 +1,3 @@ ---- -name: install-nextflow -description: Install or upgrade Nextflow on the user's machine. Use when the user wants to install Nextflow, check their current Nextflow version, upgrade Nextflow, or set up the prerequisites (Java 17+) needed to run Nextflow. ---- ## Using this skill @@ -11,7 +7,7 @@ pipeline, input data and execution environment from their request or current context. Use user-selected locations for files and results. Consult companion skills, bundled references and optional helpers by name when available. -For Seqera operations, read the [MCP connection](../launch-workflow/references/seqera-mcp/README.md) connection reference. Any `platform_*` examples +For Seqera operations, read the [MCP connection](../../../launch-workflow/references/seqera-mcp/README.md) connection reference. Any `platform_*` examples describe API operations. Discover their exact names and parameter schemas with `search_seqera_api`, then invoke `call_seqera_api` using those schemas. The host manages OAuth for the connected MCP server. @@ -19,6 +15,8 @@ manages OAuth for the connected MCP server. # Install or Upgrade Nextflow +An installation-help request is not permission to change the environment. Confirm the target release, Java/runtime prerequisites and user's approval before any installer, package-manager command or self-update. + Install Nextflow (or upgrade an existing installation) and ensure the Java prerequisite is in place. ## Step 1: Check Whether Nextflow Is Installed @@ -35,8 +33,8 @@ command -v nextflow && nextflow -version If Nextflow is already installed: 1. Read the installed version from `nextflow -version`. -2. If the installed version is **older than 26.04**, the user MUST upgrade — other Nextflow skills depend on it. -3. Otherwise, propose an upgrade only if a newer version is available. +2. Check whether the installed release supports the user's requested operation. Ordinary pipeline execution does not inherit the 26.04 minimum used by native module or launch commands. +3. If the operation is unsupported, explain the minimum supported release and ask before upgrading; otherwise keep the existing installation unless the user requests an upgrade. Run a self-update (it checks the latest release and updates if newer): diff --git a/skills/migrate-from-snakemake/SKILL.md b/skills/build-nextflow-pipeline/references/migrate-from-snakemake/README.md similarity index 90% rename from skills/migrate-from-snakemake/SKILL.md rename to skills/build-nextflow-pipeline/references/migrate-from-snakemake/README.md index 1e5db01..30f4094 100644 --- a/skills/migrate-from-snakemake/SKILL.md +++ b/skills/build-nextflow-pipeline/references/migrate-from-snakemake/README.md @@ -1,10 +1,3 @@ ---- -name: migrate-from-snakemake -description: > - Convert Snakemake workflows to idiomatic Nextflow DSL2 pipelines with a - test-first, modular migration loop. Trigger: "snakemake to nextflow", - "migrate from snakemake", "convert snakefile", "/migrate-from-snakemake". ---- ## Using this skill @@ -14,7 +7,7 @@ pipeline, input data and execution environment from their request or current context. Use user-selected locations for files and results. Consult companion skills, bundled references and optional helpers by name when available. -For Seqera operations, read the [MCP connection](../launch-workflow/references/seqera-mcp/README.md) connection reference. Any `platform_*` examples +For Seqera operations, read the [MCP connection](../../../launch-workflow/references/seqera-mcp/README.md) connection reference. Any `platform_*` examples describe API operations. Discover their exact names and parameter schemas with `search_seqera_api`, then invoke `call_seqera_api` using those schemas. The host manages OAuth for the connected MCP server. @@ -49,11 +42,11 @@ Bootstrap these files before any process exists: Check the relevant lint rules, including `nfcore_yml`, `nextflow_config`, `base_config`, `modules_config`, `local_component_structure`, `pipeline_todos`, `template_strings`, and `merge_markers`. Run `nf-core pipelines lint -k --json ` from the pipeline root before declaring the migration done. -For the complete conventions (branches, edit policy, CLI commands), chain `maintain-nf-core-pipeline` and read its `nf-core-conventions.md`. +For the complete conventions (branches, edit policy, CLI commands), chain [nf-core maintenance](../../../migrate-nextflow-code/references/maintain-nf-core-pipeline/README.md) and read its `nf-core-conventions.md`. ### 1) Establish source-of-truth before edits -0. **Audit readiness first** — run `audit-conversion-readiness` over +0. **Audit readiness first** — run [conversion readiness](../audit-conversion-readiness/README.md) over the Snakefile and its config. Every `config[...]` key with no configfile entry, every `script:`/`wrapper:` that is not in the handover, and every reference path on an unreachable mount is a blocker that stops a baseline run before it starts. @@ -78,7 +71,7 @@ Treat this as your spec. The rulegraph is your conversion roadmap — each node - Translate the main `Snakefile` into `main.nf` + `nextflow.config` skeleton. - Map global config and top-level DAG flow before implementing every rule detail. - Keep process stubs minimal but executable so the workflow compiles early. -- For non-trivial param surfaces: [parameter triage](../nextflow-schema/references/triage-pipeline-parameters/README.md) before locking `nextflow.config`. +- For non-trivial param surfaces: [parameter triage](../../../nextflow-schema/references/triage-pipeline-parameters/README.md) before locking `nextflow.config`. ### 4) Decompose by responsibility @@ -88,7 +81,7 @@ Treat this as your spec. The rulegraph is your conversion roadmap — each node ### 5) Prefer nf-core modules as starting points -For each wrapper/rule tool, call `search-existing-modules` first — it returns a verdict (reuse nf-core, vendor a community module, or canonical invocation for a project-owned module). Patch only the delta for local behavior. +For each wrapper/rule tool, call [module discovery](../search-existing-modules/README.md) first — it returns a verdict (reuse nf-core, vendor a community module, or canonical invocation for a project-owned module). Patch only the delta for local behavior. ### 6) Wire dataflow explicitly diff --git a/skills/migrate-from-snakemake/references/nextflow-conda-troubleshooting.md b/skills/build-nextflow-pipeline/references/migrate-from-snakemake/references/nextflow-conda-troubleshooting.md similarity index 100% rename from skills/migrate-from-snakemake/references/nextflow-conda-troubleshooting.md rename to skills/build-nextflow-pipeline/references/migrate-from-snakemake/references/nextflow-conda-troubleshooting.md diff --git a/skills/migrate-from-snakemake/references/snakemake-nextflow-playbook.md b/skills/build-nextflow-pipeline/references/migrate-from-snakemake/references/snakemake-nextflow-playbook.md similarity index 100% rename from skills/migrate-from-snakemake/references/snakemake-nextflow-playbook.md rename to skills/build-nextflow-pipeline/references/migrate-from-snakemake/references/snakemake-nextflow-playbook.md diff --git a/skills/migrate-from-snakemake/references/snakemake-rules-core.md b/skills/build-nextflow-pipeline/references/migrate-from-snakemake/references/snakemake-rules-core.md similarity index 100% rename from skills/migrate-from-snakemake/references/snakemake-rules-core.md rename to skills/build-nextflow-pipeline/references/migrate-from-snakemake/references/snakemake-rules-core.md diff --git a/skills/migrate-from-snakemake/references/snakemake-testing-unit-tests.md b/skills/build-nextflow-pipeline/references/migrate-from-snakemake/references/snakemake-testing-unit-tests.md similarity index 100% rename from skills/migrate-from-snakemake/references/snakemake-testing-unit-tests.md rename to skills/build-nextflow-pipeline/references/migrate-from-snakemake/references/snakemake-testing-unit-tests.md diff --git a/skills/migrate-from-snakemake/references/snakemake-writing-workflows.md b/skills/build-nextflow-pipeline/references/migrate-from-snakemake/references/snakemake-writing-workflows.md similarity index 100% rename from skills/migrate-from-snakemake/references/snakemake-writing-workflows.md rename to skills/build-nextflow-pipeline/references/migrate-from-snakemake/references/snakemake-writing-workflows.md diff --git a/skills/run-module/SKILL.md b/skills/build-nextflow-pipeline/references/run-module/README.md similarity index 91% rename from skills/run-module/SKILL.md rename to skills/build-nextflow-pipeline/references/run-module/README.md index aad186f..d76ebc2 100644 --- a/skills/run-module/SKILL.md +++ b/skills/build-nextflow-pipeline/references/run-module/README.md @@ -1,7 +1,3 @@ ---- -name: run-module -description: Run Nextflow Registry modules natively using `nextflow module` commands. Use when running, listing, or getting info about Nextflow modules. ---- ## Using this skill @@ -11,7 +7,7 @@ pipeline, input data and execution environment from their request or current context. Use user-selected locations for files and results. Consult companion skills, bundled references and optional helpers by name when available. -For Seqera operations, read the [MCP connection](../launch-workflow/references/seqera-mcp/README.md) connection reference. Any `platform_*` examples +For Seqera operations, read the [MCP connection](../../../launch-workflow/references/seqera-mcp/README.md) connection reference. Any `platform_*` examples describe API operations. Discover their exact names and parameter schemas with `search_seqera_api`, then invoke `call_seqera_api` using those schemas. The host manages OAuth for the connected MCP server. diff --git a/skills/search-existing-modules/SKILL.md b/skills/build-nextflow-pipeline/references/search-existing-modules/README.md similarity index 77% rename from skills/search-existing-modules/SKILL.md rename to skills/build-nextflow-pipeline/references/search-existing-modules/README.md index e258a33..efea2a2 100644 --- a/skills/search-existing-modules/SKILL.md +++ b/skills/build-nextflow-pipeline/references/search-existing-modules/README.md @@ -1,19 +1,3 @@ ---- -name: search-existing-modules -description: > - Given a bioinformatics tool name (e.g. MAFFT, Boltz, bcftools, salmon), - search for existing Nextflow module implementations in priority order — - nf-core/modules first, then a supplied source repository, then the - broader community (GitHub, nf-core pipelines, biorxiv/arxiv - supplementary pipelines). Return a verdict — reuse the nf-core module - at path X, vendor/adapt the module from repo Y, or no existing - implementation (in which case provide the canonical invocation for a - new module). Use whenever a subworkflow is being scoped and needs to - decide whether to reuse an existing Nextflow module or write a new one, - or as a subagent task during the `nf-pipeline-design` / - build-nextflow-pipeline flow. Self-contained — needs only the tool name and - optionally the source repo path, no prior conversation context. ---- ## Using this skill @@ -23,7 +7,7 @@ pipeline, input data and execution environment from their request or current context. Use user-selected locations for files and results. Consult companion skills, bundled references and optional helpers by name when available. -For Seqera operations, read the [MCP connection](../launch-workflow/references/seqera-mcp/README.md) connection reference. Any `platform_*` examples +For Seqera operations, read the [MCP connection](../../../launch-workflow/references/seqera-mcp/README.md) connection reference. Any `platform_*` examples describe API operations. Discover their exact names and parameter schemas with `search_seqera_api`, then invoke `call_seqera_api` using those schemas. The host manages OAuth for the connected MCP server. diff --git a/skills/create-container/SKILL.md b/skills/create-container/SKILL.md index a6c5ade..2393b97 100644 --- a/skills/create-container/SKILL.md +++ b/skills/create-container/SKILL.md @@ -1,19 +1,11 @@ --- name: create-container description: > - Build, claim, or recommend a verified container for a bioinformatics tool — - and prove it runs the intended command on representative test data before - handing it off for module authoring. Make sure to use this skill whenever - the user wants to containerize a tool, wrap a tool for a Nextflow module, - set up Wave for a custom package stack, pin a Bioconda/conda-forge - environment, or unblock a "this tool's dependencies are weird" problem. - Trigger phrases include "containerize X", "I need an image for Y", - "set up Wave for Z", "build a conda env for this tool", "verify this - container works on test input", "what container does need", - "wrap for a Nextflow module", "fix this conda solve". Follows a - build → run-test-input → iterate loop and returns a structured handoff - (verified image reference + working command). Do not author the Nextflow - module here — that belongs in `build-nextflow-pipeline` after verification. + Create and verify containers for Nextflow tools using Wave or the selected + runtime. Also use for choosing where process scripts live, helper-command + staging, templates and image packaging. Script-placement advice does not + require building an image. Verify the requested command and representative + outputs before claiming a container works. --- @@ -165,3 +157,7 @@ FAILED ATTEMPTS: 4. When multiple tools belong together, combine them into one container only if they are actually used together 5. If the environment lacks live Wave APIs, still provide the concrete package spec and Nextflow config 6. Do not call a container verified until the command has run on test data or you clearly label it as unverified + +## Script packaging playbook + +For script-placement questions, choose and verify staging or packaging without requiring a container build. Read [script packaging](references/nf-docker-scripts/README.md) before proceeding. diff --git a/skills/nf-docker-scripts/SKILL.md b/skills/create-container/references/nf-docker-scripts/README.md similarity index 93% rename from skills/nf-docker-scripts/SKILL.md rename to skills/create-container/references/nf-docker-scripts/README.md index 14cc414..fb2f8a0 100644 --- a/skills/nf-docker-scripts/SKILL.md +++ b/skills/create-container/references/nf-docker-scripts/README.md @@ -1,12 +1,3 @@ ---- -name: nf-docker-scripts -description: > - Guide users on how to manage scripts in Nextflow processes and Docker images. - Covers shared helper commands, template directive, inline scripts, and why module - binaries should not be recommended by default. Use when the user asks about - Docker images for Nextflow, where to put scripts, how to handle custom code - in processes, or builds a container that bakes scripts in. ---- ## Using this skill @@ -16,7 +7,7 @@ pipeline, input data and execution environment from their request or current context. Use user-selected locations for files and results. Consult companion skills, bundled references and optional helpers by name when available. -For Seqera operations, read the [MCP connection](../launch-workflow/references/seqera-mcp/README.md) connection reference. Any `platform_*` examples +For Seqera operations, read the [MCP connection](../../../launch-workflow/references/seqera-mcp/README.md) connection reference. Any `platform_*` examples describe API operations. Discover their exact names and parameter schemas with `search_seqera_api`, then invoke `call_seqera_api` using those schemas. The host manages OAuth for the connected MCP server. @@ -311,6 +302,6 @@ When the user asks about Docker + scripts, follow this flow: ## Related Skills - `create-container` — Wave/conda container provisioning -- [registry composition](../build-nextflow-pipeline/references/create-workflow/README.md) — composing workflows from modules -- [Python conversion](../build-nextflow-pipeline/references/convert-python-script/README.md) — converting Python scripts to Nextflow processes +- [registry composition](../../../build-nextflow-pipeline/references/create-workflow/README.md) — composing workflows from modules +- [Python conversion](../../../build-nextflow-pipeline/references/convert-python-script/README.md) — converting Python scripts to Nextflow processes - `nf-pipeline-design` — understanding pipeline layout including shared helper commands diff --git a/skills/nf-docker-scripts/references/script-strategies-deep-dive.md b/skills/create-container/references/nf-docker-scripts/references/script-strategies-deep-dive.md similarity index 100% rename from skills/nf-docker-scripts/references/script-strategies-deep-dive.md rename to skills/create-container/references/nf-docker-scripts/references/script-strategies-deep-dive.md diff --git a/skills/debug-local-run/SKILL.md b/skills/debug-local-run/SKILL.md index 4adfa16..2dc68dc 100644 --- a/skills/debug-local-run/SKILL.md +++ b/skills/debug-local-run/SKILL.md @@ -1,9 +1,6 @@ --- name: debug-local-run -description: > - Debug a local Nextflow pipeline run. Analyzes .nextflow.log, work directories, - and task error logs to identify failures and suggest fixes. Use when user asks - to debug their last run, diagnose pipeline errors, or understand why a run failed. +description: Debug local Nextflow failures and investigate run history, caches, resume identity and data lineage. Select the requested diagnostic or provenance playbook; retention/export changes require explicit authorization. --- @@ -102,3 +99,11 @@ actually run and which remain unverified. References: [Nextflow error handling](https://www.nextflow.io/docs/latest/process.html#error-strategy) and [Nextflow tracing](https://www.nextflow.io/docs/latest/tracing.html). + +## Run history and resume identity + +For run/cache investigation or resume selection, identify the requested run from authoritative history and accessible cache/work metadata, not merely the newest run. Read [run history](references/nextflow-history/README.md) before proceeding. + +## Data lineage + +For provenance queries, use the selected lineage store; export or retention changes require explicit user authorization. Read [data lineage](references/nf-data-lineage/README.md) before proceeding. diff --git a/skills/nextflow-history/SKILL.md b/skills/debug-local-run/references/nextflow-history/README.md similarity index 85% rename from skills/nextflow-history/SKILL.md rename to skills/debug-local-run/references/nextflow-history/README.md index 1ed2f3c..a0bb98f 100644 --- a/skills/nextflow-history/SKILL.md +++ b/skills/debug-local-run/references/nextflow-history/README.md @@ -1,12 +1,3 @@ ---- -name: nextflow-history -description: > - Analyze local Nextflow run history and cache. Use when user asks about their - recent local runs, wants to see what pipelines they've executed, understand - run lineage, inspect the Nextflow cache, or correlate runs with work directories. - Uses run history, task cache metadata, and Nextflow logs supplied by the user. - Also use for narrative recaps, recurring failures and pipeline evolution. ---- ## Using this skill @@ -16,7 +7,7 @@ pipeline, input data and execution environment from their request or current context. Use user-selected locations for files and results. Consult companion skills, bundled references and optional helpers by name when available. -For Seqera operations, read the [MCP connection](../launch-workflow/references/seqera-mcp/README.md) connection reference. Any `platform_*` examples +For Seqera operations, read the [MCP connection](../../../launch-workflow/references/seqera-mcp/README.md) connection reference. Any `platform_*` examples describe API operations. Discover their exact names and parameter schemas with `search_seqera_api`, then invoke `call_seqera_api` using those schemas. The host manages OAuth for the connected MCP server. @@ -37,7 +28,7 @@ not assume a working directory or cache location. - Identify safe cleanup candidates after reviewing the user's retention needs. For failure diagnosis, use the `debug-local-run` skill. For Platform history, -use MCP discovery/execution to retrieve workflows; read [MCP connection](../launch-workflow/references/seqera-mcp/README.md) if connection or discovery guidance is needed. +use MCP discovery/execution to retrieve workflows; read [MCP connection](../../../launch-workflow/references/seqera-mcp/README.md) if connection or discovery guidance is needed. ## Run-history fields @@ -114,7 +105,7 @@ historical failures from current failures and avoid presenting stale logs as the latest run. Related skills: `nextflow-config`, `debug-local-run`, -`debug-seqera-failed-run`, and [MCP connection](../launch-workflow/references/seqera-mcp/README.md). +`debug-seqera-failed-run`, and [MCP connection](../../../launch-workflow/references/seqera-mcp/README.md). ## Narrative history analysis diff --git a/skills/nextflow-history/references/nf-run-history/README.md b/skills/debug-local-run/references/nextflow-history/references/nf-run-history/README.md similarity index 94% rename from skills/nextflow-history/references/nf-run-history/README.md rename to skills/debug-local-run/references/nextflow-history/references/nf-run-history/README.md index 3c4af66..50d053d 100644 --- a/skills/nextflow-history/references/nf-run-history/README.md +++ b/skills/debug-local-run/references/nextflow-history/references/nf-run-history/README.md @@ -7,7 +7,7 @@ pipeline, input data and execution environment from their request or current context. Use user-selected locations for files and results. Consult companion skills, bundled references and optional helpers by name when available. -For Seqera operations, read the [MCP connection](../../../launch-workflow/references/seqera-mcp/README.md) connection reference. Any `platform_*` examples +For Seqera operations, read the [MCP connection](../../../../../launch-workflow/references/seqera-mcp/README.md) connection reference. Any `platform_*` examples describe API operations. Discover their exact names and parameter schemas with `search_seqera_api`, then invoke `call_seqera_api` using those schemas. The host manages OAuth for the connected MCP server. diff --git a/skills/nf-data-lineage/SKILL.md b/skills/debug-local-run/references/nf-data-lineage/README.md similarity index 91% rename from skills/nf-data-lineage/SKILL.md rename to skills/debug-local-run/references/nf-data-lineage/README.md index db50dc6..fb5a098 100644 --- a/skills/nf-data-lineage/SKILL.md +++ b/skills/debug-local-run/references/nf-data-lineage/README.md @@ -1,11 +1,3 @@ ---- -name: nf-data-lineage -description: > - Explore Nextflow data lineage to trace where outputs came from and what inputs - produced them. Uses the configured lineage store and `nextflow lineage` - CLI. Requires Nextflow 25.04+ with lineage.enabled=true. Use when the user asks - about provenance, data origins, reproducibility, or output traceability. ---- ## Using this skill @@ -15,7 +7,7 @@ pipeline, input data and execution environment from their request or current context. Use user-selected locations for files and results. Consult companion skills, bundled references and optional helpers by name when available. -For Seqera operations, read the [MCP connection](../launch-workflow/references/seqera-mcp/README.md) connection reference. Any `platform_*` examples +For Seqera operations, read the [MCP connection](../../../launch-workflow/references/seqera-mcp/README.md) connection reference. Any `platform_*` examples describe API operations. Discover their exact names and parameter schemas with `search_seqera_api`, then invoke `call_seqera_api` using those schemas. The host manages OAuth for the connected MCP server. diff --git a/skills/launch-workflow/SKILL.md b/skills/launch-workflow/SKILL.md index 8f801c0..9a162c8 100644 --- a/skills/launch-workflow/SKILL.md +++ b/skills/launch-workflow/SKILL.md @@ -1,6 +1,11 @@ --- name: launch-workflow -description: Launch Nextflow pipeline executions on cloud and HPC clusters via Nextflow Platform. Use when the user wants to run/launch/submit a pipeline on a cloud or cluster compute environment, configure a compute environment, push pipeline changes to GitHub before launching, or sign in to Nextflow Platform. +description: > + Plan, launch or resume Nextflow pipelines locally or through Nextflow Platform. + Also use for nf-core omics analyses, GEO/SRA acquisition, samplesheets, compute + and credential setup, data links and Seqerakit automation. Choose the requested + playbook without forcing a launch; publication, infrastructure creation and + other mutations need explicit authorization. --- @@ -17,7 +22,17 @@ describe API operations. Discover their exact names and parameter schemas with manages OAuth for the connected MCP server. -# Launch Pipeline on Nextflow Platform +# Launch or Resume a Pipeline + +## Local runs and resume + +For a local run, confirm the user's pipeline, parameters, executor and output destination. Use the installed release's `nextflow run` interface; a local run does not require Platform authentication, a remote Git repository or Nextflow 26.04. + +Before resuming, read [run identification](../debug-local-run/references/nextflow-history/references/nf-run-history/README.md) and verify the requested run/session and accessible work/cache metadata. Use `-resume` with the selected identity; do not choose a run solely because it is newest. Inspect completion status and representative outputs; a cache hit alone is not scientific-output verification. + +For missing runtime setup, read [runtime setup](../build-nextflow-pipeline/references/install-nextflow/README.md). Stop before installing or upgrading without explicit approval. + +## Platform launches Launch Nextflow pipeline executions on cloud (AWS, Google Cloud, Azure) and HPC clusters (Slurm, LSF, etc.) through Nextflow Platform. Nextflow Platform manages the target compute environment, executes the pipeline from a remote Git repository, and provides monitoring. @@ -27,7 +42,7 @@ Launch Nextflow pipeline executions on cloud (AWS, Google Cloud, Azure) and HPC 1. **Configure the compute environment** — select a Nextflow Platform compute environment for the target cloud or cluster. 2. **Ensure the pipeline is in a remote Git repository** — Nextflow Platform launches pipelines from GitHub (or a compatible Git host such as GitLab or Bitbucket). If the local pipeline is not yet hosted, assist the user in setting up the repository. -3. **Upload local changes** — push any uncommitted local changes to the remote so the launched run reflects the user's current code. +3. **Select a published revision** — verify that the remote contains the intended code. Publishing local changes requires separate explicit approval; a launch request alone is not authority to commit or push. 4. **Launch with `nextflow launch`** — submit the pipeline by passing the Git repository URL and the expected parameters. ## Step 1: Authenticate with Nextflow Platform @@ -78,16 +93,11 @@ git status **If the pipeline is not yet a Git repository or has no remote**, assist the user in setting it up: -Initialize Git if needed, review the user's selected pipeline files, and stage -only the intended changes. Help the user create or select a remote repository, -configure its remote URL, and push the agreed revision using the available tools. +Explain the missing published revision and ask for separate authorization before initializing Git, creating a remote, staging files or publishing code. Alternatively select an already published revision the user approves. ## Step 4: Upload Local Changes -Before launching, push any local changes so the remote reflects the code that should run: - -Review the changes, commit the user's intended pipeline files with a descriptive -message, and push the confirmed branch using the available Git tools. +Compare local changes with the selected remote revision. If the intended code is unpublished, stop and ask whether the user wants a separate commit/push task or a launch of the existing published revision. Only publish after explicit approval, staging only the approved files. If the working tree is clean and the local branch is in sync with the remote, skip this step. @@ -113,14 +123,14 @@ pipeline; it does not determine the user's inputs or output destination. ## Step 6: Monitor the Execution -`nextflow launch` returns a run URL on Nextflow Platform. Present this URL to the user so they can monitor progress in the Platform UI. +`nextflow launch` returns a run URL on Nextflow Platform. Retrieve the authoritative submitted workflow using discovered MCP operations and confirm its revision, parameters, compute environment and resume identity. Present the verified run identifier/URL and distinguish submission from successful completion. ## Critical Rules 1. **AUTHENTICATE first** — check `nextflow auth status` before attempting to launch. 2. **CONFIRM the compute environment** — always show the user the selected CE before launching. 3. **REQUIRE a remote Git repository** — the pipeline must be hosted on GitHub or a compatible Git host. If not, help the user set it up before launching. -4. **PUSH local changes first** — the launched run uses the remote code, so local edits must be committed and pushed. +4. **VERIFY the published revision** — use the approved remote code; obtain separate authorization before committing or pushing local changes. 5. **PASS the Git repository URL** to `nextflow launch`, not a local path. 6. **PIN the revision** — always use `-r` to target a specific branch, tag, or commit for reproducibility. 7. **USE cloud storage for `--outdir`** when the target CE runs on a cloud platform (s3://, gs://, az://). @@ -129,3 +139,19 @@ pipeline; it does not determine the user's inputs or output destination. ## MCP connection reference When a Seqera connection is missing or operation discovery is unclear, use the shared connection reference. Otherwise rely on the live tool descriptions and returned schemas. Read [MCP connection](references/seqera-mcp/README.md) before proceeding. + +## Compute readiness + +For provider credentials or compute setup, follow only the requested setup task; never expose secrets or create infrastructure without approval. Read [compute readiness](references/ce-credentials-setup/README.md) before proceeding. + +## Data links + +For browsing or managing Platform data links, use discovered schemas and confirm any requested mutations; do not launch a workflow implicitly. Read [data links](references/seqera-data-links/README.md) before proceeding. + +## Seqerakit automation + +For declarative Platform automation, inspect the requested resources and permissions before executing changes. Read [Seqerakit automation](references/seqerakit/README.md) before proceeding. + +## nf-core analyses and public data + +For omics analysis, GEO/SRA acquisition or samplesheet creation, follow the requested stage and confirm pipeline, data, genome and output contracts. Bundled helpers are under this playbook directory, not the parent skill directory. Read [nf-core analysis](references/nextflow-development/README.md) before proceeding. diff --git a/skills/ce-credentials-setup/SKILL.md b/skills/launch-workflow/references/ce-credentials-setup/README.md similarity index 86% rename from skills/ce-credentials-setup/SKILL.md rename to skills/launch-workflow/references/ce-credentials-setup/README.md index 11b9f1d..2c0a0ea 100644 --- a/skills/ce-credentials-setup/SKILL.md +++ b/skills/launch-workflow/references/ce-credentials-setup/README.md @@ -1,15 +1,3 @@ ---- -name: ce-credentials-setup -description: > - Set up Nextflow Platform compute environments (Seqera Compute, AWS Batch, Kubernetes) - and the cloud or cluster credentials they need. Walks through gathering prerequisites - — IAM keys, bearer tokens, certificates, regions, work directories — and then - calling platform_create_credentials and platform_create_compute_env. Use this skill - whenever a user wants to wire Nextflow Platform to any compute backend, troubleshoots - a failing CE, asks about Seqera Compute as a managed option, or talks about - "connecting my AWS account", "adding my cluster", or "using my own compute" — even - if they don't explicitly say "compute environment" or "credentials". ---- ## Using this skill @@ -19,7 +7,7 @@ pipeline, input data and execution environment from their request or current context. Use user-selected locations for files and results. Consult companion skills, bundled references and optional helpers by name when available. -For Seqera operations, read the [MCP connection](../launch-workflow/references/seqera-mcp/README.md) connection reference. Any `platform_*` examples +For Seqera operations, read the [MCP connection](../seqera-mcp/README.md) connection reference. Any `platform_*` examples describe API operations. Discover their exact names and parameter schemas with `search_seqera_api`, then invoke `call_seqera_api` using those schemas. The host manages OAuth for the connected MCP server. @@ -37,7 +25,7 @@ Load this skill when the user wants to: - Understand what values are needed for a specific platform - Troubleshoot CE creation failures (wrong token, missing permissions, etc.) -Read the [MCP connection](../launch-workflow/references/seqera-mcp/README.md) connection reference for discovery and authentication. This skill owns provider prerequisites and compute readiness. +Read the [MCP connection](../seqera-mcp/README.md) connection reference for discovery and authentication. This skill owns provider prerequisites and compute readiness. ## General Workflow diff --git a/skills/ce-credentials-setup/references/aws-batch.md b/skills/launch-workflow/references/ce-credentials-setup/references/aws-batch.md similarity index 100% rename from skills/ce-credentials-setup/references/aws-batch.md rename to skills/launch-workflow/references/ce-credentials-setup/references/aws-batch.md diff --git a/skills/ce-credentials-setup/references/kubernetes.md b/skills/launch-workflow/references/ce-credentials-setup/references/kubernetes.md similarity index 100% rename from skills/ce-credentials-setup/references/kubernetes.md rename to skills/launch-workflow/references/ce-credentials-setup/references/kubernetes.md diff --git a/skills/ce-credentials-setup/references/seqera-compute.md b/skills/launch-workflow/references/ce-credentials-setup/references/seqera-compute.md similarity index 100% rename from skills/ce-credentials-setup/references/seqera-compute.md rename to skills/launch-workflow/references/ce-credentials-setup/references/seqera-compute.md diff --git a/skills/nextflow-development/LICENSE.txt b/skills/launch-workflow/references/nextflow-development/LICENSE.txt similarity index 100% rename from skills/nextflow-development/LICENSE.txt rename to skills/launch-workflow/references/nextflow-development/LICENSE.txt diff --git a/skills/nextflow-development/SKILL.md b/skills/launch-workflow/references/nextflow-development/README.md similarity index 93% rename from skills/nextflow-development/SKILL.md rename to skills/launch-workflow/references/nextflow-development/README.md index 20be7e2..88acbd9 100644 --- a/skills/nextflow-development/SKILL.md +++ b/skills/launch-workflow/references/nextflow-development/README.md @@ -1,7 +1,3 @@ ---- -name: nextflow-development -description: Run nf-core bioinformatics pipelines (rnaseq, sarek, atacseq) on sequencing data. Use when analyzing RNA-seq, WGS/WES, or ATAC-seq data—either local FASTQs or public datasets from GEO/SRA. Triggers on nf-core, Nextflow, FASTQ analysis, variant calling, gene expression, differential expression, GEO reanalysis, GSE/GSM/SRR accessions, or samplesheet creation. ---- ## Using this skill @@ -11,7 +7,7 @@ pipeline, input data and execution environment from their request or current context. Use user-selected locations for files and results. Consult companion skills, bundled references and optional helpers by name when available. -For Seqera operations, read the [MCP connection](../launch-workflow/references/seqera-mcp/README.md) connection reference. Any `platform_*` examples +For Seqera operations, read the [MCP connection](../seqera-mcp/README.md) connection reference. Any `platform_*` examples describe API operations. Discover their exact names and parameter schemas with `search_seqera_api`, then invoke `call_seqera_api` using those schemas. The host manages OAuth for the connected MCP server. @@ -71,7 +67,7 @@ All critical checks must pass. If any fail, provide fix instructions: | Permission denied | `sudo usermod -aG docker $USER` then re-login | | Daemon not running | `sudo systemctl start docker` | -Read `install-nextflow` for current runtime prerequisites. +Read [runtime setup](../../../build-nextflow-pipeline/references/install-nextflow/README.md) for current runtime prerequisites. ### Nextflow issues diff --git a/skills/nextflow-development/references/geo-sra-acquisition.md b/skills/launch-workflow/references/nextflow-development/references/geo-sra-acquisition.md similarity index 100% rename from skills/nextflow-development/references/geo-sra-acquisition.md rename to skills/launch-workflow/references/nextflow-development/references/geo-sra-acquisition.md diff --git a/skills/nextflow-development/references/installation.md b/skills/launch-workflow/references/nextflow-development/references/installation.md similarity index 100% rename from skills/nextflow-development/references/installation.md rename to skills/launch-workflow/references/nextflow-development/references/installation.md diff --git a/skills/nextflow-development/references/pipelines/atacseq.md b/skills/launch-workflow/references/nextflow-development/references/pipelines/atacseq.md similarity index 100% rename from skills/nextflow-development/references/pipelines/atacseq.md rename to skills/launch-workflow/references/nextflow-development/references/pipelines/atacseq.md diff --git a/skills/nextflow-development/references/pipelines/rnaseq.md b/skills/launch-workflow/references/nextflow-development/references/pipelines/rnaseq.md similarity index 100% rename from skills/nextflow-development/references/pipelines/rnaseq.md rename to skills/launch-workflow/references/nextflow-development/references/pipelines/rnaseq.md diff --git a/skills/nextflow-development/references/pipelines/sarek.md b/skills/launch-workflow/references/nextflow-development/references/pipelines/sarek.md similarity index 100% rename from skills/nextflow-development/references/pipelines/sarek.md rename to skills/launch-workflow/references/nextflow-development/references/pipelines/sarek.md diff --git a/skills/nextflow-development/references/troubleshooting.md b/skills/launch-workflow/references/nextflow-development/references/troubleshooting.md similarity index 100% rename from skills/nextflow-development/references/troubleshooting.md rename to skills/launch-workflow/references/nextflow-development/references/troubleshooting.md diff --git a/skills/nextflow-development/requirements.txt b/skills/launch-workflow/references/nextflow-development/requirements.txt similarity index 100% rename from skills/nextflow-development/requirements.txt rename to skills/launch-workflow/references/nextflow-development/requirements.txt diff --git a/skills/nextflow-development/scripts/check_environment.py b/skills/launch-workflow/references/nextflow-development/scripts/check_environment.py similarity index 100% rename from skills/nextflow-development/scripts/check_environment.py rename to skills/launch-workflow/references/nextflow-development/scripts/check_environment.py diff --git a/skills/nextflow-development/scripts/config/genomes.yaml b/skills/launch-workflow/references/nextflow-development/scripts/config/genomes.yaml similarity index 100% rename from skills/nextflow-development/scripts/config/genomes.yaml rename to skills/launch-workflow/references/nextflow-development/scripts/config/genomes.yaml diff --git a/skills/nextflow-development/scripts/config/pipelines/atacseq.yaml b/skills/launch-workflow/references/nextflow-development/scripts/config/pipelines/atacseq.yaml similarity index 100% rename from skills/nextflow-development/scripts/config/pipelines/atacseq.yaml rename to skills/launch-workflow/references/nextflow-development/scripts/config/pipelines/atacseq.yaml diff --git a/skills/nextflow-development/scripts/config/pipelines/rnaseq.yaml b/skills/launch-workflow/references/nextflow-development/scripts/config/pipelines/rnaseq.yaml similarity index 100% rename from skills/nextflow-development/scripts/config/pipelines/rnaseq.yaml rename to skills/launch-workflow/references/nextflow-development/scripts/config/pipelines/rnaseq.yaml diff --git a/skills/nextflow-development/scripts/config/pipelines/sarek.yaml b/skills/launch-workflow/references/nextflow-development/scripts/config/pipelines/sarek.yaml similarity index 100% rename from skills/nextflow-development/scripts/config/pipelines/sarek.yaml rename to skills/launch-workflow/references/nextflow-development/scripts/config/pipelines/sarek.yaml diff --git a/skills/nextflow-development/scripts/detect_data_type.py b/skills/launch-workflow/references/nextflow-development/scripts/detect_data_type.py similarity index 100% rename from skills/nextflow-development/scripts/detect_data_type.py rename to skills/launch-workflow/references/nextflow-development/scripts/detect_data_type.py diff --git a/skills/nextflow-development/scripts/generate_samplesheet.py b/skills/launch-workflow/references/nextflow-development/scripts/generate_samplesheet.py similarity index 100% rename from skills/nextflow-development/scripts/generate_samplesheet.py rename to skills/launch-workflow/references/nextflow-development/scripts/generate_samplesheet.py diff --git a/skills/nextflow-development/scripts/manage_genomes.py b/skills/launch-workflow/references/nextflow-development/scripts/manage_genomes.py similarity index 100% rename from skills/nextflow-development/scripts/manage_genomes.py rename to skills/launch-workflow/references/nextflow-development/scripts/manage_genomes.py diff --git a/skills/nextflow-development/scripts/sra_geo_fetch.py b/skills/launch-workflow/references/nextflow-development/scripts/sra_geo_fetch.py similarity index 100% rename from skills/nextflow-development/scripts/sra_geo_fetch.py rename to skills/launch-workflow/references/nextflow-development/scripts/sra_geo_fetch.py diff --git a/skills/nextflow-development/scripts/utils/__init__.py b/skills/launch-workflow/references/nextflow-development/scripts/utils/__init__.py similarity index 100% rename from skills/nextflow-development/scripts/utils/__init__.py rename to skills/launch-workflow/references/nextflow-development/scripts/utils/__init__.py diff --git a/skills/nextflow-development/scripts/utils/file_discovery.py b/skills/launch-workflow/references/nextflow-development/scripts/utils/file_discovery.py similarity index 100% rename from skills/nextflow-development/scripts/utils/file_discovery.py rename to skills/launch-workflow/references/nextflow-development/scripts/utils/file_discovery.py diff --git a/skills/nextflow-development/scripts/utils/ncbi_utils.py b/skills/launch-workflow/references/nextflow-development/scripts/utils/ncbi_utils.py similarity index 100% rename from skills/nextflow-development/scripts/utils/ncbi_utils.py rename to skills/launch-workflow/references/nextflow-development/scripts/utils/ncbi_utils.py diff --git a/skills/nextflow-development/scripts/utils/sample_inference.py b/skills/launch-workflow/references/nextflow-development/scripts/utils/sample_inference.py similarity index 100% rename from skills/nextflow-development/scripts/utils/sample_inference.py rename to skills/launch-workflow/references/nextflow-development/scripts/utils/sample_inference.py diff --git a/skills/nextflow-development/scripts/utils/validators.py b/skills/launch-workflow/references/nextflow-development/scripts/utils/validators.py similarity index 100% rename from skills/nextflow-development/scripts/utils/validators.py rename to skills/launch-workflow/references/nextflow-development/scripts/utils/validators.py diff --git a/skills/seqera-data-links/SKILL.md b/skills/launch-workflow/references/seqera-data-links/README.md similarity index 89% rename from skills/seqera-data-links/SKILL.md rename to skills/launch-workflow/references/seqera-data-links/README.md index 299ff4f..dc27464 100644 --- a/skills/seqera-data-links/SKILL.md +++ b/skills/launch-workflow/references/seqera-data-links/README.md @@ -1,10 +1,3 @@ ---- -name: seqera-data-links -description: > - Add, list, inspect, browse, update, and delete data links in Nextflow Platform - workspaces. Use when asked to connect S3/GCS/Azure storage, manage Data Explorer - entries, create data links, or troubleshoot bucket validation and storage access. ---- ## Using this skill @@ -14,7 +7,7 @@ pipeline, input data and execution environment from their request or current context. Use user-selected locations for files and results. Consult companion skills, bundled references and optional helpers by name when available. -For Seqera operations, read the [MCP connection](../launch-workflow/references/seqera-mcp/README.md) connection reference. Any `platform_*` examples +For Seqera operations, read the [MCP connection](../seqera-mcp/README.md) connection reference. Any `platform_*` examples describe API operations. Discover their exact names and parameter schemas with `search_seqera_api`, then invoke `call_seqera_api` using those schemas. The host manages OAuth for the connected MCP server. @@ -29,7 +22,7 @@ print, or copy access tokens, bearer headers, cloud keys, or credential contents ## Discover before calling -Read the [MCP connection](../launch-workflow/references/seqera-mcp/README.md) connection reference for discovery and authentication. Every +Read the [MCP connection](../seqera-mcp/README.md) connection reference for discovery and authentication. Every Platform operation follows: 1. Call `search_seqera_api` with the operation's intent, such as "list data links @@ -70,7 +63,7 @@ For creation, establish: Discover the credential-listing operation when a private link needs credentials. Return only identifying metadata needed to select an existing credential, such as its ID, name, and provider; never expose credential secrets. If none matches, -use `ce-credentials-setup` for the separate credential setup workflow. +use [compute readiness](../ce-credentials-setup/README.md) for the separate credential setup workflow. Discover the create operation and map these values to its current schema. For example, a schema may call the URI `resourceRef`, require a bucket `type`, diff --git a/skills/seqerakit/SKILL.md b/skills/launch-workflow/references/seqerakit/README.md similarity index 80% rename from skills/seqerakit/SKILL.md rename to skills/launch-workflow/references/seqerakit/README.md index 955e110..92dba0f 100644 --- a/skills/seqerakit/SKILL.md +++ b/skills/launch-workflow/references/seqerakit/README.md @@ -1,11 +1,3 @@ ---- -name: seqerakit -description: > - Write seqerakit YAML configuration files for automating Nextflow Platform setup. - Covers pipelines, launch, compute-envs, datasets, credentials, and other entity types. - Trigger: "seqerakit", "seqerakit YAML", "write seqerakit config", "automate platform setup", - "tw YAML", "infrastructure as code for Seqera". ---- ## Using this skill @@ -15,7 +7,7 @@ pipeline, input data and execution environment from their request or current context. Use user-selected locations for files and results. Consult companion skills, bundled references and optional helpers by name when available. -For Seqera operations, read the [MCP connection](../launch-workflow/references/seqera-mcp/README.md) connection reference. Any `platform_*` examples +For Seqera operations, read the [MCP connection](../seqera-mcp/README.md) connection reference. Any `platform_*` examples describe API operations. Discover their exact names and parameter schemas with `search_seqera_api`, then invoke `call_seqera_api` using those schemas. The host manages OAuth for the connected MCP server. @@ -23,11 +15,11 @@ manages OAuth for the connected MCP server. # Seqerakit YAML Configuration -Draft seqerakit configuration using the user's intended Seqera workspace, resources, inputs, and output choices. Do not assume a local configuration location or prescribe storage folders. +Draft [Seqerakit automation](README.md) configuration using the user's intended Seqera workspace, resources, inputs, and output choices. Do not assume a local configuration location or prescribe storage folders. ## Critical Rules -Confirm fields using the installed tw CLI's entity-specific help or current seqerakit documentation. Unknown fields can be silently ignored, so do not guess field names. +Confirm fields using the installed tw CLI's entity-specific help or current [Seqerakit automation](README.md) documentation. Unknown fields can be silently ignored, so do not guess field names. Use hyphenated field names, including compute-env, work-dir, params-file, and file-path. Use revision for a Git branch, tag, or commit. Verify the workspace identifier from the user's existing context. diff --git a/skills/migrate-nextflow-code/SKILL.md b/skills/migrate-nextflow-code/SKILL.md index f7de98b..2212231 100644 --- a/skills/migrate-nextflow-code/SKILL.md +++ b/skills/migrate-nextflow-code/SKILL.md @@ -1,6 +1,6 @@ --- name: migrate-nextflow-code -description: Migrate Nextflow pipeline code while preserving behavior. Use for version upgrades including 25.04 compatibility, strict syntax errors, boolean CLI parameter types, topic channels, workflow outputs, and static typing (typed processes/workflows, records, typed params). +description: Migrate Nextflow pipeline code across versions while preserving behavior. Also use for extension-plugin authoring or legacy plugin migration, and nf-core maintenance/template synchronization. Follow only the requested playbook; do not force pipeline migration, template upgrades or registry publication. --- @@ -19,6 +19,12 @@ manages OAuth for the connected MCP server. # Migrate Nextflow Code +## Choose the requested task + +Plugin authoring, legacy-plugin migration and nf-core maintenance use the matching playbook linked below, not the pipeline migration phases. Check the repository conventions first; template synchronization and registry publication are separate authorized tasks. + +## Pipeline language migrations + Migrate Nextflow pipeline code to satisfy newer language requirements. Each migration is detection-driven: a tool reports what must change, you apply behavior-preserving fixes, then re-run the tool until it is clean. **Resolve the installed and target Nextflow versions first.** The modern examples target 26.04+, where strict syntax is the default. For a 25.04 target, read [25.04 compatibility](references/nf-migrate-25-04/README.md) and its scanners; do not silently upgrade the runtime or apply newer syntax. Check installed help/current official migration notes before using version-dependent features. @@ -61,3 +67,15 @@ When CLI boolean flags arrive with the wrong type or do not toggle under strict ## Nextflow 25.04 compatibility reference When targeting 25.04 or diagnosing compatibility across that release, use its changelog and scanners without assuming 26.x features. Read [25.04 compatibility](references/nf-migrate-25-04/README.md) before proceeding. + +## Plugin authoring + +For Nextflow extension-plugin development, use the plugin procedure rather than the pipeline migration phases. Read [plugin authoring](references/nf-plugin-development/README.md) before proceeding. + +## Legacy plugin migration + +For legacy extension migration, preserve plugin identity and behavior; registry publication needs separate approval. Read [legacy plugin migration](references/nf-plugin-legacy-migration/README.md) before proceeding. + +## nf-core maintenance + +For nf-core maintenance, check project conventions and the requested maintenance scope before template synchronization or publication. Read [nf-core maintenance](references/maintain-nf-core-pipeline/README.md) before proceeding. diff --git a/skills/maintain-nf-core-pipeline/SKILL.md b/skills/migrate-nextflow-code/references/maintain-nf-core-pipeline/README.md similarity index 73% rename from skills/maintain-nf-core-pipeline/SKILL.md rename to skills/migrate-nextflow-code/references/maintain-nf-core-pipeline/README.md index 6c362bb..84bdf6c 100644 --- a/skills/maintain-nf-core-pipeline/SKILL.md +++ b/skills/migrate-nextflow-code/references/maintain-nf-core-pipeline/README.md @@ -1,16 +1,3 @@ ---- -name: maintain-nf-core-pipeline -description: > - Maintain an existing nf-core pipeline: work on the `dev` branch, resolve - outstanding template-sync PRs, update shared modules from upstream, then - patch any remaining code. Use whenever the user asks to update, maintain, - sync, modernize, or contribute to an nf-core pipeline; whenever they - mention resolving a template sync, a `tools X.Y.Z` merge, or stacked - template PRs; or when they want to bring an nf-core pipeline up to a - current tools version. Trigger phrases include "sync the template", - "resolve the template merge", "update nf-core modules", "modernize - atacseq", "fix this nf-core pipeline", "rebase against tools 4". ---- ## Using this skill @@ -20,7 +7,7 @@ pipeline, input data and execution environment from their request or current context. Use user-selected locations for files and results. Consult companion skills, bundled references and optional helpers by name when available. -For Seqera operations, read the [MCP connection](../launch-workflow/references/seqera-mcp/README.md) connection reference. Any `platform_*` examples +For Seqera operations, read the [MCP connection](../../../launch-workflow/references/seqera-mcp/README.md) connection reference. Any `platform_*` examples describe API operations. Discover their exact names and parameter schemas with `search_seqera_api`, then invoke `call_seqera_api` using those schemas. The host manages OAuth for the connected MCP server. @@ -91,9 +78,9 @@ the entry workflow and project-owned workflow definitions. By this point the residue is genuinely pipeline-specific. If the residual work is a syntax migration: -- [strict syntax compatibility](../migrate-nextflow-code/references/nextflow-26-syntax/README.md) — strict-syntax rules for typed processes / channels -- [boolean parameter compatibility](../migrate-nextflow-code/references/nf-v2-boolean-params/README.md) — boolean-param migration (common v2 failure) -- [schema migration](../nextflow-schema/references/nf-schema-migration/README.md) — schema updates required by v2 +- [strict syntax compatibility](../nextflow-26-syntax/README.md) — strict-syntax rules for typed processes / channels +- [boolean parameter compatibility](../nf-v2-boolean-params/README.md) — boolean-param migration (common v2 failure) +- [schema migration](../../../nextflow-schema/references/nf-schema-migration/README.md) — schema updates required by v2 For structural analysis of an unfamiliar pipeline before editing: - `nf-pipeline-design` diff --git a/skills/maintain-nf-core-pipeline/references/nf-core-conventions.md b/skills/migrate-nextflow-code/references/maintain-nf-core-pipeline/references/nf-core-conventions.md similarity index 96% rename from skills/maintain-nf-core-pipeline/references/nf-core-conventions.md rename to skills/migrate-nextflow-code/references/maintain-nf-core-pipeline/references/nf-core-conventions.md index 0cfec95..58e27e0 100644 --- a/skills/maintain-nf-core-pipeline/references/nf-core-conventions.md +++ b/skills/migrate-nextflow-code/references/maintain-nf-core-pipeline/references/nf-core-conventions.md @@ -69,5 +69,5 @@ nf-core pipelines lint ## Tooling notes - nf-core ships with `prek` (Rust-based pre-commit replacement) as of tools 4.0. Run `prek install --overwrite` to migrate from `pre-commit`. -- Strict syntax is required for pipelines targeting tools ≥4.0. See [strict syntax compatibility](../../migrate-nextflow-code/references/nextflow-26-syntax/README.md) for the rules. +- Strict syntax is required for pipelines targeting tools ≥4.0. See [strict syntax compatibility](../../nextflow-26-syntax/README.md) for the rules. - `nf-core.yml` carries the `nf_core_version` field — that's the source of truth for which tools version the pipeline was last synced against. diff --git a/skills/maintain-nf-core-pipeline/references/template-merges/README.md b/skills/migrate-nextflow-code/references/maintain-nf-core-pipeline/references/template-merges/README.md similarity index 100% rename from skills/maintain-nf-core-pipeline/references/template-merges/README.md rename to skills/migrate-nextflow-code/references/maintain-nf-core-pipeline/references/template-merges/README.md diff --git a/skills/maintain-nf-core-pipeline/references/template-merges/tools-4_0.md b/skills/migrate-nextflow-code/references/maintain-nf-core-pipeline/references/template-merges/tools-4_0.md similarity index 90% rename from skills/maintain-nf-core-pipeline/references/template-merges/tools-4_0.md rename to skills/migrate-nextflow-code/references/maintain-nf-core-pipeline/references/template-merges/tools-4_0.md index dc25fad..875a4d2 100644 --- a/skills/maintain-nf-core-pipeline/references/template-merges/tools-4_0.md +++ b/skills/migrate-nextflow-code/references/maintain-nf-core-pipeline/references/template-merges/tools-4_0.md @@ -43,7 +43,7 @@ Video: https://youtu.be/LBB9NueK-vk | `multiqc_config.yml` | Accept single-line YAML format — content is identical, only formatting changed. | | `modules.json` | Accept updated FastQC / MultiQC SHAs from template. Preserve entries for custom or non-template modules. | | `ro-crate-metadata.json` | Take all template changes — file is auto-generated, no manual content to preserve. | -| Workflow definitions | Accept strict-syntax reformatting. If pipeline has custom logic, ensure it still passes strict syntax — chain [strict syntax compatibility](../../../migrate-nextflow-code/references/nextflow-26-syntax/README.md) if not. | +| Workflow definitions | Accept strict-syntax reformatting. If pipeline has custom logic, ensure it still passes strict syntax — chain [strict syntax compatibility](../../../nextflow-26-syntax/README.md) if not. | | Contribution guidance | Merge pipeline-specific guidance into the new template version and remove obsolete duplicates. | | `.pre-commit-config.yaml` | Accept template's `prek`-compatible config. Run `prek install --overwrite` after merging. | @@ -51,6 +51,6 @@ Video: https://youtu.be/LBB9NueK-vk - **Run `prek install --overwrite` after merge** to switch the repo's git hooks from `pre-commit` to `prek`. - **Webhook config migration is mandatory** — existing pipelines with Slack webhooks need to switch to the `nf-slack` plugin. The template removes the webhook section entirely; don't try to keep it. -- **Strict syntax is required**, not optional, for tools 4.0+. After merge, run `nextflow lint` and chain [strict syntax compatibility](../../../migrate-nextflow-code/references/nextflow-26-syntax/README.md) / [boolean parameter compatibility](../../../migrate-nextflow-code/references/nf-v2-boolean-params/README.md) / [schema migration](../../../nextflow-schema/references/nf-schema-migration/README.md) if there are residual failures. +- **Strict syntax is required**, not optional, for tools 4.0+. After merge, run `nextflow lint` and chain [strict syntax compatibility](../../../nextflow-26-syntax/README.md) / [boolean parameter compatibility](../../../nf-v2-boolean-params/README.md) / [schema migration](../../../../../nextflow-schema/references/nf-schema-migration/README.md) if there are residual failures. - **No prefix-free `nf-core` commands** — any docs, scripts, or CI invoking `nf-core create`, `nf-core lint`, etc. must be updated to `nf-core pipelines create`, `nf-core pipelines lint`, etc. - **`--migrate-pytest` is gone**. If you still have pytest-based tests waiting to migrate to `nf-test`, do that conversion outside the sync PR. diff --git a/skills/migrate-nextflow-code/references/nextflow-26-syntax/README.md b/skills/migrate-nextflow-code/references/nextflow-26-syntax/README.md index d34fe9e..31b12dc 100644 --- a/skills/migrate-nextflow-code/references/nextflow-26-syntax/README.md +++ b/skills/migrate-nextflow-code/references/nextflow-26-syntax/README.md @@ -264,7 +264,7 @@ matching the baseline): 4. **Static types** — enable `nextflow.enable.types` one script at a time, leaves first (local modules → subworkflows → workflows → `main.nf`). Shared nf-core component files are owned upstream: do not rewrite them - in place (see `maintain-nf-core-pipeline`) — call them from typed code or + in place (see [nf-core maintenance](../maintain-nf-core-pipeline/README.md)) — call them from typed code or vendor a project-owned copy with a note, and say which you chose. 5. **Tuples → records** — the riskiest stage. Migrate one channel family at a time (e.g. the reads channel end-to-end, then the BAM channel), not one @@ -330,7 +330,7 @@ nextflow inspect 2>&1 - [boolean parameter compatibility](../nf-v2-boolean-params/README.md) — read the boolean compatibility reference when the task also involves a flag that is not toggling; otherwise keep the syntax investigation scoped to the observed parser errors. - `nf-pipeline-design` — typed process/workflow rules and the workflow `output {}` block in new code -- `maintain-nf-core-pipeline` — when the pipeline being migrated is an nf-core pipeline (template sync and module updates come first) +- [nf-core maintenance](../maintain-nf-core-pipeline/README.md) — when the pipeline being migrated is an nf-core pipeline (template sync and module updates come first) - `nf-test` / [nf-test failure repair](../../../nf-test/references/repair-nf-test/README.md) — regression tests between migration stages ## References diff --git a/skills/nf-plugin-development/SKILL.md b/skills/migrate-nextflow-code/references/nf-plugin-development/README.md similarity index 95% rename from skills/nf-plugin-development/SKILL.md rename to skills/migrate-nextflow-code/references/nf-plugin-development/README.md index a3a6553..22c6d60 100644 --- a/skills/nf-plugin-development/SKILL.md +++ b/skills/migrate-nextflow-code/references/nf-plugin-development/README.md @@ -1,11 +1,3 @@ ---- -name: nf-plugin-development -description: > - Create Nextflow plugins using the official nf-plugin-template and publish to the - Nextflow plugin registry. Covers extension points (operators, functions, factories, - executors, trace observers), project structure, testing, and publishing. Use when - the user wants to create a new plugin or add custom functionality to Nextflow. ---- ## Using this skill @@ -15,7 +7,7 @@ pipeline, input data and execution environment from their request or current context. Use user-selected locations for files and results. Consult companion skills, bundled references and optional helpers by name when available. -For Seqera operations, read the [MCP connection](../launch-workflow/references/seqera-mcp/README.md) connection reference. Any `platform_*` examples +For Seqera operations, read the [MCP connection](../../../launch-workflow/references/seqera-mcp/README.md) connection reference. Any `platform_*` examples describe API operations. Discover their exact names and parameter schemas with `search_seqera_api`, then invoke `call_seqera_api` using those schemas. The host manages OAuth for the connected MCP server. @@ -493,6 +485,6 @@ void onFlowComplete(WorkflowMetadata meta) { ## Related Skills -- `nf-plugin-legacy-migration` — Convert legacy plugins to new registry format +- [legacy plugin migration](../nf-plugin-legacy-migration/README.md) — Convert legacy plugins to new registry format - `nextflow-config` — Configure plugins in nextflow.config - `nf-pipeline-design` — Standard pipeline organization diff --git a/skills/nf-plugin-legacy-migration/SKILL.md b/skills/migrate-nextflow-code/references/nf-plugin-legacy-migration/README.md similarity index 90% rename from skills/nf-plugin-legacy-migration/SKILL.md rename to skills/migrate-nextflow-code/references/nf-plugin-legacy-migration/README.md index 277c3f4..f11e43a 100644 --- a/skills/nf-plugin-legacy-migration/SKILL.md +++ b/skills/migrate-nextflow-code/references/nf-plugin-legacy-migration/README.md @@ -1,11 +1,3 @@ ---- -name: nf-plugin-legacy-migration -description: > - Migrate legacy Nextflow plugins to the new plugin registry format. Covers converting - plugins that use the old GitHub-based nf-plugins-index to the modern registry.nextflow.io - approach. Use when the user has an existing plugin using the legacy format or wants - to understand the differences between old and new plugin systems. ---- ## Using this skill @@ -15,7 +7,7 @@ pipeline, input data and execution environment from their request or current context. Use user-selected locations for files and results. Consult companion skills, bundled references and optional helpers by name when available. -For Seqera operations, read the [MCP connection](../launch-workflow/references/seqera-mcp/README.md) connection reference. Any `platform_*` examples +For Seqera operations, read the [MCP connection](../../../launch-workflow/references/seqera-mcp/README.md) connection reference. Any `platform_*` examples describe API operations. Discover their exact names and parameter schemas with `search_seqera_api`, then invoke `call_seqera_api` using those schemas. The host manages OAuth for the connected MCP server. @@ -127,4 +119,4 @@ If observers are not called, inspect interface compatibility and factory registr - https://github.com/nextflow-io/nf-plugin-template - https://registry.nextflow.io -Use nf-plugin-development for new plugins and nextflow-config for pipeline plugin configuration. +Use [plugin authoring](../nf-plugin-development/README.md) for new plugins and nextflow-config for pipeline plugin configuration. diff --git a/skills/nf-pipeline-design/SKILL.md b/skills/nf-pipeline-design/SKILL.md index 5d910ec..0451863 100644 --- a/skills/nf-pipeline-design/SKILL.md +++ b/skills/nf-pipeline-design/SKILL.md @@ -1,6 +1,8 @@ --- name: nf-pipeline-design description: > + Also use for output aggregation, collectFile headers, join cardinality, + grouping keys and null-handling correctness. Make sure to use this skill whenever you are designing, writing, reviewing, or refactoring a Nextflow DSL2 pipeline with a focus on STRUCTURE — the shape of `main.nf`, where subworkflows belong, when something is a module @@ -35,8 +37,8 @@ manages OAuth for the connected MCP server. When a structural decision depends on a non-structural one, chain to: -- `find-alternative-tools` — tool choice at a branch -- `search-existing-modules` — reuse vs author a module +- [tool comparison](../build-nextflow-pipeline/references/find-alternative-tools/README.md) — tool choice at a branch +- [module discovery](../build-nextflow-pipeline/references/search-existing-modules/README.md) — reuse vs author a module - [parameter triage](../nextflow-schema/references/triage-pipeline-parameters/README.md) — param schema before `main.nf` ## Canonical Nextflow baseline @@ -1286,3 +1288,7 @@ script: run_tool --input ${fasta} """ ``` + +## Output correctness playbook + +When aggregating, joining or grouping outputs, check headers, cardinality, keys and null handling. Read [output correctness](references/nextflow-output-patterns/README.md) before proceeding. diff --git a/skills/nextflow-output-patterns/SKILL.md b/skills/nf-pipeline-design/references/nextflow-output-patterns/README.md similarity index 82% rename from skills/nextflow-output-patterns/SKILL.md rename to skills/nf-pipeline-design/references/nextflow-output-patterns/README.md index f8bae6e..4d8b00c 100644 --- a/skills/nextflow-output-patterns/SKILL.md +++ b/skills/nf-pipeline-design/references/nextflow-output-patterns/README.md @@ -1,20 +1,3 @@ ---- -name: nextflow-output-patterns -description: > - Use this skill when writing or reviewing any Nextflow workflow that - aggregates per-sample outputs into a combined file, joins channels with - a remainder mode, or groups tuples for per-group processing. Covers the - operator idioms — `collectFile`, `join`, `groupTuple`, channel-level - null handling — that determine whether a workflow's output is - *correct*, not just whether it *runs*. Trigger on phrases like - `collectFile`, `groupTuple`, `join`, channel aggregation, per-sample - merging, combined output files, metadata-keyed grouping, optional - tuple positions, and the broader category of "the workflow finishes - without error but the merged output is malformed." Pair with - migrate-nextflow-code (strict v2 syntax) and build-nextflow-pipeline - (high-level structure and module composition); this skill is specifically about - output-correctness idioms in the operator layer. ---- ## Using this skill @@ -24,7 +7,7 @@ pipeline, input data and execution environment from their request or current context. Use user-selected locations for files and results. Consult companion skills, bundled references and optional helpers by name when available. -For Seqera operations, read the [MCP connection](../launch-workflow/references/seqera-mcp/README.md) connection reference. Any `platform_*` examples +For Seqera operations, read the [MCP connection](../../../launch-workflow/references/seqera-mcp/README.md) connection reference. Any `platform_*` examples describe API operations. Discover their exact names and parameter schemas with `search_seqera_api`, then invoke `call_seqera_api` using those schemas. The host manages OAuth for the connected MCP server. diff --git a/skills/repair-workflow/SKILL.md b/skills/repair-workflow/SKILL.md index af89554..0fe6804 100644 --- a/skills/repair-workflow/SKILL.md +++ b/skills/repair-workflow/SKILL.md @@ -92,7 +92,7 @@ Reread the test output, inspect the actual produced artifacts, compare expected - No shadow implementation or copy-back workaround was introduced. - The representative test passes, or any remaining limitation is reported precisely. -Use [registry composition](../build-nextflow-pipeline/references/create-workflow/README.md) for new workflows, run-module for a single registry module, [strict syntax compatibility](../migrate-nextflow-code/references/nextflow-26-syntax/README.md) for strict-syntax changes, and [nf-test failure repair](../nf-test/references/repair-nf-test/README.md) for test-specific failures. Consult repair-checklists.md when available. +Use [registry composition](../build-nextflow-pipeline/references/create-workflow/README.md) for new workflows, [native module execution](../build-nextflow-pipeline/references/run-module/README.md) for a single registry module, [strict syntax compatibility](../migrate-nextflow-code/references/nextflow-26-syntax/README.md) for strict-syntax changes, and [nf-test failure repair](../nf-test/references/repair-nf-test/README.md) for test-specific failures. Consult repair-checklists.md when available. ## Static diagnostics playbook diff --git a/sources.json b/sources.json index e4e501c..9106ff9 100644 --- a/sources.json +++ b/sources.json @@ -1,81 +1,25 @@ { "portal_commit": "684d343e75ec6437d58c3e85279a8031384f3b62", "files": [ - { - "path": "skills/audit-conversion-readiness/SKILL.md", - "source": "portal/backend/src/skills/audit-conversion-readiness/SKILL.md", - "source_sha256": "c03ff0e0755129fb718f8d7d45dec4b222661c9c5e3af91145deab166907de29", - "bundled_sha256": "1951c0aaeeadfcd1a81baa76332ae374679c8bd5cdac26eda43ecbcc562a1362", - "override": true - }, - { - "path": "skills/audit-conversion-readiness/references/reference-patterns.md", - "source": "portal/backend/src/skills/audit-conversion-readiness/references/reference-patterns.md", - "source_sha256": "971a544370fa161400fa5c7f1a156abf2ae7c995f40d42ea4b8593b56de011ec", - "bundled_sha256": "a8e41a1ab262564941c6f217719c976d9180717efebca615aefcd9fa57391fa7", - "override": false - }, - { - "path": "skills/audit-conversion-readiness/references/report-template.md", - "source": "portal/backend/src/skills/audit-conversion-readiness/references/report-template.md", - "source_sha256": "b92c40dc2d4d18660761f7e38affd2183edcfd9d6245922bfe01f12ea3aefbff", - "bundled_sha256": "3656852fd045af27f5fc973b82e65bd8e13fd2f8c4f150b652b2adbfdd63f1ca", - "override": false - }, - { - "path": "skills/audit-conversion-readiness/references/tool-availability.md", - "source": "portal/backend/src/skills/audit-conversion-readiness/references/tool-availability.md", - "source_sha256": "be177bc6723e1612ed788436e0109560c1993345abb3ff1967da6c75c40e577b", - "bundled_sha256": "4e7ff003fe93330f1c96315e93567033998e295ef7d2b086ecd9c7802407cedb", - "override": true - }, { "path": "skills/build-nextflow-pipeline/SKILL.md", "source": "portal/backend/src/skills/build-nextflow-pipeline/SKILL.md", "source_sha256": "4dcc9dcaa19a74f8b9d05272271b5a55317ca8fd0e3ca11b3eb0edb43fe4dcad", - "bundled_sha256": "65d44a56973b99258a081a5fd58f4a3a978cdc11bfa198fd60342b7bec42455a", - "override": true - }, - { - "path": "skills/ce-credentials-setup/SKILL.md", - "source": "portal/backend/src/skills/ce-credentials-setup/SKILL.md", - "source_sha256": "179ed50da55eb509086eaf9e3228d063bd4d8334c0f8fff38c0f31e0e327e4e9", - "bundled_sha256": "f08f46ce58afa13ca971bd974578a388fa6e86851b8263ce2c1db5acb34e27e1", - "override": true - }, - { - "path": "skills/ce-credentials-setup/references/aws-batch.md", - "source": "portal/backend/src/skills/ce-credentials-setup/references/aws-batch.md", - "source_sha256": "0b72204b432f9c6a9f8ac476339a0639a300f137c83c362553a20deb426dba8f", - "bundled_sha256": "93cf12538472e936f82267f8756a390f5d472c0069f33d851b4d8653b8f617f4", - "override": true - }, - { - "path": "skills/ce-credentials-setup/references/kubernetes.md", - "source": "portal/backend/src/skills/ce-credentials-setup/references/kubernetes.md", - "source_sha256": "1b55a04577e070016fec281df80294ccdc9e738485ce3fd3b82b02502d02af65", - "bundled_sha256": "2cf64d58f6ab3df54b20133b005799245e15d79b104396af56c285add173be85", - "override": true - }, - { - "path": "skills/ce-credentials-setup/references/seqera-compute.md", - "source": "portal/backend/src/skills/ce-credentials-setup/references/seqera-compute.md", - "source_sha256": "b76087e0b06de0984c3f22228846b19dc3561bbba27fd18c1162fe27fab78752", - "bundled_sha256": "b1e39e794db10b38beb6079b7d82ee49c2c302f0480b676d06fa9ce0caebd1ac", + "bundled_sha256": "95ea118f411467c0f29f83cdc858093d68006e955590e35b04bf78689d0ee826", "override": true }, { "path": "skills/create-container/SKILL.md", "source": "portal/backend/src/skills/create-container/SKILL.md", "source_sha256": "7e87a45b6665d9cb282f7f9c145e688cf57affd6e95d84a61b8ce993fc811a57", - "bundled_sha256": "b645a0dd1b55e6e89a968e0644b04201d7d93dc05c1572c1d4e695b25cf15b2a", + "bundled_sha256": "685663212f01dd61f0bb4618d08b9c8f40062837c4401ad92a128f2422b45b54", "override": true }, { "path": "skills/debug-local-run/SKILL.md", "source": "portal/backend/src/skills/debug-local-run/SKILL.md", "source_sha256": "dc28ac095ffdbc4e4b798d1edf132edd7090e2f96508fdc7ecaded99074e9ba2", - "bundled_sha256": "cfaa0aadd28daa4781fad9df809f6160c2facd263bde274c7a8f6cdf08f505fb", + "bundled_sha256": "4c25acd7ecc0de097292814bf0112868a4482fd445302e760d17216835fae2e2", "override": true }, { @@ -127,83 +71,6 @@ "bundled_sha256": "89952592504909b25b29829e950ede30b8b72318ebf2f80f020d4e183fdff58d", "override": false }, - { - "path": "skills/find-alternative-tools/SKILL.md", - "source": "portal/backend/src/skills/find-alternative-tools/SKILL.md", - "source_sha256": "b3acbc1417255d5b26b9058d7b80fff92a1b732d218fd1b043e636fa26e223b1", - "bundled_sha256": "a3afb0b68ba4638f9ff0b6d2b27588a627040bb6b04e80e07d275c2ec65e7d35", - "override": true - }, - { - "path": "skills/maintain-nf-core-pipeline/SKILL.md", - "source": "portal/backend/src/skills/maintain-nf-core-pipeline/SKILL.md", - "source_sha256": "4ab1ec7a1ad95f4e622efe4e7f56eec650e70f6f62ebe087639be82d000c837c", - "bundled_sha256": "3de0db5f48b81c4db6d70a3185651ecb425f99b051eb984e9fe8b7bb6df2c837", - "override": true - }, - { - "path": "skills/maintain-nf-core-pipeline/references/nf-core-conventions.md", - "source": "portal/backend/src/skills/maintain-nf-core-pipeline/references/nf-core-conventions.md", - "source_sha256": "fee5073d8241a52fc24e38d60f979b1a8a49e665703d2800f3c1e7e5bd088878", - "bundled_sha256": "30fd736ccf1808f1ffa9d813aa0b490d41291c98772eafb6a5379c4a03a2a7dd", - "override": true - }, - { - "path": "skills/maintain-nf-core-pipeline/references/template-merges/README.md", - "source": "portal/backend/src/skills/maintain-nf-core-pipeline/references/template-merges/README.md", - "source_sha256": "cd226cb30894f9242b0230115445b7e01f514c55551c14835a03581fd1ecff2b", - "bundled_sha256": "ab13b25534c79838d127d78572270a43f9e8c473bc70103b52e23a456d18dc8a", - "override": false - }, - { - "path": "skills/maintain-nf-core-pipeline/references/template-merges/tools-4_0.md", - "source": "portal/backend/src/skills/maintain-nf-core-pipeline/references/template-merges/tools-4_0.md", - "source_sha256": "743295a75fea1c54adc6e93c8b479012a705beb0d74a599c2262b417f0cf415c", - "bundled_sha256": "79f3cb51a5f1b9062a15423ea87d6278085694d5047bd5628b83ac04586b18ac", - "override": true - }, - { - "path": "skills/migrate-from-snakemake/SKILL.md", - "source": "portal/backend/src/skills/migrate-from-snakemake/SKILL.md", - "source_sha256": "ad385af7b45a52955ba7b7b924efbb63362a98e20998ec51558e1146ab1b4880", - "bundled_sha256": "118f2d75d609f3e0020136964cae60508cd5255f8c84c07a8ecf588f817da6e4", - "override": true - }, - { - "path": "skills/migrate-from-snakemake/references/nextflow-conda-troubleshooting.md", - "source": "portal/backend/src/skills/migrate-from-snakemake/references/nextflow-conda-troubleshooting.md", - "source_sha256": "21c17c71e82bb6393aaed4757b1f229b03c88f44a7713de9ad0c738a0442e433", - "bundled_sha256": "ee962d892a202a056105dbc68267a5a10fc62e61c9d460bfcf36224b51511062", - "override": false - }, - { - "path": "skills/migrate-from-snakemake/references/snakemake-nextflow-playbook.md", - "source": "portal/backend/src/skills/migrate-from-snakemake/references/snakemake-nextflow-playbook.md", - "source_sha256": "de986ee318ad4be3422502f696f26f6d6788d145a4c6e246cb46067656788b11", - "bundled_sha256": "9271fc3d0cffe03a184749692bf41d5486ddcfc323d401870bc60e442211cb43", - "override": false - }, - { - "path": "skills/migrate-from-snakemake/references/snakemake-rules-core.md", - "source": "portal/backend/src/skills/migrate-from-snakemake/references/snakemake-rules-core.md", - "source_sha256": "dbf9d07b324db17b8123c59d2ed44083ecfc2247bcb37e18d07b58204c165bfd", - "bundled_sha256": "28c749e78e17db095727170a8e23f2566f064d3ce651b149b593508360e257b1", - "override": false - }, - { - "path": "skills/migrate-from-snakemake/references/snakemake-testing-unit-tests.md", - "source": "portal/backend/src/skills/migrate-from-snakemake/references/snakemake-testing-unit-tests.md", - "source_sha256": "9857ea5f89bb7d2376a2eaeead46305a0f1e45cf5a88691c368692fc17a4477a", - "bundled_sha256": "bd5acdddd51ad1bc730ad78bd1b61520c94f2ef9de4697d1c36f3473a8fff13e", - "override": false - }, - { - "path": "skills/migrate-from-snakemake/references/snakemake-writing-workflows.md", - "source": "portal/backend/src/skills/migrate-from-snakemake/references/snakemake-writing-workflows.md", - "source_sha256": "551afd0c162468fc427d38e0bebc2eaacf166780f21779b1a76f9388fe1d5814", - "bundled_sha256": "786ebe625b8d619affb75be8f942e5e4c64645a52be5e268d01b00f732484313", - "override": false - }, { "path": "skills/nextflow-config/SKILL.md", "source": "portal/backend/src/skills/nextflow-config/SKILL.md", @@ -225,20 +92,6 @@ "bundled_sha256": "6daf6043a2d29ee597712b1d0ab75ce15362f0212f8c9f2bc58d90f4fc4a4fb3", "override": true }, - { - "path": "skills/nextflow-history/SKILL.md", - "source": "portal/backend/src/skills/nextflow-history/SKILL.md", - "source_sha256": "4f2ce1b1d39236f1f5b1d7de1ae07d3324b2b8cc32c79e3c6821f43cd2e09bd4", - "bundled_sha256": "4d7db39e87e790db250b8aeb504350faec2d3b3d0d3491b979ee55edadb22a2a", - "override": true - }, - { - "path": "skills/nextflow-output-patterns/SKILL.md", - "source": "portal/backend/src/skills/nextflow-output-patterns/SKILL.md", - "source_sha256": "b8ee43fb09ae92ddf90b7b4ea9517b4660e297879804c8a51c1988765017df72", - "bundled_sha256": "9ce001226ba2c0a5217ba2b78bdadd18727d78abb3ad3203e979f57230a9d9a5", - "override": true - }, { "path": "skills/nextflow-schema/SKILL.md", "source": "portal/backend/src/skills/nextflow-schema/SKILL.md", @@ -267,32 +120,11 @@ "bundled_sha256": "9ed0082a0d522e50c5e843e63daef987e865bfb67181516ec33d9edfc5c4bc32", "override": false }, - { - "path": "skills/nf-data-lineage/SKILL.md", - "source": "portal/backend/src/skills/nf-data-lineage/SKILL.md", - "source_sha256": "81f88126cf85d2da22f03f7f5ae3c38256b63cccc5350cfc7348e55631ca92a7", - "bundled_sha256": "217cf839f27edd53e9b8e6fd3c1658c13a8c8745f00131d0ca409b91786edb06", - "override": true - }, - { - "path": "skills/nf-docker-scripts/SKILL.md", - "source": "portal/backend/src/skills/nf-docker-scripts/SKILL.md", - "source_sha256": "867fbfd0d732efc9655df1e025e89a608f049bf2397b057a38fcfd1af266b249", - "bundled_sha256": "03cf2260d63b6266813a39074743e369170ad664ab598581c900e564d0c2d1f8", - "override": true - }, - { - "path": "skills/nf-docker-scripts/references/script-strategies-deep-dive.md", - "source": "portal/backend/src/skills/nf-docker-scripts/references/script-strategies-deep-dive.md", - "source_sha256": "5adc413d42b2f962602f48e6482861cda160071cc3c0368c778ec7ae5f2ced11", - "bundled_sha256": "d2c6232dec34c748662d945d575cba2ca7475ae8f090904bb4dc426e313539ba", - "override": false - }, { "path": "skills/nf-pipeline-design/SKILL.md", "source": "portal/backend/src/skills/nf-pipeline-design/SKILL.md", "source_sha256": "580d7f415a3a267fc2bd23da92848281b4cc32974a14c978b3395bdcfa6a4645", - "bundled_sha256": "c399ca5043d70a869049e2509a55ae254e9f39ca22a235ce47c1cdd55e606b3d", + "bundled_sha256": "37aa3c4cd3e3fc7e141d70b339b00ff9975718ae8a57b85529d8b948b73523f8", "override": true }, { @@ -463,20 +295,6 @@ "bundled_sha256": "0d58f79e79b503ce31e6ab1c029410ac0011e62162f8ba573b804179c5232295", "override": false }, - { - "path": "skills/nf-plugin-development/SKILL.md", - "source": "portal/backend/src/skills/nf-plugin-development/SKILL.md", - "source_sha256": "5a328e82652bbe4d0dfc3afdc3877379ce54e1fea7258b6bbf432692a31ee117", - "bundled_sha256": "f516302bd674f1642291569c8daf20e3fb10abd4d740716b55c2c0c69b2858f2", - "override": true - }, - { - "path": "skills/nf-plugin-legacy-migration/SKILL.md", - "source": "portal/backend/src/skills/nf-plugin-legacy-migration/SKILL.md", - "source_sha256": "635d3c3ad2fb29f77cf4bea08cbea5267b636d45aa697d05302a1081d5545c97", - "bundled_sha256": "20087fc58d5543faf735b18dee7fe9b16ff4feb541c79edaf0e464a251d2c9a4", - "override": true - }, { "path": "skills/nf-test/SKILL.md", "source": "portal/backend/src/skills/nf-test/SKILL.md", @@ -523,7 +341,7 @@ "path": "skills/repair-workflow/SKILL.md", "source": "portal/backend/src/skills/repair-workflow/SKILL.md", "source_sha256": "43567947449b6dcd44c34bded2a44c93826d42fd703c71576fdca3780e39d72a", - "bundled_sha256": "eb5e0fb4c5f490fd94adfa0563ecf98984fcf2377cddb213df941a6fb396262d", + "bundled_sha256": "f3ad13d5ea7be15eec12d41b2448e22c98c5b146dafc2ee48e91bce7dfe3e004", "override": true }, { @@ -534,418 +352,608 @@ "override": true }, { - "path": "skills/search-existing-modules/SKILL.md", - "source": "portal/backend/src/skills/search-existing-modules/SKILL.md", - "source_sha256": "73ab4e956a3bddd4382a8d74911963a8c51a72abcd3ff8a7fd0d49bd8ffd53a9", - "bundled_sha256": "c75b8a5342dea17c076dff23ab44c927dd32d399d203d2059c3b7a74449c3232", - "override": true + "path": "licenses/nextflow-agent-skills-Apache-2.0.txt", + "source": "https://github.com/nextflow-io/agent-skills/blob/1edf73763da408c410074568f228a75fc6d42864/COPYING", + "source_sha256": "5df2a0d87d6c562f0ea11c688ac52532aa28d744cabc7994ff0537f64b3b3320", + "bundled_sha256": "5df2a0d87d6c562f0ea11c688ac52532aa28d744cabc7994ff0537f64b3b3320", + "override": false }, { - "path": "skills/seqera-data-links/SKILL.md", - "source": "portal/backend/src/skills/seqera-data-links/SKILL.md", - "source_sha256": "1ac21b9aa3cc01ab4c05497675b439da3eebe85b17ceb326e953a586681a04fb", - "bundled_sha256": "4bffc8f64b60cfe29d330d01a6044f9598902ab8280e31561a75d0c7e0039ac5", - "override": true + "path": "scripts/nextflow-language-server.sh", + "source": "https://github.com/nextflow-io/agent-skills/blob/1edf73763da408c410074568f228a75fc6d42864/scripts/nextflow-language-server.sh", + "source_sha256": "be93865e98c809cbb7cf3175b4cc85b7c05756f3674588aaaa54df1a9808288f", + "bundled_sha256": "be93865e98c809cbb7cf3175b4cc85b7c05756f3674588aaaa54df1a9808288f", + "override": false }, { - "path": "skills/seqerakit/SKILL.md", - "source": "portal/backend/src/skills/seqerakit/SKILL.md", - "source_sha256": "4e70348d52b774e716d4e48091317b5b22c48c7c6482712543d32ecb6898ecf7", - "bundled_sha256": "74071d070e8fb9abf68d56eb718affe92ed560d03a8b77ed83cb95498d67b92e", - "override": true + "path": "scripts/nextflow-typecheck.sh", + "source": "https://github.com/nextflow-io/agent-skills/blob/1edf73763da408c410074568f228a75fc6d42864/scripts/nextflow-typecheck.sh", + "source_sha256": "fe54e31cd70943629bbc33005d75961646a5875fcb320f5bc6b031e3c21bbcd7", + "bundled_sha256": "fe54e31cd70943629bbc33005d75961646a5875fcb320f5bc6b031e3c21bbcd7", + "override": false }, { - "path": "skills/nextflow-development/LICENSE.txt", - "source": "bio-research/nextflow-development/LICENSE.txt", - "source_sha256": "7505b489cc8ad7f16ba08343184320f1583303cfacdb9121b9b756bc073df1ab", - "bundled_sha256": "7505b489cc8ad7f16ba08343184320f1583303cfacdb9121b9b756bc073df1ab", - "override": false + "path": "skills/launch-workflow/SKILL.md", + "source": "https://github.com/nextflow-io/agent-skills/blob/1edf73763da408c410074568f228a75fc6d42864/skills/launch-workflow/SKILL.md", + "source_sha256": "40ee0cca1679931ecdc284e86193b34a400d861f25d341cf3a358d4dce310cd3", + "bundled_sha256": "b912f5633969267832b4f711a1f77da7cfa50e62a09bba66012a2da2fe715e3b", + "override": true }, { - "path": "skills/nextflow-development/SKILL.md", - "source": "bio-research/nextflow-development/SKILL.md", - "source_sha256": "f30017df5d499427a701ec6cedfc5c9948ca3bd04ee1a2b6a585a29cd93ad0d7", - "bundled_sha256": "bcf6ba30540700750b754248e592d5d8fdddfcf1c61b44eb5d6fbea7e4db7d08", + "path": "skills/migrate-nextflow-code/SKILL.md", + "source": "https://github.com/nextflow-io/agent-skills/blob/1edf73763da408c410074568f228a75fc6d42864/skills/migrate-nextflow-code/SKILL.md", + "source_sha256": "7cdba1fd11ecda34189503669f989e97ffc611fe957a051fb83357073faab021", + "bundled_sha256": "ed7c16d2e411ce13846e019712b129168095c6ec79e28750d0e34fc93fb26605", "override": true }, { - "path": "skills/nextflow-development/references/geo-sra-acquisition.md", - "source": "bio-research/nextflow-development/references/geo-sra-acquisition.md", - "source_sha256": "85238c3bf2c43d2ca5ad8c4fb4418927ff3443bf8993813925a188a1c287d170", - "bundled_sha256": "a9699355e902a8910c493fd2c5c030fa6e2117e9054c129d63ca55ef9f08f5c6", + "path": "skills/migrate-nextflow-code/references/static-typing-params.md", + "source": "https://github.com/nextflow-io/agent-skills/blob/1edf73763da408c410074568f228a75fc6d42864/skills/migrate-nextflow-code/references/static-typing-params.md", + "source_sha256": "89524b99f014965ff1da070ee08914e7df1e2272b63b3518490aa06ad2e37011", + "bundled_sha256": "c578787e90e59dadf7f05a1ad3d361d7b898234937772859d67811eb1776a899", "override": false }, { - "path": "skills/nextflow-development/references/installation.md", - "source": "bio-research/nextflow-development/references/installation.md", - "source_sha256": "d214ad4508868ed9fd648ec625e633c2b7629df300a4953a4b89fc6010fa7577", - "bundled_sha256": "e1445e03b0b6dbbd5d9d2bc7d3f1d57c72741c858bab0a719d941b354005a780", + "path": "skills/migrate-nextflow-code/references/static-typing-processes.md", + "source": "https://github.com/nextflow-io/agent-skills/blob/1edf73763da408c410074568f228a75fc6d42864/skills/migrate-nextflow-code/references/static-typing-processes.md", + "source_sha256": "01ea3e70a470b0007dc5c7f5a7049b387a96aa3fb67b74e032eb0983366cdc59", + "bundled_sha256": "f2b89d8d6815b8df7ee493f2447ecd9b5c61dd3cbb008b8c76349dab02fd8ff9", "override": false }, { - "path": "skills/nextflow-development/references/pipelines/atacseq.md", - "source": "bio-research/nextflow-development/references/pipelines/atacseq.md", - "source_sha256": "ca6ca22e409e78be3aa6f0e18de9c255fd5e9ac66c59d71ce214fc4a76849a1b", - "bundled_sha256": "3034f773e094870f91f169808f987cbed35757dcdc66c37ef478d9848ce0006d", + "path": "skills/migrate-nextflow-code/references/static-typing-workflows.md", + "source": "https://github.com/nextflow-io/agent-skills/blob/1edf73763da408c410074568f228a75fc6d42864/skills/migrate-nextflow-code/references/static-typing-workflows.md", + "source_sha256": "85b0afdb2b53eddf038638ddef30f82deb7f633494ea4b28be510d0436166904", + "bundled_sha256": "970f3d4547ed118746959f3b5baa867066f10d2237704b9e8a05e49e8621ef17", "override": false }, { - "path": "skills/nextflow-development/references/pipelines/rnaseq.md", - "source": "bio-research/nextflow-development/references/pipelines/rnaseq.md", - "source_sha256": "c7b0c59b33d52b62d6ca2a476f1f45c849dc83923773f258a0731ba2b7b7c93a", - "bundled_sha256": "0f1abbc85acc5ea348d71e72e0a23c4200e41d59fd648374673cb237ddcc1553", - "override": false + "path": "skills/migrate-nextflow-code/references/static-typing.md", + "source": "https://github.com/nextflow-io/agent-skills/blob/1edf73763da408c410074568f228a75fc6d42864/skills/migrate-nextflow-code/references/static-typing.md", + "source_sha256": "0943a0adba1fdf799544177db5acfb847ea03c0e147a173aacac14bb008a2864", + "bundled_sha256": "f7829c6a72c11464adabaefbc208a5821f28e916680adb0d57749dfbbbcef9c6", + "override": true }, { - "path": "skills/nextflow-development/references/pipelines/sarek.md", - "source": "bio-research/nextflow-development/references/pipelines/sarek.md", - "source_sha256": "67fa5ee65022875b95e6181baa3eec67c572d0564d2aa7bb498d85551458c2fa", - "bundled_sha256": "8766e88aa34dff1efb694a30090c79cdef16b7ef065adaae043992a71e6125c4", + "path": "skills/migrate-nextflow-code/references/strict-syntax.md", + "source": "https://github.com/nextflow-io/agent-skills/blob/1edf73763da408c410074568f228a75fc6d42864/skills/migrate-nextflow-code/references/strict-syntax.md", + "source_sha256": "b278a55ef03df36308e186653a503de57edfc5ee23afdb05b422b0a68fab32c2", + "bundled_sha256": "38bbfc70371516b281f5e74a95a2faba214972c6474b7189600538f1dbdc1564", "override": false }, { - "path": "skills/nextflow-development/references/troubleshooting.md", - "source": "bio-research/nextflow-development/references/troubleshooting.md", - "source_sha256": "f49b6b48590170770d8e0eb69ee9894c3de04d779b0031d0515529f2e7c01450", - "bundled_sha256": "a6bedfebac3bf0ff25086f09613d667bfc53f78c7e86d76c452b1892455b3293", + "path": "skills/migrate-nextflow-code/references/topic-channels.md", + "source": "https://github.com/nextflow-io/agent-skills/blob/1edf73763da408c410074568f228a75fc6d42864/skills/migrate-nextflow-code/references/topic-channels.md", + "source_sha256": "cb29cd9a421f4eb9889f43ff50a3e272c033400144738f0645ffde3c1f32a34a", + "bundled_sha256": "d88f54703e3c7881da6d07b0684cf2c8a3f6825b4a64a20a40a08b94eadb246c", "override": false }, { - "path": "skills/nextflow-development/scripts/check_environment.py", - "source": "bio-research/nextflow-development/scripts/check_environment.py", - "source_sha256": "71fac73709a8bc7215af8b4f204b93a12fe2a526512591dffb21b267239bcf9d", - "bundled_sha256": "95e1af46f55fdd4c0f3e81cca7a0f127f8e696ab4fc9c0c5d9ecbe9476ac2ed2", + "path": "skills/migrate-nextflow-code/references/workflow-outputs.md", + "source": "https://github.com/nextflow-io/agent-skills/blob/1edf73763da408c410074568f228a75fc6d42864/skills/migrate-nextflow-code/references/workflow-outputs.md", + "source_sha256": "311478b6ba1e9280417cd5e65a3f45c731920699605aef6900a634370c655c0d", + "bundled_sha256": "ee00436a7b273ba2f3d2e4095e8fa5688c6dfe7b727c4cbe788696c824516bc4", "override": false }, { - "path": "skills/nextflow-development/scripts/config/genomes.yaml", - "source": "bio-research/nextflow-development/scripts/config/genomes.yaml", - "source_sha256": "940bd833b87542a25705668a3ba8f157ea25fcb698f654f2d410efd410fa4172", - "bundled_sha256": "940bd833b87542a25705668a3ba8f157ea25fcb698f654f2d410efd410fa4172", + "path": "assets/nextflow-icon.png", + "source": "https://github.com/nextflow-io/trademark/blob/d23659daca6162680544f84d20d56b708ead047a/nextflow-icon.png", + "source_sha256": "4baa8db788e56819432fde89ffae786189657d7da94fc5f9b4cbc05b16c1d73a", + "bundled_sha256": "4baa8db788e56819432fde89ffae786189657d7da94fc5f9b4cbc05b16c1d73a", "override": false }, { - "path": "skills/nextflow-development/scripts/config/pipelines/atacseq.yaml", - "source": "bio-research/nextflow-development/scripts/config/pipelines/atacseq.yaml", - "source_sha256": "fb63a0f76fec6b71303e8a58bba8c4c38a56ee533784d438953fe5e394444158", - "bundled_sha256": "fb63a0f76fec6b71303e8a58bba8c4c38a56ee533784d438953fe5e394444158", - "override": false + "path": "skills/build-nextflow-pipeline/references/create-workflow/README.md", + "source": "https://github.com/nextflow-io/agent-skills/blob/1edf73763da408c410074568f228a75fc6d42864/skills/create-workflow/SKILL.md", + "source_sha256": "cb038d5bc1c2b5a7e76f309cf28b8dfe889e88235d03717a9862f2b5a7434972", + "bundled_sha256": "bd8e63d2a72ca5284518f0e099905eb957adac9ea328c2723446b5522777c4bb", + "override": true }, { - "path": "skills/nextflow-development/scripts/config/pipelines/rnaseq.yaml", - "source": "bio-research/nextflow-development/scripts/config/pipelines/rnaseq.yaml", - "source_sha256": "8df7b123fc64328aa4b97d047b316cdbaf4622d89684dfd0b6aca5a5da263f5a", - "bundled_sha256": "8df7b123fc64328aa4b97d047b316cdbaf4622d89684dfd0b6aca5a5da263f5a", - "override": false + "path": "skills/build-nextflow-pipeline/references/convert-python-script/README.md", + "source": "portal/backend/src/skills/convert-python-script/SKILL.md", + "source_sha256": "5741caa8d726f8c6ccd036a69beb667f30d5d2836249dfb1ecb99a6db1aad560", + "bundled_sha256": "4b62e8db4c34a1b72cd0667231772e915d2f95874c35bf41869a3f47cd6db390", + "override": true }, { - "path": "skills/nextflow-development/scripts/config/pipelines/sarek.yaml", - "source": "bio-research/nextflow-development/scripts/config/pipelines/sarek.yaml", - "source_sha256": "03a904ab4a5f3de216200b60646f58faa37416d4bafda6289fcca91caf1c4f2f", - "bundled_sha256": "03a904ab4a5f3de216200b60646f58faa37416d4bafda6289fcca91caf1c4f2f", - "override": false + "path": "skills/build-nextflow-pipeline/references/convert-r-script/README.md", + "source": "portal/backend/src/skills/convert-r-script/SKILL.md", + "source_sha256": "523d41b30048a9e77c0ce820ed9654e3909c25715a68c187274a34cf06299c3a", + "bundled_sha256": "eedff6d243940f15aea9820ae058f55958438a8d1f88f48faacbaae958167bb1", + "override": true }, { - "path": "skills/nextflow-development/scripts/detect_data_type.py", - "source": "bio-research/nextflow-development/scripts/detect_data_type.py", - "source_sha256": "68d597921f1c408ae79ece1f8dbab5df8f2fb3328a4c89fee716aac3c4799f4e", - "bundled_sha256": "260b5397620a9352f104be8cad1f12d8bfb1a22bc37bcd63d0e7592c34071bfd", - "override": false + "path": "skills/build-nextflow-pipeline/references/convert-r-script/references/nextflow-dsl2.md", + "source": "portal/backend/src/skills/convert-r-script/references/nextflow-dsl2.md", + "source_sha256": "3e758662c8e2e5a321c20a309cdced414f5c95f213f87f592a3c79e11600410b", + "bundled_sha256": "31fa0d8ed7d3a7e59a1dd5be806b5df637ed92fb49ce109876629d67baabd6a0", + "override": true }, { - "path": "skills/nextflow-development/scripts/generate_samplesheet.py", - "source": "bio-research/nextflow-development/scripts/generate_samplesheet.py", - "source_sha256": "14a4acb03e08369ea9d73de872b20e3578bcd3eec7bbfa03c2df6adcf5eacbf1", - "bundled_sha256": "14a4acb03e08369ea9d73de872b20e3578bcd3eec7bbfa03c2df6adcf5eacbf1", - "override": false + "path": "skills/build-nextflow-pipeline/references/convert-r-script/references/r-container-images.md", + "source": "portal/backend/src/skills/convert-r-script/references/r-container-images.md", + "source_sha256": "402b6723bcd6c5ac81297264cecddf4a4e21f78105cc626d862c41e55cf1f0e6", + "bundled_sha256": "2468b98641d82fad35ae002716826cde3292bbd3ea1d0ac837665825807ed8ec", + "override": true }, { - "path": "skills/nextflow-development/scripts/manage_genomes.py", - "source": "bio-research/nextflow-development/scripts/manage_genomes.py", - "source_sha256": "d27e36e0c442b081ef7e60d426c037967afec97e441e8fd7ae0a5e436b64e863", - "bundled_sha256": "d27e36e0c442b081ef7e60d426c037967afec97e441e8fd7ae0a5e436b64e863", - "override": false + "path": "skills/build-nextflow-pipeline/references/convert-jupyter-notebook/README.md", + "source": "portal/backend/src/skills/convert-jupyter-notebook/SKILL.md", + "source_sha256": "78de1341776d75e61971683185e5b29152a78cb3d0d31a89a236b3793165cff6", + "bundled_sha256": "dead76a63739d36f8b8d4320819776949b4fd335e6404e42ed0446e7695f2447", + "override": true }, { - "path": "skills/nextflow-development/scripts/sra_geo_fetch.py", - "source": "bio-research/nextflow-development/scripts/sra_geo_fetch.py", - "source_sha256": "0bd4f292350b47b71e0048a223ca50ebdde0ced1f33d5661daf756c73d1b5a31", - "bundled_sha256": "0bd4f292350b47b71e0048a223ca50ebdde0ced1f33d5661daf756c73d1b5a31", - "override": false + "path": "skills/nextflow-schema/references/triage-pipeline-parameters/README.md", + "source": "portal/backend/src/skills/triage-pipeline-parameters/SKILL.md", + "source_sha256": "b0f05305aaa356d0cd933ecbe8b9a62db2b9433557dca68e0c70df4661377898", + "bundled_sha256": "b743664fd53dc59f56367e035929552d4079f773e9230b601be4d993782128b4", + "override": true }, { - "path": "skills/nextflow-development/scripts/utils/__init__.py", - "source": "bio-research/nextflow-development/scripts/utils/__init__.py", - "source_sha256": "4ef421fc4ad6f13aafc0c34e8c92cf3463cebb0c9f7732d2b9ff876c5cd4d89c", - "bundled_sha256": "4ef421fc4ad6f13aafc0c34e8c92cf3463cebb0c9f7732d2b9ff876c5cd4d89c", - "override": false + "path": "skills/nextflow-schema/references/nf-schema-migration/README.md", + "source": "portal/backend/src/skills/nf-schema-migration/SKILL.md", + "source_sha256": "7ad9594c20f6b128ff2c7475f10b8b0ce60af5d5a94c07e9b5216821c53e48b5", + "bundled_sha256": "d060648ec27e9ad84ad54386e737c3e4238d256ac98a91fe3730f0db1390856a", + "override": true }, { - "path": "skills/nextflow-development/scripts/utils/file_discovery.py", - "source": "bio-research/nextflow-development/scripts/utils/file_discovery.py", - "source_sha256": "3540e5411b1bf52e017a1636a127c4f52392f5e888e0ace47361e4c29e3ef380", - "bundled_sha256": "3540e5411b1bf52e017a1636a127c4f52392f5e888e0ace47361e4c29e3ef380", - "override": false + "path": "skills/nextflow-schema/references/nf-schema-migration/references/migration-guide.md", + "source": "portal/backend/src/skills/nf-schema-migration/references/migration-guide.md", + "source_sha256": "8469c64f02241dfb7097020d331af3c607746c3958b6c32fefe718cd67a07d8a", + "bundled_sha256": "80841c0f4500d56cf95090566ed998a86ebd761dbd3dc4c93dc227a67e7d9073", + "override": true }, { - "path": "skills/nextflow-development/scripts/utils/ncbi_utils.py", - "source": "bio-research/nextflow-development/scripts/utils/ncbi_utils.py", - "source_sha256": "bfed0a0570f3344036277867c3e69fb6136ae87040ed2640d5b62919a046cfc8", - "bundled_sha256": "bfed0a0570f3344036277867c3e69fb6136ae87040ed2640d5b62919a046cfc8", - "override": false + "path": "skills/nf-test/references/repair-nf-test/README.md", + "source": "portal/backend/src/skills/repair-nf-test/SKILL.md", + "source_sha256": "84260ee9889dd7d236941f04c52a05904d1631617b04a06b2409df64fad6a020", + "bundled_sha256": "bc7e29f95646bebddf3cdb518c11ed91fcfdde9afec9b1fb587467b9542251a3", + "override": true }, { - "path": "skills/nextflow-development/scripts/utils/sample_inference.py", - "source": "bio-research/nextflow-development/scripts/utils/sample_inference.py", - "source_sha256": "3f2dcebbc540fa76e9285dd247cb0d6922d4fbe2588b7f7b3ad7ac7ab82b63af", - "bundled_sha256": "1faaaaa3488ec16c8cd12a704547d8f168688d4b833b6c3e37c631e564472211", - "override": false + "path": "skills/repair-workflow/references/nf-debug/README.md", + "source": "portal/.agents/skills/nf-debug/SKILL.md", + "source_sha256": "c3edab111eb1aa1529ff4780ed00db451e1e64a03bc2f8940daca7269aabc7eb", + "bundled_sha256": "208c48fbcda03cd50eb8d6d39099147844b24117d4f6d05148214df18e86c12b", + "override": true }, { - "path": "skills/nextflow-development/scripts/utils/validators.py", - "source": "bio-research/nextflow-development/scripts/utils/validators.py", - "source_sha256": "2572671195244a3ac7e67a6ebe4c44bbd541fbaa1afe3ebab1f81a46b29feea1", - "bundled_sha256": "68d0823c95f113572e5c59e4a39e71b615e4a9ac567a8a090e0284215fe5be39", - "override": false + "path": "skills/migrate-nextflow-code/references/nextflow-26-syntax/README.md", + "source": "portal/backend/src/skills/nextflow-26-syntax/SKILL.md", + "source_sha256": "b5d1e1ac292ef84311339091169c9f9278b32b34f61d1c34a698629eee5b21d0", + "bundled_sha256": "51fa9abe9d01c03577b5bef7b1456eab0286ec41e448047e478e6b29b64645bc", + "override": true }, { - "path": "licenses/nextflow-agent-skills-Apache-2.0.txt", - "source": "https://github.com/nextflow-io/agent-skills/blob/1edf73763da408c410074568f228a75fc6d42864/COPYING", - "source_sha256": "5df2a0d87d6c562f0ea11c688ac52532aa28d744cabc7994ff0537f64b3b3320", - "bundled_sha256": "5df2a0d87d6c562f0ea11c688ac52532aa28d744cabc7994ff0537f64b3b3320", - "override": false + "path": "skills/migrate-nextflow-code/references/nf-v2-boolean-params/README.md", + "source": "portal/backend/src/skills/nf-v2-boolean-params/SKILL.md", + "source_sha256": "8771e4330ea11d17aca403c9b2e3998152c5b5986a9da096daed20f1c8ba35c1", + "bundled_sha256": "8088f1e3c4555e925bfcce700367062b73dd4e2afad2b44b07af6768697d150a", + "override": true }, { - "path": "scripts/nextflow-language-server.sh", - "source": "https://github.com/nextflow-io/agent-skills/blob/1edf73763da408c410074568f228a75fc6d42864/scripts/nextflow-language-server.sh", - "source_sha256": "be93865e98c809cbb7cf3175b4cc85b7c05756f3674588aaaa54df1a9808288f", - "bundled_sha256": "be93865e98c809cbb7cf3175b4cc85b7c05756f3674588aaaa54df1a9808288f", - "override": false + "path": "skills/migrate-nextflow-code/references/nf-migrate-25-04/README.md", + "source": "portal/.agents/skills/nf-migrate-25-04/SKILL.md", + "source_sha256": "bbb89170c1e42812c00b98d675da7ea95af9f6e99234315253b88b386904f089", + "bundled_sha256": "c266879140e439f00753c42fcde0f6b954085d466598136b06b27e1cdcbb4611", + "override": true }, { - "path": "scripts/nextflow-typecheck.sh", - "source": "https://github.com/nextflow-io/agent-skills/blob/1edf73763da408c410074568f228a75fc6d42864/scripts/nextflow-typecheck.sh", - "source_sha256": "fe54e31cd70943629bbc33005d75961646a5875fcb320f5bc6b031e3c21bbcd7", - "bundled_sha256": "fe54e31cd70943629bbc33005d75961646a5875fcb320f5bc6b031e3c21bbcd7", - "override": false + "path": "skills/migrate-nextflow-code/references/nf-migrate-25-04/references/upstream-25-04.md", + "source": "portal/.agents/skills/nf-migrate-25-04/references/upstream-25-04.md", + "source_sha256": "8b50112d5df68dac2986b3204480816be5e885539c4d2535583a6ec5592a8410", + "bundled_sha256": "f0ec9f986abb0707c53f57f165f7ff1c7b75f6a5cfa77afad84681814742f56a", + "override": true + }, + { + "path": "skills/migrate-nextflow-code/references/nf-migrate-25-04/scripts/find_deprecated_patterns.py", + "source": "portal/.agents/skills/nf-migrate-25-04/scripts/find_deprecated_patterns.py", + "source_sha256": "a23a4eb685ef75baf62d7fa4b3464bd521e9524f850a18403160b4e38c53cc35", + "bundled_sha256": "a23a4eb685ef75baf62d7fa4b3464bd521e9524f850a18403160b4e38c53cc35", + "override": true }, { - "path": "skills/install-nextflow/SKILL.md", + "path": "skills/migrate-nextflow-code/references/nf-migrate-25-04/scripts/find_shell_blocks.py", + "source": "portal/.agents/skills/nf-migrate-25-04/scripts/find_shell_blocks.py", + "source_sha256": "13efcf3abb1510b88694d973d8d98be643c43fb189774a05fc3810453dab3a70", + "bundled_sha256": "13efcf3abb1510b88694d973d8d98be643c43fb189774a05fc3810453dab3a70", + "override": true + }, + { + "path": "skills/launch-workflow/references/seqera-mcp/README.md", + "source": "portal/backend/src/skills/seqera-mcp/SKILL.md", + "source_sha256": "1315cd22bcacef7660c2e853307956e681c2599bd8d0d6a2bf980da831433e18", + "bundled_sha256": "568daae3ffaef7092ccd578cd630d5d0a5741fecfd2914a59192102902b1b652", + "override": true, + "review_preparation_adaptation": true + }, + { + "path": "skills/build-nextflow-pipeline/references/migrate-from-snakemake/README.md", + "source": "portal/backend/src/skills/migrate-from-snakemake/SKILL.md", + "source_sha256": "ad385af7b45a52955ba7b7b924efbb63362a98e20998ec51558e1146ab1b4880", + "bundled_sha256": "7b09d6a75111593c1c114dd46ca8bc4ebb9a803bd5657e513bf8e7f6dfa68b04", + "override": true + }, + { + "path": "skills/build-nextflow-pipeline/references/migrate-from-snakemake/references/nextflow-conda-troubleshooting.md", + "source": "portal/backend/src/skills/migrate-from-snakemake/references/nextflow-conda-troubleshooting.md", + "source_sha256": "21c17c71e82bb6393aaed4757b1f229b03c88f44a7713de9ad0c738a0442e433", + "bundled_sha256": "ee962d892a202a056105dbc68267a5a10fc62e61c9d460bfcf36224b51511062", + "override": true + }, + { + "path": "skills/build-nextflow-pipeline/references/migrate-from-snakemake/references/snakemake-nextflow-playbook.md", + "source": "portal/backend/src/skills/migrate-from-snakemake/references/snakemake-nextflow-playbook.md", + "source_sha256": "de986ee318ad4be3422502f696f26f6d6788d145a4c6e246cb46067656788b11", + "bundled_sha256": "9271fc3d0cffe03a184749692bf41d5486ddcfc323d401870bc60e442211cb43", + "override": true + }, + { + "path": "skills/build-nextflow-pipeline/references/migrate-from-snakemake/references/snakemake-rules-core.md", + "source": "portal/backend/src/skills/migrate-from-snakemake/references/snakemake-rules-core.md", + "source_sha256": "dbf9d07b324db17b8123c59d2ed44083ecfc2247bcb37e18d07b58204c165bfd", + "bundled_sha256": "28c749e78e17db095727170a8e23f2566f064d3ce651b149b593508360e257b1", + "override": true + }, + { + "path": "skills/build-nextflow-pipeline/references/migrate-from-snakemake/references/snakemake-testing-unit-tests.md", + "source": "portal/backend/src/skills/migrate-from-snakemake/references/snakemake-testing-unit-tests.md", + "source_sha256": "9857ea5f89bb7d2376a2eaeead46305a0f1e45cf5a88691c368692fc17a4477a", + "bundled_sha256": "bd5acdddd51ad1bc730ad78bd1b61520c94f2ef9de4697d1c36f3473a8fff13e", + "override": true + }, + { + "path": "skills/build-nextflow-pipeline/references/migrate-from-snakemake/references/snakemake-writing-workflows.md", + "source": "portal/backend/src/skills/migrate-from-snakemake/references/snakemake-writing-workflows.md", + "source_sha256": "551afd0c162468fc427d38e0bebc2eaacf166780f21779b1a76f9388fe1d5814", + "bundled_sha256": "786ebe625b8d619affb75be8f942e5e4c64645a52be5e268d01b00f732484313", + "override": true + }, + { + "path": "skills/build-nextflow-pipeline/references/audit-conversion-readiness/README.md", + "source": "portal/backend/src/skills/audit-conversion-readiness/SKILL.md", + "source_sha256": "c03ff0e0755129fb718f8d7d45dec4b222661c9c5e3af91145deab166907de29", + "bundled_sha256": "fb87f208563be19cc221ba26825d56285234ce4a55324ad7965a66f74689b0de", + "override": true + }, + { + "path": "skills/build-nextflow-pipeline/references/audit-conversion-readiness/references/reference-patterns.md", + "source": "portal/backend/src/skills/audit-conversion-readiness/references/reference-patterns.md", + "source_sha256": "971a544370fa161400fa5c7f1a156abf2ae7c995f40d42ea4b8593b56de011ec", + "bundled_sha256": "a8e41a1ab262564941c6f217719c976d9180717efebca615aefcd9fa57391fa7", + "override": true + }, + { + "path": "skills/build-nextflow-pipeline/references/audit-conversion-readiness/references/report-template.md", + "source": "portal/backend/src/skills/audit-conversion-readiness/references/report-template.md", + "source_sha256": "b92c40dc2d4d18660761f7e38affd2183edcfd9d6245922bfe01f12ea3aefbff", + "bundled_sha256": "3656852fd045af27f5fc973b82e65bd8e13fd2f8c4f150b652b2adbfdd63f1ca", + "override": true + }, + { + "path": "skills/build-nextflow-pipeline/references/audit-conversion-readiness/references/tool-availability.md", + "source": "portal/backend/src/skills/audit-conversion-readiness/references/tool-availability.md", + "source_sha256": "be177bc6723e1612ed788436e0109560c1993345abb3ff1967da6c75c40e577b", + "bundled_sha256": "694bd7b802f6f720cf6da400f3a4379bbf02e689fe809524faf704aa6f720896", + "override": true + }, + { + "path": "skills/build-nextflow-pipeline/references/search-existing-modules/README.md", + "source": "portal/backend/src/skills/search-existing-modules/SKILL.md", + "source_sha256": "73ab4e956a3bddd4382a8d74911963a8c51a72abcd3ff8a7fd0d49bd8ffd53a9", + "bundled_sha256": "c86d8d7ada274ad95c826d6b59c2177ec82946f96c8abf002e24191c638bd269", + "override": true + }, + { + "path": "skills/build-nextflow-pipeline/references/run-module/README.md", + "source": "https://github.com/nextflow-io/agent-skills/blob/1edf73763da408c410074568f228a75fc6d42864/skills/run-module/SKILL.md", + "source_sha256": "206c2ad84616fca3290e3ed9d004404ea4b298d78cbb739efafdd65458a1f666", + "bundled_sha256": "7bcff6ac9fd29831eb29e45738bbecf43d0c50d2569b6cc2064633caaa1b4b82", + "override": true + }, + { + "path": "skills/build-nextflow-pipeline/references/find-alternative-tools/README.md", + "source": "portal/backend/src/skills/find-alternative-tools/SKILL.md", + "source_sha256": "b3acbc1417255d5b26b9058d7b80fff92a1b732d218fd1b043e636fa26e223b1", + "bundled_sha256": "af7cc3b99d912de0a8458eca60a185756f446b3514ca626f5ca9439d9e8f7e19", + "override": true + }, + { + "path": "skills/build-nextflow-pipeline/references/install-nextflow/README.md", "source": "https://github.com/nextflow-io/agent-skills/blob/1edf73763da408c410074568f228a75fc6d42864/skills/install-nextflow/SKILL.md", "source_sha256": "a2b8ba6464bc60dbc51c5aa47d024a9efd4e44af3c17f5e27a4ea099ffa5e4e9", - "bundled_sha256": "c3f92be707c973f8bb77d6c51ac48c437022d0986ea7c06429dd9aa6ae50edc6", + "bundled_sha256": "601cc45286d89ad9cf2635529783d1b0dc8b1ca18b138ce875fbca0dbb7b6d31", "override": true }, { - "path": "skills/launch-workflow/SKILL.md", - "source": "https://github.com/nextflow-io/agent-skills/blob/1edf73763da408c410074568f228a75fc6d42864/skills/launch-workflow/SKILL.md", - "source_sha256": "40ee0cca1679931ecdc284e86193b34a400d861f25d341cf3a358d4dce310cd3", - "bundled_sha256": "d001c34ba07399df9fdb1b82542298d9e6fb1dda0e651dc39272f7edb4716934", + "path": "skills/nf-pipeline-design/references/nextflow-output-patterns/README.md", + "source": "portal/backend/src/skills/nextflow-output-patterns/SKILL.md", + "source_sha256": "b8ee43fb09ae92ddf90b7b4ea9517b4660e297879804c8a51c1988765017df72", + "bundled_sha256": "1c5e70bcde6f151e6ef76f60ec5bb50fa478068b27342cb7f2bda3adceaf3f3b", "override": true }, { - "path": "skills/migrate-nextflow-code/SKILL.md", - "source": "https://github.com/nextflow-io/agent-skills/blob/1edf73763da408c410074568f228a75fc6d42864/skills/migrate-nextflow-code/SKILL.md", - "source_sha256": "7cdba1fd11ecda34189503669f989e97ffc611fe957a051fb83357073faab021", - "bundled_sha256": "7757667ad9fe127cee1c1804a3e6bc237fdfa1d95424adb42377f34922cbe95d", + "path": "skills/create-container/references/nf-docker-scripts/README.md", + "source": "portal/backend/src/skills/nf-docker-scripts/SKILL.md", + "source_sha256": "867fbfd0d732efc9655df1e025e89a608f049bf2397b057a38fcfd1af266b249", + "bundled_sha256": "59cbb6d9a7afe72ff19fd1c806dc627a7f4691305301b3378ca1b9a05865eb68", "override": true }, { - "path": "skills/migrate-nextflow-code/references/static-typing-params.md", - "source": "https://github.com/nextflow-io/agent-skills/blob/1edf73763da408c410074568f228a75fc6d42864/skills/migrate-nextflow-code/references/static-typing-params.md", - "source_sha256": "89524b99f014965ff1da070ee08914e7df1e2272b63b3518490aa06ad2e37011", - "bundled_sha256": "c578787e90e59dadf7f05a1ad3d361d7b898234937772859d67811eb1776a899", - "override": false + "path": "skills/create-container/references/nf-docker-scripts/references/script-strategies-deep-dive.md", + "source": "portal/backend/src/skills/nf-docker-scripts/references/script-strategies-deep-dive.md", + "source_sha256": "5adc413d42b2f962602f48e6482861cda160071cc3c0368c778ec7ae5f2ced11", + "bundled_sha256": "d2c6232dec34c748662d945d575cba2ca7475ae8f090904bb4dc426e313539ba", + "override": true + }, + { + "path": "skills/launch-workflow/references/ce-credentials-setup/README.md", + "source": "portal/backend/src/skills/ce-credentials-setup/SKILL.md", + "source_sha256": "179ed50da55eb509086eaf9e3228d063bd4d8334c0f8fff38c0f31e0e327e4e9", + "bundled_sha256": "0a1756c486a2befb2c3023e56162c136907e8ccf391258c4ed9a1db2be969eb5", + "override": true + }, + { + "path": "skills/launch-workflow/references/ce-credentials-setup/references/aws-batch.md", + "source": "portal/backend/src/skills/ce-credentials-setup/references/aws-batch.md", + "source_sha256": "0b72204b432f9c6a9f8ac476339a0639a300f137c83c362553a20deb426dba8f", + "bundled_sha256": "93cf12538472e936f82267f8756a390f5d472c0069f33d851b4d8653b8f617f4", + "override": true + }, + { + "path": "skills/launch-workflow/references/ce-credentials-setup/references/kubernetes.md", + "source": "portal/backend/src/skills/ce-credentials-setup/references/kubernetes.md", + "source_sha256": "1b55a04577e070016fec281df80294ccdc9e738485ce3fd3b82b02502d02af65", + "bundled_sha256": "2cf64d58f6ab3df54b20133b005799245e15d79b104396af56c285add173be85", + "override": true + }, + { + "path": "skills/launch-workflow/references/ce-credentials-setup/references/seqera-compute.md", + "source": "portal/backend/src/skills/ce-credentials-setup/references/seqera-compute.md", + "source_sha256": "b76087e0b06de0984c3f22228846b19dc3561bbba27fd18c1162fe27fab78752", + "bundled_sha256": "b1e39e794db10b38beb6079b7d82ee49c2c302f0480b676d06fa9ce0caebd1ac", + "override": true + }, + { + "path": "skills/launch-workflow/references/seqera-data-links/README.md", + "source": "portal/backend/src/skills/seqera-data-links/SKILL.md", + "source_sha256": "1ac21b9aa3cc01ab4c05497675b439da3eebe85b17ceb326e953a586681a04fb", + "bundled_sha256": "c911249fb6edfa3e18652fc688ba416099db0d10885a79e9dd0c8bbcc1f7e5a3", + "override": true + }, + { + "path": "skills/launch-workflow/references/seqerakit/README.md", + "source": "portal/backend/src/skills/seqerakit/SKILL.md", + "source_sha256": "4e70348d52b774e716d4e48091317b5b22c48c7c6482712543d32ecb6898ecf7", + "bundled_sha256": "e06dce5f07b2c3e256aae59cd7efb251bee2b87ab23ab87437f3cc5c75c7a09e", + "override": true + }, + { + "path": "skills/launch-workflow/references/nextflow-development/LICENSE.txt", + "source": "bio-research/nextflow-development/LICENSE.txt", + "source_sha256": "7505b489cc8ad7f16ba08343184320f1583303cfacdb9121b9b756bc073df1ab", + "bundled_sha256": "7505b489cc8ad7f16ba08343184320f1583303cfacdb9121b9b756bc073df1ab", + "override": true + }, + { + "path": "skills/launch-workflow/references/nextflow-development/README.md", + "source": "bio-research/nextflow-development/SKILL.md", + "source_sha256": "f30017df5d499427a701ec6cedfc5c9948ca3bd04ee1a2b6a585a29cd93ad0d7", + "bundled_sha256": "d080a5ac28fe86bb3b9db434c2fee0f5461d81cc3161a72ba6389c508ed437ea", + "override": true + }, + { + "path": "skills/launch-workflow/references/nextflow-development/references/geo-sra-acquisition.md", + "source": "bio-research/nextflow-development/references/geo-sra-acquisition.md", + "source_sha256": "85238c3bf2c43d2ca5ad8c4fb4418927ff3443bf8993813925a188a1c287d170", + "bundled_sha256": "a9699355e902a8910c493fd2c5c030fa6e2117e9054c129d63ca55ef9f08f5c6", + "override": true + }, + { + "path": "skills/launch-workflow/references/nextflow-development/references/installation.md", + "source": "bio-research/nextflow-development/references/installation.md", + "source_sha256": "d214ad4508868ed9fd648ec625e633c2b7629df300a4953a4b89fc6010fa7577", + "bundled_sha256": "e1445e03b0b6dbbd5d9d2bc7d3f1d57c72741c858bab0a719d941b354005a780", + "override": true }, { - "path": "skills/migrate-nextflow-code/references/static-typing-processes.md", - "source": "https://github.com/nextflow-io/agent-skills/blob/1edf73763da408c410074568f228a75fc6d42864/skills/migrate-nextflow-code/references/static-typing-processes.md", - "source_sha256": "01ea3e70a470b0007dc5c7f5a7049b387a96aa3fb67b74e032eb0983366cdc59", - "bundled_sha256": "f2b89d8d6815b8df7ee493f2447ecd9b5c61dd3cbb008b8c76349dab02fd8ff9", - "override": false + "path": "skills/launch-workflow/references/nextflow-development/references/pipelines/atacseq.md", + "source": "bio-research/nextflow-development/references/pipelines/atacseq.md", + "source_sha256": "ca6ca22e409e78be3aa6f0e18de9c255fd5e9ac66c59d71ce214fc4a76849a1b", + "bundled_sha256": "3034f773e094870f91f169808f987cbed35757dcdc66c37ef478d9848ce0006d", + "override": true }, { - "path": "skills/migrate-nextflow-code/references/static-typing-workflows.md", - "source": "https://github.com/nextflow-io/agent-skills/blob/1edf73763da408c410074568f228a75fc6d42864/skills/migrate-nextflow-code/references/static-typing-workflows.md", - "source_sha256": "85b0afdb2b53eddf038638ddef30f82deb7f633494ea4b28be510d0436166904", - "bundled_sha256": "970f3d4547ed118746959f3b5baa867066f10d2237704b9e8a05e49e8621ef17", - "override": false + "path": "skills/launch-workflow/references/nextflow-development/references/pipelines/rnaseq.md", + "source": "bio-research/nextflow-development/references/pipelines/rnaseq.md", + "source_sha256": "c7b0c59b33d52b62d6ca2a476f1f45c849dc83923773f258a0731ba2b7b7c93a", + "bundled_sha256": "0f1abbc85acc5ea348d71e72e0a23c4200e41d59fd648374673cb237ddcc1553", + "override": true }, { - "path": "skills/migrate-nextflow-code/references/static-typing.md", - "source": "https://github.com/nextflow-io/agent-skills/blob/1edf73763da408c410074568f228a75fc6d42864/skills/migrate-nextflow-code/references/static-typing.md", - "source_sha256": "0943a0adba1fdf799544177db5acfb847ea03c0e147a173aacac14bb008a2864", - "bundled_sha256": "f7829c6a72c11464adabaefbc208a5821f28e916680adb0d57749dfbbbcef9c6", + "path": "skills/launch-workflow/references/nextflow-development/references/pipelines/sarek.md", + "source": "bio-research/nextflow-development/references/pipelines/sarek.md", + "source_sha256": "67fa5ee65022875b95e6181baa3eec67c572d0564d2aa7bb498d85551458c2fa", + "bundled_sha256": "8766e88aa34dff1efb694a30090c79cdef16b7ef065adaae043992a71e6125c4", "override": true }, { - "path": "skills/migrate-nextflow-code/references/strict-syntax.md", - "source": "https://github.com/nextflow-io/agent-skills/blob/1edf73763da408c410074568f228a75fc6d42864/skills/migrate-nextflow-code/references/strict-syntax.md", - "source_sha256": "b278a55ef03df36308e186653a503de57edfc5ee23afdb05b422b0a68fab32c2", - "bundled_sha256": "38bbfc70371516b281f5e74a95a2faba214972c6474b7189600538f1dbdc1564", - "override": false + "path": "skills/launch-workflow/references/nextflow-development/references/troubleshooting.md", + "source": "bio-research/nextflow-development/references/troubleshooting.md", + "source_sha256": "f49b6b48590170770d8e0eb69ee9894c3de04d779b0031d0515529f2e7c01450", + "bundled_sha256": "a6bedfebac3bf0ff25086f09613d667bfc53f78c7e86d76c452b1892455b3293", + "override": true }, { - "path": "skills/migrate-nextflow-code/references/topic-channels.md", - "source": "https://github.com/nextflow-io/agent-skills/blob/1edf73763da408c410074568f228a75fc6d42864/skills/migrate-nextflow-code/references/topic-channels.md", - "source_sha256": "cb29cd9a421f4eb9889f43ff50a3e272c033400144738f0645ffde3c1f32a34a", - "bundled_sha256": "d88f54703e3c7881da6d07b0684cf2c8a3f6825b4a64a20a40a08b94eadb246c", - "override": false + "path": "skills/launch-workflow/references/nextflow-development/scripts/check_environment.py", + "source": "bio-research/nextflow-development/scripts/check_environment.py", + "source_sha256": "71fac73709a8bc7215af8b4f204b93a12fe2a526512591dffb21b267239bcf9d", + "bundled_sha256": "95e1af46f55fdd4c0f3e81cca7a0f127f8e696ab4fc9c0c5d9ecbe9476ac2ed2", + "override": true }, { - "path": "skills/migrate-nextflow-code/references/workflow-outputs.md", - "source": "https://github.com/nextflow-io/agent-skills/blob/1edf73763da408c410074568f228a75fc6d42864/skills/migrate-nextflow-code/references/workflow-outputs.md", - "source_sha256": "311478b6ba1e9280417cd5e65a3f45c731920699605aef6900a634370c655c0d", - "bundled_sha256": "ee00436a7b273ba2f3d2e4095e8fa5688c6dfe7b727c4cbe788696c824516bc4", - "override": false + "path": "skills/launch-workflow/references/nextflow-development/scripts/config/genomes.yaml", + "source": "bio-research/nextflow-development/scripts/config/genomes.yaml", + "source_sha256": "940bd833b87542a25705668a3ba8f157ea25fcb698f654f2d410efd410fa4172", + "bundled_sha256": "940bd833b87542a25705668a3ba8f157ea25fcb698f654f2d410efd410fa4172", + "override": true }, { - "path": "skills/run-module/SKILL.md", - "source": "https://github.com/nextflow-io/agent-skills/blob/1edf73763da408c410074568f228a75fc6d42864/skills/run-module/SKILL.md", - "source_sha256": "206c2ad84616fca3290e3ed9d004404ea4b298d78cbb739efafdd65458a1f666", - "bundled_sha256": "9c77a04b44f15651cac0750666173325bd0620b3c580359d84d540ce706ad7bc", + "path": "skills/launch-workflow/references/nextflow-development/scripts/config/pipelines/atacseq.yaml", + "source": "bio-research/nextflow-development/scripts/config/pipelines/atacseq.yaml", + "source_sha256": "fb63a0f76fec6b71303e8a58bba8c4c38a56ee533784d438953fe5e394444158", + "bundled_sha256": "fb63a0f76fec6b71303e8a58bba8c4c38a56ee533784d438953fe5e394444158", "override": true }, { - "path": "assets/nextflow-icon.png", - "source": "https://github.com/nextflow-io/trademark/blob/d23659daca6162680544f84d20d56b708ead047a/nextflow-icon.png", - "source_sha256": "4baa8db788e56819432fde89ffae786189657d7da94fc5f9b4cbc05b16c1d73a", - "bundled_sha256": "4baa8db788e56819432fde89ffae786189657d7da94fc5f9b4cbc05b16c1d73a", - "override": false + "path": "skills/launch-workflow/references/nextflow-development/scripts/config/pipelines/rnaseq.yaml", + "source": "bio-research/nextflow-development/scripts/config/pipelines/rnaseq.yaml", + "source_sha256": "8df7b123fc64328aa4b97d047b316cdbaf4622d89684dfd0b6aca5a5da263f5a", + "bundled_sha256": "8df7b123fc64328aa4b97d047b316cdbaf4622d89684dfd0b6aca5a5da263f5a", + "override": true }, { - "path": "skills/build-nextflow-pipeline/references/create-workflow/README.md", - "source": "https://github.com/nextflow-io/agent-skills/blob/1edf73763da408c410074568f228a75fc6d42864/skills/create-workflow/SKILL.md", - "source_sha256": "cb038d5bc1c2b5a7e76f309cf28b8dfe889e88235d03717a9862f2b5a7434972", - "bundled_sha256": "573e08cdc4c08632f1896c929c9751700ec46d3c30380b5ec451d7435ed712c9", + "path": "skills/launch-workflow/references/nextflow-development/scripts/config/pipelines/sarek.yaml", + "source": "bio-research/nextflow-development/scripts/config/pipelines/sarek.yaml", + "source_sha256": "03a904ab4a5f3de216200b60646f58faa37416d4bafda6289fcca91caf1c4f2f", + "bundled_sha256": "03a904ab4a5f3de216200b60646f58faa37416d4bafda6289fcca91caf1c4f2f", "override": true }, { - "path": "skills/build-nextflow-pipeline/references/convert-python-script/README.md", - "source": "portal/backend/src/skills/convert-python-script/SKILL.md", - "source_sha256": "5741caa8d726f8c6ccd036a69beb667f30d5d2836249dfb1ecb99a6db1aad560", - "bundled_sha256": "06d5510c5f78e228566e74f30c3d024a92bf03c44f5c48fe07692784aa16dd9d", + "path": "skills/launch-workflow/references/nextflow-development/scripts/detect_data_type.py", + "source": "bio-research/nextflow-development/scripts/detect_data_type.py", + "source_sha256": "68d597921f1c408ae79ece1f8dbab5df8f2fb3328a4c89fee716aac3c4799f4e", + "bundled_sha256": "260b5397620a9352f104be8cad1f12d8bfb1a22bc37bcd63d0e7592c34071bfd", "override": true }, { - "path": "skills/build-nextflow-pipeline/references/convert-r-script/README.md", - "source": "portal/backend/src/skills/convert-r-script/SKILL.md", - "source_sha256": "523d41b30048a9e77c0ce820ed9654e3909c25715a68c187274a34cf06299c3a", - "bundled_sha256": "f0558baf14d93ac3606cd1509056ee6e32ce9b67a121ee4622545fc706944229", + "path": "skills/launch-workflow/references/nextflow-development/scripts/generate_samplesheet.py", + "source": "bio-research/nextflow-development/scripts/generate_samplesheet.py", + "source_sha256": "14a4acb03e08369ea9d73de872b20e3578bcd3eec7bbfa03c2df6adcf5eacbf1", + "bundled_sha256": "14a4acb03e08369ea9d73de872b20e3578bcd3eec7bbfa03c2df6adcf5eacbf1", "override": true }, { - "path": "skills/build-nextflow-pipeline/references/convert-r-script/references/nextflow-dsl2.md", - "source": "portal/backend/src/skills/convert-r-script/references/nextflow-dsl2.md", - "source_sha256": "3e758662c8e2e5a321c20a309cdced414f5c95f213f87f592a3c79e11600410b", - "bundled_sha256": "31fa0d8ed7d3a7e59a1dd5be806b5df637ed92fb49ce109876629d67baabd6a0", + "path": "skills/launch-workflow/references/nextflow-development/scripts/manage_genomes.py", + "source": "bio-research/nextflow-development/scripts/manage_genomes.py", + "source_sha256": "d27e36e0c442b081ef7e60d426c037967afec97e441e8fd7ae0a5e436b64e863", + "bundled_sha256": "d27e36e0c442b081ef7e60d426c037967afec97e441e8fd7ae0a5e436b64e863", "override": true }, { - "path": "skills/build-nextflow-pipeline/references/convert-r-script/references/r-container-images.md", - "source": "portal/backend/src/skills/convert-r-script/references/r-container-images.md", - "source_sha256": "402b6723bcd6c5ac81297264cecddf4a4e21f78105cc626d862c41e55cf1f0e6", - "bundled_sha256": "2468b98641d82fad35ae002716826cde3292bbd3ea1d0ac837665825807ed8ec", + "path": "skills/launch-workflow/references/nextflow-development/scripts/sra_geo_fetch.py", + "source": "bio-research/nextflow-development/scripts/sra_geo_fetch.py", + "source_sha256": "0bd4f292350b47b71e0048a223ca50ebdde0ced1f33d5661daf756c73d1b5a31", + "bundled_sha256": "0bd4f292350b47b71e0048a223ca50ebdde0ced1f33d5661daf756c73d1b5a31", "override": true }, { - "path": "skills/build-nextflow-pipeline/references/convert-jupyter-notebook/README.md", - "source": "portal/backend/src/skills/convert-jupyter-notebook/SKILL.md", - "source_sha256": "78de1341776d75e61971683185e5b29152a78cb3d0d31a89a236b3793165cff6", - "bundled_sha256": "a53cd55a068f5142430a662793d04fcc4073f3e63ee28bfea066e8d74cbd9d31", + "path": "skills/launch-workflow/references/nextflow-development/scripts/utils/__init__.py", + "source": "bio-research/nextflow-development/scripts/utils/__init__.py", + "source_sha256": "4ef421fc4ad6f13aafc0c34e8c92cf3463cebb0c9f7732d2b9ff876c5cd4d89c", + "bundled_sha256": "4ef421fc4ad6f13aafc0c34e8c92cf3463cebb0c9f7732d2b9ff876c5cd4d89c", "override": true }, { - "path": "skills/nextflow-schema/references/triage-pipeline-parameters/README.md", - "source": "portal/backend/src/skills/triage-pipeline-parameters/SKILL.md", - "source_sha256": "b0f05305aaa356d0cd933ecbe8b9a62db2b9433557dca68e0c70df4661377898", - "bundled_sha256": "b743664fd53dc59f56367e035929552d4079f773e9230b601be4d993782128b4", + "path": "skills/launch-workflow/references/nextflow-development/scripts/utils/file_discovery.py", + "source": "bio-research/nextflow-development/scripts/utils/file_discovery.py", + "source_sha256": "3540e5411b1bf52e017a1636a127c4f52392f5e888e0ace47361e4c29e3ef380", + "bundled_sha256": "3540e5411b1bf52e017a1636a127c4f52392f5e888e0ace47361e4c29e3ef380", "override": true }, { - "path": "skills/nextflow-schema/references/nf-schema-migration/README.md", - "source": "portal/backend/src/skills/nf-schema-migration/SKILL.md", - "source_sha256": "7ad9594c20f6b128ff2c7475f10b8b0ce60af5d5a94c07e9b5216821c53e48b5", - "bundled_sha256": "d060648ec27e9ad84ad54386e737c3e4238d256ac98a91fe3730f0db1390856a", + "path": "skills/launch-workflow/references/nextflow-development/scripts/utils/ncbi_utils.py", + "source": "bio-research/nextflow-development/scripts/utils/ncbi_utils.py", + "source_sha256": "bfed0a0570f3344036277867c3e69fb6136ae87040ed2640d5b62919a046cfc8", + "bundled_sha256": "bfed0a0570f3344036277867c3e69fb6136ae87040ed2640d5b62919a046cfc8", "override": true }, { - "path": "skills/nextflow-schema/references/nf-schema-migration/references/migration-guide.md", - "source": "portal/backend/src/skills/nf-schema-migration/references/migration-guide.md", - "source_sha256": "8469c64f02241dfb7097020d331af3c607746c3958b6c32fefe718cd67a07d8a", - "bundled_sha256": "80841c0f4500d56cf95090566ed998a86ebd761dbd3dc4c93dc227a67e7d9073", + "path": "skills/launch-workflow/references/nextflow-development/scripts/utils/sample_inference.py", + "source": "bio-research/nextflow-development/scripts/utils/sample_inference.py", + "source_sha256": "3f2dcebbc540fa76e9285dd247cb0d6922d4fbe2588b7f7b3ad7ac7ab82b63af", + "bundled_sha256": "1faaaaa3488ec16c8cd12a704547d8f168688d4b833b6c3e37c631e564472211", "override": true }, { - "path": "skills/nf-test/references/repair-nf-test/README.md", - "source": "portal/backend/src/skills/repair-nf-test/SKILL.md", - "source_sha256": "84260ee9889dd7d236941f04c52a05904d1631617b04a06b2409df64fad6a020", - "bundled_sha256": "bc7e29f95646bebddf3cdb518c11ed91fcfdde9afec9b1fb587467b9542251a3", + "path": "skills/launch-workflow/references/nextflow-development/scripts/utils/validators.py", + "source": "bio-research/nextflow-development/scripts/utils/validators.py", + "source_sha256": "2572671195244a3ac7e67a6ebe4c44bbd541fbaa1afe3ebab1f81a46b29feea1", + "bundled_sha256": "68d0823c95f113572e5c59e4a39e71b615e4a9ac567a8a090e0284215fe5be39", "override": true }, { - "path": "skills/repair-workflow/references/nf-debug/README.md", - "source": "portal/.agents/skills/nf-debug/SKILL.md", - "source_sha256": "c3edab111eb1aa1529ff4780ed00db451e1e64a03bc2f8940daca7269aabc7eb", - "bundled_sha256": "208c48fbcda03cd50eb8d6d39099147844b24117d4f6d05148214df18e86c12b", + "path": "skills/launch-workflow/references/nextflow-development/requirements.txt", + "source": "imported-package/skills/nextflow-development/requirements.txt", + "source_sha256": "71749243f84428fee225bfaa796dca5ef6c1e83a98f6d2a407df615b0390d6fb", + "bundled_sha256": "71749243f84428fee225bfaa796dca5ef6c1e83a98f6d2a407df615b0390d6fb", + "override": true, + "note": "No upstream provenance record; hash identifies imported bytes only." + }, + { + "path": "skills/debug-local-run/references/nextflow-history/README.md", + "source": "portal/backend/src/skills/nextflow-history/SKILL.md", + "source_sha256": "4f2ce1b1d39236f1f5b1d7de1ae07d3324b2b8cc32c79e3c6821f43cd2e09bd4", + "bundled_sha256": "03fe2fcf034a4c936f1b768f281bb332ceb87c51616aff0a7979461af929409c", "override": true }, { - "path": "skills/nextflow-history/references/nf-run-history/README.md", + "path": "skills/debug-local-run/references/nextflow-history/references/nf-run-history/README.md", "source": "portal/backend/src/skills/nf-run-history/SKILL.md", "source_sha256": "8bcb5e04a79bb28b0cb833e5fdf32f7d81a79eaee81e2e97d2316b486dc3502c", - "bundled_sha256": "c621a800089d642c467edd6b96080fe85884c546a9d996dccc31e26f548e80f5", + "bundled_sha256": "aa008e0686dd79e3e564dd7517d85d21c0fa0d80e765562184a3676ab74fb2d5", "override": true }, { - "path": "skills/migrate-nextflow-code/references/nextflow-26-syntax/README.md", - "source": "portal/backend/src/skills/nextflow-26-syntax/SKILL.md", - "source_sha256": "b5d1e1ac292ef84311339091169c9f9278b32b34f61d1c34a698629eee5b21d0", - "bundled_sha256": "b58374992b14ebebc203ac43c221d26dd952f3bced42b786961dc51a7c3f5139", + "path": "skills/debug-local-run/references/nf-data-lineage/README.md", + "source": "portal/backend/src/skills/nf-data-lineage/SKILL.md", + "source_sha256": "81f88126cf85d2da22f03f7f5ae3c38256b63cccc5350cfc7348e55631ca92a7", + "bundled_sha256": "a76aa759e81b79b0bfb64036f986dc9a0c73c7ee1d6865d99101af188538a608", "override": true }, { - "path": "skills/migrate-nextflow-code/references/nf-v2-boolean-params/README.md", - "source": "portal/backend/src/skills/nf-v2-boolean-params/SKILL.md", - "source_sha256": "8771e4330ea11d17aca403c9b2e3998152c5b5986a9da096daed20f1c8ba35c1", - "bundled_sha256": "8088f1e3c4555e925bfcce700367062b73dd4e2afad2b44b07af6768697d150a", + "path": "skills/migrate-nextflow-code/references/nf-plugin-development/README.md", + "source": "portal/backend/src/skills/nf-plugin-development/SKILL.md", + "source_sha256": "5a328e82652bbe4d0dfc3afdc3877379ce54e1fea7258b6bbf432692a31ee117", + "bundled_sha256": "688b722bd798d1cf1e677c7295348c6798dda028a1422cd81a9b2826496ee792", "override": true }, { - "path": "skills/migrate-nextflow-code/references/nf-migrate-25-04/README.md", - "source": "portal/.agents/skills/nf-migrate-25-04/SKILL.md", - "source_sha256": "bbb89170c1e42812c00b98d675da7ea95af9f6e99234315253b88b386904f089", - "bundled_sha256": "c266879140e439f00753c42fcde0f6b954085d466598136b06b27e1cdcbb4611", + "path": "skills/migrate-nextflow-code/references/nf-plugin-legacy-migration/README.md", + "source": "portal/backend/src/skills/nf-plugin-legacy-migration/SKILL.md", + "source_sha256": "635d3c3ad2fb29f77cf4bea08cbea5267b636d45aa697d05302a1081d5545c97", + "bundled_sha256": "ae593c9b2065b5c8c2e1cfe76ef7e5466854f3ec1a33b386ea319b8cc299afb1", "override": true }, { - "path": "skills/migrate-nextflow-code/references/nf-migrate-25-04/references/upstream-25-04.md", - "source": "portal/.agents/skills/nf-migrate-25-04/references/upstream-25-04.md", - "source_sha256": "8b50112d5df68dac2986b3204480816be5e885539c4d2535583a6ec5592a8410", - "bundled_sha256": "f0ec9f986abb0707c53f57f165f7ff1c7b75f6a5cfa77afad84681814742f56a", + "path": "skills/migrate-nextflow-code/references/maintain-nf-core-pipeline/README.md", + "source": "portal/backend/src/skills/maintain-nf-core-pipeline/SKILL.md", + "source_sha256": "4ab1ec7a1ad95f4e622efe4e7f56eec650e70f6f62ebe087639be82d000c837c", + "bundled_sha256": "3074ef34893b9c18af8d0acbc96f673ceb2fd5686bf3d9f8fa550ee0a1bd1a75", "override": true }, { - "path": "skills/migrate-nextflow-code/references/nf-migrate-25-04/scripts/find_deprecated_patterns.py", - "source": "portal/.agents/skills/nf-migrate-25-04/scripts/find_deprecated_patterns.py", - "source_sha256": "a23a4eb685ef75baf62d7fa4b3464bd521e9524f850a18403160b4e38c53cc35", - "bundled_sha256": "a23a4eb685ef75baf62d7fa4b3464bd521e9524f850a18403160b4e38c53cc35", + "path": "skills/migrate-nextflow-code/references/maintain-nf-core-pipeline/references/nf-core-conventions.md", + "source": "portal/backend/src/skills/maintain-nf-core-pipeline/references/nf-core-conventions.md", + "source_sha256": "fee5073d8241a52fc24e38d60f979b1a8a49e665703d2800f3c1e7e5bd088878", + "bundled_sha256": "8561c98cd15c530cf7ddfaf7a39eedfbcee75e2ffa15159c278d2d74ec1cd628", "override": true }, { - "path": "skills/migrate-nextflow-code/references/nf-migrate-25-04/scripts/find_shell_blocks.py", - "source": "portal/.agents/skills/nf-migrate-25-04/scripts/find_shell_blocks.py", - "source_sha256": "13efcf3abb1510b88694d973d8d98be643c43fb189774a05fc3810453dab3a70", - "bundled_sha256": "13efcf3abb1510b88694d973d8d98be643c43fb189774a05fc3810453dab3a70", + "path": "skills/migrate-nextflow-code/references/maintain-nf-core-pipeline/references/template-merges/README.md", + "source": "portal/backend/src/skills/maintain-nf-core-pipeline/references/template-merges/README.md", + "source_sha256": "cd226cb30894f9242b0230115445b7e01f514c55551c14835a03581fd1ecff2b", + "bundled_sha256": "ab13b25534c79838d127d78572270a43f9e8c473bc70103b52e23a456d18dc8a", "override": true }, { - "path": "skills/launch-workflow/references/seqera-mcp/README.md", - "source": "portal/backend/src/skills/seqera-mcp/SKILL.md", - "source_sha256": "1315cd22bcacef7660c2e853307956e681c2599bd8d0d6a2bf980da831433e18", - "bundled_sha256": "568daae3ffaef7092ccd578cd630d5d0a5741fecfd2914a59192102902b1b652", - "override": true, - "review_preparation_adaptation": true + "path": "skills/migrate-nextflow-code/references/maintain-nf-core-pipeline/references/template-merges/tools-4_0.md", + "source": "portal/backend/src/skills/maintain-nf-core-pipeline/references/template-merges/tools-4_0.md", + "source_sha256": "743295a75fea1c54adc6e93c8b479012a705beb0d74a599c2262b417f0cf415c", + "bundled_sha256": "dc55b2331fc20e85e8ee6144474b0216e166cc5985c827c4b92e310cc040469f", + "override": true } ], "github_upstreams": [ @@ -1141,62 +1149,93 @@ } ], "edited_files": [ - "skills/audit-conversion-readiness/SKILL.md", - "skills/audit-conversion-readiness/references/tool-availability.md", "skills/build-nextflow-pipeline/SKILL.md", + "skills/build-nextflow-pipeline/references/audit-conversion-readiness/README.md", + "skills/build-nextflow-pipeline/references/audit-conversion-readiness/references/reference-patterns.md", + "skills/build-nextflow-pipeline/references/audit-conversion-readiness/references/report-template.md", + "skills/build-nextflow-pipeline/references/audit-conversion-readiness/references/tool-availability.md", "skills/build-nextflow-pipeline/references/convert-jupyter-notebook/README.md", "skills/build-nextflow-pipeline/references/convert-python-script/README.md", "skills/build-nextflow-pipeline/references/convert-r-script/README.md", "skills/build-nextflow-pipeline/references/convert-r-script/references/nextflow-dsl2.md", "skills/build-nextflow-pipeline/references/convert-r-script/references/r-container-images.md", "skills/build-nextflow-pipeline/references/create-workflow/README.md", - "skills/ce-credentials-setup/SKILL.md", - "skills/ce-credentials-setup/references/aws-batch.md", - "skills/ce-credentials-setup/references/kubernetes.md", - "skills/ce-credentials-setup/references/seqera-compute.md", + "skills/build-nextflow-pipeline/references/find-alternative-tools/README.md", + "skills/build-nextflow-pipeline/references/install-nextflow/README.md", + "skills/build-nextflow-pipeline/references/migrate-from-snakemake/README.md", + "skills/build-nextflow-pipeline/references/migrate-from-snakemake/references/nextflow-conda-troubleshooting.md", + "skills/build-nextflow-pipeline/references/migrate-from-snakemake/references/snakemake-nextflow-playbook.md", + "skills/build-nextflow-pipeline/references/migrate-from-snakemake/references/snakemake-rules-core.md", + "skills/build-nextflow-pipeline/references/migrate-from-snakemake/references/snakemake-testing-unit-tests.md", + "skills/build-nextflow-pipeline/references/migrate-from-snakemake/references/snakemake-writing-workflows.md", + "skills/build-nextflow-pipeline/references/run-module/README.md", + "skills/build-nextflow-pipeline/references/search-existing-modules/README.md", "skills/create-container/SKILL.md", + "skills/create-container/references/nf-docker-scripts/README.md", + "skills/create-container/references/nf-docker-scripts/references/script-strategies-deep-dive.md", "skills/debug-local-run/SKILL.md", + "skills/debug-local-run/references/nextflow-history/README.md", + "skills/debug-local-run/references/nextflow-history/references/nf-run-history/README.md", + "skills/debug-local-run/references/nf-data-lineage/README.md", "skills/debug-seqera-failed-run/SKILL.md", "skills/debug-seqera-failed-run/references/debug-workflow.md", - "skills/find-alternative-tools/SKILL.md", - "skills/install-nextflow/SKILL.md", "skills/launch-workflow/SKILL.md", + "skills/launch-workflow/references/ce-credentials-setup/README.md", + "skills/launch-workflow/references/ce-credentials-setup/references/aws-batch.md", + "skills/launch-workflow/references/ce-credentials-setup/references/kubernetes.md", + "skills/launch-workflow/references/ce-credentials-setup/references/seqera-compute.md", + "skills/launch-workflow/references/nextflow-development/LICENSE.txt", + "skills/launch-workflow/references/nextflow-development/README.md", + "skills/launch-workflow/references/nextflow-development/references/geo-sra-acquisition.md", + "skills/launch-workflow/references/nextflow-development/references/installation.md", + "skills/launch-workflow/references/nextflow-development/references/pipelines/atacseq.md", + "skills/launch-workflow/references/nextflow-development/references/pipelines/rnaseq.md", + "skills/launch-workflow/references/nextflow-development/references/pipelines/sarek.md", + "skills/launch-workflow/references/nextflow-development/references/troubleshooting.md", + "skills/launch-workflow/references/nextflow-development/requirements.txt", + "skills/launch-workflow/references/nextflow-development/scripts/check_environment.py", + "skills/launch-workflow/references/nextflow-development/scripts/config/genomes.yaml", + "skills/launch-workflow/references/nextflow-development/scripts/config/pipelines/atacseq.yaml", + "skills/launch-workflow/references/nextflow-development/scripts/config/pipelines/rnaseq.yaml", + "skills/launch-workflow/references/nextflow-development/scripts/config/pipelines/sarek.yaml", + "skills/launch-workflow/references/nextflow-development/scripts/detect_data_type.py", + "skills/launch-workflow/references/nextflow-development/scripts/generate_samplesheet.py", + "skills/launch-workflow/references/nextflow-development/scripts/manage_genomes.py", + "skills/launch-workflow/references/nextflow-development/scripts/sra_geo_fetch.py", + "skills/launch-workflow/references/nextflow-development/scripts/utils/__init__.py", + "skills/launch-workflow/references/nextflow-development/scripts/utils/file_discovery.py", + "skills/launch-workflow/references/nextflow-development/scripts/utils/ncbi_utils.py", + "skills/launch-workflow/references/nextflow-development/scripts/utils/sample_inference.py", + "skills/launch-workflow/references/nextflow-development/scripts/utils/validators.py", + "skills/launch-workflow/references/seqera-data-links/README.md", "skills/launch-workflow/references/seqera-mcp/README.md", - "skills/maintain-nf-core-pipeline/SKILL.md", - "skills/maintain-nf-core-pipeline/references/nf-core-conventions.md", - "skills/maintain-nf-core-pipeline/references/template-merges/tools-4_0.md", - "skills/migrate-from-snakemake/SKILL.md", + "skills/launch-workflow/references/seqerakit/README.md", "skills/migrate-nextflow-code/SKILL.md", + "skills/migrate-nextflow-code/references/maintain-nf-core-pipeline/README.md", + "skills/migrate-nextflow-code/references/maintain-nf-core-pipeline/references/nf-core-conventions.md", + "skills/migrate-nextflow-code/references/maintain-nf-core-pipeline/references/template-merges/README.md", + "skills/migrate-nextflow-code/references/maintain-nf-core-pipeline/references/template-merges/tools-4_0.md", "skills/migrate-nextflow-code/references/nextflow-26-syntax/README.md", "skills/migrate-nextflow-code/references/nf-migrate-25-04/README.md", "skills/migrate-nextflow-code/references/nf-migrate-25-04/references/upstream-25-04.md", "skills/migrate-nextflow-code/references/nf-migrate-25-04/scripts/find_deprecated_patterns.py", "skills/migrate-nextflow-code/references/nf-migrate-25-04/scripts/find_shell_blocks.py", + "skills/migrate-nextflow-code/references/nf-plugin-development/README.md", + "skills/migrate-nextflow-code/references/nf-plugin-legacy-migration/README.md", "skills/migrate-nextflow-code/references/nf-v2-boolean-params/README.md", "skills/nextflow-config/SKILL.md", "skills/nextflow-config/references/config-options.md", - "skills/nextflow-development/SKILL.md", - "skills/nextflow-history/SKILL.md", - "skills/nextflow-history/references/nf-run-history/README.md", - "skills/nextflow-output-patterns/SKILL.md", "skills/nextflow-schema/SKILL.md", "skills/nextflow-schema/references/nf-schema-migration/README.md", "skills/nextflow-schema/references/nf-schema-migration/references/migration-guide.md", "skills/nextflow-schema/references/triage-pipeline-parameters/README.md", - "skills/nf-data-lineage/SKILL.md", - "skills/nf-docker-scripts/SKILL.md", "skills/nf-pipeline-design/SKILL.md", - "skills/nf-plugin-development/SKILL.md", - "skills/nf-plugin-legacy-migration/SKILL.md", + "skills/nf-pipeline-design/references/nextflow-output-patterns/README.md", "skills/nf-test/SKILL.md", "skills/nf-test/references/repair-nf-test/README.md", "skills/repair-workflow/SKILL.md", "skills/repair-workflow/references/nf-debug/README.md", - "skills/repair-workflow/references/repair-checklists.md", - "skills/run-module/SKILL.md", - "skills/search-existing-modules/SKILL.md", - "skills/seqera-data-links/SKILL.md", - "skills/seqerakit/SKILL.md" + "skills/repair-workflow/references/repair-checklists.md" ], "consolidated_skills": [ { @@ -1250,6 +1289,74 @@ { "from": "seqera-mcp", "to": "launch-workflow" + }, + { + "from": "migrate-from-snakemake", + "to": "build-nextflow-pipeline" + }, + { + "from": "audit-conversion-readiness", + "to": "build-nextflow-pipeline" + }, + { + "from": "search-existing-modules", + "to": "build-nextflow-pipeline" + }, + { + "from": "run-module", + "to": "build-nextflow-pipeline" + }, + { + "from": "find-alternative-tools", + "to": "build-nextflow-pipeline" + }, + { + "from": "install-nextflow", + "to": "build-nextflow-pipeline" + }, + { + "from": "nextflow-output-patterns", + "to": "nf-pipeline-design" + }, + { + "from": "nf-docker-scripts", + "to": "create-container" + }, + { + "from": "ce-credentials-setup", + "to": "launch-workflow" + }, + { + "from": "seqera-data-links", + "to": "launch-workflow" + }, + { + "from": "seqerakit", + "to": "launch-workflow" + }, + { + "from": "nextflow-development", + "to": "launch-workflow" + }, + { + "from": "nextflow-history", + "to": "debug-local-run" + }, + { + "from": "nf-data-lineage", + "to": "debug-local-run" + }, + { + "from": "nf-plugin-development", + "to": "migrate-nextflow-code" + }, + { + "from": "nf-plugin-legacy-migration", + "to": "migrate-nextflow-code" + }, + { + "from": "maintain-nf-core-pipeline", + "to": "migrate-nextflow-code" } ] } diff --git a/tools/check_sources.py b/tools/check_sources.py index 7ed822b..7dfaa11 100644 --- a/tools/check_sources.py +++ b/tools/check_sources.py @@ -3,6 +3,7 @@ import hashlib import json +import re import sys from pathlib import Path @@ -30,9 +31,27 @@ def main() -> int: elif entries[0].get("version") != plugin["version"]: errors.append(f"version mismatch: plugin.json {plugin['version']} vs marketplace {entries[0].get('version')}") - for skill in sorted((REPO / "skills").iterdir()): - if skill.is_dir() and not (skill / "SKILL.md").is_file(): - errors.append(f"skill directory without SKILL.md: {skill.name}") + codex = json.loads((REPO / ".codex-plugin" / "plugin.json").read_text()) + if codex["version"] != plugin["version"]: + errors.append("Codex and Claude plugin versions differ") + + expected = {"build-nextflow-pipeline", "nf-pipeline-design", "repair-workflow", + "debug-local-run", "debug-seqera-failed-run", "nf-test", "migrate-nextflow-code", + "nextflow-schema", "nextflow-config", "create-container", "launch-workflow"} + actual = {p.parent.name for p in (REPO / "skills").glob("*/SKILL.md")} + if actual != expected: + errors.append(f"skill inventory mismatch: missing {sorted(expected - actual)}, unexpected {sorted(actual - expected)}") + recorded = {entry["path"] for entry in sources["files"]} + for path in sorted((REPO / "skills").rglob("*")): + if path.is_file() and path.relative_to(REPO).as_posix() not in recorded: + errors.append(f"unrecorded skill resource: {path.relative_to(REPO)}") + for path in sorted((REPO / "skills").rglob("*.md")): + for target in re.findall(r"\[[^\]]*\]\(([^\s)]+)\)", path.read_text()): + location = target.partition("#")[0] + if not location or location.startswith(("/", "<")) or re.match(r"[a-zA-Z][\w+.-]*:", location): + continue + if not (path.parent / location).resolve().exists(): + errors.append(f"broken local link: {path.relative_to(REPO)} -> {target}") for error in errors: print(f"error: {error}", file=sys.stderr) diff --git a/tools/consolidate_skills.py b/tools/consolidate_skills.py index 9042432..43a97fe 100644 --- a/tools/consolidate_skills.py +++ b/tools/consolidate_skills.py @@ -46,11 +46,30 @@ def relocate(match: re.Match) -> str: return re.sub(r"(\[[^\]]*\]\()([^\s)]+)\)", relocate, text) +def relocate_folded_path(path: Path, root: Path, plan: dict) -> Path: + for group in plan["groups"]: + for fold in group["folds"]: + source = root / "skills" / fold["from"] + if path.is_relative_to(source): + relative = path.relative_to(source) + if relative == Path("SKILL.md"): + relative = Path("README.md") + path = root / "skills" / fold["to"] / "references" / fold["from"] / relative + return path + + def apply_consolidations(root: Path, plan: dict, assets: Path) -> None: sources_path = root / "sources.json" sources = json.loads(sources_path.read_text()) entries = {entry["path"]: entry for entry in sources["files"]} edited = set(sources["claude_curation"]["edited_files"]) + for path in sorted((root / "skills").rglob("*")): + relative = path.relative_to(root).as_posix() + if path.is_file() and relative not in entries: + digest = hashlib.sha256(path.read_bytes()).hexdigest() + entries[relative] = {"path": relative, "source": f"imported-package/{relative}", + "source_sha256": digest, "bundled_sha256": digest, + "override": False, "note": "No upstream provenance record; hash identifies imported bytes only."} for group in plan["groups"]: folds = group["folds"] pending = [fold for fold in folds if (root / "skills" / fold["from"]).is_dir()] @@ -59,7 +78,7 @@ def apply_consolidations(root: Path, plan: dict, assets: Path) -> None: if not pending: for fold in folds: guide = root / "skills" / fold["to"] / "references" / fold["from"] / "README.md" - if not guide.is_file(): + if not guide.is_file() and not relocate_folded_path(guide, root, plan).is_file(): raise ValueError(f"missing source skill and consolidated guide: {fold['from']}") continue @@ -131,9 +150,23 @@ def apply_consolidations(root: Path, plan: dict, assets: Path) -> None: frontmatter = re.sub(pattern, fold["to"], frontmatter) # Do not change Markdown link destinations or the current guide's # self-references into self-invocation. Skill slugs are standalone tokens. - body = re.sub(pattern, lambda _: f"[{fold['label']}]({relative})", body) + body = re.sub(r"\[[^\]]*\]\([^\s)]+\)|" + pattern, + lambda match: match.group() if match.group().startswith("[") + else f"[{fold['label']}]({relative})", body) path.write_text(frontmatter + body) + # A guide can point at another skill folded later, including a previous receiver. + # Repair those destinations after the complete plan, not just the current move. + for path in sorted((root / "skills").rglob("*.md")): + def relocate_link(match: re.Match) -> str: + location, separator, anchor = match.group(2).partition("#") + if not location or location.startswith(("/", "<")) or re.match(r"[a-zA-Z][\w+.-]*:", location): + return match.group() + target = relocate_folded_path((path.parent / location).resolve(), root, plan) + relative = Path(os.path.relpath(target, path.parent)).as_posix() + return f"{match.group(1)}{relative}{separator}{anchor})" + path.write_text(re.sub(r"(\[[^\]]*\]\()([^\s)]+)\)", relocate_link, path.read_text())) + # Behavioral adaptations run after all references have been relocated. for edit in plan.get("post_edits", []): path = root / edit["path"] diff --git a/tools/import_package.py b/tools/import_package.py index 1bd5bc9..65f2aba 100644 --- a/tools/import_package.py +++ b/tools/import_package.py @@ -36,7 +36,7 @@ # Version of the Claude plugin. It is released independently of the generic package # because the Claude build curates the skill set below; bump it on every release. -VERSION = "0.2.2" +VERSION = "0.3.0" # Skills from the generic package that are not shipped in the Claude plugin. EXCLUDED_SKILLS = [ diff --git a/tools/skill_consolidations.json b/tools/skill_consolidations.json index 1d47237..d735004 100644 --- a/tools/skill_consolidations.json +++ b/tools/skill_consolidations.json @@ -577,22 +577,227 @@ "new": "use MCP discovery/execution to retrieve workflows; read `seqera-mcp` if connection or discovery guidance is needed." } ] + }, + { + "folds": [ + { + "from": "migrate-from-snakemake", + "to": "build-nextflow-pipeline", + "label": "snakemake conversion", + "when": "When converting a Snakefile, preserve DAG, wildcard, scheduler and golden-output semantics.", + "heading": "Snakemake conversion playbook" + }, + { + "from": "audit-conversion-readiness", + "to": "build-nextflow-pipeline", + "label": "conversion readiness", + "when": "For an audit-only request, inventory and probe inputs, code and dependencies; stop with a blockers-first report without editing pipeline code.", + "heading": "Conversion readiness playbook" + }, + { + "from": "search-existing-modules", + "to": "build-nextflow-pipeline", + "label": "module discovery", + "when": "When selecting a tool implementation, return a verified reuse, vendor/adapt or write-new verdict.", + "heading": "Module discovery playbook" + }, + { + "from": "run-module", + "to": "build-nextflow-pipeline", + "label": "native module execution", + "when": "For a module-only request, inspect the module contract and run it natively on verified inputs; no wrapper workflow or construction phases are needed.", + "heading": "Native module execution playbook" + }, + { + "from": "find-alternative-tools", + "to": "build-nextflow-pipeline", + "label": "tool comparison", + "when": "For requested comparisons or a blocked selected tool, compare alternatives; implementation needs separate user approval.", + "heading": "Tool comparison playbook" + }, + { + "from": "install-nextflow", + "to": "build-nextflow-pipeline", + "label": "runtime setup", + "when": "For installation or upgrade help, check the selected release and operation first; ask before changing the environment.", + "heading": "Runtime setup playbook" + }, + { + "from": "nextflow-output-patterns", + "to": "nf-pipeline-design", + "label": "output correctness", + "when": "When aggregating, joining or grouping outputs, check headers, cardinality, keys and null handling.", + "heading": "Output correctness playbook" + }, + { + "from": "nf-docker-scripts", + "to": "create-container", + "label": "script packaging", + "when": "For script-placement questions, choose and verify staging or packaging without requiring a container build.", + "heading": "Script packaging playbook" + }, + { + "from": "ce-credentials-setup", + "to": "launch-workflow", + "heading": "Compute readiness", + "label": "compute readiness", + "when": "For provider credentials or compute setup, follow only the requested setup task; never expose secrets or create infrastructure without approval." + }, + { + "from": "seqera-data-links", + "to": "launch-workflow", + "heading": "Data links", + "label": "data links", + "when": "For browsing or managing Platform data links, use discovered schemas and confirm any requested mutations; do not launch a workflow implicitly." + }, + { + "from": "seqerakit", + "to": "launch-workflow", + "heading": "Seqerakit automation", + "label": "Seqerakit automation", + "when": "For declarative Platform automation, inspect the requested resources and permissions before executing changes." + }, + { + "from": "nextflow-development", + "to": "launch-workflow", + "heading": "nf-core analyses and public data", + "label": "nf-core analysis", + "when": "For omics analysis, GEO/SRA acquisition or samplesheet creation, follow the requested stage and confirm pipeline, data, genome and output contracts. Bundled helpers are under this playbook directory, not the parent skill directory." + }, + { + "from": "nextflow-history", + "to": "debug-local-run", + "heading": "Run history and resume identity", + "label": "run history", + "when": "For run/cache investigation or resume selection, identify the requested run from authoritative history and accessible cache/work metadata, not merely the newest run." + }, + { + "from": "nf-data-lineage", + "to": "debug-local-run", + "heading": "Data lineage", + "label": "data lineage", + "when": "For provenance queries, use the selected lineage store; export or retention changes require explicit user authorization." + }, + { + "from": "nf-plugin-development", + "to": "migrate-nextflow-code", + "heading": "Plugin authoring", + "label": "plugin authoring", + "when": "For Nextflow extension-plugin development, use the plugin procedure rather than the pipeline migration phases." + }, + { + "from": "nf-plugin-legacy-migration", + "to": "migrate-nextflow-code", + "heading": "Legacy plugin migration", + "label": "legacy plugin migration", + "when": "For legacy extension migration, preserve plugin identity and behavior; registry publication needs separate approval." + }, + { + "from": "maintain-nf-core-pipeline", + "to": "migrate-nextflow-code", + "heading": "nf-core maintenance", + "label": "nf-core maintenance", + "when": "For nf-core maintenance, check project conventions and the requested maintenance scope before template synchronization or publication." + } + ], + "edits": [ + { + "path": "skills/build-nextflow-pipeline/SKILL.md", + "old": "description: >\n Plan and scaffold a new Nextflow DSL2 pipeline from source material —\n scripts, repositories, Jupyter/R notebooks, papers, or informal\n instructions. Drives the planning phases before any .nf code is written:\n mapping the data flow, critiquing it, shaping channels and metadata,\n scoping subworkflows, hunting for existing modules, and only then building\n containers and writing code. Use this skill whenever the user asks to\n \"build a pipeline\", \"compose registry modules\", \"port this to Nextflow\", \"turn this notebook/repo/script\n into a pipeline\", or otherwise wants to go from an existing body of work to\n a clean Nextflow pipeline. Pair with `nf-pipeline-design`, which owns the\n code-level rules (layout, main.nf, subworkflow/module shape); this skill\n owns the planning process that precedes them.", + "new": "description: >\n Build or convert Nextflow pipelines from scripts, notebooks, repositories\n or Snakemake workflows. Also use for read-only conversion readiness audits,\n discovering or directly running registry modules, requested tool comparisons,\n and Nextflow installation or upgrade help. Choose the bounded task path;\n only full pipeline construction uses the planning phases. Pair with\n nf-pipeline-design for code structure and output contracts." + }, + { + "path": "skills/build-nextflow-pipeline/SKILL.md", + "old": "## Choose the construction path", + "new": "## Choose the requested task\n\nAudit, module discovery/execution, tool comparison and installation requests use only their matching playbook; skip construction phases and stop at the requested result. Pass the playbook to a helper agent rather than invoking a removed skill.\n\nFor nf-core analysis or Platform setup, use `launch-workflow`; for extension-plugin work or nf-core maintenance, use `migrate-nextflow-code`; for history or lineage, use `debug-local-run`. These specialist tasks do not enter pipeline construction.\n\n## Choose the construction path" + }, + { + "path": "skills/install-nextflow/SKILL.md", + "old": "2. If the installed version is **older than 26.04**, the user MUST upgrade — other Nextflow skills depend on it.\n3. Otherwise, propose an upgrade only if a newer version is available.", + "new": "2. Check whether the installed release supports the user's requested operation. Ordinary pipeline execution does not inherit the 26.04 minimum used by native module or launch commands.\n3. If the operation is unsupported, explain the minimum supported release and ask before upgrading; otherwise keep the existing installation unless the user requests an upgrade." + }, + { + "path": "skills/install-nextflow/SKILL.md", + "old": "# Install or Upgrade Nextflow", + "new": "# Install or Upgrade Nextflow\n\nAn installation-help request is not permission to change the environment. Confirm the target release, Java/runtime prerequisites and user's approval before any installer, package-manager command or self-update." + }, + { + "path": "skills/create-container/SKILL.md", + "old": "description: >\n Build, claim, or recommend a verified container for a bioinformatics tool —\n and prove it runs the intended command on representative test data before\n handing it off for module authoring. Make sure to use this skill whenever\n the user wants to containerize a tool, wrap a tool for a Nextflow module,\n set up Wave for a custom package stack, pin a Bioconda/conda-forge\n environment, or unblock a \"this tool's dependencies are weird\" problem.\n Trigger phrases include \"containerize X\", \"I need an image for Y\",\n \"set up Wave for Z\", \"build a conda env for this tool\", \"verify this\n container works on test input\", \"what container does need\",\n \"wrap for a Nextflow module\", \"fix this conda solve\". Follows a\n build → run-test-input → iterate loop and returns a structured handoff\n (verified image reference + working command). Do not author the Nextflow\n module here — that belongs in `build-nextflow-pipeline` after verification.", + "new": "description: >\n Create and verify containers for Nextflow tools using Wave or the selected\n runtime. Also use for choosing where process scripts live, helper-command\n staging, templates and image packaging. Script-placement advice does not\n require building an image. Verify the requested command and representative\n outputs before claiming a container works." + }, + { + "path": "skills/nf-pipeline-design/SKILL.md", + "old": "description: >", + "new": "description: >\n Also use for output aggregation, collectFile headers, join cardinality,\n grouping keys and null-handling correctness." + }, + { + "path": "skills/launch-workflow/SKILL.md", + "old": "description: Launch Nextflow pipeline executions on cloud and HPC clusters via Nextflow Platform. Use when the user wants to run/launch/submit a pipeline on a cloud or cluster compute environment, configure a compute environment, push pipeline changes to GitHub before launching, or sign in to Nextflow Platform.", + "new": "description: >\n Plan, launch or resume Nextflow pipelines locally or through Nextflow Platform.\n Also use for nf-core omics analyses, GEO/SRA acquisition, samplesheets, compute\n and credential setup, data links and Seqerakit automation. Choose the requested\n playbook without forcing a launch; publication, infrastructure creation and\n other mutations need explicit authorization." + }, + { + "path": "skills/launch-workflow/SKILL.md", + "old": "# Launch Pipeline on Nextflow Platform", + "new": "# Launch or Resume a Pipeline\n\n## Local runs and resume\n\nFor a local run, confirm the user's pipeline, parameters, executor and output destination. Use the installed release's `nextflow run` interface; a local run does not require Platform authentication, a remote Git repository or Nextflow 26.04.\n\nBefore resuming, read [run identification](../debug-local-run/references/nextflow-history/references/nf-run-history/README.md) and verify the requested run/session and accessible work/cache metadata. Use `-resume` with the selected identity; do not choose a run solely because it is newest. Inspect completion status and representative outputs; a cache hit alone is not scientific-output verification.\n\nFor missing runtime setup, read [runtime setup](../build-nextflow-pipeline/references/install-nextflow/README.md). Stop before installing or upgrading without explicit approval.\n\n## Platform launches" + }, + { + "path": "skills/launch-workflow/SKILL.md", + "old": "3. **Upload local changes** — push any uncommitted local changes to the remote so the launched run reflects the user's current code.", + "new": "3. **Select a published revision** — verify that the remote contains the intended code. Publishing local changes requires separate explicit approval; a launch request alone is not authority to commit or push." + }, + { + "path": "skills/launch-workflow/SKILL.md", + "old": "Initialize Git if needed, review the user's selected pipeline files, and stage\nonly the intended changes. Help the user create or select a remote repository,\nconfigure its remote URL, and push the agreed revision using the available tools.", + "new": "Explain the missing published revision and ask for separate authorization before initializing Git, creating a remote, staging files or publishing code. Alternatively select an already published revision the user approves." + }, + { + "path": "skills/launch-workflow/SKILL.md", + "old": "Before launching, push any local changes so the remote reflects the code that should run:\n\nReview the changes, commit the user's intended pipeline files with a descriptive\nmessage, and push the confirmed branch using the available Git tools.", + "new": "Compare local changes with the selected remote revision. If the intended code is unpublished, stop and ask whether the user wants a separate commit/push task or a launch of the existing published revision. Only publish after explicit approval, staging only the approved files." + }, + { + "path": "skills/launch-workflow/SKILL.md", + "old": "4. **PUSH local changes first** — the launched run uses the remote code, so local edits must be committed and pushed.", + "new": "4. **VERIFY the published revision** — use the approved remote code; obtain separate authorization before committing or pushing local changes." + }, + { + "path": "skills/launch-workflow/SKILL.md", + "old": "`nextflow launch` returns a run URL on Nextflow Platform. Present this URL to the user so they can monitor progress in the Platform UI.", + "new": "`nextflow launch` returns a run URL on Nextflow Platform. Retrieve the authoritative submitted workflow using discovered MCP operations and confirm its revision, parameters, compute environment and resume identity. Present the verified run identifier/URL and distinguish submission from successful completion." + }, + { + "path": "skills/debug-local-run/SKILL.md", + "old": "description: >\n Debug a local Nextflow pipeline run. Analyzes .nextflow.log, work directories,\n and task error logs to identify failures and suggest fixes. Use when user asks\n to debug their last run, diagnose pipeline errors, or understand why a run failed.", + "new": "description: Debug local Nextflow failures and investigate run history, caches, resume identity and data lineage. Select the requested diagnostic or provenance playbook; retention/export changes require explicit authorization." + }, + { + "path": "skills/migrate-nextflow-code/SKILL.md", + "old": "description: Migrate Nextflow pipeline code while preserving behavior. Use for version upgrades including 25.04 compatibility, strict syntax errors, boolean CLI parameter types, topic channels, workflow outputs, and static typing (typed processes/workflows, records, typed params).", + "new": "description: Migrate Nextflow pipeline code across versions while preserving behavior. Also use for extension-plugin authoring or legacy plugin migration, and nf-core maintenance/template synchronization. Follow only the requested playbook; do not force pipeline migration, template upgrades or registry publication." + }, + { + "path": "skills/migrate-nextflow-code/SKILL.md", + "old": "# Migrate Nextflow Code", + "new": "# Migrate Nextflow Code\n\n## Choose the requested task\n\nPlugin authoring, legacy-plugin migration and nf-core maintenance use the matching playbook linked below, not the pipeline migration phases. Check the repository conventions first; template synchronization and registry publication are separate authorized tasks.\n\n## Pipeline language migrations" + } + ] } ], "post_edits": [ { "path": "skills/build-nextflow-pipeline/SKILL.md", - "old": "### Implement branching between as many alternative tools as possible\n\nFor each subworkflow, explicitly list the alternative tools considered (e.g. for multiple sequence alignment: MAFFT, MUSCLE, Clustal Omega, T-Coffee, HHblits; for folding: Boltz, OpenFold3, AlphaFold3) and then **implement the branching between them in the subworkflow**, not just pick one.\n\nThe default assumption is that every step with multiple credible tools becomes a workflow-level `if/else` on an explicit parameter, with each branch calling one module. This is not a \"nice to have\" — it's what makes the pipeline actually useful:\n\n- The original source material reflects *one* author's choice at *one* point in time. Alternatives are often better for other datasets, other organisms, other budgets, or simply newer than the paper.\n- Tool choice is typically the single biggest determinant of output quality and runtime. Exposing it as a knob turns the pipeline into an experiment platform instead of a fixed recipe.\n- Adding a second branch is cheap when you're writing the subworkflow; adding one later means reworking the subworkflow's input/output contracts under pressure.\n- You are going through the container/module-building loop anyway (Phase 4). Doing it for 2–4 tools in one pass is only marginally more work than doing it for one.\n\nConcretely, this means:\n\n1. Surface the tool choice as a parameter in `nextflow_schema.json` with an `enum` listing every implemented option (see Phase 1 — this is exactly the kind of knob that belongs at the top level).\n2. Structure the subworkflow as a workflow-level `if/else` over that parameter, with a final `else error \"Unsupported : ${choice}\"` branch. See the `RUN_FOLDING` example in `nf-pipeline-design` for the exact shape.\n3. Harmonize inputs *upstream* of the branch and outputs *downstream* of the branch, so each tool module sees the same input shape and emits the same output shape. The subworkflow, not the caller, owns this normalization.\n4. Build and verify containers for **every** implemented branch during Phase 4. A branch that exists in code but was never run once is technical debt, not a feature.\n\nSkip a branch only when the tool is genuinely obsolete, proprietary-licensed in a way the pipeline cannot accept, or architecturally incompatible (e.g. needs GPUs the target executor doesn't have). Record the reason for every tool you considered and did *not* implement — this document survives longer than the planning conversation and prevents the same alternative being revisited every six months.\n\n**Delegate the enumeration when available.** For each analysis step in the data flow map, use the `find-alternative-tools` skill with the analysis step name plus any constraints (target executor, GPU availability, license restrictions). These tasks are independent and can run in parallel with one subagent per analysis step. Collect the ranked lists back into the planning document's \"Alternative tools\" section.\n\nThen **merge the suggested `enum` values into `nextflow_schema.json`** for each tool-choice parameter (e.g. `msa_tool: [\"mafft\", \"muscle\", \"clustalo\"]`). This is the first planned augmentation of the schema after Phase 1's draft — update `nextflow.config`'s `params {}` block alongside so defaults stay in sync. Also note any **nf-core module hints** the enumerate subagents flagged in their per-tool blocks; you will pass those forward to the next step as fast-path hints.\n\n", - "new": "### Select tools without expanding scope\n\nUse the tool requested by the user or required to preserve the source analysis. If none is specified, recommend one suitable default and resolve material license, compute or output-contract constraints before implementation.\n\nUse `find-alternative-tools` only when the user requests a comparison or the selected tool is blocked. Research produces candidates; it does not authorize implementing them.\n\nAdd multiple tool branches only when the user explicitly requests or approves them. For approved branches:\n\n1. Add only implemented choices to the schema's `enum`, keeping config defaults aligned.\n2. Put tool selection in the subworkflow and reject unsupported choices explicitly.\n3. Normalize inputs and outputs around the selected modules.\n4. Verify every implemented branch's command, container and representative outputs.\n\nRecord the selected tool and rationale. A single-tool pipeline does not need an alternative-tool parameter or exhaustive rejected-tool inventory.\n\n" + "old": "### Implement branching between as many alternative tools as possible\n\nFor each subworkflow, explicitly list the alternative tools considered (e.g. for multiple sequence alignment: MAFFT, MUSCLE, Clustal Omega, T-Coffee, HHblits; for folding: Boltz, OpenFold3, AlphaFold3) and then **implement the branching between them in the subworkflow**, not just pick one.\n\nThe default assumption is that every step with multiple credible tools becomes a workflow-level `if/else` on an explicit parameter, with each branch calling one module. This is not a \"nice to have\" — it's what makes the pipeline actually useful:\n\n- The original source material reflects *one* author's choice at *one* point in time. Alternatives are often better for other datasets, other organisms, other budgets, or simply newer than the paper.\n- Tool choice is typically the single biggest determinant of output quality and runtime. Exposing it as a knob turns the pipeline into an experiment platform instead of a fixed recipe.\n- Adding a second branch is cheap when you're writing the subworkflow; adding one later means reworking the subworkflow's input/output contracts under pressure.\n- You are going through the container/module-building loop anyway (Phase 4). Doing it for 2–4 tools in one pass is only marginally more work than doing it for one.\n\nConcretely, this means:\n\n1. Surface the tool choice as a parameter in `nextflow_schema.json` with an `enum` listing every implemented option (see Phase 1 — this is exactly the kind of knob that belongs at the top level).\n2. Structure the subworkflow as a workflow-level `if/else` over that parameter, with a final `else error \"Unsupported : ${choice}\"` branch. See the `RUN_FOLDING` example in `nf-pipeline-design` for the exact shape.\n3. Harmonize inputs *upstream* of the branch and outputs *downstream* of the branch, so each tool module sees the same input shape and emits the same output shape. The subworkflow, not the caller, owns this normalization.\n4. Build and verify containers for **every** implemented branch during Phase 4. A branch that exists in code but was never run once is technical debt, not a feature.\n\nSkip a branch only when the tool is genuinely obsolete, proprietary-licensed in a way the pipeline cannot accept, or architecturally incompatible (e.g. needs GPUs the target executor doesn't have). Record the reason for every tool you considered and did *not* implement — this document survives longer than the planning conversation and prevents the same alternative being revisited every six months.\n\n**Delegate the enumeration when available.** For each analysis step in the data flow map, use the [tool comparison](references/find-alternative-tools/README.md) skill with the analysis step name plus any constraints (target executor, GPU availability, license restrictions). These tasks are independent and can run in parallel with one subagent per analysis step. Collect the ranked lists back into the planning document's \"Alternative tools\" section.\n\nThen **merge the suggested `enum` values into `nextflow_schema.json`** for each tool-choice parameter (e.g. `msa_tool: [\"mafft\", \"muscle\", \"clustalo\"]`). This is the first planned augmentation of the schema after Phase 1's draft — update `nextflow.config`'s `params {}` block alongside so defaults stay in sync. Also note any **nf-core module hints** the enumerate subagents flagged in their per-tool blocks; you will pass those forward to the next step as fast-path hints.\n\n", + "new": "### Select tools without expanding scope\n\nUse the tool requested by the user or required to preserve the source analysis. If none is specified, recommend one suitable default and resolve material license, compute or output-contract constraints before implementation.\n\nUse [tool comparison](references/find-alternative-tools/README.md) only when the user requests a comparison or the selected tool is blocked. Research produces candidates; it does not authorize implementing them.\n\nAdd multiple tool branches only when the user explicitly requests or approves them. For approved branches:\n\n1. Add only implemented choices to the schema's `enum`, keeping config defaults aligned.\n2. Put tool selection in the subworkflow and reject unsupported choices explicitly.\n3. Normalize inputs and outputs around the selected modules.\n4. Verify every implemented branch's command, container and representative outputs.\n\nRecord the selected tool and rationale. A single-tool pipeline does not need an alternative-tool parameter or exhaustive rejected-tool inventory.\n\n" }, { "path": "skills/build-nextflow-pipeline/SKILL.md", - "old": "| Enumerating alternative tools for each analysis step | **Yes — one subagent per analysis step, in parallel** | `find-alternative-tools` |", - "new": "| Comparing alternatives, only when requested or the selected tool is blocked | **Optional** — delegate the bounded comparison when useful | `find-alternative-tools` |" + "old": "| Enumerating alternative tools for each analysis step | **Yes — one subagent per analysis step, in parallel** | [tool comparison](references/find-alternative-tools/README.md) |", + "new": "| Comparing alternatives, only when requested or the selected tool is blocked | **Optional** — delegate the bounded comparison when useful | [tool comparison](references/find-alternative-tools/README.md) |" }, { "path": "skills/build-nextflow-pipeline/SKILL.md", - "old": "augmented in Phase 3 with `enum` values from `find-alternative-tools` and any new tool-argument parameters revealed by module search.", + "old": "augmented in Phase 3 with `enum` values from [tool comparison](references/find-alternative-tools/README.md) and any new tool-argument parameters revealed by module search.", "new": "augmented in Phase 3 with approved implemented tool choices (if any) and relevant tool arguments revealed by module search." }, { @@ -617,21 +822,16 @@ }, { "path": "skills/build-nextflow-pipeline/SKILL.md", - "old": "- [ ] Alternative-tool enumeration ran for every analysis step with credible alternatives, using `find-alternative-tools`", + "old": "- [ ] Alternative-tool enumeration ran for every analysis step with credible alternatives, using [tool comparison](references/find-alternative-tools/README.md)", "new": "- [ ] The selected tools match the requested analysis; any additional implemented branches were explicitly requested or approved" }, { - "path": "skills/find-alternative-tools/SKILL.md", - "old": "Output is a structured list designed to feed directly into Nextflow subworkflow branching decisions.", - "new": "Output is a structured comparison to inform tool selection; research does not authorize implementation of additional branches." - }, - { - "path": "skills/find-alternative-tools/SKILL.md", + "path": "skills/build-nextflow-pipeline/references/find-alternative-tools/README.md", "old": "The caller wants to turn \"do MSA\" into a subworkflow with `if/else` over a `msa_tool` parameter, with multiple real branches. That means you are *not* choosing one winner — you are enumerating every tool a reasonable pipeline author would consider exposing as an option, and giving the caller what they need to pick which branches to implement.", "new": "Compare credible tools for the requested analysis and constraints. Recommend one default and explain when alternatives are justified. The caller decides which candidate to use; implementing additional branches requires explicit user approval. An alternatives report is research, not a pipeline implementation plan." }, { - "path": "skills/find-alternative-tools/SKILL.md", + "path": "skills/build-nextflow-pipeline/references/find-alternative-tools/README.md", "old": "Suggest the `enum` value set for the schema parameter (e.g. `msa_tool: enum [mafft, muscle, clustalo, tcoffee, hhblits]`). Use short, lowercase, conventional names — whatever the tool's own CLI command is, typically.", "new": "Suggest schema `enum` values only for branches explicitly approved for implementation. A research shortlist must not become the pipeline's advertised supported choices. Use short, lowercase, conventional tool names for approved choices." } diff --git a/tools/test_consolidate_skills.py b/tools/test_consolidate_skills.py index 30c98c8..aa54175 100644 --- a/tools/test_consolidate_skills.py +++ b/tools/test_consolidate_skills.py @@ -66,6 +66,30 @@ def test_rebases_external_links_and_keeps_internal_asset_links(self): self.assertIn("[details](references/details.md)", guide.read_text()) self.assertTrue((guide.parent / "../../SKILL.md").resolve().is_file()) + def test_folded_receiver_keeps_nested_guides_links_and_replay(self): + sink = self.root / "skills/sink/SKILL.md" + sink.parent.mkdir() + sink.write_text("---\nname: sink\ndescription: Combined task\n---\n# Combined task\n") + original = self.root / "skills/old/SKILL.md" + original.write_text(original.read_text() + "\nRead [owner](../owner/SKILL.md#workflow) and [caller task](../caller/SKILL.md).\n") + plan = json.loads(self.plan.read_text()) + plan["groups"].append({"folds": [ + {"from": "owner", "to": "sink", "heading": "Owner guide", "when": "When needed.", "label": "owner guide"}, + {"from": "caller", "to": "sink", "heading": "Caller guide", "when": "When needed.", "label": "caller guide"}]}) + self.plan.write_text(json.dumps(plan)) + result = self.run_cli() + self.assertEqual(result.returncode, 0, result.stderr) + guide = self.root / "skills/sink/references/owner/references/old/README.md" + self.assertIn("[owner](../../README.md#workflow)", guide.read_text()) + self.assertTrue((guide.parent / "../../README.md").resolve().is_file()) + self.assertIn("[caller task](../../../caller/README.md)", guide.read_text()) + self.assertTrue((guide.parent / "../../../caller/README.md").resolve().is_file()) + self.assertEqual((guide.parent / "scripts/check.sh").read_text(), "#!/bin/sh\nprintf 'checked\\n'\n") + before = {str(p.relative_to(self.root)): p.read_bytes() for p in self.root.rglob("*") if p.is_file()} + result = self.run_cli() + self.assertEqual(result.returncode, 0, result.stderr) + self.assertEqual(before, {str(p.relative_to(self.root)): p.read_bytes() for p in self.root.rglob("*") if p.is_file()}) + def test_short_reference_replaces_guide_and_drops_mirrored_schema(self): (self.root / "connection.md").write_text("# Connection\n\nUse live tool schemas.\n") plan = json.loads(self.plan.read_text())