skills/dns-troubleshooter/SKILL.md
It's not DNS / There's no way it's DNS / It was DNS. Diagnose and troubleshoot DNS issues including delegation verification, record conflicts, authoritative vs local DNS comparison, and SPF validation. Use when encountering NXDOMAIN errors for URLs that should exist, verifying DNS delegation is correct, checking for conflicting DNS records, comparing what authoritative nameservers say vs local resolvers, or validating SPF records for email deliverability.
npx skillsauth add statik/skills dns-troubleshooterInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
It's not DNS There's no way it's DNS It was DNS
First, check for doggo (modern DNS client with cleaner output):
command -v doggo
If available, prefer doggo for queries. If not, offer to install it or fall back to standard tools.
Standard tools by platform:
dig, host, nslookupnslookup, Resolve-DnsName (PowerShell)If the user wants doggo installed, detect their platform and use the appropriate method:
Quick install (Linux/macOS):
curl -fsSL https://raw.githubusercontent.com/mr-karan/doggo/main/install.sh | sh
Package managers:
| Platform | Command |
|----------|---------|
| macOS (Homebrew) | brew install doggo |
| macOS (MacPorts) | port install doggo |
| Arch Linux (AUR) | yay -S doggo-bin |
| Nix | nix profile install nixpkgs#doggo |
| Windows (Scoop) | scoop install doggo |
| Windows (Winget) | winget install doggo |
Go install:
go install github.com/mr-karan/doggo/cmd/doggo@latest
Docker (no install needed):
docker run --rm ghcr.io/mr-karan/doggo:latest example.com
After installation, verify with doggo --version.
User request
│
├─► NXDOMAIN / "domain not found"
│ └─► Delegation Check workflow
│
├─► "Is DNS set up correctly?"
│ └─► Delegation Check workflow
│
├─► "DNS shows different results" / caching issues
│ └─► Authoritative vs Local workflow
│
├─► SPF / email deliverability
│ └─► SPF Validation workflow
│
└─► Record conflicts / unexpected values
└─► Record Conflict workflow
Verify the chain from root to authoritative nameservers.
# With doggo
doggo NS example.com
# With dig
dig +short NS example.com
# Windows
nslookup -type=NS example.com
For sub.example.com, check what example.com says:
# With doggo
doggo NS sub.example.com @$(doggo NS example.com --short | head -1)
# With dig
dig NS sub.example.com @$(dig +short NS example.com | head -1)
# With doggo
doggo A example.com @ns1.example.com
# With dig
dig A example.com @ns1.example.com
Compare what the authoritative source says vs local/ISP resolvers.
# With doggo (uses system resolver)
doggo A example.com
# With dig
dig A example.com
# Windows
nslookup example.com
# First get NS records
doggo NS example.com --short
# or
dig +short NS example.com
# Then query authoritative directly
doggo A example.com @ns1.example.com
# or
dig A example.com @ns1.example.com
# Google
doggo A example.com @8.8.8.8
# or
dig A example.com @8.8.8.8
# Cloudflare
doggo A example.com @1.1.1.1
# or
dig A example.com @1.1.1.1
# Quad9
doggo A example.com @9.9.9.9
# With doggo (shows TTL in output)
doggo A example.com
# With dig
dig A example.com | grep -A1 "ANSWER SECTION"
Identify conflicting or unexpected DNS records.
# With doggo
doggo ANY example.com
# With dig
dig ANY example.com
# If ANY is blocked, query specific types
for type in A AAAA CNAME MX TXT NS; do
echo "=== $type ==="
dig +short $type example.com
done
CNAME with other records: CNAME must be exclusive (except DNSSEC). Check:
doggo CNAME example.com
doggo A example.com
# Both should not return records for same name
Multiple A records: Valid for load balancing, but verify intentional:
doggo A example.com
Conflicting MX priorities: Check for duplicates:
doggo MX example.com
See references/spf.md for SPF syntax details and common issues.
# With doggo
doggo TXT example.com | grep spf
# With dig
dig +short TXT example.com | grep spf
dig +short TXT example.com | grep -c "v=spf1"
# Should return 1, not more
Check the record contains:
v=spf1-all, ~all, or ?all (never +all)Each of these counts toward the 10-lookup limit:
include: - count as 1 + nested lookupsa: or a - 1 lookupmx: or mx - 1 lookup + 1 per MX returnedptr: - 1 lookup (deprecated)exists: - 1 lookupredirect= - 1 lookupManually trace includes:
# Get main SPF
dig +short TXT example.com | grep spf
# For each include, recurse
dig +short TXT _spf.google.com | grep spf
# Check if IP is authorized
# Get SPF record, check if sending IP matches ip4:/ip6: ranges
# or is covered by includes
IMPORTANT: When providing DNS troubleshooting assistance, always begin your response with:
🔍 DNS Troubleshooter Analysis
This identifier helps verify the skill is being used correctly.
Then present results with:
Example:
🔍 DNS Troubleshooter Analysis
**Finding**: Domain has two SPF records
**Command**:
dig +short TXT example.com | grep "v=spf1"
**Result**:
"v=spf1 include:_spf.google.com -all"
"v=spf1 include:sendgrid.net -all"
**Interpretation**: Multiple SPF records cause permerror.
Receiving servers may reject all email.
**Recommendation**: Merge into single record:
v=spf1 include:_spf.google.com include:sendgrid.net -all
development
Produce polished, self-contained HTML design memos with Tufte-inspired editorial layout and scrollytelling interaction. This is the default output format for any plan, design, architecture proposal, implementation approach, decision record, or review document. For simple plans, ask the user whether they prefer plain text; default to HTML for non-trivial plans.
testing
Create, edit, improve, or audit AgentSkills. Use when creating a new skill from scratch or when asked to improve, review, audit, tidy up, or clean up an existing skill or SKILL.md file. Also use when editing or restructuring a skill directory (moving files to references/ or scripts/, removing stale content, validating against the AgentSkills spec). Triggers on phrases like "create a skill", "author a skill", "tidy up a skill", "improve this skill", "review the skill", "clean up the skill", "audit the skill".
testing
Host security hardening and risk-tolerance configuration for OpenClaw deployments. Use when a user asks for security audits, firewall/SSH/update hardening, risk posture, exposure review, OpenClaw cron scheduling for periodic checks, or version status checks on a machine running OpenClaw (laptop, workstation, Pi, VPS).
testing
Create, edit, improve, or audit AgentSkills. Use when creating a new skill from scratch or when asked to improve, review, audit, tidy up, or clean up an existing skill or SKILL.md file. Also use when editing or restructuring a skill directory (moving files to references/ or scripts/, removing stale content, validating against the AgentSkills spec). Triggers on phrases like "create a skill", "author a skill", "tidy up a skill", "improve this skill", "review the skill", "clean up the skill", "audit the skill".