alterlab-dnanexus — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited alterlab-dnanexus (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.
DNAnexus is a cloud platform for biomedical data analysis and genomics. Build and deploy apps/applets, manage data objects, run workflows, and use the dxpy Python SDK for genomics pipeline development and execution.
This skill should be used when:
The skill is organized into five main areas, each with detailed reference documentation:
Purpose: Create executable programs (apps/applets) that run on the DNAnexus platform.
Key Operations:
dx-app-wizarddx build or dx build --appCommon Use Cases:
Reference: See references/app-development.md for:
Purpose: Manage files, records, and other data objects on the platform.
Key Operations:
dxpy.upload_local_file() and dxpy.download_dxfile()Common Use Cases:
Reference: See references/data-operations.md for:
Purpose: Run analyses, monitor execution, and orchestrate workflows.
Key Operations:
applet.run() or app.run()Common Use Cases:
Reference: See references/job-execution.md for:
Purpose: Programmatic access to DNAnexus platform through Python.
Key Operations:
Common Use Cases:
Reference: See references/python-sdk.md for:
Purpose: Configure app metadata and manage dependencies.
Key Operations:
Common Use Cases:
Reference: See references/configuration.md for:
import dxpy
# Upload input file
input_file = dxpy.upload_local_file("sample.fastq", project="project-xxxx")
# Run analysis
job = dxpy.DXApplet("applet-xxxx").run({
"reads": dxpy.dxlink(input_file.get_id())
})
# Wait for completion
job.wait_on_done()
# Download results
output_id = job.describe()["output"]["aligned_reads"]["$dnanexus_link"]
dxpy.download_dxfile(output_id, "aligned.bam")import dxpy
# Find BAM files from a specific experiment.
# name defaults to exact match; pass name_mode="glob" to use wildcards.
files = dxpy.find_data_objects(
classname="file",
name="*.bam",
name_mode="glob",
properties={"experiment": "exp001"},
project="project-xxxx"
)
# Download each file
for file_result in files:
file_obj = dxpy.DXFile(file_result["id"])
filename = file_obj.describe()["name"]
dxpy.download_dxfile(file_result["id"], filename)# src/my-app.py
import dxpy
import subprocess
@dxpy.entry_point('main')
def main(input_file, quality_threshold=30):
# Download input
dxpy.download_dxfile(input_file["$dnanexus_link"], "input.fastq")
# Process
subprocess.check_call([
"quality_filter",
"--input", "input.fastq",
"--output", "filtered.fastq",
"--threshold", str(quality_threshold)
])
# Upload output
output_file = dxpy.upload_local_file("filtered.fastq")
return {
"filtered_reads": dxpy.dxlink(output_file)
}
dxpy.run()When working with DNAnexus, follow this decision tree:
Often you'll need multiple capabilities together (e.g., app development + configuration, or data operations + job execution).
uv pip install dxpydx loginThis authenticates your session and sets up access to projects and data.
dx --version
dx whoamiBatch processing (find files, launch parallel jobs) is shown in the Quick Start above; see references/job-execution.md for scatter-gather and subjobs.
Chain multiple analyses together (get_output_ref passes one job's output as the next job's input):
# Step 1: Quality control
qc_job = qc_applet.run({"reads": input_file})
# Step 2: Alignment (uses QC output)
align_job = align_applet.run({
"reads": qc_job.get_output_ref("filtered_reads")
})
# Step 3: Variant calling (uses alignment output)
variant_job = variant_applet.run({
"bam": align_job.get_output_ref("aligned_bam")
})Organize analysis results systematically:
# Create organized folder structure
dxpy.api.project_new_folder(
"project-xxxx",
{"folder": "/experiments/exp001/results", "parents": True}
)
# Upload with metadata
result_file = dxpy.upload_local_file(
"results.txt",
project="project-xxxx",
folder="/experiments/exp001/results",
properties={
"experiment": "exp001",
"sample": "sample1",
"analysis_date": "2025-10-20"
},
tags=["validated", "published"]
)dx login or DX_SECURITY_CONTEXT.find_* name filters match exactly by default — pass name_mode="glob" for wildcards.get_output_ref() directly (it is already a dxlink).timeoutPolicy to cap runaway cost.Each reference file ends with topic-specific best practices for deeper guidance.
This skill includes detailed reference documentation:
Load these references when you need detailed information about specific operations or when working on complex tasks.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.