Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Create diagnostic bundles for Granola support requests. Use when preparing support tickets, collecting system/audio/network info, or diagnosing complex issues that require Granola support team assistance. Trigger: "granola debug", "granola diagnostics", "granola support bundle", "granola logs", "granola system info".
.claude/skills/jeremylongshore-granola-debug-bundle/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 88% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 208% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 36% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 64% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 63% | 0% |
!sw_vers 2>/dev/null || uname -a !defaults read /Applications/Granola.app/Contents/Info.plist CFBundleShortVersionString 2>/dev/null || echo 'Granola version: check Menu > About'
Collect diagnostic information for Granola support. Produces a zip bundle with system info, audio configuration, network connectivity, and app state — without exposing meeting content, transcripts, or API keys.
bashset -euo pipefail DEBUG_DIR="$HOME/Desktop/granola-debug-$(date +%Y%m%d-%H%M%S)" mkdir -p "$DEBUG_DIR" echo "Debug directory: $DEBUG_DIR"
macOS:
bashset -euo pipefail cd "$DEBUG_DIR" # OS and hardware sw_vers > system-info.txt uname -a >> system-info.txt sysctl -n hw.memsize | awk '{printf "RAM: %.0f GB\n", $1/1073741824}' >> system-info.txt # Granola version defaults read /Applications/Granola.app/Contents/Info.plist CFBundleShortVersionString >> system-info.txt 2>/dev/null || echo "Version: not found" >> system-info.txt # Granola process status pgrep -l Granola >> system-info.txt 2>/dev/null || echo "Granola: NOT RUNNING" >> system-info.txt # Audio configuration (critical for transcription issues) system_profiler SPAudioDataType > audio-config.txt 2>/dev/null
Windows (PowerShell):
powershell$dir = "$env:USERPROFILE\Desktop\granola-debug-$(Get-Date -Format 'yyyyMMdd-HHmmss')" New-Item -ItemType Directory -Path $dir # System info Get-CimInstance Win32_OperatingSystem | Select Caption, Version > "$dir\system-info.txt" Get-Process Granola -ErrorAction SilentlyContinue >> "$dir\system-info.txt" # Audio devices Get-CimInstance Win32_SoundDevice | Select Name, Status > "$dir\audio-config.txt"
bashset -euo pipefail cd "$DEBUG_DIR" echo "=== Permission Check ===" > permissions.txt # Check if Granola has microphone access sqlite3 ~/Library/Application\ Support/com.apple.TCC/TCC.db \ "SELECT service, allowed FROM access WHERE client='ai.granola.app';" >> permissions.txt 2>/dev/null \ || echo "Cannot read TCC database (expected on macOS 14+). Check manually:" >> permissions.txt echo "" >> permissions.txt echo "Manual verification required:" >> permissions.txt echo " System Settings > Privacy & Security > Microphone > Granola" >> permissions.txt echo " System Settings > Privacy & Security > Screen & System Audio Recording > Granola" >> permissions.txt
bashset -euo pipefail cd "$DEBUG_DIR" # Test Granola API connectivity echo "=== Network Tests ===" > network-test.txt echo "Timestamp: $(date -u +%Y-%m-%dT%H:%M:%SZ)" >> network-test.txt # API endpoint HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout 5 https://api.granola.ai/ 2>/dev/null || echo "FAIL") echo "api.granola.ai: HTTP $HTTP_CODE" >> network-test.txt # DNS resolution nslookup api.granola.ai >> network-test.txt 2>&1 # WorkOS auth endpoint (Granola uses WorkOS for authentication) HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout 5 https://api.workos.com/ 2>/dev/null || echo "FAIL") echo "api.workos.com (auth): HTTP $HTTP_CODE" >> network-test.txt
bashset -euo pipefail cd "$DEBUG_DIR" CACHE_FILE="$HOME/Library/Application Support/Granola/cache-v3.json" echo "=== Cache Metadata ===" > cache-info.txt if [ -f "$CACHE_FILE" ]; then ls -lh "$CACHE_FILE" >> cache-info.txt # Count documents without exposing content python3 -c " import json from pathlib import Path try: raw = json.loads(Path('$CACHE_FILE').read_text()) state = json.loads(raw) if isinstance(raw, str) else raw data = state.get('state', state) print(f'Documents: {len(data.get(\"documents\", {}))}') print(f'Transcripts: {len(data.get(\"transcripts\", {}))}') print(f'Meetings metadata: {len(data.get(\"meetingsMetadata\", {}))}') except Exception as e: print(f'Parse error: {e}') " >> cache-info.txt 2>/dev/null else echo "Cache file not found" >> cache-info.txt fi
bashset -euo pipefail cd "$(dirname "$DEBUG_DIR")" zip -r "$(basename "$DEBUG_DIR").zip" "$(basename "$DEBUG_DIR")/" echo "Bundle ready: $(basename "$DEBUG_DIR").zip" echo "Submit to: help@granola.ai or via in-app support"
Run through this before contacting support:
| Error | Cause | Fix | |-------|-------|-----| | Permission denied on TCC database | macOS 14+ security | Use manual permission verification instead | | Network test fails | Firewall or proxy | Check outbound HTTPS to api.granola.ai and api.workos.com | | Zip creation fails | Disk full | Free space, or tar instead: tar czf bundle.tar.gz debug-dir/ | | Cache parse error | Different Granola version | Report the error — it helps support identify the version issue |
Proceed to granola-rate-limits to understand usage limits and plan differences.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 10,965 | 16,587 | +51% | 1 | 1 | 0% | 2,633 | 4,948 | +88% | 0 | 0 | — |
case-02 | fail→pass | 12,060 | 8,546 | -29% | 1 | 1 | 0% | 1,305 | 4,023 | +208% | 0 | 0 | — |
case-03 | fail→pass | 19,128 | 14,757 | -23% | 1 | 1 | 0% | 2,986 | 4,069 | +36% | 0 | 0 | — |
case-04 | pass→pass | 18,376 | 15,165 | -17% | 1 | 1 | 0% | 2,903 | 4,531 | +56% | 0 | 0 | — |
case-05 | pass→pass | 10,733 | 8,409 | -22% | 1 | 1 | 0% | 1,954 | 2,389 | +22% | 0 | 0 | — |
case-06 | fail→pass | 15,635 | 16,029 | +3% | 1 | 1 | 0% | 2,971 | 4,864 | +64% | 0 | 0 | — |
case-07 | fail→pass | 17,196 | 7,279 | -58% | 1 | 1 | 0% | 1,881 | 3,066 | +63% | 0 | 0 | — |
case-08 | fail→pass | 9,785 | 7,120 | -27% | 1 | 1 | 0% | 1,561 | 2,159 | +38% | 0 | 0 | — |
case-09 | pass→pass | 20,432 | 14,068 | -31% | 1 | 1 | 0% | 2,466 | 3,359 | +36% | 0 | 0 | — |
case-10 | pass→pass | 10,227 | 9,199 | -10% | 1 | 1 | 0% | 1,673 | 3,353 | +100% | 0 | 0 | — |
case-11 | fail→pass | 10,886 | 1,923 | -82% | 1 | 1 | 0% | 876 | 2,117 | +142% | 0 | 0 | — |
case-12 | pass→pass | 12,753 | 7,915 | -38% | 1 | 1 | 0% | 1,326 | 2,339 | +76% | 0 | 0 | — |
case-13 | pass→pass | 13,846 | 13,165 | -5% | 1 | 1 | 0% | 1,675 | 3,408 | +103% | 0 | 0 | — |
case-14 | fail→pass | 12,457 | 7,238 | -42% | 1 | 1 | 0% | 1,325 | 2,212 | +67% | 0 | 0 | — |
case-15 | fail→pass | 15,277 | 8,219 | -46% | 1 | 1 | 0% | 1,775 | 2,508 | +41% | 0 | 0 | — |
case-16 | fail→pass | 16,364 | 7,959 | -51% | 1 | 1 | 0% | 3,058 | 2,460 | -20% | 0 | 0 | — |
case-17 | fail→pass | 10,083 | 6,607 | -34% | 1 | 1 | 0% | 1,545 | 2,107 | +36% | 0 | 0 | — |
case-18 | pass→pass | 9,776 | 3,848 | -61% | 1 | 1 | 0% | 1,857 | 2,636 | +42% | 0 | 0 | — |
case-19 | fail→fail | 8,484 | 1,738 | -80% | 1 | 1 | 0% | 1,364 | 2,131 | +56% | 0 | 0 | — |
case-20 | fail→fail | 4,090 | 3,311 | -19% | 1 | 1 | 0% | 544 | 2,347 | +331% | 0 | 0 | — |
case-21 | pass→pass | 13,335 | 16,282 | +22% | 1 | 1 | 0% | 1,482 | 3,703 | +150% | 0 | 0 | — |
case-22 | pass→pass | 13,133 | 10,314 | -21% | 1 | 1 | 0% | 1,370 | 2,736 | +100% | 0 | 0 | — |
case-23 | fail→pass | 14,681 | 2,108 | -86% | 1 | 1 | 0% | 1,826 | 2,158 | +18% | 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. 23 cases were attempted. The headline lift of +52 percentage points is the difference between those two pass rates over the 23 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.