← Back to Skills Marketplace
foxleoly

Adguard Test

by Leo Li · GitHub ↗ · v1.2.1
cross-platform ⚠ suspicious
357
Downloads
0
Stars
0
Active Installs
1
Versions
Install in OpenClaw
/install adguard-test
Description
Query AdGuard Home instances for real-time DNS stats, blocked domains, client activity, service status, and configuration details.
README (SKILL.md)

AdGuard Home Skill

🛡️ Query AdGuard Home instances for DNS statistics, blocked domains, and client activity
🛡️ 查询 AdGuard Home 实例的 DNS 统计、拦截域名和客户端活动


Features | 功能特性

  • ✅ Multi-instance support | 支持多实例配置
  • ✅ Real-time DNS query statistics | 实时 DNS 查询统计
  • ✅ Blocked domains leaderboard | 拦截域名排行
  • ✅ Active client analysis | 活跃客户端分析
  • ✅ Health status check | 健康状态检查
  • ✅ Service status monitoring | 服务状态监控
  • ✅ DNS configuration details | DNS 配置详情
  • ✅ Filter rules inspection | 过滤规则和列表
  • ✅ Recent query log | 最近查询日志
  • ✅ TLS/encryption status | TLS/加密状态

Installation | 安装方法

Method 1: ClawHub CLI (Recommended) | 方法 1: ClawHub CLI(推荐)

# Install from ClawHub registry | 从 ClawHub 安装
clawhub install adguard-home

# Verify installation | 验证安装
clawhub list | grep adguard-home

Method 2: Manual Install | 方法 2: 手动安装

# Clone the repository | 克隆仓库
git clone https://github.com/foxleoly/adguard-home-skill.git
cd adguard-home-skill

# Copy to your skills directory | 复制到技能目录
cp -r . ~/.openclaw/workspace/skills/adguard-home/

Post-Installation Setup | 安装后配置

  1. Create configuration file | 创建配置文件:

    # Edit adguard-instances.json | 编辑配置文件
    vim ~/.openclaw/workspace/adguard-instances.json
    
  2. Add your instances | 添加实例:

    {
      "instances": {
        "dns1": {
          "url": "http://192.168.1.1:80",
          "username": "admin",
          "password": "your-password"
        }
      }
    }
    
  3. Secure the config file | 保护配置文件:

    chmod 600 ~/.openclaw/workspace/adguard-instances.json
    
  4. Test the skill | 测试技能:

    /adguard stats dns1
    

Usage | 使用方法

Basic Commands | 基础命令

# Statistics & Monitoring | 统计与监控
/adguard stats [instance]           # DNS statistics | DNS 统计
/adguard top-clients [instance]     # Top 10 active clients | 活跃客户端 Top 10
/adguard top-blocked [instance]     # Top 10 blocked domains | 被拦截域名 Top 10
/adguard health [instance]          # Health check | 健康检查
/adguard status [instance]          # Service status | 服务状态

# Configuration & Rules | 配置与规则
/adguard dns-info [instance]        # DNS configuration | DNS 配置详情
/adguard filter-rules [instance]    # Filter rules and lists | 过滤规则和列表
/adguard clients [instance]         # Configured clients | 已配置的客户端
/adguard tls-status [instance]      # TLS/encryption status | TLS/加密状态

# Query Log | 查询日志
/adguard querylog [instance] [n]    # Recent n queries (default: 10) | 最近 n 条查询

Examples | 命令示例

# Query dns1 instance statistics | 查询 dns1 实例的统计
/adguard stats dns1

# Check service status | 检查服务状态
/adguard status dns1

# View DNS configuration | 查看 DNS 配置
/adguard dns-info dns1

# View filter rules | 查看过滤规则
/adguard filter-rules dns1

# View last 20 DNS queries | 查看最近 20 条 DNS 查询
/adguard querylog dns1 20

# Check TLS status | 检查 TLS 状态
/adguard tls-status dns1

# If no instance specified, uses the first configured instance | 不指定实例则使用第一个
/adguard stats

Output Examples | 输出示例

stats command | stats 命令:

📊 AdGuard Home Statistics (dns1)
Total DNS Queries: 141,647
Blocked Requests: 32,540 (23.0%)
Avg Response Time: 0.005ms

