Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Latch platform for bioinformatics workflows. Build pipelines with Latch SDK, @workflow/@task decorators, deploy serverless workflows, LatchFile/LatchDir, Nextflow/Snakemake integration.
.claude/skills/lingxling-latchbio-integration/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | 14% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 195% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 111% | 0% |
| case-20 | ✗→✓ | ▲ Improved | 130% | 0% |
| case-22 | ✓→✗ | ▼ Worse | 83% | 0% |
Latch is a Python framework for building and deploying bioinformatics workflows as serverless pipelines. Built on Flyte, create workflows with @workflow/@task decorators, manage cloud data with LatchFile/LatchDir, configure resources, and integrate Nextflow/Snakemake pipelines.
The Latch platform provides four main areas of functionality:
bash# Install Latch SDK uv pip install latch # Login to Latch latch login # Initialize a new workflow latch init my-workflow # Register workflow to platform latch register my-workflow
Prerequisites:
pythonfrom latch import workflow, small_task from latch.types import LatchFile @small_task def process_file(input_file: LatchFile) -> LatchFile: """Process a single file""" # Processing logic return output_file @workflow def my_workflow(input_file: LatchFile) -> LatchFile: """ My bioinformatics workflow Args: input_file: Input data file """ return process_file(input_file=input_file)
This skill should be used when encountering any of the following scenarios:
Workflow Development:
@workflow, @task decoratorsData Management:
latch:/// pathsResource Configuration:
Verified Workflows:
latch.verified moduleThis skill includes comprehensive reference documentation organized by capability:
Read this for:
Key topics:
latch init and latch register commands@workflow and @task decoratorsRead this for:
Key topics:
latch:/// path formatRead this for:
Key topics:
@small_task, @large_task, @small_gpu_task, @large_gpu_task@custom_task with precise specificationsRead this for:
Key topics:
latch.verified module importspythonfrom latch import workflow, small_task, large_task from latch.types import LatchFile, LatchDir @small_task def quality_control(fastq: LatchFile) -> LatchFile: """Run FastQC""" return qc_output @large_task def alignment(fastq: LatchFile, genome: str) -> LatchFile: """STAR alignment""" return bam_output @small_task def quantification(bam: LatchFile) -> LatchFile: """featureCounts""" return counts @workflow def rnaseq_pipeline( input_fastq: LatchFile, genome: str, output_dir: LatchDir ) -> LatchFile: """RNA-seq analysis pipeline""" qc = quality_control(fastq=input_fastq) aligned = alignment(fastq=qc, genome=genome) return quantification(bam=aligned)
pythonfrom latch import workflow, small_task, large_gpu_task from latch.types import LatchFile @small_task def preprocess(input_file: LatchFile) -> LatchFile: """Prepare data""" return processed @large_gpu_task def gpu_computation(data: LatchFile) -> LatchFile: """GPU-accelerated analysis""" return results @workflow def gpu_pipeline(input_file: LatchFile) -> LatchFile: """Pipeline with GPU tasks""" preprocessed = preprocess(input_file=input_file) return gpu_computation(data=preprocessed)
pythonfrom latch import workflow, small_task from latch.registry.table import Table from latch.registry.record import Record from latch.types import LatchFile @small_task def process_and_track(sample_id: str, table_id: str) -> str: """Process sample and update Registry""" # Get sample from registry table = Table.get(table_id=table_id) records = Record.list(table_id=table_id, filter={"sample_id": sample_id}) sample = records[0] # Process input_file = sample.values["fastq_file"] output = process(input_file) # Update registry sample.update(values={"status": "completed", "result": output}) return "Success" @workflow def registry_workflow(sample_id: str, table_id: str): """Workflow integrated with Registry""" return process_and_track(sample_id=sample_id, table_id=table_id)
Registration Failures:
latch login--verbose flag for detailed logsResource Problems:
Data Access:
latch:/// path formatType Errors:
For issues or questions:
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 16,868 | 13,342 | -21% | 1 | 1 | 0% | 2,542 | 4,915 | +93% | 0 | 0 | — |
case-02 | pass→pass | 7,033 | 7,159 | +2% | 1 | 1 | 0% | 1,189 | 3,524 | +196% | 0 | 0 | — |
case-03 | fail→pass | 13,994 | 5,283 | -62% | 1 | 1 | 0% | 2,774 | 3,163 | +14% | 0 | 0 | — |
case-04 | pass→pass | 8,917 | 4,764 | -47% | 1 | 1 | 0% | 1,061 | 3,178 | +200% | 0 | 0 | — |
case-05 | pass→pass | 8,397 | 4,312 | -49% | 1 | 1 | 0% | 1,048 | 3,194 | +205% | 0 | 0 | — |
case-06 | pass→pass | 4,727 | 3,317 | -30% | 1 | 1 | 0% | 724 | 2,830 | +291% | 0 | 0 | — |
case-07 | pass→pass | 9,116 | 10,625 | +17% | 1 | 1 | 0% | 1,672 | 4,355 | +160% | 0 | 0 | — |
case-08 | pass→pass | 4,670 | 3,791 | -19% | 1 | 1 | 0% | 685 | 2,782 | +306% | 0 | 0 | — |
case-09 | pass→pass | 7,608 | 5,738 | -25% | 1 | 1 | 0% | 1,037 | 3,451 | +233% | 0 | 0 | — |
case-10 | pass→pass | 6,838 | 8,067 | +18% | 1 | 1 | 0% | 1,123 | 3,703 | +230% | 0 | 0 | — |
case-11 | pass→pass | 11,785 | 8,369 | -29% | 1 | 1 | 0% | 2,202 | 3,413 | +55% | 0 | 0 | — |
case-12 | pass→pass | 3,487 | 3,231 | -7% | 1 | 1 | 0% | 567 | 2,924 | +416% | 0 | 0 | — |
case-13 | pass→pass | 5,415 | 2,002 | -63% | 1 | 1 | 0% | 950 | 2,665 | +181% | 0 | 0 | — |
case-14 | pass→pass | 3,365 | 5,099 | +52% | 1 | 1 | 0% | 434 | 2,697 | +521% | 0 | 0 | — |
case-15 | fail→pass | 10,455 | 20,282 | +94% | 1 | 1 | 0% | 1,559 | 4,593 | +195% | 0 | 0 | — |
case-16 | pass→pass | 9,125 | 9,063 | -1% | 1 | 1 | 0% | 1,569 | 3,950 | +152% | 0 | 0 | — |
case-17 | fail→pass | 9,771 | 7,384 | -24% | 1 | 1 | 0% | 1,633 | 3,445 | +111% | 0 | 0 | — |
case-18 | pass→pass | 8,607 | 7,702 | -11% | 1 | 1 | 0% | 1,353 | 3,752 | +177% | 0 | 0 | — |
case-19 | pass→pass | 16,095 | 10,547 | -34% | 1 | 1 | 0% | 2,245 | 4,217 | +88% | 0 | 0 | — |
case-20 | fail→pass | 11,192 | 9,544 | -15% | 1 | 1 | 0% | 1,562 | 3,599 | +130% | 0 | 0 | — |
case-21 | pass→pass | 15,659 | 10,552 | -33% | 1 | 1 | 0% | 3,066 | 4,479 | +46% | 0 | 0 | — |
case-22 | pass→fail | 13,273 | 11,044 | -17% | 1 | 1 | 0% | 2,523 | 4,617 | +83% | 0 | 0 | — |
case-23 | pass→pass | 10,472 | 8,404 | -20% | 1 | 1 | 0% | 2,035 | 3,976 | +95% | 0 | 0 | — |
case-24 | pass→pass | 25,237 | 17,657 | -30% | 1 | 1 | 0% | 4,153 | 5,863 | +41% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 24 cases were attempted. The headline lift of +13 percentage points is the difference between those two pass rates over the 24 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.