From isabl
Systematically debug a failed Isabl analysis. Use when an analysis has FAILED status or unexpected behavior.
How this skill is triggered — by the user, by Claude, or both
Slash command
/isabl:isabl-debug-analysisinheritThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are helping debug a failed or problematic Isabl analysis.
You are helping debug a failed or problematic Isabl analysis.
Work through these steps systematically:
import isabl_cli as ii
# Get the analysis
analysis = ii.Analysis(ANALYSIS_PK)
print(f"Status: {analysis.status}")
print(f"Application: {analysis.application.name} v{analysis.application.version}")
print(f"Storage URL: {analysis.storage_url}")
print(f"Targets: {[t.system_id for t in analysis.targets]}")
print(f"References: {[r.system_id for r in analysis.references]}")
The generated command is in head_job.sh:
# View the command that was executed
cat {analysis.storage_url}/head_job.sh
Look for:
# Standard output
cat {analysis.storage_url}/head_job.log
# Standard error (usually more informative)
cat {analysis.storage_url}/head_job.err
Common error patterns:
| Error | Likely Cause |
|---|---|
| "File not found" | Input file path incorrect or missing |
| "Permission denied" | Storage directory permissions |
| "Command not found" | Tool path in settings is wrong |
| "Memory allocation" | Job needs more memory (batch system) |
| "Timeout" | Job exceeded time limit |
# Verify target experiments have data
for target in analysis.targets:
print(f"{target.system_id}:")
print(f" Raw data: {target.raw_data}")
print(f" BAM files: {target.bam_files}")
# Check files exist
ls -la {path_to_input_file}
If the app depends on other analyses:
# Find dependency analyses
from isabl_cli import utils
# Check if dependency result exists
result, dep_analysis = utils.get_result(
experiment=analysis.targets[0],
application_key=DEPENDENCY_APP_PK,
result_key="expected_result"
)
print(f"Dependency analysis: {dep_analysis}")
print(f"Dependency result: {result}")
# Get application settings
app = ii.get_instance("applications", analysis.application.pk)
print(f"Settings: {app.settings}")
# Check specific setting
from my_apps import MyApplication
instance = MyApplication()
print(f"Tool path: {instance.settings.tool_path}")
# Wipe failed analysis and restart
isabl myapp-1-0 --analyses pk={ANALYSIS_PK} --force --commit
# Resume from checkpoint (if supported)
isabl myapp-1-0 --analyses pk={ANALYSIS_PK} --restart --commit
# Execute locally instead of batch system
isabl myapp-1-0 --targets EXPERIMENT_ID --local --commit
# If analysis completed but status is wrong
ii.patch_instance("analyses", analysis.pk, status="SUCCEEDED")
# For SLURM
sacct -j JOB_ID --format=JobID,State,ExitCode,MaxRSS,Elapsed
# For LSF
bjobs -l JOB_ID
bhist -l JOB_ID
If the analysis SUCCEEDED but something else failed:
# Check if signals are configured
from isabl_cli.settings import system_settings
print(f"ON_STATUS_CHANGE: {system_settings.ON_STATUS_CHANGE}")
# Manually trigger signals
from isabl_cli import signals
signals.run_on_status_change(analysis)
When reporting, include:
npx claudepluginhub juanesarango/isabl-mcp --plugin isablConducts symptom-driven root-cause analysis of concrete failures using a structured debug workflow with hypothesis validation and optional auto-fix.
Diagnoses and fixes wrong results, notebook errors, or data changes mid-analysis with structured course-correction.
Detects and diagnoses application failures by analyzing error logs, stack traces, and system state. Useful when debugging crashes or production incidents.