status command | status 命令:

🔧 AdGuard Home Status (dns1)
Version: v0.107.72
Running: ✅ Yes
Protection: ✅ Enabled
DNS Port: 53
HTTP Port: 1080
Language: zh-cn
DHCP Available: ✅ Yes

dns-info command | dns-info 命令:

🌐 DNS Configuration (dns1)
Protection: ✅ Enabled
Rate Limit: 20 req/s
Upstream Mode: parallel
Cache: ✅ 4MB
DNSSEC: ❌ Disabled
IPv6: ✅ Enabled

Upstream DNS Servers:
  1. https://dns.alidns.com/dns-query
  2. 192.168.1.1:53
  3. 8.8.8.8:53

filter-rules command | filter-rules 命令:

🛡️ Filter Rules (dns1)
Filtering: ✅ Enabled
Update Interval: 12 hours
User Rules: 6 custom rules

Filter Lists:
  1. ✅ AdAway Default Blocklist (6540 rules)
  2. ✅ gh_100M_block (1110461 rules)
  3. ✅ 三角洲行动黑名单 (78126 rules)

querylog command | querylog 命令:

📜 Recent DNS Queries (dns1) - Last 5 entries

1. [12:26:44 AM] 🚫 BLOCKED api.telegram.org (192.168.145.188)
2. [12:26:43 AM] 🚫 BLOCKED self.events.data.microsoft.com (192.168.145.123)
   Rule: ||events.data.microsoft.com^
3. [12:26:42 AM] ✅ OK open.feishu.cn (192.168.145.188)

Configuration | 配置说明

🔒 Security Best Practices | 安全最佳实践

⚠️ Important: Do not store plaintext credentials in configuration files. Use one of these secure methods:
⚠️ 重要: 不要在配置文件中存储明文凭证。请使用以下安全方式之一:

Option 1: Environment Variables (Recommended) | 方案一:环境变量(推荐)

Set environment variables before running commands:
运行命令前设置环境变量:

export ADGUARD_URL="http://192.168.145.249:1080"
export ADGUARD_USERNAME="admin"
export ADGUARD_PASSWORD="your-secure-password"

Option 2: 1Password CLI | 方案二:1Password CLI

Use op read to inject secrets at runtime:
使用 op read 在运行时注入密钥:

export ADGUARD_PASSWORD=$(op read "op://vault/AdGuard/credential")

Option 3: Workspace Config (Local Development Only) | 方案三:工作区配置(仅本地开发)

For local development, create adguard-instances.json in your current workspace root only:
本地开发时,仅在当前工作区根目录创建 adguard-instances.json

{
  "instances": {
    "dns1": {
      "url": "http://192.168.145.249:1080",
      "username": "admin",
      "password": "your-secure-password"
    }
  }
}

⚠️ Never commit this file to version control. Add it to .gitignore.
⚠️ 切勿将此文件提交到版本控制。将其添加到 .gitignore


Configuration Parameters | 配置参数

Parameter Description Example
url AdGuard Home URL (with port) http://192.168.145.249:1080
username Admin username admin
password Admin password (use env var or secrets manager) your-secure-password
参数 说明 示例
url AdGuard Home 访问地址(含端口) http://192.168.145.249:1080
username 管理员用户名 admin
password 管理员密码(建议使用环境变量或密钥管理) your-secure-password

