From isabl
Generate a status report for an Isabl project. Use when summarizing project progress, identifying issues, or preparing updates.
How this skill is triggered — by the user, by Claude, or both
Slash command
/isabl:isabl-project-reportinheritThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are helping generate a status report for an Isabl project.
You are helping generate a status report for an Isabl project.
Work through these steps systematically:
import isabl_cli as ii
project = ii.get_instance("projects", PROJECT_PK)
print(f"Project: {project.title}")
print(f"Short title: {project.short_title}")
print(f"PI: {project.principal_investigator}")
print(f"Analyst: {project.analyst}")
print(f"Description: {project.description}")
from collections import Counter
experiments = ii.get_experiments(projects=PROJECT_PK)
# By technique
techniques = Counter(e.technique.method for e in experiments)
print("Experiments by technique:")
for tech, count in techniques.most_common():
print(f" {tech}: {count}")
# By sample category
categories = Counter(e.sample.category for e in experiments)
print("\nExperiments by category:")
for cat, count in categories.most_common():
print(f" {cat}: {count}")
print(f"\nTotal experiments: {len(experiments)}")
analyses = ii.get_analyses(projects=PROJECT_PK)
# By status
statuses = Counter(a.status for a in analyses)
print("Analyses by status:")
for status in ["SUCCEEDED", "FAILED", "STARTED", "STAGED", "CREATED"]:
count = statuses.get(status, 0)
print(f" {status}: {count}")
# By application
apps = Counter(a.application.name for a in analyses)
print("\nAnalyses by application (top 10):")
for app, count in apps.most_common(10):
print(f" {app}: {count}")
print(f"\nTotal analyses: {len(analyses)}")
failed = ii.get_analyses(
projects=PROJECT_PK,
status="FAILED"
)
if failed:
print(f"FAILED analyses ({len(failed)}):")
for a in failed[:10]: # Show first 10
target = a.targets[0].system_id if a.targets else "N/A"
print(f" [{a.pk}] {a.application.name}: {target}")
if len(failed) > 10:
print(f" ... and {len(failed) - 10} more")
else:
print("No failed analyses!")
# Get storage usage from project
print(f"Project storage: {project.storage_usage / 1e9:.2f} GB")
# Or calculate from analyses
total_storage = sum(a.storage_usage or 0 for a in analyses)
print(f"Total analysis storage: {total_storage / 1e9:.2f} GB")
Create a summary like this:
# Project Report: {project.title}
**Date**: {today}
**PI**: {project.principal_investigator}
**Analyst**: {project.analyst}
## Overview
| Metric | Count |
|--------|-------|
| Individuals | X |
| Samples | X |
| Experiments | X |
| Analyses | X |
## Analysis Status
| Status | Count | % |
|--------|-------|---|
| SUCCEEDED | X | X% |
| FAILED | X | X% |
| IN PROGRESS | X | X% |
## Top Applications
| Application | Succeeded | Failed |
|-------------|-----------|--------|
| MUTECT | X | X |
| BATTENBERG | X | X |
## Issues Requiring Attention
- X failed analyses need investigation
- [List specific failures if any]
## Storage
Total: X.XX GB
Based on the report, identify:
from datetime import datetime, timedelta
stale_cutoff = datetime.now() - timedelta(days=7)
stale = ii.get_analyses(
projects=PROJECT_PK,
status="STARTED",
modified__lt=stale_cutoff.isoformat()
)
if stale:
print(f"Stale analyses (started > 7 days ago): {len(stale)}")
# All experiments in project
all_exps = set(e.pk for e in ii.get_experiments(projects=PROJECT_PK))
# Experiments with MUTECT analysis
mutect_exps = set()
for a in ii.get_analyses(projects=PROJECT_PK, application__name="MUTECT"):
mutect_exps.update(t.pk for t in a.targets)
# Missing
missing = all_exps - mutect_exps
print(f"Experiments without MUTECT: {len(missing)}")
import pandas as pd
data = []
for a in analyses:
data.append({
"pk": a.pk,
"application": a.application.name,
"status": a.status,
"target": a.targets[0].system_id if a.targets else None,
"created": a.created,
})
df = pd.DataFrame(data)
df.to_csv("project_report.csv", index=False)
npx claudepluginhub juanesarango/isabl-mcp --plugin isablAnalyzes Claude projects across cost, efficiency, tool usage, and architecture dimensions using MCP token analyzer tools. Outputs Markdown reports with session rankings, cache rates, subagent overhead, and warnings.
Generates executive status reports from Astravue data covering task progress, budget consumption, and project health.
Generates pipeline analytics reports from issue tracker and git data — success rate, per-agent effectiveness, failure patterns, optional HTML dashboard.