Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Collect Juicebox debug evidence. Trigger: "juicebox debug", "juicebox support ticket".
.claude/skills/jeremylongshore-juicebox-debug-bundle/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-14 | ✗→✓ | ▲ Improved | 33% | 0% |
| case-01 | ✗→✓ | ▲ Improved | -15% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 0% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 14% | 0% |
| case-06 | ✗→✓ | ▲ Improved | -65% | 0% |
Collect Juicebox API connectivity status, dataset health, analysis quota usage, and rate limit state into a single diagnostic archive. This bundle helps troubleshoot failed dataset uploads, stalled AI analysis runs, quota exhaustion, and API authentication problems.
bash#!/bin/bash set -euo pipefail BUNDLE="debug-juicebox-$(date +%Y%m%d-%H%M%S)" mkdir -p "$BUNDLE" # Environment check echo "=== Juicebox Debug Bundle ===" | tee "$BUNDLE/summary.txt" echo "Generated: $(date -u +%Y-%m-%dT%H:%M:%SZ)" >> "$BUNDLE/summary.txt" echo "JUICEBOX_API_KEY: ${JUICEBOX_API_KEY:+[SET]}" >> "$BUNDLE/summary.txt" # API connectivity — health endpoint HTTP=$(curl -s -o /dev/null -w "%{http_code}" \ -H "Authorization: Bearer ${JUICEBOX_API_KEY}" \ https://api.juicebox.ai/v1/health 2>/dev/null || echo "000") echo "API Status: HTTP $HTTP" >> "$BUNDLE/summary.txt" # Account quota curl -s -H "Authorization: Bearer ${JUICEBOX_API_KEY}" \ "https://api.juicebox.ai/v1/account/quota" \ > "$BUNDLE/quota.json" 2>&1 || true # Datasets and recent analyses curl -s -H "Authorization: Bearer ${JUICEBOX_API_KEY}" \ "https://api.juicebox.ai/v1/datasets?limit=10" > "$BUNDLE/datasets.json" 2>&1 || true curl -s -H "Authorization: Bearer ${JUICEBOX_API_KEY}" \ "https://api.juicebox.ai/v1/analyses?limit=5" > "$BUNDLE/recent-analyses.json" 2>&1 || true # Rate limit headers curl -s -D "$BUNDLE/rate-headers.txt" -o /dev/null \ -H "Authorization: Bearer ${JUICEBOX_API_KEY}" https://api.juicebox.ai/v1/health 2>/dev/null || true tar -czf "$BUNDLE.tar.gz" "$BUNDLE" && rm -rf "$BUNDLE" echo "Bundle: $BUNDLE.tar.gz"
bashtar -xzf debug-juicebox-*.tar.gz cat debug-juicebox-*/summary.txt # Auth + API health jq '{used, limit, remaining}' debug-juicebox-*/quota.json # Quota usage jq '.[] | {id, name, row_count}' debug-juicebox-*/datasets.json # Dataset inventory jq '.[] | {id, status, created_at}' debug-juicebox-*/recent-analyses.json
| Symptom | Check in Bundle | Fix | |---------|----------------|-----| | API returns 401 | summary.txt shows HTTP 401 | Regenerate API key in Juicebox Settings > API Keys | | Dataset upload stuck | datasets.json shows processing status for >10 min | Check file format (CSV/JSON required); reduce file size below 100MB | | Analysis quota exhausted | quota.json shows remaining at 0 | Upgrade plan or wait for monthly quota reset | | Analysis run failed | recent-analyses.json shows error status | Check dataset has required columns; verify data types match analysis type | | Rate limited (429) | rate-headers.txt shows Retry-After | Implement exponential backoff; batch dataset queries |
typescriptasync function checkJuicebox(): Promise<void> { const key = process.env.JUICEBOX_API_KEY; if (!key) { console.error("[FAIL] JUICEBOX_API_KEY not set"); return; } const res = await fetch("https://api.juicebox.ai/v1/health", { headers: { Authorization: `Bearer ${key}` }, }); console.log(`[${res.ok ? "OK" : "FAIL"}] API: HTTP ${res.status}`); if (res.ok) { const quota = await fetch("https://api.juicebox.ai/v1/account/quota", { headers: { Authorization: `Bearer ${key}` }, }); if (quota.ok) { const data = await quota.json(); console.log(`[INFO] Quota remaining: ${data.remaining ?? "unknown"}`); } } } checkJuicebox();
See juicebox-common-errors.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-13 | fail→fail | 16,031 | 17,089 | +7% | 1 | 1 | 0% | 2,705 | 3,558 | +32% | 0 | 0 | — |
case-14 | fail→pass | 18,978 | 16,227 | -14% | 1 | 1 | 0% | 2,530 | 3,373 | +33% | 0 | 0 | — |
case-01 | fail→pass | 26,147 | 13,308 | -49% | 1 | 1 | 0% | 3,451 | 2,942 | -15% | 0 | 0 | — |
case-02 | fail→pass | 12,632 | 6,243 | -51% | 1 | 1 | 0% | 2,398 | 2,399 | +0% | 0 | 0 | — |
case-03 | fail→pass | 13,029 | 17,317 | +33% | 1 | 1 | 0% | 2,708 | 3,078 | +14% | 0 | 0 | — |
case-04 | pass→pass | 7,947 | 2,911 | -63% | 1 | 1 | 0% | 1,291 | 1,622 | +26% | 0 | 0 | — |
case-05 | pass→pass | 6,119 | 7,406 | +21% | 1 | 1 | 0% | 999 | 1,540 | +54% | 0 | 0 | — |
case-06 | fail→pass | 54,103 | 6,802 | -87% | 1 | 1 | 0% | 4,352 | 1,516 | -65% | 0 | 0 | — |
case-07 | fail→pass | 16,811 | 11,475 | -32% | 1 | 1 | 0% | 1,673 | 1,738 | +4% | 0 | 0 | — |
case-08 | pass→pass | 41,396 | 8,464 | -80% | 1 | 1 | 0% | 2,306 | 1,728 | -25% | 0 | 0 | — |
case-09 | fail→pass | 14,516 | 8,831 | -39% | 1 | 1 | 0% | 2,209 | 1,840 | -17% | 0 | 0 | — |
case-10 | pass→pass | 15,986 | 2,770 | -83% | 1 | 1 | 0% | 1,589 | 1,586 | -0% | 0 | 0 | — |
case-11 | fail→pass | 15,251 | 16,028 | +5% | 1 | 1 | 0% | 2,489 | 1,545 | -38% | 0 | 0 | — |
case-12 | pass→pass | 12,400 | 14,922 | +20% | 1 | 1 | 0% | 2,076 | 2,684 | +29% | 0 | 0 | — |
case-15 | fail→pass | 27,725 | 3,498 | -87% | 1 | 1 | 0% | 1,351 | 1,752 | +30% | 0 | 0 | — |
case-16 | pass→pass | 19,869 | 7,650 | -61% | 1 | 1 | 0% | 2,096 | 2,589 | +24% | 0 | 0 | — |
case-17 | fail→pass | 23,120 | 7,383 | -68% | 1 | 1 | 0% | 2,974 | 1,552 | -48% | 0 | 0 | — |
case-18 | fail→pass | 13,309 | 2,518 | -81% | 1 | 1 | 0% | 1,417 | 1,593 | +12% | 0 | 0 | — |
case-19 | pass→pass | 16,321 | 2,188 | -87% | 1 | 1 | 0% | 1,943 | 1,493 | -23% | 0 | 0 | — |
case-20 | pass→pass | 20,276 | 15,872 | -22% | 1 | 1 | 0% | 2,804 | 3,169 | +13% | 0 | 0 | — |
case-21 | pass→pass | 9,326 | 9,456 | +1% | 1 | 1 | 0% | 1,631 | 2,767 | +70% | 0 | 0 | — |
case-22 | pass→pass | 17,700 | 13,948 | -21% | 1 | 1 | 0% | 2,280 | 3,122 | +37% | 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 20 counted toward the lift figure. The other 2 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 +50 percentage points is the difference between those two pass rates over the 20 comparable cases.
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.