Back to Cli Anything

AdGuardHome - CLI Harness SOP

adguardhome/agent-harness/ADGUARDHOME.md

latest3.0 KB
Original Source

AdGuardHome - CLI Harness SOP

Overview

AdGuardHome is a DNS-based ad blocker and privacy protection server written in Go. It exposes a REST HTTP API with 58 endpoints organized in 14 tag groups, secured with HTTP Basic Auth.

Real software: The running AdGuardHome HTTP API (not a binary to invoke directly). CLI role: Generate structured commands - call the real API - verify responses.

Architecture

  • API base: http://<host>:<port>/control/
  • Auth: HTTP Basic Auth (Authorization: Basic base64(user:pass))
  • Port: 3000 by default
  • OpenAPI spec: openapi/openapi.yaml in the AdGuardHome source

API Tag Groups

GroupDescriptionKey Endpoints
globalServer settings and controls/status, /version, /restart
filteringRule-based filtering/filtering/status, /filtering/add_url, /filtering/remove_url
blocked_servicesBlock service categories/blocked_services/get, /blocked_services/set
clientsKnown clients/clients, /clients/add, /clients/delete
statsDNS query statistics/stats, /stats_reset, /stats_config
logQuery log/querylog, /querylog_config, /querylog_clear
dhcpBuilt-in DHCP server/dhcp/status, /dhcp/leases, /dhcp/set_config
rewriteDNS rewrites/rewrite/list, /rewrite/add, /rewrite/delete
parentalAdult content blocking/parental/status, /parental/enable, /parental/disable
safebrowsingMalware/phishing blocking/safebrowsing/status, /safebrowsing/enable, /safebrowsing/disable
safesearchSafe search enforcement/safesearch/status, /safesearch/enable, /safesearch/disable
tlsHTTPS/DoH/DoT settings/tls/status, /tls/configure, /tls/validate

CLI Command Map

cli-anything-adguardhome
├── config show / save / test
├── server status / version / restart
├── filter list / add / remove / enable / disable / refresh / status / toggle
├── blocking parental status/enable/disable
│          safebrowsing status/enable/disable
│          safesearch status/enable/disable
├── blocked-services list / set
├── clients list / add / remove / show
├── stats show / reset / config
├── log show / config / clear
├── rewrite list / add / remove
├── dhcp status / leases / add-static / remove-static
└── tls status

Connection Config

Settings resolved in order:

  1. CLI flags (--host, --port, --username, --password)
  2. Environment vars (AGH_HOST, AGH_PORT, AGH_USERNAME, AGH_PASSWORD)
  3. Config file (~/.config/cli-anything-adguardhome.json)
  4. Defaults: localhost:3000

Testing Strategy

  • Unit tests: Mock HTTP calls via unittest.mock - no real AdGuardHome needed
  • E2E tests: Spin up adguard/adguardhome via Docker on port 3001 for isolation
  • Subprocess tests: _resolve_cli("cli-anything-adguardhome") tests the installed CLI binary