A full-coverage CLI for AdGuard Home, generated from its official OpenAPI spec
Project description
adguard-home-cli
A full-coverage CLI for AdGuard Home. Every endpoint in the AdGuard Home OpenAPI spec, exposed as a typed shell command. Generated from AdGuard Home's official OpenAPI spec using openapi-cli-gen.
Why
A CLI for AdGuard Home has been one of the most-requested community features — with dedicated feature requests asking for scripting, Infrastructure-as-Code, and automated provisioning. The project maintainers have focused on the web UI and DNS engine; there's no official CLI.
This fills the gap: every HTTP API endpoint in AdGuard Home becomes a shell command with typed flags. Useful for:
- Ansible / homelab provisioning — set filter URLs, block lists, TLS config from a playbook
- Sync across instances — dump config from one AdGuard Home, apply to another
- Monitoring scripts — query protection state, blocked counts, query logs
- Scheduled blocked-services toggles — turn Netflix on for movie night via cron
- Bulk rule management — add / remove user rules programmatically
Install
pipx install adguard-home-cli
# Or with uv
uv tool install adguard-home-cli
Setup
Point it at your AdGuard Home instance. Note: the REST API is served under /control:
export ADGUARD_HOME_CLI_BASE_URL=http://your-adguard-host:3000/control
Authentication
AdGuard Home uses HTTP Basic auth with your admin credentials:
export ADGUARD_HOME_CLI_USERNAME=admin
export ADGUARD_HOME_CLI_PASSWORD=your-password
The CLI automatically sends the Authorization: Basic ... header on every request.
Quick Start
# Server status (version, DNS addresses, running state)
adguard-home-cli global status
# Stats summary
adguard-home-cli stats info
adguard-home-cli stats stats
# Filter status (which lists are enabled, update intervals)
adguard-home-cli filtering status
# Add a new blocklist URL
adguard-home-cli filtering add-url \
--name "OISD Full" \
--url "https://big.oisd.nl/" \
--whitelist false
# Refresh all filters
adguard-home-cli filtering refresh
# Set user-defined block rules
adguard-home-cli filtering set-rules --rules '["||example.com^", "||tracker.io^"]'
# Look up a host (debugging)
adguard-home-cli filtering check-host --name doubleclick.net
# Client management
adguard-home-cli clients status
adguard-home-cli clients find
# Safe browsing / parental controls / safe search
adguard-home-cli safebrowsing status
adguard-home-cli parental status
adguard-home-cli safesearch status
# Blocked services (one-off block of Netflix, YouTube, etc.)
adguard-home-cli blocked_services list
adguard-home-cli blocked_services set --root '{"ids": ["netflix", "tiktok"]}'
# Query log
adguard-home-cli log query --limit 50
# DNS rewrites (local DNS entries)
adguard-home-cli rewrite list
adguard-home-cli rewrite add --domain home.lan --answer 192.168.1.10
Discover All Commands
# Top-level groups
adguard-home-cli --help
# Commands in a group
adguard-home-cli filtering --help
# Flags for a specific command
adguard-home-cli filtering add-url --help
Output Formats
Every command accepts --output-format:
adguard-home-cli global status --output-format table
adguard-home-cli stats info --output-format yaml
adguard-home-cli filtering status --output-format raw
Command Groups
| Group | What it covers |
|---|---|
global |
Server status, DNS config, protection toggle, profile, updates |
install |
Initial setup wizard (address discovery, configure, check-config) |
filtering |
Block lists, allow lists, user rules, host lookup |
clients |
Per-client access lists and settings |
dhcp |
DHCP server + static leases |
log |
Query log config + search |
stats |
Query statistics + config |
blocked_services |
Time-scheduled service blocking (Netflix, TikTok, etc.) |
safebrowsing |
Google Safe Browsing toggle |
parental |
Parental control toggle |
safesearch |
Safe search enforcement |
rewrite |
Local DNS rewrites (map domains to IPs) |
tls |
HTTPS / DNS-over-TLS / DNS-over-HTTPS config |
mobileconfig |
Generate iOS/macOS mobile config profiles |
i18n |
UI language |
Real Example: Bootstrap a New AdGuard Home Instance
#!/usr/bin/env bash
set -e
export ADGUARD_HOME_CLI_BASE_URL=http://new-adguard:3000/control
export ADGUARD_HOME_CLI_USERNAME=admin
export ADGUARD_HOME_CLI_PASSWORD=$ADMIN_PASSWORD
# Add block lists
adguard-home-cli filtering add-url --name "OISD" --url "https://big.oisd.nl/" --whitelist false
adguard-home-cli filtering add-url --name "StevenBlack" --url "https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts" --whitelist false
# Refresh
adguard-home-cli filtering refresh
# Add local rewrites
adguard-home-cli rewrite add --domain router.lan --answer 192.168.1.1
adguard-home-cli rewrite add --domain nas.lan --answer 192.168.1.20
# Enable safe browsing + parental
adguard-home-cli safebrowsing enable
adguard-home-cli parental enable
# Verify
adguard-home-cli global status --output-format json | jq .protection_enabled
How It Works
This package is a thin wrapper:
- Embeds the AdGuard Home OpenAPI spec (
spec.yaml) - Delegates CLI generation to openapi-cli-gen at runtime
Since it's spec-driven, new AdGuard Home endpoints show up automatically on regeneration — no manual wrapping.
License
MIT. Not affiliated with AdGuard — this is an unofficial community CLI built on top of their public OpenAPI spec.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file adguard_home_cli-0.1.0.tar.gz.
File metadata
- Download URL: adguard_home_cli-0.1.0.tar.gz
- Upload date:
- Size: 17.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0732ae394706cdf261d9488e662e76188823afb39738ab4d65e0d6612c717723
|
|
| MD5 |
847c0ae973b9a65af68c22e1a11b9886
|
|
| BLAKE2b-256 |
176593cec5ae31f95ab012321e923115609b81e64e5e239b12c79ca355b13c26
|
File details
Details for the file adguard_home_cli-0.1.0-py3-none-any.whl.
File metadata
- Download URL: adguard_home_cli-0.1.0-py3-none-any.whl
- Upload date:
- Size: 18.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
98788d76ad16287af63dc29e9d2d81b398d15a3bb5b37ad5c6ed5f2a09eb270c
|
|
| MD5 |
5a83d0bd65bcfe16205acb36cf9be6bd
|
|
| BLAKE2b-256 |
0c8aecfc56fec51a1f59131138cb364b7f0f62a9c8e0e3e917346d3c5f91851c
|