Technical Details | 技术实现

  • Authentication | 认证方式: Cookie-based (POST /control/login)
  • Data API | 数据接口: GET /control/* endpoints
  • Runtime | 运行环境: Node.js (ES Module)
  • Entrypoint | 入口文件: index.js

API Endpoints Used | 使用的 API 端点

  • /control/stats - Statistics data | 统计数据
  • /control/status - Service status | 服务状态
  • /control/dns_info - DNS configuration | DNS 配置
  • /control/filtering/status - Filter rules | 过滤规则
  • /control/querylog - Query log | 查询日志
  • /control/clients - Client management | 客户端管理
  • /control/tls/status - TLS status | TLS 状态

FAQ | 常见问题

Q: Error "No AdGuard instances configured"?
Q: 提示 "No AdGuard instances configured"?

A: Ensure environment variables are set (ADGUARD_URL, ADGUARD_USERNAME, ADGUARD_PASSWORD) or create adguard-instances.json in your current workspace root.
A: 请确保已设置环境变量(ADGUARD_URLADGUARD_USERNAMEADGUARD_PASSWORD),或在当前工作区根目录创建 adguard-instances.json


Q: Authentication error when querying?
Q: 查询失败,返回认证错误?

A: Verify username/password in config file. Ensure AdGuard Home service is running.
A: 检查配置文件中的用户名密码是否正确,确认 AdGuard Home 服务正常运行。


Q: How to add more instances?
Q: 如何添加更多实例?

A: Add new key-value pairs to the instances object in adguard-instances.json.
A: 在 adguard-instances.jsoninstances 对象中添加新的键值对即可。


Q: querylog shows no data?
Q: querylog 没有数据?

A: Ensure query log is enabled in AdGuard Home settings (Settings → DNS Settings → Query log).
A: 确保 AdGuard Home 设置中已启用查询日志(设置 → DNS 设置 → 查询日志)。


Version History | 版本历史

v1.2.1 (2026-02-25) - Credential Security 🔐

Security Improvements | 安全改进:

  • Removed plaintext credential storage - No longer instructs creating config files with admin credentials
  • Environment variable support - Secure credential injection via ADGUARD_URL, ADGUARD_USERNAME, ADGUARD_PASSWORD
  • 1Password integration - Supports secrets management via op read
  • Removed multi-path search - No longer searches ~/.openclaw-*/workspace/ paths
  • Workspace-only config - Local config file only checked in skill directory (dev use)
  • Updated documentation - Security best practices prominently featured

v1.2.0 (2026-02-24) - Security Hardening 🔒

Security Improvements | 安全改进:

  • Removed command injection vulnerability - Replaced execSync + curl with native HTTPS client
  • Input validation - Sanitized instance names, commands, and parameters
  • Command whitelist - Only allowed commands can be executed
  • URL validation - Verified URL format before making requests
  • Parameter bounds - Limited querylog limit to 1-100 entries
  • No shell escaping issues - Pure JavaScript HTTP requests

Technical Changes | 技术变更:

  • Removed dependency on child_process and external curl commands
  • Implemented native http/https module for all API calls
  • Added cookie-based session management
  • Improved error handling and validation

v1.1.0 (2026-02-24) - Enhanced

New Commands | 新增命令:

  • status - Service status (version, protection, ports) | 服务状态(版本、保护、端口)
  • dns-info - DNS configuration details | DNS 配置详情
  • filter-rules - Filter rules and lists | 过滤规则和列表
  • querylog [n] - Recent DNS queries | 最近 DNS 查询
  • clients - Configured clients | 已配置的客户端
  • tls-status - TLS/encryption status | TLS/加密状态

Improvements | 改进:

  • Bilingual documentation (Chinese/English) | 中英文双语文档
  • Better error handling | 更好的错误处理
  • Enhanced output formatting | 增强的输出格式

v1.0.0 (2026-02-24) - Initial

Features | 功能:

  • stats/top-clients/top-blocked/health commands | 支持 stats/top-clients/top-blocked/health 命令
  • Multi-instance configuration support | 多实例配置支持
  • ES Module implementation | ES Module 实现

Author | 作者

Leo Li (@foxleoly)
License: MIT

