About cloudflare-troubleshooting
cloudflare-troubleshooting is a skill for operators diagnosing Cloudflare configuration and network issues through evidence. It emphasizes inspecting Cloudflare API state and external DNS or HTTP behavior before identifying causes, applying targeted changes, and verifying them.
Key features
- 01Querying Cloudflare API configuration
- 02Layered network investigation
- 03Checking DNS, SSL, and redirects
- 04Applying evidence-based targeted fixes
- 05Verifying state after changes
Use cases
- 01Diagnosing HTTPS redirect loops
- 02Investigating DNS or DNSSEC issues
- 03Troubleshooting SSL certificate errors
- 04Analyzing origin 502, 503, or 504 errors
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ daymade/ claude-code-skills --skill cloudflare-troubleshootingAfter installing, type/cloudflare-troubleshootingin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
references/api_overview.mdcommon_issues.mdemail-routing.mdpages-custom-domain.mdssl_modes.mdscripts/check_cloudflare_config.pyfix_ssl_mode.pyDetails
From the project READMECloudflare Troubleshooting
Methodology base: the general evidence-driven network-diagnosis discipline (falsification, layered isolation, counter-review) lives in the debugging-network-issues skill. This skill is the Cloudflare domain layer on top of it.
Core Principle
Investigate with evidence, not assumptions. Always query Cloudflare API to examine actual configuration before diagnosing issues. The skill's value is the systematic investigation methodology, not predetermined solutions.
Investigation Methodology
1. Gather Credentials
Reuse the domain and authorized Cloudflare connection already supplied by the user or project configuration. Ask only for missing connection information: domain, account email plus Global API Key, or API Token. Keep the working authentication method; troubleshooting does not require replacing it.
Global API Key location: Cloudflare Dashboard → My Profile → API Tokens → View Global API Key
2. Get Zone Information
For zone-scoped troubleshooting, obtain the zone ID:
curl -s -X GET "https://api.cloudflare.com/client/v4/zones?name=<domain>" \
-H "X-Auth-Email: <email>" \
-H "X-Auth-Key: <api_key>" | jq '.'
Select the exact matching zone and account before extracting its id; do not blindly select the first result when account or domain identity is ambiguous. Use that zone’s account.id for account-scoped calls.
For a Pages hostname that has never been attached, an empty exact-zone result is a finding, not an account ID or proof that the site is absent. Resolve the existing account/project from its authorized configuration and follow Pages custom domains and DNSSEC migration. Do not create a zone merely to make this lookup succeed.
3. Investigate Systematically
For each issue, gather evidence before making conclusions. Use Cloudflare API to inspect:
- Current configuration state
- Recent changes (if audit log available)
- Related settings that might interact
Common Investigation Patterns
Redirect Loops (ERR_TOO_MANY_REDIRECTS)
Evidence gathering sequence:
-
Check SSL/TLS mode:
curl -X GET "https://api.cloudflare.com/client/v4/zones/{zone_id}/settings/ssl" \ -H "X-Auth-Email: email" \ -H "X-Auth-Key: key"Look for:
result.value- tells current SSL mode -
Check Always Use HTTPS setting:
curl -X GET "https://api.cloudflare.com/client/v4/zones/{zone_id}/settings/always_use_https" \ -H "X-Auth-Email: email" \ -H "X-Auth-Key: key" -
Check Page Rules for redirects:
curl -X GET "https://api.cloudflare.com/client/v4/zones/{zone_id}/pagerules" \ -H "X-Auth-Email: email" \ -H "X-Auth-Key: key"Look for:
forwarding_urloralways_use_httpsactions -
Test origin server directly (if possible):
curl -I -H "Host: <domain>" https://<origin_ip>
Diagnosis logic:
- SSL mode "flexible" + origin enforces HTTPS = redirect loop
- Multiple redirect rules can conflict
- Check browser vs curl behavior differences
Fix:
curl -X PATCH "https://api.cloudflare.com/client/v4/zones/{zone_id}/settings/ssl" \
-H "X-Auth-Email: email" \
-H "X-Auth-Key: key" \
-H "Content-Type: application/json" \
--data '{"value":"full"}'
If stale HTTP redirects remain after the fix, purge the relevant HTTP cache:
curl -X POST "https://api.cloudflare.com/client/v4/zones/{zone_id}/purge_cache" \
-H "X-Auth-Email: email" \
-H "X-Auth-Key: key" \
-d '{"purge_everything":true}'
Email Routing and Forwarding
For alias delivery, destination verification, catch-all behavior or forwarding MX issues, follow Email Routing. It supplies the account/zone API read sequence and separates saved configuration from actual Inbox arrival.
DNS Issues
For a working pages.dev site with an unreachable custom hostname, missing Pages binding, or a nameserver/DNSSEC move, load Pages custom domains and DNSSEC migration before changing DNS. It separates registrar identity, parent publication, recursive caches and normal-hostname acceptance.
Evidence gathering:
-
List DNS records:
curl -X GET "https://api.cloudflare.com/client/v4/zones/{zone_id}/dns_records" \ -H "X-Auth-Email: email" \ -H "X-Auth-Key: key" -
Check external DNS resolution:
dig <domain> dig @8.8.8.8 <domain> -
Check DNSSEC status:
curl -X GET "https://api.cloudflare.com/client/v4/zones/{zone_id}/dnssec" \ -H "X-Auth-Email: email" \ -H "X-Auth-Key: key"
Look for:
- Missing A/AAAA/CNAME records
- Incorrect proxy status (proxied vs DNS-only)
- TTL values
- Conflicting records
SSL Certificate Errors
Evidence gathering:
-
Check SSL certificate status:
curl -X GET "https://api.cloudflare.com/client/v4/zones/{zone_id}/ssl/certificate_packs" \ -H "X-Auth-Email: email" \ -H "X-Auth-Key: key" -
Check origin certificate (if using Full Strict):
openssl s_client -connect <origin_ip>:443 -servername <domain> -
Check SSL settings:
- Minimum TLS version
- TLS 1.3 status
- Opportunistic Encryption
Common issues:
- Error 526: SSL mode is "strict" but origin cert invalid
- Error 525: SSL handshake failure at origin
- Provisioning delay: inspect the selected product's certificate/domain validation state and report the remaining prerequisite or pending state
Origin Server Errors (502/503/504)
Evidence gathering:
-
Check if origin is reachable:
curl -I -H "Host: <domain>" https://<origin_ip> -
Check DNS records point to correct origin:
curl -X GET "https://api.cloudflare.com/client/v4/zones/{zone_id}/dns_records" \ -H "X-Auth-Email: email" \ -H "X-Auth-Key: key" -
Review load balancer config (if applicable):
curl -X GET "https://api.cloudflare.com/client/v4/zones/{zone_id}/load_balancers" \ -H "X-Auth-Email: email" \ -H "X-Auth-Key: key" -
Check firewall rules:
curl -X GET "https://api.cloudflare.com/client/v4/zones/{zone_id}/firewall/rules" \ -H "X-Auth-Email: email" \ -H "X-Auth-Key: key"
Learning New APIs
When encountering issues not covered above, consult Cloudflare API documentation:
- Browse API reference: https://developers.cloudflare.com/api/
- Search for relevant endpoints using issue keywords
- Check API schema to understand available operations
- Test with GET requests first to understand data structure
- Make changes with PATCH/POST after confirming approach
Pattern for exploring new APIs:
# List available settings for a zone
curl -X GET "https://api.cloudflare.com/client/v4/zones/{zone_id}/settings" \
-H "X-Auth-Email: email" \
-H "X-Auth-Key: key"
API Reference Overview
Consult references/api_overview.md for:
- Common endpoints organized by category
- Request/response schemas
- Authentication patterns
- Rate limits and error handling
Consult references/ssl_modes.md for:
- Detailed SSL/TLS mode explanations
- Platform compatibility
- Security implications
Consult references/common_issues.md for:
- Issue patterns and symptoms
- Investigation checklists
- Platform-specific notes
Best Practices
Evidence-Based Investigation
- Query before assuming - Use API to check actual state
- Gather multiple data points - Cross-reference settings
- Check related configurations - Settings often interact
- Verify externally - Use dig/curl to confirm
- Test incrementally - One change at a time
API Usage
- Parse JSON responses - Use
jqor python for readability - Check success field -
"success": true/falsein responses - Handle errors gracefully - Read
errorsarray in responses - Respect rate limits - Cloudflare API has limits
- Use appropriate methods:
- GET: Retrieve information
- PATCH: Update settings
- POST: Create resources / trigger actions
- DELETE: Remove resources
Making Changes
- Gather evidence first - Understand current state
- Identify root cause - Don't guess
- Apply targeted fix - Change only what's needed
- Purge HTTP cache only when implicated - A CDN purge does not publish registrar changes or clear recursive DNS caches
- Verify fix - Re-query API to confirm
- Report the waiting stage and next observation: use current activation state, registry publication policy and observed TTLs. Registrar save, parent publication and client recovery can occur at different times; do not prescribe a fixed delay or browser-cache clearing without evidence.
Security
- Never log API keys in output
- Warn if user shares credentials in public context
- Recommend API Tokens with scoped permissions over Global API Key
- Use read-only operations for investigation
Workflow Template
1. Reuse the configured domain and authorized API connection; obtain only missing values
2. Get zone_id via zones API
3. Investigate:
- Query relevant APIs for evidence
- Check multiple related settings
- Verify with external tools (dig, curl)
4. Analyze evidence to determine root cause
5. Apply fix via appropriate API endpoint
6. Purge HTTP cache only if stale HTTP content is implicated
7. Verify fix via API query and normal-hostname external testing; provider or forced-IP success alone is partial
8. Inform user of resolution and any required actions
Example: Complete Investigation
When user reports "site shows ERR_TOO_MANY_REDIRECTS":
# 1. Get zone ID
curl -s -X GET "https://api.cloudflare.com/client/v4/zones?name=example.com" \
-H "X-Auth-Email: [email protected]" \
-H "X-Auth-Key: abc123" | jq '.result[] | select(.name == "example.com") | {id, account}'
# Select the intended account from the exact-domain result before using its id.
# 2. Check SSL mode (primary suspect for redirect loops)
curl -s -X GET "https://api.cloudflare.com/client/v4/zones/ZONE_ID/settings/ssl" \
-H "X-Auth-Email: [email protected]" \
-H "X-Auth-Key: abc123" | jq '.result.value'
# If returns "flexible" and origin is GitHub Pages/Netlify/Vercel:
# 3. Fix by changing to "full"
curl -X PATCH "https://api.cloudflare.com/client/v4/zones/ZONE_ID/settings/ssl" \
-H "X-Auth-Email: [email protected]" \
-H "X-Auth-Key: abc123" \
-H "Content-Type: application/json" \
--data '{"value":"full"}'
# 4. Only if stale HTTP redirects remain, purge HTTP cache
curl -X POST "https://api.cloudflare.com/client/v4/zones/ZONE_ID/purge_cache" \
-H "X-Auth-Email: [email protected]" \
-H "X-Auth-Key: abc123" \
-d '{"purge_everything":true}'
# 5. Recheck the ordinary hostname and browser; report observed recovery or the unresolved layer
When Scripts Are Useful
The bundled scripts (scripts/check_cloudflare_config.py, scripts/fix_ssl_mode.py) serve as:
- Reference implementations of investigation patterns
- Quick diagnostic tools when Python is available
- Examples of programmatic API usage
However, prefer direct API calls via Bash/curl for flexibility and transparency. Scripts should not limit capability - use them when convenient, but use raw API calls when needed for:
- Unfamiliar scenarios
- Edge cases
- Learning/debugging
- Operations not covered by scripts
The investigation methodology and API knowledge is the core skill, not the scripts.