Run structured network diagnostics and explain findings in plain English.
scripts/diagnose.py — orchestrates all tests, outputs unified JSONscripts/dns_check.py — tests DNS resolution across Google, Cloudflare, and system resolversscripts/speedtest.py — measures download throughput via curl (no external packages)scripts/history.py — records results over time, detects anomalies vs baselinescripts/report.py — converts diagnostic JSON into a plain-English markdown reportAll scripts use Python stdlib only. Cross-platform: macOS and Linux.
Reference references/diagnostic-guide.md for what each test measures and common failure patterns.
bash
python3 scripts/diagnose.py > /tmp/net-diag.json
Add --speed to include a bandwidth test (adds ~20s):
bash
python3 scripts/diagnose.py --speed > /tmp/net-diag.json
Skip traceroute or MTU if time-constrained:
bash
python3 scripts/diagnose.py --no-traceroute --no-mtu > /tmp/net-diag.json
bash
python3 scripts/history.py --compare /tmp/net-diag.json > /tmp/net-history.json
If no history exists yet, skip this step.
Without history:
bash
python3 scripts/report.py /tmp/net-diag.json
With history comparison:
bash
python3 scripts/report.py /tmp/net-diag.json --history-compare /tmp/net-history.json
bash
python3 scripts/history.py --record /tmp/net-diag.json
Do this after every diagnostic run to build a baseline over time.
ScriptFlagEffectdiagnose.py``--speedInclude bandwidth testdiagnose.py``--no-tracerouteSkip traceroute (faster)diagnose.py``--no-mtuSkip MTU detectionspeedtest.py``--quickOnly 100kb + 1mb testshistory.py``--record <file>Save result to historyhistory.py``--compare <file>Compare vs baselinehistory.py``--showPrint current baseline
Read references/diagnostic-guide.md for full pattern descriptions and remediation steps.