Usage Guidance
This skill generally does what it says (querying your AdGuard Home instances), but don't install blindly. Before use: 1) Verify which config path the deployed code will read — SKILL.md suggests ~/.openclaw/workspace/adguard-instances.json but index.js reads adguard-instances.json next to the skill; place credentials where the code actually looks or switch to environment variables. 2) Prefer ADGUARD_URL/ADGUARD_USERNAME/ADGUARD_PASSWORD or a secrets manager (1Password) rather than plaintext files, and set file permissions (chmod 600) if you must use a file. 3) Confirm the skill origin and integrity (the registry entry shows 'adguard-test' while files reference 'adguard-home'); get the package from a trusted source (official ClawHub entry or the author's verified repo). 4) Review index.js yourself (it's bundled) to ensure no unexpected network destinations or logging of secrets, and run it in a sandbox or isolated environment before granting access to production systems. If you want help reconciling the config-path mismatch or verifying the code, provide the installed path and I can point to the exact lines to inspect.
Capability Analysis
Type: OpenClaw Skill Name: adguard-test Version: 1.2.1 The skill is designed to query AdGuard Home instances and has undergone significant security hardening. While previous versions contained critical vulnerabilities like command injection and insecure credential handling, the current version (v1.2.1) has explicitly fixed these issues by implementing robust input validation, command whitelisting, URL validation, and replacing shell execution (`execSync` + `curl`) with native Node.js HTTP clients. The `SECURITY_AUDIT.md` and `TEST_REPORT.md` files transparently detail these fixes and confirm their effectiveness. The only remaining security consideration is the user's choice to store plaintext credentials in `adguard-instances.json` for local development, which is strongly warned against in `SKILL.md` and `README.md`, with secure alternatives (environment variables, 1Password CLI) being recommended. There is no evidence of intentional malicious behavior or prompt injection attempts against the agent.
Capability Assessment
Purpose & Capability
The code and docs implement AdGuard Home querying and monitoring (HTTP API calls to user-provided AdGuard instances), which matches the stated purpose. However, there are metadata/name mismatches: registry header lists this skill as 'Adguard Test' / slug 'adguard-test', while README/manifest/commands refer to 'adguard-home' and use the ClawHub install name 'adguard-home'. This is an incoherence in packaging/metadata that could confuse installation and provenance checks.
Instruction Scope
SKILL.md and README instruct users to create/edit ~/.openclaw/workspace/adguard-instances.json (and recommend environment variables / 1Password). The runtime code (index.js) loads adguard-instances.json from the skill directory (__dirname) or from ADGUARD_* env vars — it does not read ~/.openclaw/workspace by default. This mismatch means a user who follows SKILL.md may place credentials in a different path than the skill will actually read, increasing risk of credentials being left in unexpected locations. Aside from that, instructions remain scoped to configuring AdGuard instances and do not direct reading unrelated system files or sending data to third-party endpoints.
Install Mechanism
There is no install spec that downloads external code; the package is instruction-plus-code bundled in the skill. No external download URLs or archive extraction are present. This is low install risk, but verify origin due to repository/slug mismatch and 'Source: unknown' in the registry header.
Credentials
The registry metadata lists no required credentials, but the SKILL.md/README recommend ADGUARD_URL/ADGUARD_USERNAME/ADGUARD_PASSWORD or 1Password CLI. The runtime prefers env vars and will accept a local config file containing plaintext credentials. Requesting those credentials is proportional to the stated function, but storing them in files is risky — the docs repeatedly warn against committing them and recommend chmod 600. Users should prefer environment variables or a secrets manager. The code does perform URL validation and input sanitization.
Persistence & Privilege
The skill does not request always:true or other elevated persistence. It does not modify other skills' configs. It reads a local config or environment variables and makes network calls to the user-provided AdGuard instances only.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install adguard-test
  3. After installation, invoke the skill by name or use /adguard-test
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.2.1
adguard-test v1.2.1 - Added detailed documentation (SKILL.md) with full feature list, installation, configuration, and usage instructions in English and Chinese - Describes secure setup methods for credentials, including environment variables and secrets managers - Covers all available commands, output samples, and troubleshooting steps - Documents API endpoints and authentication method used - Provides security best practices for configuration management
Metadata
Slug adguard-test
Version 1.2.1
License
All-time Installs 0
Active Installs 0
Total Versions 1
Frequently Asked Questions

What is Adguard Test?

Query AdGuard Home instances for real-time DNS stats, blocked domains, client activity, service status, and configuration details. It is an AI Agent Skill for Claude Code / OpenClaw, with 357 downloads so far.

How do I install Adguard Test?

Run "/install adguard-test" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is Adguard Test free?

Yes, Adguard Test is completely free (open-source). You can download, install and use it at no cost.

Which platforms does Adguard Test support?

Adguard Test is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created Adguard Test?

It is built and maintained by Leo Li (@foxleoly); the current version is v1.2.1.

💬 Comments