Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Finds orphaned, idle, and underutilized cloud resources across AWS, GCP, or Azure accounts. Use when someone needs to audit cloud spending, find unused EBS volumes, stale snapshots, unattached IPs, idle load balancers, or oversized RDS instances. Trigger words: cloud waste, orphaned resources, unused volumes, cloud audit, infrastructure cleanup, cloud bill analysis.
.claude/skills/terminalskills-cloud-resource-analyzer/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 69% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 53% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 15% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 51% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 58% | 0% |
This skill scans cloud provider accounts for resources that are costing money but providing no value — orphaned storage volumes, stale snapshots, unattached elastic IPs, idle databases, and oversized instances. It produces a prioritized cleanup report with estimated savings and safe deletion scripts.
Check which CLI tools are available and configured:
bashaws sts get-caller-identity 2>/dev/null && echo "AWS: configured" gcloud config get-value project 2>/dev/null && echo "GCP: configured" az account show 2>/dev/null && echo "Azure: configured"
bash# Unattached EBS volumes aws ec2 describe-volumes --filters Name=status,Values=available \ --query 'Volumes[].{ID:VolumeId,Size:Size,Type:VolumeType,Created:CreateTime,Tags:Tags}' \ --output json # Snapshots older than 90 days with no active AMI aws ec2 describe-snapshots --owner-ids self \ --query 'Snapshots[?StartTime<=`2025-11-01`].{ID:SnapshotId,Size:VolumeSize,Start:StartTime,Desc:Description}' \ --output json # Unassociated Elastic IPs aws ec2 describe-addresses --query 'Addresses[?AssociationId==null].{IP:PublicIp,AllocID:AllocationId}' \ --output json
bash# Load balancers with no healthy targets aws elbv2 describe-target-health --target-group-arn <arn> \ --query 'TargetHealthDescriptions[?TargetHealth.State!=`healthy`]' # RDS instances with < 5% average CPU over 14 days aws cloudwatch get-metric-statistics --namespace AWS/RDS \ --metric-name CPUUtilization --period 86400 --statistics Average \ --start-time $(date -d '14 days ago' -Iseconds) --end-time $(date -Iseconds) \ --dimensions Name=DBInstanceIdentifier,Value=<instance-id>
Use these reference monthly costs for estimates:
Organize findings by category with estimated monthly cost. Sort by savings descending. Include:
Generate scripts with:
--dry-run flag that only lists what would be deletedscheduled-for-deletion: <date+7d>)User prompt:
Scan our AWS account for wasted cloud resourcesAgent output:
Cloud Resource Audit — AWS account 123456789012
Region: us-east-1
────────────────────────────────────────────────
STORAGE WASTE
Unattached EBS volumes: 4 volumes, 450 GiB total $36.00/mo
Stale snapshots (>90 days, no AMI): 23 snapshots, 1.2 TiB $60.00/mo
S3 buckets with no access in 90 days: 2 buckets, 340 GiB $7.82/mo
NETWORK WASTE
Unassociated Elastic IPs: 2 $7.20/mo
ALBs with 0 healthy targets: 1 $16.20/mo
NAT Gateway with <1GB/mo traffic: 1 $32.40/mo
COMPUTE WASTE
RDS db.r5.xlarge at 3% avg CPU: 1 instance $274.00/mo
→ Recommend downsize to db.r5.large saves $137.00/mo
Total monthly waste: $296.62/mo ($3,559/year)User prompt:
Find and clean up orphaned EBS volumes in us-west-2Agent output:
Found 3 unattached EBS volumes in us-west-2:
vol-0abc123 200Gi gp3 Created: 2025-05-12 Tag: postgres-backup $16.00/mo
vol-0def456 100Gi gp3 Created: 2025-08-30 Tag: jenkins-workspace $8.00/mo
vol-0ghi789 50Gi gp2 Created: 2025-10-15 Tag: none $5.00/mo
Cleanup script generated: cleanup-ebs-us-west-2.sh
./cleanup-ebs-us-west-2.sh --dry-run # Preview only
./cleanup-ebs-us-west-2.sh --execute # Tag for deletion in 7 days
./cleanup-ebs-us-west-2.sh --force # Delete immediately (creates snapshots first)| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-03 | fail→fail | 15,322 | 2,582 | -83% | 1 | 1 | 0% | 3,580 | 1,710 | -52% | 0 | 0 | — |
case-10 | pass→pass | 10,161 | 7,481 | -26% | 1 | 1 | 0% | 1,636 | 2,720 | +66% | 0 | 0 | — |
case-01 | fail→fail | 11,950 | 16,420 | +37% | 1 | 1 | 0% | 2,234 | 4,754 | +113% | 0 | 0 | — |
case-02 | fail→pass | 15,005 | 17,260 | +15% | 1 | 1 | 0% | 2,933 | 4,944 | +69% | 0 | 0 | — |
case-04 | fail→pass | 10,507 | 7,606 | -28% | 1 | 1 | 0% | 1,844 | 2,828 | +53% | 0 | 0 | — |
case-05 | fail→pass | 11,286 | 6,127 | -46% | 1 | 1 | 0% | 2,228 | 2,566 | +15% | 0 | 0 | — |
case-06 | pass→pass | 11,050 | 8,774 | -21% | 1 | 1 | 0% | 2,273 | 3,181 | +40% | 0 | 0 | — |
case-07 | pass→pass | 9,337 | 5,169 | -45% | 1 | 1 | 0% | 1,756 | 2,502 | +42% | 0 | 0 | — |
case-08 | fail→pass | 13,381 | 11,322 | -15% | 1 | 1 | 0% | 2,161 | 3,254 | +51% | 0 | 0 | — |
case-09 | fail→pass | 11,403 | 9,598 | -16% | 1 | 1 | 0% | 2,120 | 3,340 | +58% | 0 | 0 | — |
case-11 | pass→pass | 8,325 | 4,780 | -43% | 1 | 1 | 0% | 1,582 | 2,290 | +45% | 0 | 0 | — |
case-12 | fail→pass | 10,979 | 8,313 | -24% | 1 | 1 | 0% | 2,326 | 3,099 | +33% | 0 | 0 | — |
case-13 | pass→pass | 5,060 | 2,560 | -49% | 1 | 1 | 0% | 890 | 1,854 | +108% | 0 | 0 | — |
case-14 | fail→pass | 12,348 | 8,966 | -27% | 1 | 1 | 0% | 2,009 | 2,876 | +43% | 0 | 0 | — |
case-15 | fail→pass | 4,192 | 4,131 | -1% | 1 | 1 | 0% | 635 | 2,200 | +246% | 0 | 0 | — |
case-16 | pass→pass | 15,887 | 13,150 | -17% | 1 | 1 | 0% | 3,026 | 3,839 | +27% | 0 | 0 | — |
case-17 | pass→pass | 20,708 | 14,436 | -30% | 1 | 1 | 0% | 4,226 | 4,630 | +10% | 0 | 0 | — |
case-18 | pass→pass | 15,865 | 16,172 | +2% | 1 | 1 | 0% | 2,745 | 4,169 | +52% | 0 | 0 | — |
case-19 | pass→pass | 15,013 | 16,169 | +8% | 1 | 1 | 0% | 2,560 | 4,559 | +78% | 0 | 0 | — |
case-20 | pass→pass | 6,844 | 2,836 | -59% | 1 | 1 | 0% | 1,091 | 1,785 | +64% | 0 | 0 | — |
case-21 | fail→pass | 21,648 | 6,800 | -69% | 1 | 1 | 0% | 1,044 | 2,680 | +157% | 0 | 0 | — |
case-22 | fail→pass | 12,651 | 22,996 | +82% | 1 | 1 | 0% | 1,910 | 3,458 | +81% | 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. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +45 percentage points is the difference between those two pass rates over the 21 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.