[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6AD9ATAYCTSVNGMJBDGGQRM":3,"skill-same:01M6AD9ATAYCTSVNGMJBDGGQRM":125},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":28,"publishedAt":49,"linkOnly":50,"markdownContent":51,"markdownBody":52,"frontMatter":53,"refName":55,"commitSha":56,"skillDirectory":57,"forksCount":58,"repositoryHtmlUrl":59,"repositoryHomepageUrl":60,"ownerHtmlUrl":61,"ownerBlogUrl":62,"ownerDescription":63,"updatedAt":64,"install":65,"resources":78},"01M6AD9ATAYCTSVNGMJBDGGQRM","awf-debug-tools",null,"Practical Python scripts for debugging awf - parse logs, diagnose issues, inspect containers, test domains","github\u002Fgh-aw-firewall","github","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F9919?v=4","01M6AC83DS133TPXFSP1DHNCC6","GitHub","01M6AD985Y1G0AQ64JV7KPQWZ4",160,"MIT","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw-firewall\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fawf-debug-tools\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],"debug","awf debug tools","Tools","parse","python","for","sudo","inspect","domains","scripts","practical","read","Bash","logs","issues","debugging","diagnose","test","docker","containers","2026-11-10 10:12:30",false,"---\nname: awf-debug-tools\ndescription: Practical Python scripts for debugging awf - parse logs, diagnose issues, inspect containers, test domains\nallowed-tools: Bash(python:*), Bash(docker:*), Bash(sudo:*), Read\n---\n\n# AWF Debug Tools\n\nA collection of practical Python scripts that help agents efficiently debug and operate the awf firewall. These scripts reduce verbose Docker\u002Flog output by 80%+ and provide actionable insights instead of raw data dumps.\n\n## Why These Scripts?\n\n**Problem:** Docker commands and log files are verbose and hard for agents to parse. Diagnosing issues requires 10+ manual commands and produces noisy output that wastes tokens.\n\n**Solution:** One script replaces 5-10 manual commands with clean, filtered output optimized for agent consumption. All scripts support JSON format for easy parsing.\n\n## Available Scripts\n\nAll scripts are located in `.claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002F`:\n\n1. **parse-squid-logs.py** - Parse Squid logs and extract blocked domains with counts\n2. **diagnose-awf.py** - Run automated diagnostic checks on container health and configuration\n3. **inspect-containers.py** - Show concise container status without verbose docker output\n4. **test-domain.py** - Test if specific domain is reachable through the firewall\n\n## Quick Start\n\n### Parse Logs to Find Blocked Domains\n\n```bash\n# Auto-discover logs and show all domains\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fparse-squid-logs.py\n\n# Show only blocked domains\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fparse-squid-logs.py --blocked-only\n\n# Filter by domain\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fparse-squid-logs.py --domain github.com\n\n# Show top 10, JSON output\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fparse-squid-logs.py --top 10 --format json\n```\n\n### Run Automated Diagnostics\n\n```bash\n# Quick health check\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fdiagnose-awf.py\n\n# Detailed output\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fdiagnose-awf.py --verbose\n\n# JSON output for agent parsing\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fdiagnose-awf.py --format json\n```\n\n### Inspect Container Status\n\n```bash\n# Inspect all containers\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Finspect-containers.py\n\n# Specific container only\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Finspect-containers.py --container awf-squid\n\n# Show only logs\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Finspect-containers.py --logs-only\n\n# JSON output\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Finspect-containers.py --format json\n```\n\n### Test Domain Reachability\n\n```bash\n# Test if domain is allowed\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Ftest-domain.py github.com\n\n# Test blocked domain with fix suggestion\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Ftest-domain.py npmjs.org --suggest-fix\n\n# Check allowlist only (no log lookup)\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Ftest-domain.py api.github.com --check-allowlist\n\n# JSON output\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Ftest-domain.py github.com --format json\n```\n\n## Common Workflows\n\n### Workflow 1: Debugging Blocked Requests\n\nWhen a command fails due to blocked domain:\n\n```bash\n# 1. Run diagnostics to check overall health\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fdiagnose-awf.py\n\n# 2. Parse logs to find which domains were blocked\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fparse-squid-logs.py --blocked-only\n\n# 3. Test specific domain and get fix suggestion\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Ftest-domain.py npmjs.org --suggest-fix\n\n# 4. Apply the suggested fix\nsudo awf --allow-domains github.com,npmjs.org 'your-command'\n```\n\n### Workflow 2: Container Health Check\n\nWhen containers aren't starting or behaving unexpectedly:\n\n```bash\n# 1. Check container status and recent logs\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Finspect-containers.py\n\n# 2. Run full diagnostics\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fdiagnose-awf.py --verbose\n\n# 3. If issues found, check Squid logs for errors\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fparse-squid-logs.py\n```\n\n### Workflow 3: Agent Automated Debugging\n\nFor agents to diagnose issues without human intervention:\n\n```bash\n# Run all checks with JSON output\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fdiagnose-awf.py --format json | jq .\n\n# Parse blocked domains\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fparse-squid-logs.py --blocked-only --format json | jq .\n\n# Test each blocked domain\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Ftest-domain.py npmjs.org --format json | jq .\n```\n\n## Output Formats\n\nAll scripts support two output formats:\n\n- **table\u002Ftext** (default): Human-readable format with clear sections and alignment\n- **json**: Machine-readable format optimized for agent parsing\n\nUse `--format json` to get structured output that's easy to parse programmatically.\n\n## Exit Codes\n\nAll scripts use consistent exit codes:\n\n- **0**: Success (no issues found, domain allowed, etc.)\n- **1**: Issues found (blocked domains, failed checks, domain blocked)\n- **2**: Error (missing logs, invalid arguments, etc.)\n\n## No Dependencies\n\nAll scripts use Python 3.8+ stdlib only. No `pip install` required. They work out of the box on any system with Python 3.8+.\n\n## Script Reference\n\n### parse-squid-logs.py\n\n**Purpose:** Extract blocked domains from Squid logs with counts and statistics.\n\n**Key Options:**\n- `--blocked-only` - Show only blocked domains\n- `--domain DOMAIN` - Filter by specific domain\n- `--top N` - Show top N domains by request count\n- `--format {table,json}` - Output format\n\n**Auto-discovers logs** from running containers, preserved logs, or work directories.\n\n### diagnose-awf.py\n\n**Purpose:** Run automated diagnostic checks and report issues with fixes.\n\n**Checks:**\n- Container status (running\u002Fstopped\u002Fmissing)\n- Container health (Squid healthcheck)\n- Network connectivity (Squid reachable from agent)\n- DNS configuration\n- Squid config validation\n- Common issues (port conflicts, orphaned containers)\n\n**Key Options:**\n- `--verbose` - Show detailed check output\n- `--format {text,json}` - Output format\n\n### inspect-containers.py\n\n**Purpose:** Show concise container status without verbose docker output.\n\n**Shows:**\n- Container status and exit codes\n- IP addresses and network info\n- Health check status\n- Top 5 processes\n- Recent logs (last 5 lines)\n\n**Key Options:**\n- `--container NAME` - Inspect specific container only\n- `--logs-only` - Show only recent logs\n- `--tail N` - Number of log lines (default: 5)\n- `--format {text,json}` - Output format\n\n### test-domain.py\n\n**Purpose:** Test if domain is reachable through the firewall.\n\n**Checks:**\n- If domain is in Squid allowlist\n- If domain appears in recent Squid logs\n- Whether requests were allowed or blocked\n\n**Key Options:**\n- `--check-allowlist` - Only check allowlist, don't check logs\n- `--suggest-fix` - Show suggested --allow-domains flag\n- `--format {text,json}` - Output format\n\n## Integration with Existing Skills\n\n- For manual debugging commands, see the `debug-firewall` skill\n- For MCP Gateway integration, see the `awf-mcp-gateway` skill\n- For general troubleshooting, see `docs\u002Ftroubleshooting.md`\n\n## Performance\n\nAll scripts are designed for fast execution:\n\n- `parse-squid-logs.py`: \u003C2 seconds for typical log files\n- `diagnose-awf.py`: \u003C3 seconds for all checks\n- `inspect-containers.py`: \u003C2 seconds for both containers\n- `test-domain.py`: \u003C1 second for domain check\n\n## Examples\n\n### Example 1: Find Blocked Domains\n\n```bash\n$ python .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fparse-squid-logs.py --blocked-only\n\nBlocked Domains (sorted by count):\n\n  Domain                  Blocked  Allowed  Total\n  =================================================\n  registry.npmjs.org      45       0        45\n  example.com             12       0        12\n\nTotal requests: 1234\nBlocked: 57 (4.6%)\nAllowed: 1177 (95.4%)\n```\n\n### Example 2: Diagnose Issues\n\n```bash\n$ python .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fdiagnose-awf.py\n\nAWF Diagnostic Report\n========================================\n[✓] Containers: awf-squid (running), awf-agent (exited:0)\n[✓] Health: Squid healthy\n[✓] Network: awf-net exists ([{Subnet:172.30.0.0\u002F24 Gateway:172.30.0.1}])\n[✓] Connectivity: Squid reachable on 172.30.0.10:3128\n[✓] DNS: DNS servers: 127.0.0.11, 8.8.8.8, 8.8.4.4\n[✓] Config: 3 domains in allowlist (github.com, .github.com, api.github.com)\n\nSummary: All checks passed ✓\n```\n\n### Example 3: Test Domain\n\n```bash\n$ python .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Ftest-domain.py npmjs.org --suggest-fix\n\nTesting: npmjs.org\n\n[✗] Allowlist check: Not in allowlist\n[✗] Reachability: Blocked (403 TCP_DENIED:HIER_NONE)\n[✗] Status: BLOCKED\n\nSuggested fix:\n  awf --allow-domains github.com,npmjs.org 'your-command'\n```\n\n## Tips for Agents\n\n1. **Use JSON output** for easy parsing: `--format json | jq .`\n2. **Chain commands** to get complete picture: diagnose → parse logs → test domain\n3. **Check exit codes** to determine if action needed (0 = ok, 1 = issues)\n4. **Use --suggest-fix** to get ready-to-use awf commands\n5. **Scripts auto-discover logs** - no need to specify paths in most cases\n\n## Troubleshooting\n\n**Script not found:**\n```bash\n# Use absolute path\npython \u002Fhome\u002Fmossaka\u002Fdeveloper\u002Fgh-aw-repos\u002Fgh-aw-firewall\u002F.claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fparse-squid-logs.py\n```\n\n**Permission denied on logs:**\n```bash\n# Squid logs require sudo to read\nsudo python .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fparse-squid-logs.py --log-file \u002Ftmp\u002Fsquid-logs-*\u002Faccess.log\n```\n\n**No logs found:**\n```bash\n# Run awf first to generate logs\nsudo awf --allow-domains github.com 'curl https:\u002F\u002Fapi.github.com'\n\n# Then parse\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fparse-squid-logs.py\n```\n\n## Future Enhancements\n\nPlanned scripts for future versions:\n- `analyze-traffic.py` - Analyze traffic patterns over time\n- `generate-allowlist.py` - Auto-generate allowlist from logs\n- `cleanup-awf.py` - Clean up orphaned resources\n- `benchmark-awf.py` - Performance testing utilities\n\n## Start here for diagnosis\n\nIf you are diagnosing a failure rather than exploring, enter through the\n[`diagnose-awf`](..\u002Fdiagnose-awf\u002FSKILL.md) skill and the canonical diagnosis registry in\n[`docs\u002Fdiagnostics\u002FREADME.md`](..\u002F..\u002F..\u002Fdocs\u002Fdiagnostics\u002FREADME.md). This skill is one of the\nspecialist references it routes to.\n","# AWF Debug Tools\n\nA collection of practical Python scripts that help agents efficiently debug and operate the awf firewall. These scripts reduce verbose Docker\u002Flog output by 80%+ and provide actionable insights instead of raw data dumps.\n\n## Why These Scripts?\n\n**Problem:** Docker commands and log files are verbose and hard for agents to parse. Diagnosing issues requires 10+ manual commands and produces noisy output that wastes tokens.\n\n**Solution:** One script replaces 5-10 manual commands with clean, filtered output optimized for agent consumption. All scripts support JSON format for easy parsing.\n\n## Available Scripts\n\nAll scripts are located in `.claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002F`:\n\n1. **parse-squid-logs.py** - Parse Squid logs and extract blocked domains with counts\n2. **diagnose-awf.py** - Run automated diagnostic checks on container health and configuration\n3. **inspect-containers.py** - Show concise container status without verbose docker output\n4. **test-domain.py** - Test if specific domain is reachable through the firewall\n\n## Quick Start\n\n### Parse Logs to Find Blocked Domains\n\n```bash\n# Auto-discover logs and show all domains\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fparse-squid-logs.py\n\n# Show only blocked domains\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fparse-squid-logs.py --blocked-only\n\n# Filter by domain\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fparse-squid-logs.py --domain github.com\n\n# Show top 10, JSON output\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fparse-squid-logs.py --top 10 --format json\n```\n\n### Run Automated Diagnostics\n\n```bash\n# Quick health check\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fdiagnose-awf.py\n\n# Detailed output\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fdiagnose-awf.py --verbose\n\n# JSON output for agent parsing\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fdiagnose-awf.py --format json\n```\n\n### Inspect Container Status\n\n```bash\n# Inspect all containers\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Finspect-containers.py\n\n# Specific container only\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Finspect-containers.py --container awf-squid\n\n# Show only logs\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Finspect-containers.py --logs-only\n\n# JSON output\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Finspect-containers.py --format json\n```\n\n### Test Domain Reachability\n\n```bash\n# Test if domain is allowed\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Ftest-domain.py github.com\n\n# Test blocked domain with fix suggestion\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Ftest-domain.py npmjs.org --suggest-fix\n\n# Check allowlist only (no log lookup)\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Ftest-domain.py api.github.com --check-allowlist\n\n# JSON output\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Ftest-domain.py github.com --format json\n```\n\n## Common Workflows\n\n### Workflow 1: Debugging Blocked Requests\n\nWhen a command fails due to blocked domain:\n\n```bash\n# 1. Run diagnostics to check overall health\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fdiagnose-awf.py\n\n# 2. Parse logs to find which domains were blocked\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fparse-squid-logs.py --blocked-only\n\n# 3. Test specific domain and get fix suggestion\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Ftest-domain.py npmjs.org --suggest-fix\n\n# 4. Apply the suggested fix\nsudo awf --allow-domains github.com,npmjs.org 'your-command'\n```\n\n### Workflow 2: Container Health Check\n\nWhen containers aren't starting or behaving unexpectedly:\n\n```bash\n# 1. Check container status and recent logs\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Finspect-containers.py\n\n# 2. Run full diagnostics\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fdiagnose-awf.py --verbose\n\n# 3. If issues found, check Squid logs for errors\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fparse-squid-logs.py\n```\n\n### Workflow 3: Agent Automated Debugging\n\nFor agents to diagnose issues without human intervention:\n\n```bash\n# Run all checks with JSON output\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fdiagnose-awf.py --format json | jq .\n\n# Parse blocked domains\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fparse-squid-logs.py --blocked-only --format json | jq .\n\n# Test each blocked domain\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Ftest-domain.py npmjs.org --format json | jq .\n```\n\n## Output Formats\n\nAll scripts support two output formats:\n\n- **table\u002Ftext** (default): Human-readable format with clear sections and alignment\n- **json**: Machine-readable format optimized for agent parsing\n\nUse `--format json` to get structured output that's easy to parse programmatically.\n\n## Exit Codes\n\nAll scripts use consistent exit codes:\n\n- **0**: Success (no issues found, domain allowed, etc.)\n- **1**: Issues found (blocked domains, failed checks, domain blocked)\n- **2**: Error (missing logs, invalid arguments, etc.)\n\n## No Dependencies\n\nAll scripts use Python 3.8+ stdlib only. No `pip install` required. They work out of the box on any system with Python 3.8+.\n\n## Script Reference\n\n### parse-squid-logs.py\n\n**Purpose:** Extract blocked domains from Squid logs with counts and statistics.\n\n**Key Options:**\n- `--blocked-only` - Show only blocked domains\n- `--domain DOMAIN` - Filter by specific domain\n- `--top N` - Show top N domains by request count\n- `--format {table,json}` - Output format\n\n**Auto-discovers logs** from running containers, preserved logs, or work directories.\n\n### diagnose-awf.py\n\n**Purpose:** Run automated diagnostic checks and report issues with fixes.\n\n**Checks:**\n- Container status (running\u002Fstopped\u002Fmissing)\n- Container health (Squid healthcheck)\n- Network connectivity (Squid reachable from agent)\n- DNS configuration\n- Squid config validation\n- Common issues (port conflicts, orphaned containers)\n\n**Key Options:**\n- `--verbose` - Show detailed check output\n- `--format {text,json}` - Output format\n\n### inspect-containers.py\n\n**Purpose:** Show concise container status without verbose docker output.\n\n**Shows:**\n- Container status and exit codes\n- IP addresses and network info\n- Health check status\n- Top 5 processes\n- Recent logs (last 5 lines)\n\n**Key Options:**\n- `--container NAME` - Inspect specific container only\n- `--logs-only` - Show only recent logs\n- `--tail N` - Number of log lines (default: 5)\n- `--format {text,json}` - Output format\n\n### test-domain.py\n\n**Purpose:** Test if domain is reachable through the firewall.\n\n**Checks:**\n- If domain is in Squid allowlist\n- If domain appears in recent Squid logs\n- Whether requests were allowed or blocked\n\n**Key Options:**\n- `--check-allowlist` - Only check allowlist, don't check logs\n- `--suggest-fix` - Show suggested --allow-domains flag\n- `--format {text,json}` - Output format\n\n## Integration with Existing Skills\n\n- For manual debugging commands, see the `debug-firewall` skill\n- For MCP Gateway integration, see the `awf-mcp-gateway` skill\n- For general troubleshooting, see `docs\u002Ftroubleshooting.md`\n\n## Performance\n\nAll scripts are designed for fast execution:\n\n- `parse-squid-logs.py`: \u003C2 seconds for typical log files\n- `diagnose-awf.py`: \u003C3 seconds for all checks\n- `inspect-containers.py`: \u003C2 seconds for both containers\n- `test-domain.py`: \u003C1 second for domain check\n\n## Examples\n\n### Example 1: Find Blocked Domains\n\n```bash\n$ python .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fparse-squid-logs.py --blocked-only\n\nBlocked Domains (sorted by count):\n\n  Domain                  Blocked  Allowed  Total\n  =================================================\n  registry.npmjs.org      45       0        45\n  example.com             12       0        12\n\nTotal requests: 1234\nBlocked: 57 (4.6%)\nAllowed: 1177 (95.4%)\n```\n\n### Example 2: Diagnose Issues\n\n```bash\n$ python .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fdiagnose-awf.py\n\nAWF Diagnostic Report\n========================================\n[✓] Containers: awf-squid (running), awf-agent (exited:0)\n[✓] Health: Squid healthy\n[✓] Network: awf-net exists ([{Subnet:172.30.0.0\u002F24 Gateway:172.30.0.1}])\n[✓] Connectivity: Squid reachable on 172.30.0.10:3128\n[✓] DNS: DNS servers: 127.0.0.11, 8.8.8.8, 8.8.4.4\n[✓] Config: 3 domains in allowlist (github.com, .github.com, api.github.com)\n\nSummary: All checks passed ✓\n```\n\n### Example 3: Test Domain\n\n```bash\n$ python .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Ftest-domain.py npmjs.org --suggest-fix\n\nTesting: npmjs.org\n\n[✗] Allowlist check: Not in allowlist\n[✗] Reachability: Blocked (403 TCP_DENIED:HIER_NONE)\n[✗] Status: BLOCKED\n\nSuggested fix:\n  awf --allow-domains github.com,npmjs.org 'your-command'\n```\n\n## Tips for Agents\n\n1. **Use JSON output** for easy parsing: `--format json | jq .`\n2. **Chain commands** to get complete picture: diagnose → parse logs → test domain\n3. **Check exit codes** to determine if action needed (0 = ok, 1 = issues)\n4. **Use --suggest-fix** to get ready-to-use awf commands\n5. **Scripts auto-discover logs** - no need to specify paths in most cases\n\n## Troubleshooting\n\n**Script not found:**\n```bash\n# Use absolute path\npython \u002Fhome\u002Fmossaka\u002Fdeveloper\u002Fgh-aw-repos\u002Fgh-aw-firewall\u002F.claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fparse-squid-logs.py\n```\n\n**Permission denied on logs:**\n```bash\n# Squid logs require sudo to read\nsudo python .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fparse-squid-logs.py --log-file \u002Ftmp\u002Fsquid-logs-*\u002Faccess.log\n```\n\n**No logs found:**\n```bash\n# Run awf first to generate logs\nsudo awf --allow-domains github.com 'curl https:\u002F\u002Fapi.github.com'\n\n# Then parse\npython .claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fparse-squid-logs.py\n```\n\n## Future Enhancements\n\nPlanned scripts for future versions:\n- `analyze-traffic.py` - Analyze traffic patterns over time\n- `generate-allowlist.py` - Auto-generate allowlist from logs\n- `cleanup-awf.py` - Clean up orphaned resources\n- `benchmark-awf.py` - Performance testing utilities\n\n## Start here for diagnosis\n\nIf you are diagnosing a failure rather than exploring, enter through the\n[`diagnose-awf`](..\u002Fdiagnose-awf\u002FSKILL.md) skill and the canonical diagnosis registry in\n[`docs\u002Fdiagnostics\u002FREADME.md`](..\u002F..\u002F..\u002Fdocs\u002Fdiagnostics\u002FREADME.md). This skill is one of the\nspecialist references it routes to.\n",{"name":5,"description":7,"allowed-tools":54},"Bash(python:*), Bash(docker:*), Bash(sudo:*), Read","main","564491e648e022be04aa96b73c1681f13f7544f8",".claude\u002Fskills\u002Fawf-debug-tools",83,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw-firewall","https:\u002F\u002Fgithub.github.com\u002Fgh-aw-firewall\u002F","https:\u002F\u002Fgithub.com\u002Fgithub","https:\u002F\u002Fgithub.com\u002Fabout","How people build software.","2026-11-15 06:13:56",{"source":8,"skillName":5,"commands":66,"prompt":76,"zipAvailable":77},[67,70,73],{"tool":68,"command":69},"npx","npx skills add github\u002Fgh-aw-firewall --skill awf-debug-tools",{"tool":71,"command":72},"bunx","bunx skills add github\u002Fgh-aw-firewall --skill awf-debug-tools",{"tool":74,"command":75},"pnpm","pnpm dlx skills add github\u002Fgh-aw-firewall --skill awf-debug-tools","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw-firewall\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fawf-debug-tools\u002FSKILL.md",true,[79,85,89,95,99,103,107,111,115,119],{"path":80,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":83,"sourceHtmlUrl":84},"animation-patterns.md","REFERENCE","参考文档",4030,"https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002Ffrontend-slides\u002Fanimation-patterns.md",{"path":86,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":87,"sourceHtmlUrl":88},"html-template.md",12535,"https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002Ffrontend-slides\u002Fhtml-template.md",{"path":90,"resourceType":91,"resourceTypeDesc":92,"sizeBytes":93,"sourceHtmlUrl":94},"scripts\u002F.gitignore","SCRIPT","脚本",13,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw-firewall\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002F.gitignore",{"path":96,"resourceType":91,"resourceTypeDesc":92,"sizeBytes":97,"sourceHtmlUrl":98},"scripts\u002Fcommon.py",13290,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw-firewall\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fcommon.py",{"path":100,"resourceType":91,"resourceTypeDesc":92,"sizeBytes":101,"sourceHtmlUrl":102},"scripts\u002Fdiagnose-awf.py",10789,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw-firewall\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fdiagnose-awf.py",{"path":104,"resourceType":91,"resourceTypeDesc":92,"sizeBytes":105,"sourceHtmlUrl":106},"scripts\u002Finspect-containers.py",7111,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw-firewall\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Finspect-containers.py",{"path":108,"resourceType":91,"resourceTypeDesc":92,"sizeBytes":109,"sourceHtmlUrl":110},"scripts\u002Fparse-squid-logs.py",7065,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw-firewall\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Fparse-squid-logs.py",{"path":112,"resourceType":91,"resourceTypeDesc":92,"sizeBytes":113,"sourceHtmlUrl":114},"scripts\u002Ftest-domain.py",7519,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw-firewall\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fawf-debug-tools\u002Fscripts\u002Ftest-domain.py",{"path":116,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":117,"sourceHtmlUrl":118},"STYLE_PRESETS.md",8202,"https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002Ffrontend-slides\u002FSTYLE_PRESETS.md",{"path":120,"resourceType":121,"resourceTypeDesc":122,"sizeBytes":123,"sourceHtmlUrl":124},"viewport-base.css","OTHER","其他",4037,"https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002Ffrontend-slides\u002Fviewport-base.css",[126,156,166,182,208,227],{"skillNo":127,"name":128,"nameZh":6,"description":129,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":130,"categories":131,"keywords":139,"publishedAt":49},"01M6AD9DV31R7XRJ0QZR1MYQPS","awf-skill","Use the AWF (Agentic Workflow Firewall) to run commands with network isolation and domain whitelisting. Provides L7 HTTP\u002FHTTPS egress control for AI agents.","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw-firewall\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fawf-skill\u002FSKILL.md",[132,133,136],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":134,"categoryName":135,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署",{"categoryNo":137,"categoryName":138,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[140,141,47,142,143,144,145,146,147,148,40,35,149,150,34,151,152,41,153,154,155],"awf skill","agentic workflow","http","workflow","agentic","ai agents","run","https","firewall","isolation","domain","use","false","commands","network","with",{"skillNo":157,"name":128,"nameZh":6,"description":129,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":158,"sourceHtmlUrl":159,"categories":160,"keywords":165,"publishedAt":49},"01M6ADA1AXWT8GAAAZ2MJV1YF1","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw-firewall\u002Fblob\u002Fmain\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw-firewall\u002Fblob\u002Fmain\u002Fskill.md",[161,162,163,164],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":134,"categoryName":135,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":137,"categoryName":138,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},[140,141,47,142,143,144,145,146,147,148,40,35,149,150,34,151,152,41,153,154,155],{"skillNo":167,"name":168,"nameZh":6,"description":169,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":170,"categories":171,"keywords":172,"publishedAt":49},"01M6AD9ZKQJBHWBVNQEERBCT0V","sandbox-filesystem-access","Configure or diagnose file and directory access, mounts, and host ACLs for AWF sandboxes.","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw-firewall\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fsandbox-filesystem-access\u002FSKILL.md",[],[173,174,175,176,45,177,178,34,179,180,181],"sandbox","sandbox filesystem access","filesystem","access","file","directory","sandboxes","host","configure",{"skillNo":183,"name":184,"nameZh":6,"description":185,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":186,"categories":187,"keywords":188,"publishedAt":49},"01M6AD9XDE32KBEV4V8SXVXQ0D","pr-finisher","Prepare an open pull request for merge from a GitHub Copilot cloud agent. Drives Reviews, local validation, and Mergeable to a ready state. Does not merge, and cannot trigger CI.","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw-firewall\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fpr-finisher\u002FSKILL.md",[],[189,190,191,192,193,9,194,195,196,197,198,199,200,201,202,203,34,204,205,206,207],"pr finisher","pr","pull","state","github copilot","pull request","merge","ci","validation","copilot","open pull request","cloud","prepare","ready","reviews","trigger","local","open","request",{"skillNo":209,"name":210,"nameZh":6,"description":211,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":212,"categories":213,"keywords":214,"publishedAt":49},"01M6AD9TTKQEWT03YCAPEK28HK","debugging-workflows","Debug GitHub Actions workflows by downloading logs, analyzing summaries, and understanding how agentic workflows and the AWF firewall work together.","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw-firewall\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fdebugging-workflows\u002FSKILL.md",[],[215,44,216,9,217,218,219,29,144,42,220,148,41,221,222,40,223,224,225,68,226],"debugging workflows","workflows","actions","github actions","agentic workflows","ls","work","how","node","analyzing","gh","cat",{"skillNo":228,"name":229,"nameZh":6,"description":230,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":231,"categories":232,"keywords":233,"publishedAt":49},"01M6AD9S2GXF6T58BMN1X7PRHM","agentic-workflows","Route gh-aw design, creation, diagnosis, patching, active debugging, upgrades, and local SDLC issue requests to the right strategies.","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw-firewall\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fagentic-workflows\u002FSKILL.md",[],[219,216,144,234,44,235,236,237,238,239,240,225,241,242],"design","route","strategies","requests","creation","active","diagnosis","upgrade","patching"]