isabl-query-data — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited isabl-query-data (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.
You are helping the user query data from the Isabl platform using the Python SDK.
Work through these steps systematically:
identifier if system_id is not available); avoid pk unless explicitly requestedindividual_level_analysis -> show individual system_id (e.g., IID_H210514)project_level_analysis -> show project pktargets/references experiment arrays unless explicitly requested?analysis=<pk>)Ask clarifying questions if needed:
import isabl_cli as ii
# Main entity types and their query functions
experiments = ii.get_experiments(...) # Sequencing data
analyses = ii.get_analyses(...) # Pipeline results
samples = ii.get_instances("samples", ...) # Tissue specimens
individuals = ii.get_instances("individuals", ...) # Patients/subjects
applications = ii.get_instances("applications", ...) # Pipelines
projects = ii.get_instances("projects", ...) # Project groupings# Filter by project
experiments = ii.get_experiments(projects=102)
# Filter by status
analyses = ii.get_analyses(status="SUCCEEDED")
# Filter by application
analyses = ii.get_analyses(application__name="MUTECT")
# Filter by date range
analyses = ii.get_analyses(created__gte="2024-01-01")
# Combine multiple filters
experiments = ii.get_experiments(
projects=102,
sample__category="TUMOR",
technique__method="WGS"
)| Operator | Example | Purpose |
|---|---|---|
| (none) | status="SUCCEEDED" | Exact match |
__contains | name__contains="tumor" | Substring |
__icontains | name__icontains="TUMOR" | Case-insensitive substring |
__startswith | name__startswith="PT" | Starts with |
__in | status__in=["SUCCEEDED","FAILED"] | One of values |
__gt, __gte | created__gt="2024-01-01" | Greater than |
__lt, __lte | total__lte=100 | Less than |
__isnull | results__isnull=False | Is/isn't null |
! prefix | status!="FAILED" | Negation |
Use double underscore to traverse related objects:
import isabl_cli as ii
# Experiments for a specific individual
experiments = ii.get_experiments(sample__individual__pk=500)
# Analyses by application name
analyses = ii.get_analyses(application__name="variant_caller")
# Experiments with specific technique
experiments = ii.get_experiments(technique__method="WGS")import isabl_cli as ii
experiments = ii.get_experiments(
projects=102,
sample__category="TUMOR"
)
for exp in experiments:
print(f"{exp.system_id}: {exp.sample.identifier}")When users ask for an experiment/sample/individual "ID", prefer the human-readable identifier (system_id or identifier) and omit numeric pk unless asked.
import isabl_cli as ii
experiments = ii.get_experiments(projects=102, fields=["system_id", "sample"])
for exp in experiments:
print(f"experiment_id={exp.system_id}")For MCP isabl_query, prefer:
isabl_query(
endpoint="experiments",
filters={"projects": 102},
output_fields=["system_id"]
)When listing analyses, use identifiers that match the analysis scope:
WGTS_REPORT), display the individual id (IID_H...).pk.targets/references experiment lists unless the user asks for them.Before rendering a table, include one concise summary line that states what is being shown.
Examples:
import isabl_cli as ii
analyses = ii.get_analyses(
application__name="variant_caller",
application__version="2.0.0",
status="SUCCEEDED"
)
for a in analyses:
print(f"Analysis {a.pk}: {a.results}")import isabl_cli as ii
failed = ii.get_analyses(
status="FAILED",
created__gt="2024-01-01"
)
for a in failed:
print(f"{a.pk}: {a.application.name}")import isabl_cli as ii
# By system_id
exp = ii.Experiment("SAMPLE_001")
# By primary key
analysis = ii.Analysis(12345)import isabl_cli as ii
count = ii.get_instances_count("experiments", projects=102)
print(f"Total experiments: {count}")import isabl_cli as ii
individual = ii.get_tree(individual_pk)
for sample in individual.sample_set:
print(f"Sample: {sample.identifier}")
for exp in sample.experiment_set:
print(f" Experiment: {exp.system_id}")import isabl_cli as ii
from isabl_cli import utils
# Get specific result from an experiment
vcf_path, analysis = utils.get_result(
experiment=experiment,
application_key=123,
result_key="vcf"
)
print(f"VCF: {vcf_path}")
# Get all results for an application
results = utils.get_results(
experiment=experiment,
application_name="variant_caller"
)import isabl_cli as ii
# Only fetch needed fields
experiments = ii.get_experiments(
projects=102,
fields=["pk", "system_id", "sample"]
)
# Stop after N results
experiments = ii.get_experiments(
projects=102,
count_limit=100
)
# Use cursor pagination for very large datasets
experiments = ii.get_instances(
"experiments",
projects=102,
paginator="cursor"
)import isabl_cli as ii
import pandas as pd
experiments = ii.get_experiments(projects=102)
df = pd.DataFrame([
{
"system_id": e.system_id,
"sample": e.sample.identifier,
"category": e.sample.category,
"technique": e.technique.method,
}
for e in experiments
])
df.head()Individual
├── identifier (unique)
├── species (HUMAN, MOUSE, etc.)
├── gender
└── sample_set → [Sample]
Sample
├── identifier
├── individual → Individual
├── category (TUMOR, NORMAL, etc.)
└── experiment_set → [Experiment]
Experiment
├── system_id (unique)
├── sample → Sample
├── technique → Technique
├── platform → Platform
├── raw_data (dict)
├── bam_files (dict)
└── analysis_set → [Analysis]
Analysis
├── pk
├── application → Application
├── targets → [Experiment]
├── references → [Experiment]
├── status (CREATED, STAGED, SUBMITTED, STARTED, SUCCEEDED, FAILED)
├── storage_url (path to results)
└── results (dict)
Application
├── name
├── version
├── assembly
├── species
└── settings (dict)~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.