bio-workflow-management-cwl-workflows — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited bio-workflow-management-cwl-workflows (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Reference examples tested with: FastQC 0.12+, Nextflow 23.10+, Salmon 1.10+, Snakemake 8.0+, fastp 0.23+
Before using code patterns, verify installed versions match. If versions differ:
<tool> --version then <tool> --help to confirm flagsIf code throws ImportError, AttributeError, or TypeError, introspect the installed package and adapt the example to match the actual API rather than retrying.
"Write a portable CWL workflow for my analysis" → Define tools and workflows in YAML using the Common Workflow Language standard for maximum cross-platform portability and sharing through workflow registries.
cwltool for local execution of CWL documents# fastqc.cwl
cwlVersion: v1.2
class: CommandLineTool
baseCommand: fastqc
inputs:
fastq:
type: File
inputBinding:
position: 1
outputs:
html:
type: File
outputBinding:
glob: "*_fastqc.html"
zip:
type: File
outputBinding:
glob: "*_fastqc.zip"# bwa_mem.cwl
cwlVersion: v1.2
class: CommandLineTool
baseCommand: [bwa, mem]
requirements:
DockerRequirement:
dockerPull: biocontainers/bwa:v0.7.17
ResourceRequirement:
coresMin: 8
ramMin: 16000
inputs:
threads:
type: int
default: 8
inputBinding:
prefix: -t
position: 1
reference:
type: File
secondaryFiles:
- .amb
- .ann
- .bwt
- .pac
- .sa
inputBinding:
position: 2
reads_1:
type: File
inputBinding:
position: 3
reads_2:
type: File?
inputBinding:
position: 4
stdout: aligned.sam
outputs:
sam:
type: stdout# rnaseq.cwl
cwlVersion: v1.2
class: Workflow
inputs:
fastq_1: File
fastq_2: File
salmon_index: Directory
outputs:
quant_results:
type: Directory
outputSource: salmon/quant_dir
steps:
fastp:
run: fastp.cwl
in:
reads_1: fastq_1
reads_2: fastq_2
out: [trimmed_1, trimmed_2, json_report]
salmon:
run: salmon_quant.cwl
in:
index: salmon_index
reads_1: fastp/trimmed_1
reads_2: fastp/trimmed_2
out: [quant_dir]cwlVersion: v1.2
class: Workflow
requirements:
ScatterFeatureRequirement: {}
inputs:
fastq_files:
type: File[]
reference: File
outputs:
bam_files:
type: File[]
outputSource: align/bam
steps:
align:
run: bwa_mem.cwl
scatter: fastq
in:
fastq: fastq_files
reference: reference
out: [bam]requirements:
ScatterFeatureRequirement: {}
MultipleInputFeatureRequirement: {}
steps:
align:
run: bwa_mem.cwl
scatter: [reads_1, reads_2]
scatterMethod: dotproduct
in:
reads_1: fastq_1_array
reads_2: fastq_2_array
reference: reference
out: [bam]# job.yaml
fastq_1:
class: File
path: data/sample1_R1.fq.gz
fastq_2:
class: File
path: data/sample1_R2.fq.gz
salmon_index:
class: Directory
path: ref/salmon_index
threads: 8inputs:
bam:
type: File
secondaryFiles:
- .bai
reference:
type: File
secondaryFiles:
- pattern: .fai
required: true
- pattern: .dict
required: falserequirements:
DockerRequirement:
dockerPull: quay.io/biocontainers/salmon:1.10.0--h7e5ed60_0
hints:
SoftwareRequirement:
packages:
salmon:
version: ["1.10.0"]# Run with Docker
cwltool --docker workflow.cwl job.yaml
# Run with Singularity
cwltool --singularity workflow.cwl job.yamlrequirements:
ResourceRequirement:
coresMin: 4
coresMax: 16
ramMin: 8000
ramMax: 32000
outdirMin: 10000
tmpdirMin: 10000cwlVersion: v1.2
class: Workflow
requirements:
InlineJavascriptRequirement: {}
inputs:
run_qc: boolean
fastq: File
steps:
fastqc:
run: fastqc.cwl
when: $(inputs.run_qc)
in:
run_qc: run_qc
fastq: fastq
out: [html]# main.cwl
steps:
qc_workflow:
run: subworkflows/qc.cwl
in:
reads_1: fastq_1
reads_2: fastq_2
out: [qc_report, trimmed_1, trimmed_2]
alignment_workflow:
run: subworkflows/align.cwl
in:
reads_1: qc_workflow/trimmed_1
reads_2: qc_workflow/trimmed_2
out: [bam]inputs:
bam_files:
type: File[]
output_dir:
type: string
default: "results"
outputs:
results:
type: Directory
outputBinding:
glob: $(inputs.output_dir)requirements:
InlineJavascriptRequirement: {}
inputs:
sample_name: string
outputs:
output_bam:
type: File
outputBinding:
glob: $(inputs.sample_name + ".sorted.bam")
arguments:
- prefix: -o
valueFrom: $(inputs.sample_name).sorted.bamrequirements:
InitialWorkDirRequirement:
listing:
- entry: $(inputs.reference)
writable: false
- entryname: config.txt
entry: |
threads=$(inputs.threads)
memory=$(inputs.memory)# salmon_quant.cwl
cwlVersion: v1.2
class: CommandLineTool
baseCommand: [salmon, quant]
requirements:
DockerRequirement:
dockerPull: quay.io/biocontainers/salmon:1.10.0--h7e5ed60_0
ResourceRequirement:
coresMin: 8
ramMin: 16000
inputs:
index:
type: Directory
inputBinding:
prefix: -i
reads_1:
type: File
inputBinding:
prefix: "-1"
reads_2:
type: File
inputBinding:
prefix: "-2"
lib_type:
type: string
default: A
inputBinding:
prefix: -l
threads:
type: int
default: 8
inputBinding:
prefix: --threads
output_dir:
type: string
default: quant_output
inputBinding:
prefix: -o
outputs:
quant_dir:
type: Directory
outputBinding:
glob: $(inputs.output_dir)# Validate CWL file
cwltool --validate workflow.cwl
# Run workflow
cwltool workflow.cwl job.yaml
# Run with Docker
cwltool --docker workflow.cwl job.yaml
# Run with Singularity
cwltool --singularity workflow.cwl job.yaml
# Run with caching
cwltool --cachedir ./cache workflow.cwl job.yaml
# Run on Toil
toil-cwl-runner workflow.cwl job.yaml| Engine | Use Case |
|---|---|
| cwltool | Reference implementation, local execution |
| Toil | HPC clusters, cloud (AWS, Google, Azure) |
| Arvados | Enterprise workflow management |
| CWL-Airflow | Airflow integration |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.