From webflow-pack
Generates Webflow API diagnostic bundle with SDK version, token validation, rate limits, site connectivity, CMS health, and logs for troubleshooting support tickets.
How this skill is triggered — by the user, by Claude, or both
Slash command
/webflow-pack:webflow-debug-bundleThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Collect comprehensive diagnostic information for Webflow integration troubleshooting.
Collect comprehensive diagnostic information for Webflow integration troubleshooting. Generates a support-ready bundle with SDK version, token status, rate limits, site health, and redacted configuration.
webflow-api SDK installed#!/bin/bash
# webflow-debug-bundle.sh
set -euo pipefail
BUNDLE_DIR="webflow-debug-$(date +%Y%m%d-%H%M%S)"
mkdir -p "$BUNDLE_DIR"
echo "=== Webflow Debug Bundle ===" | tee "$BUNDLE_DIR/summary.txt"
echo "Generated: $(date -u +%Y-%m-%dT%H:%M:%SZ)" | tee -a "$BUNDLE_DIR/summary.txt"
echo "" >> "$BUNDLE_DIR/summary.txt"
# --- Environment ---
echo "--- Environment ---" >> "$BUNDLE_DIR/summary.txt"
echo "Node.js: $(node --version 2>/dev/null || echo 'not found')" >> "$BUNDLE_DIR/summary.txt"
echo "npm: $(npm --version 2>/dev/null || echo 'not found')" >> "$BUNDLE_DIR/summary.txt"
echo "OS: $(uname -s) $(uname -r)" >> "$BUNDLE_DIR/summary.txt"
echo "WEBFLOW_API_TOKEN: ${WEBFLOW_API_TOKEN:+[SET]}${WEBFLOW_API_TOKEN:-[NOT SET]}" >> "$BUNDLE_DIR/summary.txt"
echo "WEBFLOW_SITE_ID: ${WEBFLOW_SITE_ID:+[SET]}${WEBFLOW_SITE_ID:-[NOT SET]}" >> "$BUNDLE_DIR/summary.txt"
# --- SDK Version ---
echo "" >> "$BUNDLE_DIR/summary.txt"
echo "--- SDK Version ---" >> "$BUNDLE_DIR/summary.txt"
npm list webflow-api 2>/dev/null >> "$BUNDLE_DIR/summary.txt" || echo "webflow-api: not installed" >> "$BUNDLE_DIR/summary.txt"
echo "Latest available: $(npm view webflow-api version 2>/dev/null || echo 'unknown')" >> "$BUNDLE_DIR/summary.txt"
# --- API Connectivity ---
echo "" >> "$BUNDLE_DIR/summary.txt"
echo "--- API Connectivity ---" >> "$BUNDLE_DIR/summary.txt"
if [ -n "${WEBFLOW_API_TOKEN:-}" ]; then
# Token validation (list sites)
HTTP_CODE=$(curl -s -o "$BUNDLE_DIR/sites-response.json" -w "%{http_code}" \
-H "Authorization: Bearer $WEBFLOW_API_TOKEN" \
https://api.webflow.com/v2/sites 2>/dev/null)
echo "Sites endpoint: HTTP $HTTP_CODE" >> "$BUNDLE_DIR/summary.txt"
if [ "$HTTP_CODE" = "200" ]; then
SITE_COUNT=$(cat "$BUNDLE_DIR/sites-response.json" | python3 -c "import sys,json; print(len(json.load(sys.stdin).get('sites',[])))" 2>/dev/null || echo "parse error")
echo "Accessible sites: $SITE_COUNT" >> "$BUNDLE_DIR/summary.txt"
fi
# Rate limit headers
echo "" >> "$BUNDLE_DIR/summary.txt"
echo "--- Rate Limit Status ---" >> "$BUNDLE_DIR/summary.txt"
curl -s -I -H "Authorization: Bearer $WEBFLOW_API_TOKEN" \
https://api.webflow.com/v2/sites 2>/dev/null | \
grep -i "x-ratelimit\|retry-after\|content-type" >> "$BUNDLE_DIR/summary.txt" || echo "Could not read headers" >> "$BUNDLE_DIR/summary.txt"
else
echo "Skipped (no WEBFLOW_API_TOKEN set)" >> "$BUNDLE_DIR/summary.txt"
fi
# --- Webflow Platform Status ---
echo "" >> "$BUNDLE_DIR/summary.txt"
echo "--- Webflow Platform Status ---" >> "$BUNDLE_DIR/summary.txt"
curl -s https://status.webflow.com/api/v2/status.json 2>/dev/null | \
python3 -c "import sys,json; d=json.load(sys.stdin); print(f\"Status: {d['status']['description']}\")" 2>/dev/null \
>> "$BUNDLE_DIR/summary.txt" || echo "Could not reach status page" >> "$BUNDLE_DIR/summary.txt"
# --- Configuration (redacted) ---
echo "" >> "$BUNDLE_DIR/summary.txt"
echo "--- Config (redacted) ---" >> "$BUNDLE_DIR/summary.txt"
for envfile in .env .env.local .env.production; do
if [ -f "$envfile" ]; then
echo "[$envfile]" >> "$BUNDLE_DIR/config-redacted.txt"
sed 's/=.*/=***REDACTED***/' "$envfile" >> "$BUNDLE_DIR/config-redacted.txt"
echo "" >> "$BUNDLE_DIR/config-redacted.txt"
fi
done
[ -f "$BUNDLE_DIR/config-redacted.txt" ] && echo "See config-redacted.txt" >> "$BUNDLE_DIR/summary.txt" || echo "No .env files found" >> "$BUNDLE_DIR/summary.txt"
# --- Recent Error Logs ---
echo "" >> "$BUNDLE_DIR/summary.txt"
echo "--- Recent Errors ---" >> "$BUNDLE_DIR/summary.txt"
if [ -d "logs" ]; then
grep -ri "webflow\|429\|401\|403\|500" logs/ 2>/dev/null | tail -50 >> "$BUNDLE_DIR/errors.txt" || true
echo "See errors.txt" >> "$BUNDLE_DIR/summary.txt"
else
echo "No logs/ directory found" >> "$BUNDLE_DIR/summary.txt"
fi
# --- Package Bundle ---
tar -czf "$BUNDLE_DIR.tar.gz" "$BUNDLE_DIR"
rm -rf "$BUNDLE_DIR"
echo ""
echo "Bundle created: $BUNDLE_DIR.tar.gz"
echo "Review for sensitive data before sharing."
For deeper programmatic diagnostics:
// webflow-diagnostics.ts
import { WebflowClient } from "webflow-api";
interface DiagnosticReport {
timestamp: string;
sdk: { version: string; installed: boolean };
auth: { valid: boolean; error?: string };
sites: Array<{ id: string; name: string; lastPublished: string | null }>;
collections: Array<{ siteId: string; id: string; name: string; itemCount: number }>;
rateLimits: { note: string };
platformStatus: string;
}
async function runDiagnostics(): Promise<DiagnosticReport> {
const report: DiagnosticReport = {
timestamp: new Date().toISOString(),
sdk: { version: "unknown", installed: false },
auth: { valid: false },
sites: [],
collections: [],
rateLimits: { note: "Check response headers for X-RateLimit-Remaining" },
platformStatus: "unknown",
};
// 1. SDK Version
try {
const pkg = await import("webflow-api/package.json", { assert: { type: "json" } });
report.sdk = { version: pkg.default.version, installed: true };
} catch {
report.sdk = { version: "unknown", installed: true };
}
// 2. Auth Check
const webflow = new WebflowClient({
accessToken: process.env.WEBFLOW_API_TOKEN!,
});
try {
const { sites } = await webflow.sites.list();
report.auth = { valid: true };
report.sites = (sites || []).map(s => ({
id: s.id!,
name: s.displayName!,
lastPublished: s.lastPublished || null,
}));
// 3. Collections for each site
for (const site of sites || []) {
const { collections } = await webflow.collections.list(site.id!);
for (const col of collections || []) {
report.collections.push({
siteId: site.id!,
id: col.id!,
name: col.displayName!,
itemCount: col.itemCount || 0,
});
}
}
} catch (err: any) {
report.auth = { valid: false, error: `${err.statusCode}: ${err.message}` };
}
// 4. Platform Status
try {
const res = await fetch("https://status.webflow.com/api/v2/status.json");
const data = await res.json();
report.platformStatus = data.status?.description || "unknown";
} catch {
report.platformStatus = "unreachable";
}
return report;
}
runDiagnostics().then(report => {
console.log(JSON.stringify(report, null, 2));
}).catch(console.error);
# Bash bundle
chmod +x webflow-debug-bundle.sh
./webflow-debug-bundle.sh
# TypeScript diagnostics
npx tsx webflow-diagnostics.ts
ALWAYS REDACT before sharing:
Safe to include:
webflow-debug-YYYYMMDD-HHMMSS.tar.gz archive containing:
summary.txt — Environment, SDK version, connectivity, rate limitssites-response.json — API response (if token valid)config-redacted.txt — Environment files with values maskederrors.txt — Recent error logs| Issue | Cause | Solution |
|---|---|---|
curl: command not found | curl not installed | apt install curl or use TypeScript diagnostics |
| Sites endpoint 401 | Token expired | Generate new token |
| Status page unreachable | Network issue | Check DNS/firewall |
| Empty error logs | No logs/ directory | Check app logging configuration |
For rate limit issues, see webflow-rate-limits.
5plugins reuse this skill
First indexed Jul 10, 2026
npx claudepluginhub fleet-to-force/claude-code-plugins-plus --plugin webflow-packCollects Webflow integration debug evidence into a diagnostic bundle: SDK version, token validation, rate limits, site connectivity, CMS health, and error logs. Useful for support tickets and troubleshooting.
Generates PostHog debug bundle with SDK versions (JS/Node/Python), API connectivity tests, environment details, and redacted config for support and troubleshooting.
Generates redacted ClickUp API diagnostic bundles with auth, rate limits, workspaces, status, and latency checks for troubleshooting and support.