{"id":"88252226-d735-4c0c-8f86-c2cf4db6ebee","entityType":"agent","slug":"clawhub-arseni-mik-unifi-advisor","name":"UniFi Advisor","canonicalUrl":"https://www.xpersona.co/agent/clawhub-arseni-mik-unifi-advisor","canonicalPath":"/agent/clawhub-arseni-mik-unifi-advisor","generatedAt":"2026-10-14T05:16:33.278Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T21:02:20.465Z","emptyReason":null},"description":"Read-only UniFi network advisor covering the Site Manager cloud API and the Network Integration API. Query devices, clients, networks, firewall zones and pol...","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 993 downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s172mg1aabwe4y035d4cj7pk2186agtj:unifi-advisor","sourceUrl":"https://clawhub.ai/arseni-mik/unifi-advisor","homepage":"https://clawhub.ai/arseni-mik/skills/unifi-advisor","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/arseni-mik/unifi-advisor","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/arseni-mik/skills/unifi-advisor","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":60,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"UniFi Advisor technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T21:02:20.465Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T21:02:20.465Z","emptyReason":null},"stars":null,"forks":null,"downloads":993,"likes":null,"task":null,"library":null,"packageName":null,"latestVersion":"1.0.2","tractionLabel":"993 downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T21:02:20.402Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T21:02:20.465Z","lastCrawledAt":"2026-10-11T21:02:20.402Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T21:02:20.402Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.2","createdAt":"2026-05-31T13:31:42.431Z","changelog":"Move site library cache to ~/.openclaw for backup coverage","fileCount":5,"zipByteSize":12980},{"version":"1.0.1","createdAt":"2026-05-08T11:38:28.791Z","changelog":"added refernce to github source","fileCount":5,"zipByteSize":13117},{"version":"1.0.0","createdAt":"2026-05-08T11:32:37.259Z","changelog":"Initial public release.","fileCount":4,"zipByteSize":11674}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s172mg1aabwe4y035d4cj7pk2186agtj:unifi-advisor","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s172mg1aabwe4y035d4cj7pk2186agtj:unifi-advisor` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/arseni-mik/unifi-advisor before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-arseni-mik-unifi-advisor/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-arseni-mik-unifi-advisor/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-arseni-mik-unifi-advisor/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-arseni-mik-unifi-advisor/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-arseni-mik-unifi-advisor/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-arseni-mik-unifi-advisor/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-14T05:16:33.277Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-arseni-mik-unifi-advisor/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-arseni-mik-unifi-advisor/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-arseni-mik-unifi-advisor/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-arseni-mik-unifi-advisor/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T21:02:20.465Z","emptyReason":null},"readme":"Skill: UniFi Advisor\n\nOwner: arseni-mik\n\nSummary: Read-only UniFi network advisor covering the Site Manager cloud API and the Network Integration API. Query devices, clients, networks, firewall zones and pol...\n\nTags: latest:1.0.2\n\nVersion history:\n\nv1.0.2 | 2026-05-31T13:31:42.431Z | user\n\nMove site library cache to ~/.openclaw for backup coverage\n\nv1.0.1 | 2026-05-08T11:38:28.791Z | user\n\nadded refernce to github source\n\nv1.0.0 | 2026-05-08T11:32:37.259Z | user\n\nInitial public release.\n\nArchive index:\n\nArchive v1.0.2: 5 files, 12980 bytes\n\nFiles: README.md (5245b), scripts/unifi.py (21274b), skill-card.md (2243b), SKILL.md (10025b), _meta.json (132b)\n\nFile v1.0.2:SKILL.md\n\n---\nname: unifi-advisor\ndescription: Read-only UniFi network advisor covering the Site Manager cloud API and the Network Integration API. Query devices, clients, networks, firewall zones and policies, ACL rules, DNS policies, VPN tunnels, DPI, ISP metrics, and related UniFi state. Use when inspecting UniFi environments with GET-only operations and no writes.\nmetadata: {\"openclaw\":{\"requires\":{\"env\":[\"UNIFI_API_KEY\"],\"bins\":[\"python3\"]},\"primaryEnv\":\"UNIFI_API_KEY\"}}\n---\n\n# UniFi Network Advisor\n\nRead-only skill covering two official UniFi API surfaces. All operations are GET-only — no writes, no mutations of any kind.\n\n## API surfaces\n\nEverything goes through `https://api.ui.com`. No direct local connection required.\n\n| Prefix | Surface | Proxied via | Env vars needed |\n|---|---|---|---|\n| SM | Site Manager | `api.ui.com/v1/...` | `UNIFI_API_KEY` |\n| NET | Network Integration | `api.ui.com/v1/connector/consoles/{hostId}/proxy/network/integration/v1/...` | `UNIFI_API_KEY` (host/site resolved automatically) |\n\n## How to call the script\n\n```\npython3 {baseDir}/scripts/unifi.py <subcommand> [--site SITE] [--id ID] [--limit N] [--next-token TOKEN] [subcommand-specific flags]\n```\n\nSome subcommands require additional flags — see the table below. Use `python3 {baseDir}/scripts/unifi.py list` to see all subcommands with descriptions.\n\n## Subcommands\n\n### Site Manager (SM) — cloud, single API key\n\n| Subcommand | Endpoint | Required flags | Description |\n|---|---|---|---|\n| `hosts` | GET /v1/hosts | — | All UniFi OS consoles on the UI account |\n| `host` | GET /v1/hosts/{id} | `--id` | Console details |\n| `sites` | GET /v1/sites | — | All sites across all consoles |\n| `cloud-devices` | GET /v1/devices | — | All devices across all sites |\n| `isp-metrics` | GET /ea/isp-metrics/{type} | — | ISP performance metrics |\n| `sdwan` | GET /v1/sd-wan-configs | — | SD-WAN configurations |\n| `sdwan-config` | GET /v1/sd-wan-configs/{id} | `--id` | Specific SD-WAN config |\n| `sdwan-status` | GET /v1/sd-wan-configs/{id}/status | `--id` | SD-WAN deployment status |\n\n### Network Integration (NET) — proxied via api.ui.com, site resolved automatically\n\n| Subcommand | Endpoint | Required flags | Description |\n|---|---|---|---|\n| `info` | GET /v1/info | — | Controller version and capabilities |\n| `net-sites` | GET /v1/sites | — | Sites managed by this console |\n| `devices` | GET /v1/sites/{siteId}/devices | — | Adopted devices overview |\n| `device` | GET /v1/sites/{siteId}/devices/{id} | `--id` | Device details |\n| `device-stats` | GET /v1/sites/{siteId}/devices/{id}/statistics/latest | `--id` | Latest device statistics |\n| `devices-pending` | GET /v1/pending-devices | — | Devices pending adoption (console-scoped) |\n| `clients` | GET /v1/sites/{siteId}/clients | — | Connected clients overview |\n| `client` | GET /v1/sites/{siteId}/clients/{id} | `--id` | Client details |\n| `networks` | GET /v1/sites/{siteId}/networks | — | Networks overview |\n| `network` | GET /v1/sites/{siteId}/networks/{id} | `--id` | Network details |\n| `network-refs` | GET /v1/sites/{siteId}/networks/{id}/references | `--id` | What references a specific network (devices, clients, WiFi) |\n| `wifi` | GET /v1/sites/{siteId}/wifi/broadcasts | — | WiFi broadcast (SSID) overview |\n| `wifi-details` | GET /v1/sites/{siteId}/wifi/broadcasts/{id} | `--id` | WiFi broadcast details |\n| `firewall-zones` | GET /v1/sites/{siteId}/firewall/zones | — | Firewall zones |\n| `firewall-zone` | GET /v1/sites/{siteId}/firewall/zones/{id} | `--id` | Firewall zone details |\n| `firewall-policies` | GET /v1/sites/{siteId}/firewall/policies | — | Firewall policies |\n| `firewall-policy` | GET /v1/sites/{siteId}/firewall/policies/{id} | `--id` | Firewall policy details |\n| `firewall-ordering` | GET /v1/sites/{siteId}/firewall/policies/ordering | `--from-zone` `--to-zone` | Policy ordering between two zones |\n| `acl-rules` | GET /v1/sites/{siteId}/acl-rules | — | ACL rules |\n| `acl-rule` | GET /v1/sites/{siteId}/acl-rules/{id} | `--id` | ACL rule details |\n| `acl-ordering` | GET /v1/sites/{siteId}/acl-rules/ordering | — | ACL rule ordering |\n| `dns-policies` | GET /v1/sites/{siteId}/dns/policies | — | DNS policies |\n| `dns-policy` | GET /v1/sites/{siteId}/dns/policies/{id} | `--id` | DNS policy details |\n| `traffic-lists` | GET /v1/sites/{siteId}/traffic-matching-lists | — | Traffic matching lists |\n| `traffic-list` | GET /v1/sites/{siteId}/traffic-matching-lists/{id} | `--id` | Traffic matching list details |\n| `vouchers` | GET /v1/sites/{siteId}/hotspot/vouchers | — | Hotspot vouchers |\n| `voucher` | GET /v1/sites/{siteId}/hotspot/vouchers/{id} | `--id` | Voucher details |\n| `wans` | GET /v1/sites/{siteId}/wans | — | WAN interfaces overview |\n| `vpn-tunnels` | GET /v1/sites/{siteId}/vpn/site-to-site-tunnels | — | Site-to-site VPN tunnels |\n| `vpn-servers` | GET /v1/sites/{siteId}/vpn/servers | — | VPN server configurations |\n| `radius` | GET /v1/sites/{siteId}/radius/profiles | — | RADIUS profiles |\n| `device-tags` | GET /v1/sites/{siteId}/device-tags | — | Device tags |\n| `dpi-categories` | GET /v1/dpi/categories | — | DPI application categories |\n| `dpi-applications` | GET /v1/dpi/applications | — | DPI applications |\n| `countries` | GET /v1/countries | — | Countries list (for geo-IP rules) |\n\n## Examples\n\n```bash\n# List all sites and pick one to work with\npython3 {baseDir}/scripts/unifi.py library\n\n# firewall-ordering: get zone IDs first, then query ordering between two of them\n# --from-zone and --to-zone must be real UUIDs from the firewall-zones output\npython3 {baseDir}/scripts/unifi.py firewall-zones --site hq\npython3 {baseDir}/scripts/unifi.py firewall-ordering --site hq --from-zone <zoneId> --to-zone <zoneId>\n\n# network-refs: get network list first, then query references for a specific network\npython3 {baseDir}/scripts/unifi.py networks --site hq\npython3 {baseDir}/scripts/unifi.py network-refs --site hq --id <networkId>\n\n# sdwan-config / sdwan-status: list configs first to get an ID\npython3 {baseDir}/scripts/unifi.py sdwan\npython3 {baseDir}/scripts/unifi.py sdwan-config --id <configId>\npython3 {baseDir}/scripts/unifi.py sdwan-status --id <configId>\n```\n\n## Site library\n\nOn every invocation the skill builds a site library by joining:\n- `GET /v1/hosts` — host names (user-set), hardware model, connection state, `apiIntegration` flag\n- `GET /v1/sites` — `siteId` per `hostId`\n\nLabels come directly from the name the user set in the UniFi UI — e.g. \"HQ\" → `hq`, \"Branch Office\" → `branch-office`, \"Remote Site\" → `remote-site`. The library is cached in `~/.openclaw/unifi-skill.json` for 15 minutes to avoid redundant API calls.\n\nHosts without Network API support (e.g. a NAS device with `apiIntegration: false`) are included in the library but will return a clear error if targeted with NET subcommands.\n\nRun `library` to see the current library including state, hardware, and API capability of each host.\n\n## Site selection\n\nAll NET subcommands accept `--site <hint>`. The hint is matched against label, name, hardware shortname, hardware name, timezone, and IP — partial matches work.\n\n| User says | Use |\n|---|---|\n| \"the main office network\" | `--site hq` |\n| \"remote site firewall\" | `--site remote-site` |\n| \"the branch office\" | `--site branch-office` |\n| \"the Dream Machine Pro\" | `--site udmpro` |\n| \"the warehouse AP\" | `--site warehouse` |\n\nIf `--site` is omitted the first entry in the library is used. If the hint is ambiguous the skill lists the matching labels and asks for a more specific hint.\n\n**Always specify `--site` when the user mentions a location or device.** When the user says \"my network\" without specifying, run `library` first to show what sites are available and ask which one they mean.\n\n## How to give advice\n\n### Devices (`devices`, `device`)\n- `status != \"online\"` → offline or disconnected — surface to user\n- `firmwareStatus: \"updateAvailable\"` → firmware update pending\n- `device-stats` → CPU/memory/uptime signals for performance issues\n\n### Clients (`clients`, `client`)\n- High noise or weak signal → coverage gap, suggest AP placement review\n- Unexpected clients on sensitive VLANs → flag for review\n\n### Firewall (`firewall-policies`, `firewall-zones`, `acl-rules`)\n- Policies allowing all traffic between sensitive zones → flag as overly broad\n- Cross-zone allow rules → confirm intentional with user\n- Check `firewall-ordering` — rules are evaluated in order; misplaced rules cause unexpected behaviour\n\n### DNS (`dns-policies`)\n- Custom DNS policies can bypass filtering — flag any unexpected overrides\n\n### VPN (`vpn-tunnels`, `vpn-servers`)\n- Tunnel state down → connectivity issue to surface\n- Verify expected peers are configured\n\n### ISP metrics (`isp-metrics`)\n- Packet loss > 1% or latency spikes → WAN quality issue, advise checking with ISP\n\n## Notes\n\n- `network-refs` requires `--id` (a network ID). Only networks with active references (devices, clients, or WiFi assigned to them) return data — unused networks return a handled error: `\"Network '...' has no active references\"`. Run `networks` first to list all networks, then pass the ID of one that carries traffic.\n- `firewall-ordering` requires both `--from-zone` and `--to-zone`. Run `firewall-zones` first to list zone IDs. The API returns the ordered policy IDs for traffic flowing from the source zone to the destination zone.\n- `sdwan-config` and `sdwan-status` require `--id`. Run `sdwan` first to list configs and get an ID. These return empty on accounts without SD-WAN configured.\n\n## Source & contributing\n\nSource code, issue tracker, and contributions: [github.com/arseni-mik/open_claw-unifi-skill](https://github.com/arseni-mik/open_claw-unifi-skill/tree/main)\n\n## Constraints\n\n- All operations are GET-only. Never suggest using this skill to make changes.\n- Guide the user to make changes in the UniFi dashboard or mobile app.\n- Do not expose raw API keys in responses.\n\nFile v1.0.2:README.md\n\n# OpenClaw UniFi Skill\n\nA read-only [OpenClaw](https://openclaw.ai) skill that lets your AI assistant query your UniFi network and give advice on devices, clients, firewall configuration, VPN tunnels, ISP performance, and more — GET-only, no writes of any kind.\n\n## What it does\n\nCovers two official UniFi API surfaces:\n\n**Site Manager API** (cloud, cross-site):\n- Lists all consoles, sites, and devices on your UI account\n- ISP performance metrics and SD-WAN configurations\n\n**Network Integration API** (proxied via api.ui.com):\n- Devices, clients, networks, WiFi SSIDs\n- Firewall zones, policies, ACL rules, DNS policies\n- VPN tunnels and servers, WAN interfaces\n- Hotspot vouchers, RADIUS profiles, device tags\n- DPI categories and applications\n\n**All queries are GET-only. No writes, no mutations.**\n\n## Structure\n\n```\nopen_claw-unifi-skill/\n├── SKILL.md           # Skill definition and agent instructions\n└── scripts/\n    └── unifi.py       # Query script\n```\n\n## Requirements\n\n- A UI account at [unifi.ui.com](https://unifi.ui.com)\n- Python 3 on the host running OpenClaw\n\n## Setup\n\n### 1. Generate an API key\n\nSign in at [unifi.ui.com](https://unifi.ui.com) → **Settings → API Keys** → create a new key.\nThe same key works for both the Site Manager and Network Integration APIs.\n\n### 2. Set the API key on your OpenClaw host\n\n```bash\nexport UNIFI_API_KEY=your-api-key-here\n```\n\nThat's it. Host and site IDs are discovered automatically from your UI account on every invocation (cached for 15 minutes). No other env vars needed.\n\n### 3. Install the skill\n\n```bash\n# From ClawHub (once published):\nopenclaw skills install unifi-advisor\n\n# Or locally:\nopenclaw skills install /path/to/open_claw-unifi-skill\n```\n\n## Usage\n\nAsk your assistant naturally:\n\n- *\"Are all my UniFi devices online?\"*\n- *\"Which clients are connected right now?\"*\n- *\"Show me my firewall policies and check for anything too broad\"*\n- *\"Is my VPN tunnel up?\"*\n- *\"How is my ISP performing?\"*\n- *\"What networks and VLANs do I have configured?\"*\n\nIf you have multiple sites, specify which one: *\"Check the firewall on my HQ site\"* or *\"What clients are on the branch office network?\"*\n\nOr call directly for testing:\n\n```bash\npython3 scripts/unifi.py list                         # all available subcommands\npython3 scripts/unifi.py library                      # show discovered sites\npython3 scripts/unifi.py devices --site hq            # adopted devices on a specific site\npython3 scripts/unifi.py clients --limit 20           # connected clients\npython3 scripts/unifi.py firewall-policies            # firewall policies\npython3 scripts/unifi.py isp-metrics --metric-type 1h # ISP performance\n```\n\n## All subcommands\n\n### Site Manager (cloud)\n\n| Subcommand | Description |\n|---|---|\n| `library` | Show discovered sites with labels, state, and API capabilities |\n| `hosts` | All UniFi OS consoles on the UI account |\n| `host` | Console details (`--id` required) |\n| `sites` | All sites across all consoles |\n| `cloud-devices` | All devices across all sites |\n| `isp-metrics` | ISP performance metrics (`--metric-type 1h\\|5m`) |\n| `sdwan` | SD-WAN configurations |\n| `sdwan-config` | SD-WAN config details (`--id` required) |\n| `sdwan-status` | SD-WAN deployment status (`--id` required) |\n\n### Network Integration (per-site, use `--site <label>`)\n\n| Subcommand | Description |\n|---|---|\n| `info` | Controller version and capabilities |\n| `net-sites` | Sites managed by this console |\n| `devices` | Adopted devices overview |\n| `device` | Device details (`--id` required) |\n| `device-stats` | Latest device statistics (`--id` required) |\n| `devices-pending` | Devices pending adoption |\n| `clients` | Connected clients overview |\n| `client` | Client details (`--id` required) |\n| `networks` | Networks overview |\n| `network` | Network details (`--id` required) |\n| `network-refs` | References to a network — devices, clients, WiFi (`--id` required; use a network with active traffic) |\n| `wifi` | WiFi broadcast (SSID) overview |\n| `wifi-details` | WiFi broadcast details (`--id` required) |\n| `firewall-zones` | Firewall zones |\n| `firewall-zone` | Firewall zone details (`--id` required) |\n| `firewall-policies` | Firewall policies |\n| `firewall-policy` | Firewall policy details (`--id` required) |\n| `firewall-ordering` | Firewall policy ordering between two zones (`--from-zone` and `--to-zone` required) |\n| `acl-rules` | ACL rules |\n| `acl-rule` | ACL rule details (`--id` required) |\n| `acl-ordering` | ACL rule ordering |\n| `dns-policies` | DNS policies |\n| `dns-policy` | DNS policy details (`--id` required) |\n| `traffic-lists` | Traffic matching lists |\n| `traffic-list` | Traffic matching list details (`--id` required) |\n| `vouchers` | Hotspot vouchers |\n| `voucher` | Voucher details (`--id` required) |\n| `wans` | WAN interfaces overview |\n| `vpn-tunnels` | Site-to-site VPN tunnels |\n| `vpn-servers` | VPN server configurations |\n| `radius` | RADIUS profiles |\n| `device-tags` | Device tags |\n| `dpi-categories` | DPI application categories |\n| `dpi-applications` | DPI applications |\n| `countries` | Countries list (for geo-IP firewall rules) |\n\n## License\n\nMIT-0 — do whatever you want with it, no attribution required.\n\nFile v1.0.2:_meta.json\n\n{\n  \"ownerId\": \"kn74nm91h4fsbqyqpypsxv4gj586bqnn\",\n  \"slug\": \"unifi-advisor\",\n  \"version\": \"1.0.2\",\n  \"publishedAt\": 1780234302431\n}\n\nFile v1.0.2:skill-card.md\n\n## Description:\n\nRead-only UniFi network advisor covering the Site Manager cloud API and the Network Integration API for devices, clients, networks, firewall policy, VPN, DPI, ISP metrics, and related UniFi state.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[arseni-mik](https://clawhub.ai/user/arseni-mik)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nNetwork operators, IT administrators, and support engineers use this skill to inspect UniFi environments, query read-only API state, and receive guidance about device health, clients, firewall policy, VPN status, ISP metrics, and related network configuration.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can expose sensitive UniFi account, network inventory, client, firewall, VPN, voucher, IP address, and firmware information.\n\nMitigation: Install and run it only where read access to the UniFi cloud account and returned network details are acceptable, and treat outputs as confidential.\n\nRisk: Site inventory metadata is cached locally for about 15 minutes without explicit permission hardening by the script.\n\nMitigation: Use the skill on trusted hosts and account profiles where local cache files are protected by the surrounding operating system permissions.\n\n## Reference(s):\n\n- [ClawHub Skill Page](https://clawhub.ai/arseni-mik/skills/unifi-advisor)\n- [OpenClaw](https://openclaw.ai)\n- [UniFi Portal](https://unifi.ui.com)\n- [UniFi API Host](https://api.ui.com)\n\n## Skill Output:\n\n**Output Type(s):** [guidance, shell commands, configuration, text]\n\n**Output Format:** [Markdown with inline shell commands and summarized JSON API results]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Outputs may include sensitive network inventory, client, firewall, VPN, IP address, voucher, firmware, and performance details from the user's UniFi account.]\n\n## Skill Version(s):\n\n1.0.2 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.1: 5 files, 13117 bytes\n\nFiles: README.md (5245b), scripts/unifi.py (21261b), skill-card.md (2634b), SKILL.md (10016b), _meta.json (132b)\n\nFile v1.0.1:SKILL.md\n\n---\nname: unifi-advisor\ndescription: Read-only UniFi network advisor covering the Site Manager cloud API and the Network Integration API. Query devices, clients, networks, firewall zones and policies, ACL rules, DNS policies, VPN tunnels, DPI, ISP metrics, and related UniFi state. Use when inspecting UniFi environments with GET-only operations and no writes.\nmetadata: {\"openclaw\":{\"requires\":{\"env\":[\"UNIFI_API_KEY\"],\"bins\":[\"python3\"]},\"primaryEnv\":\"UNIFI_API_KEY\"}}\n---\n\n# UniFi Network Advisor\n\nRead-only skill covering two official UniFi API surfaces. All operations are GET-only — no writes, no mutations of any kind.\n\n## API surfaces\n\nEverything goes through `https://api.ui.com`. No direct local connection required.\n\n| Prefix | Surface | Proxied via | Env vars needed |\n|---|---|---|---|\n| SM | Site Manager | `api.ui.com/v1/...` | `UNIFI_API_KEY` |\n| NET | Network Integration | `api.ui.com/v1/connector/consoles/{hostId}/proxy/network/integration/v1/...` | `UNIFI_API_KEY` (host/site resolved automatically) |\n\n## How to call the script\n\n```\npython3 {baseDir}/scripts/unifi.py <subcommand> [--site SITE] [--id ID] [--limit N] [--next-token TOKEN] [subcommand-specific flags]\n```\n\nSome subcommands require additional flags — see the table below. Use `python3 {baseDir}/scripts/unifi.py list` to see all subcommands with descriptions.\n\n## Subcommands\n\n### Site Manager (SM) — cloud, single API key\n\n| Subcommand | Endpoint | Required flags | Description |\n|---|---|---|---|\n| `hosts` | GET /v1/hosts | — | All UniFi OS consoles on the UI account |\n| `host` | GET /v1/hosts/{id} | `--id` | Console details |\n| `sites` | GET /v1/sites | — | All sites across all consoles |\n| `cloud-devices` | GET /v1/devices | — | All devices across all sites |\n| `isp-metrics` | GET /ea/isp-metrics/{type} | — | ISP performance metrics |\n| `sdwan` | GET /v1/sd-wan-configs | — | SD-WAN configurations |\n| `sdwan-config` | GET /v1/sd-wan-configs/{id} | `--id` | Specific SD-WAN config |\n| `sdwan-status` | GET /v1/sd-wan-configs/{id}/status | `--id` | SD-WAN deployment status |\n\n### Network Integration (NET) — proxied via api.ui.com, site resolved automatically\n\n| Subcommand | Endpoint | Required flags | Description |\n|---|---|---|---|\n| `info` | GET /v1/info | — | Controller version and capabilities |\n| `net-sites` | GET /v1/sites | — | Sites managed by this console |\n| `devices` | GET /v1/sites/{siteId}/devices | — | Adopted devices overview |\n| `device` | GET /v1/sites/{siteId}/devices/{id} | `--id` | Device details |\n| `device-stats` | GET /v1/sites/{siteId}/devices/{id}/statistics/latest | `--id` | Latest device statistics |\n| `devices-pending` | GET /v1/pending-devices | — | Devices pending adoption (console-scoped) |\n| `clients` | GET /v1/sites/{siteId}/clients | — | Connected clients overview |\n| `client` | GET /v1/sites/{siteId}/clients/{id} | `--id` | Client details |\n| `networks` | GET /v1/sites/{siteId}/networks | — | Networks overview |\n| `network` | GET /v1/sites/{siteId}/networks/{id} | `--id` | Network details |\n| `network-refs` | GET /v1/sites/{siteId}/networks/{id}/references | `--id` | What references a specific network (devices, clients, WiFi) |\n| `wifi` | GET /v1/sites/{siteId}/wifi/broadcasts | — | WiFi broadcast (SSID) overview |\n| `wifi-details` | GET /v1/sites/{siteId}/wifi/broadcasts/{id} | `--id` | WiFi broadcast details |\n| `firewall-zones` | GET /v1/sites/{siteId}/firewall/zones | — | Firewall zones |\n| `firewall-zone` | GET /v1/sites/{siteId}/firewall/zones/{id} | `--id` | Firewall zone details |\n| `firewall-policies` | GET /v1/sites/{siteId}/firewall/policies | — | Firewall policies |\n| `firewall-policy` | GET /v1/sites/{siteId}/firewall/policies/{id} | `--id` | Firewall policy details |\n| `firewall-ordering` | GET /v1/sites/{siteId}/firewall/policies/ordering | `--from-zone` `--to-zone` | Policy ordering between two zones |\n| `acl-rules` | GET /v1/sites/{siteId}/acl-rules | — | ACL rules |\n| `acl-rule` | GET /v1/sites/{siteId}/acl-rules/{id} | `--id` | ACL rule details |\n| `acl-ordering` | GET /v1/sites/{siteId}/acl-rules/ordering | — | ACL rule ordering |\n| `dns-policies` | GET /v1/sites/{siteId}/dns/policies | — | DNS policies |\n| `dns-policy` | GET /v1/sites/{siteId}/dns/policies/{id} | `--id` | DNS policy details |\n| `traffic-lists` | GET /v1/sites/{siteId}/traffic-matching-lists | — | Traffic matching lists |\n| `traffic-list` | GET /v1/sites/{siteId}/traffic-matching-lists/{id} | `--id` | Traffic matching list details |\n| `vouchers` | GET /v1/sites/{siteId}/hotspot/vouchers | — | Hotspot vouchers |\n| `voucher` | GET /v1/sites/{siteId}/hotspot/vouchers/{id} | `--id` | Voucher details |\n| `wans` | GET /v1/sites/{siteId}/wans | — | WAN interfaces overview |\n| `vpn-tunnels` | GET /v1/sites/{siteId}/vpn/site-to-site-tunnels | — | Site-to-site VPN tunnels |\n| `vpn-servers` | GET /v1/sites/{siteId}/vpn/servers | — | VPN server configurations |\n| `radius` | GET /v1/sites/{siteId}/radius/profiles | — | RADIUS profiles |\n| `device-tags` | GET /v1/sites/{siteId}/device-tags | — | Device tags |\n| `dpi-categories` | GET /v1/dpi/categories | — | DPI application categories |\n| `dpi-applications` | GET /v1/dpi/applications | — | DPI applications |\n| `countries` | GET /v1/countries | — | Countries list (for geo-IP rules) |\n\n## Examples\n\n```bash\n# List all sites and pick one to work with\npython3 {baseDir}/scripts/unifi.py library\n\n# firewall-ordering: get zone IDs first, then query ordering between two of them\n# --from-zone and --to-zone must be real UUIDs from the firewall-zones output\npython3 {baseDir}/scripts/unifi.py firewall-zones --site hq\npython3 {baseDir}/scripts/unifi.py firewall-ordering --site hq --from-zone <zoneId> --to-zone <zoneId>\n\n# network-refs: get network list first, then query references for a specific network\npython3 {baseDir}/scripts/unifi.py networks --site hq\npython3 {baseDir}/scripts/unifi.py network-refs --site hq --id <networkId>\n\n# sdwan-config / sdwan-status: list configs first to get an ID\npython3 {baseDir}/scripts/unifi.py sdwan\npython3 {baseDir}/scripts/unifi.py sdwan-config --id <configId>\npython3 {baseDir}/scripts/unifi.py sdwan-status --id <configId>\n```\n\n## Site library\n\nOn every invocation the skill builds a site library by joining:\n- `GET /v1/hosts` — host names (user-set), hardware model, connection state, `apiIntegration` flag\n- `GET /v1/sites` — `siteId` per `hostId`\n\nLabels come directly from the name the user set in the UniFi UI — e.g. \"HQ\" → `hq`, \"Branch Office\" → `branch-office`, \"Remote Site\" → `remote-site`. The library is cached in `~/.unifi-skill.json` for 15 minutes to avoid redundant API calls.\n\nHosts without Network API support (e.g. a NAS device with `apiIntegration: false`) are included in the library but will return a clear error if targeted with NET subcommands.\n\nRun `library` to see the current library including state, hardware, and API capability of each host.\n\n## Site selection\n\nAll NET subcommands accept `--site <hint>`. The hint is matched against label, name, hardware shortname, hardware name, timezone, and IP — partial matches work.\n\n| User says | Use |\n|---|---|\n| \"the main office network\" | `--site hq` |\n| \"remote site firewall\" | `--site remote-site` |\n| \"the branch office\" | `--site branch-office` |\n| \"the Dream Machine Pro\" | `--site udmpro` |\n| \"the warehouse AP\" | `--site warehouse` |\n\nIf `--site` is omitted the first entry in the library is used. If the hint is ambiguous the skill lists the matching labels and asks for a more specific hint.\n\n**Always specify `--site` when the user mentions a location or device.** When the user says \"my network\" without specifying, run `library` first to show what sites are available and ask which one they mean.\n\n## How to give advice\n\n### Devices (`devices`, `device`)\n- `status != \"online\"` → offline or disconnected — surface to user\n- `firmwareStatus: \"updateAvailable\"` → firmware update pending\n- `device-stats` → CPU/memory/uptime signals for performance issues\n\n### Clients (`clients`, `client`)\n- High noise or weak signal → coverage gap, suggest AP placement review\n- Unexpected clients on sensitive VLANs → flag for review\n\n### Firewall (`firewall-policies`, `firewall-zones`, `acl-rules`)\n- Policies allowing all traffic between sensitive zones → flag as overly broad\n- Cross-zone allow rules → confirm intentional with user\n- Check `firewall-ordering` — rules are evaluated in order; misplaced rules cause unexpected behaviour\n\n### DNS (`dns-policies`)\n- Custom DNS policies can bypass filtering — flag any unexpected overrides\n\n### VPN (`vpn-tunnels`, `vpn-servers`)\n- Tunnel state down → connectivity issue to surface\n- Verify expected peers are configured\n\n### ISP metrics (`isp-metrics`)\n- Packet loss > 1% or latency spikes → WAN quality issue, advise checking with ISP\n\n## Notes\n\n- `network-refs` requires `--id` (a network ID). Only networks with active references (devices, clients, or WiFi assigned to them) return data — unused networks return a handled error: `\"Network '...' has no active references\"`. Run `networks` first to list all networks, then pass the ID of one that carries traffic.\n- `firewall-ordering` requires both `--from-zone` and `--to-zone`. Run `firewall-zones` first to list zone IDs. The API returns the ordered policy IDs for traffic flowing from the source zone to the destination zone.\n- `sdwan-config` and `sdwan-status` require `--id`. Run `sdwan` first to list configs and get an ID. These return empty on accounts without SD-WAN configured.\n\n## Source & contributing\n\nSource code, issue tracker, and contributions: [github.com/arseni-mik/open_claw-unifi-skill](https://github.com/arseni-mik/open_claw-unifi-skill/tree/main)\n\n## Constraints\n\n- All operations are GET-only. Never suggest using this skill to make changes.\n- Guide the user to make changes in the UniFi dashboard or mobile app.\n- Do not expose raw API keys in responses.\n\nFile v1.0.1:README.md\n\n# OpenClaw UniFi Skill\n\nA read-only [OpenClaw](https://openclaw.ai) skill that lets your AI assistant query your UniFi network and give advice on devices, clients, firewall configuration, VPN tunnels, ISP performance, and more — GET-only, no writes of any kind.\n\n## What it does\n\nCovers two official UniFi API surfaces:\n\n**Site Manager API** (cloud, cross-site):\n- Lists all consoles, sites, and devices on your UI account\n- ISP performance metrics and SD-WAN configurations\n\n**Network Integration API** (proxied via api.ui.com):\n- Devices, clients, networks, WiFi SSIDs\n- Firewall zones, policies, ACL rules, DNS policies\n- VPN tunnels and servers, WAN interfaces\n- Hotspot vouchers, RADIUS profiles, device tags\n- DPI categories and applications\n\n**All queries are GET-only. No writes, no mutations.**\n\n## Structure\n\n```\nopen_claw-unifi-skill/\n├── SKILL.md           # Skill definition and agent instructions\n└── scripts/\n    └── unifi.py       # Query script\n```\n\n## Requirements\n\n- A UI account at [unifi.ui.com](https://unifi.ui.com)\n- Python 3 on the host running OpenClaw\n\n## Setup\n\n### 1. Generate an API key\n\nSign in at [unifi.ui.com](https://unifi.ui.com) → **Settings → API Keys** → create a new key.\nThe same key works for both the Site Manager and Network Integration APIs.\n\n### 2. Set the API key on your OpenClaw host\n\n```bash\nexport UNIFI_API_KEY=your-api-key-here\n```\n\nThat's it. Host and site IDs are discovered automatically from your UI account on every invocation (cached for 15 minutes). No other env vars needed.\n\n### 3. Install the skill\n\n```bash\n# From ClawHub (once published):\nopenclaw skills install unifi-advisor\n\n# Or locally:\nopenclaw skills install /path/to/open_claw-unifi-skill\n```\n\n## Usage\n\nAsk your assistant naturally:\n\n- *\"Are all my UniFi devices online?\"*\n- *\"Which clients are connected right now?\"*\n- *\"Show me my firewall policies and check for anything too broad\"*\n- *\"Is my VPN tunnel up?\"*\n- *\"How is my ISP performing?\"*\n- *\"What networks and VLANs do I have configured?\"*\n\nIf you have multiple sites, specify which one: *\"Check the firewall on my HQ site\"* or *\"What clients are on the branch office network?\"*\n\nOr call directly for testing:\n\n```bash\npython3 scripts/unifi.py list                         # all available subcommands\npython3 scripts/unifi.py library                      # show discovered sites\npython3 scripts/unifi.py devices --site hq            # adopted devices on a specific site\npython3 scripts/unifi.py clients --limit 20           # connected clients\npython3 scripts/unifi.py firewall-policies            # firewall policies\npython3 scripts/unifi.py isp-metrics --metric-type 1h # ISP performance\n```\n\n## All subcommands\n\n### Site Manager (cloud)\n\n| Subcommand | Description |\n|---|---|\n| `library` | Show discovered sites with labels, state, and API capabilities |\n| `hosts` | All UniFi OS consoles on the UI account |\n| `host` | Console details (`--id` required) |\n| `sites` | All sites across all consoles |\n| `cloud-devices` | All devices across all sites |\n| `isp-metrics` | ISP performance metrics (`--metric-type 1h\\|5m`) |\n| `sdwan` | SD-WAN configurations |\n| `sdwan-config` | SD-WAN config details (`--id` required) |\n| `sdwan-status` | SD-WAN deployment status (`--id` required) |\n\n### Network Integration (per-site, use `--site <label>`)\n\n| Subcommand | Description |\n|---|---|\n| `info` | Controller version and capabilities |\n| `net-sites` | Sites managed by this console |\n| `devices` | Adopted devices overview |\n| `device` | Device details (`--id` required) |\n| `device-stats` | Latest device statistics (`--id` required) |\n| `devices-pending` | Devices pending adoption |\n| `clients` | Connected clients overview |\n| `client` | Client details (`--id` required) |\n| `networks` | Networks overview |\n| `network` | Network details (`--id` required) |\n| `network-refs` | References to a network — devices, clients, WiFi (`--id` required; use a network with active traffic) |\n| `wifi` | WiFi broadcast (SSID) overview |\n| `wifi-details` | WiFi broadcast details (`--id` required) |\n| `firewall-zones` | Firewall zones |\n| `firewall-zone` | Firewall zone details (`--id` required) |\n| `firewall-policies` | Firewall policies |\n| `firewall-policy` | Firewall policy details (`--id` required) |\n| `firewall-ordering` | Firewall policy ordering between two zones (`--from-zone` and `--to-zone` required) |\n| `acl-rules` | ACL rules |\n| `acl-rule` | ACL rule details (`--id` required) |\n| `acl-ordering` | ACL rule ordering |\n| `dns-policies` | DNS policies |\n| `dns-policy` | DNS policy details (`--id` required) |\n| `traffic-lists` | Traffic matching lists |\n| `traffic-list` | Traffic matching list details (`--id` required) |\n| `vouchers` | Hotspot vouchers |\n| `voucher` | Voucher details (`--id` required) |\n| `wans` | WAN interfaces overview |\n| `vpn-tunnels` | Site-to-site VPN tunnels |\n| `vpn-servers` | VPN server configurations |\n| `radius` | RADIUS profiles |\n| `device-tags` | Device tags |\n| `dpi-categories` | DPI application categories |\n| `dpi-applications` | DPI applications |\n| `countries` | Countries list (for geo-IP firewall rules) |\n\n## License\n\nMIT-0 — do whatever you want with it, no attribution required.\n\nFile v1.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn74nm91h4fsbqyqpypsxv4gj586bqnn\",\n  \"slug\": \"unifi-advisor\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1778240308791\n}\n\nFile v1.0.1:skill-card.md\n\n## Description: <br>\nRead-only UniFi network advisor that queries Site Manager and Network Integration APIs for devices, clients, networks, firewall, VPN, DPI, ISP metrics, and related UniFi state. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[arseni-mik](https://clawhub.ai/user/arseni-mik) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nExternal users, developers, and network administrators use this skill to inspect UniFi environments, review network state, and receive operational guidance without making changes through the skill. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can expose sensitive UniFi network, client, device, and policy data available to the configured API key. <br>\nMitigation: Use the least-privileged or read-only API key available and avoid sharing raw outputs that include client or network details. <br>\nRisk: The required UNIFI_API_KEY is a sensitive credential. <br>\nMitigation: Store the key in the environment, do not include it in prompts or responses, and rotate it if it is exposed. <br>\nRisk: The skill caches site metadata locally in ~/.unifi-skill.json for convenience. <br>\nMitigation: Delete ~/.unifi-skill.json when cached site metadata should no longer be retained. <br>\nRisk: Advice based on read-only network observations may still be incomplete or misleading if the queried data is stale, partial, or ambiguous. <br>\nMitigation: Review suggested changes in the UniFi dashboard or mobile app before acting; the skill itself should not be used to make changes. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/arseni-mik/unifi-advisor) <br>\n- [ClawHub publisher profile](https://clawhub.ai/user/arseni-mik) <br>\n- [UniFi API endpoint](https://api.ui.com) <br>\n- [UniFi API key setup portal](https://unifi.ui.com) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance, JSON] <br>\n**Output Format:** [Markdown guidance with shell command examples and JSON API output summaries] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [GET-only UniFi API queries; no write or mutation operations are documented.] <br>\n\n## Skill Version(s): <br>\n1.0.1 (source: ClawHub release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.0.0: 4 files, 11674 bytes\n\nFiles: README.md (5245b), scripts/unifi.py (21261b), SKILL.md (9833b), _meta.json (132b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: unifi-advisor\ndescription: Read-only UniFi network advisor covering the Site Manager cloud API and the Network Integration API. Query devices, clients, networks, firewall zones and policies, ACL rules, DNS policies, VPN tunnels, DPI, ISP metrics, and related UniFi state. Use when inspecting UniFi environments with GET-only operations and no writes.\nmetadata: {\"openclaw\":{\"requires\":{\"env\":[\"UNIFI_API_KEY\"],\"bins\":[\"python3\"]},\"primaryEnv\":\"UNIFI_API_KEY\"}}\n---\n\n# UniFi Network Advisor\n\nRead-only skill covering two official UniFi API surfaces. All operations are GET-only — no writes, no mutations of any kind.\n\n## API surfaces\n\nEverything goes through `https://api.ui.com`. No direct local connection required.\n\n| Prefix | Surface | Proxied via | Env vars needed |\n|---|---|---|---|\n| SM | Site Manager | `api.ui.com/v1/...` | `UNIFI_API_KEY` |\n| NET | Network Integration | `api.ui.com/v1/connector/consoles/{hostId}/proxy/network/integration/v1/...` | `UNIFI_API_KEY` (host/site resolved automatically) |\n\n## How to call the script\n\n```\npython3 {baseDir}/scripts/unifi.py <subcommand> [--site SITE] [--id ID] [--limit N] [--next-token TOKEN] [subcommand-specific flags]\n```\n\nSome subcommands require additional flags — see the table below. Use `python3 {baseDir}/scripts/unifi.py list` to see all subcommands with descriptions.\n\n## Subcommands\n\n### Site Manager (SM) — cloud, single API key\n\n| Subcommand | Endpoint | Required flags | Description |\n|---|---|---|---|\n| `hosts` | GET /v1/hosts | — | All UniFi OS consoles on the UI account |\n| `host` | GET /v1/hosts/{id} | `--id` | Console details |\n| `sites` | GET /v1/sites | — | All sites across all consoles |\n| `cloud-devices` | GET /v1/devices | — | All devices across all sites |\n| `isp-metrics` | GET /ea/isp-metrics/{type} | — | ISP performance metrics |\n| `sdwan` | GET /v1/sd-wan-configs | — | SD-WAN configurations |\n| `sdwan-config` | GET /v1/sd-wan-configs/{id} | `--id` | Specific SD-WAN config |\n| `sdwan-status` | GET /v1/sd-wan-configs/{id}/status | `--id` | SD-WAN deployment status |\n\n### Network Integration (NET) — proxied via api.ui.com, site resolved automatically\n\n| Subcommand | Endpoint | Required flags | Description |\n|---|---|---|---|\n| `info` | GET /v1/info | — | Controller version and capabilities |\n| `net-sites` | GET /v1/sites | — | Sites managed by this console |\n| `devices` | GET /v1/sites/{siteId}/devices | — | Adopted devices overview |\n| `device` | GET /v1/sites/{siteId}/devices/{id} | `--id` | Device details |\n| `device-stats` | GET /v1/sites/{siteId}/devices/{id}/statistics/latest | `--id` | Latest device statistics |\n| `devices-pending` | GET /v1/pending-devices | — | Devices pending adoption (console-scoped) |\n| `clients` | GET /v1/sites/{siteId}/clients | — | Connected clients overview |\n| `client` | GET /v1/sites/{siteId}/clients/{id} | `--id` | Client details |\n| `networks` | GET /v1/sites/{siteId}/networks | — | Networks overview |\n| `network` | GET /v1/sites/{siteId}/networks/{id} | `--id` | Network details |\n| `network-refs` | GET /v1/sites/{siteId}/networks/{id}/references | `--id` | What references a specific network (devices, clients, WiFi) |\n| `wifi` | GET /v1/sites/{siteId}/wifi/broadcasts | — | WiFi broadcast (SSID) overview |\n| `wifi-details` | GET /v1/sites/{siteId}/wifi/broadcasts/{id} | `--id` | WiFi broadcast details |\n| `firewall-zones` | GET /v1/sites/{siteId}/firewall/zones | — | Firewall zones |\n| `firewall-zone` | GET /v1/sites/{siteId}/firewall/zones/{id} | `--id` | Firewall zone details |\n| `firewall-policies` | GET /v1/sites/{siteId}/firewall/policies | — | Firewall policies |\n| `firewall-policy` | GET /v1/sites/{siteId}/firewall/policies/{id} | `--id` | Firewall policy details |\n| `firewall-ordering` | GET /v1/sites/{siteId}/firewall/policies/ordering | `--from-zone` `--to-zone` | Policy ordering between two zones |\n| `acl-rules` | GET /v1/sites/{siteId}/acl-rules | — | ACL rules |\n| `acl-rule` | GET /v1/sites/{siteId}/acl-rules/{id} | `--id` | ACL rule details |\n| `acl-ordering` | GET /v1/sites/{siteId}/acl-rules/ordering | — | ACL rule ordering |\n| `dns-policies` | GET /v1/sites/{siteId}/dns/policies | — | DNS policies |\n| `dns-policy` | GET /v1/sites/{siteId}/dns/policies/{id} | `--id` | DNS policy details |\n| `traffic-lists` | GET /v1/sites/{siteId}/traffic-matching-lists | — | Traffic matching lists |\n| `traffic-list` | GET /v1/sites/{siteId}/traffic-matching-lists/{id} | `--id` | Traffic matching list details |\n| `vouchers` | GET /v1/sites/{siteId}/hotspot/vouchers | — | Hotspot vouchers |\n| `voucher` | GET /v1/sites/{siteId}/hotspot/vouchers/{id} | `--id` | Voucher details |\n| `wans` | GET /v1/sites/{siteId}/wans | — | WAN interfaces overview |\n| `vpn-tunnels` | GET /v1/sites/{siteId}/vpn/site-to-site-tunnels | — | Site-to-site VPN tunnels |\n| `vpn-servers` | GET /v1/sites/{siteId}/vpn/servers | — | VPN server configurations |\n| `radius` | GET /v1/sites/{siteId}/radius/profiles | — | RADIUS profiles |\n| `device-tags` | GET /v1/sites/{siteId}/device-tags | — | Device tags |\n| `dpi-categories` | GET /v1/dpi/categories | — | DPI application categories |\n| `dpi-applications` | GET /v1/dpi/applications | — | DPI applications |\n| `countries` | GET /v1/countries | — | Countries list (for geo-IP rules) |\n\n## Examples\n\n```bash\n# List all sites and pick one to work with\npython3 {baseDir}/scripts/unifi.py library\n\n# firewall-ordering: get zone IDs first, then query ordering between two of them\n# --from-zone and --to-zone must be real UUIDs from the firewall-zones output\npython3 {baseDir}/scripts/unifi.py firewall-zones --site hq\npython3 {baseDir}/scripts/unifi.py firewall-ordering --site hq --from-zone <zoneId> --to-zone <zoneId>\n\n# network-refs: get network list first, then query references for a specific network\npython3 {baseDir}/scripts/unifi.py networks --site hq\npython3 {baseDir}/scripts/unifi.py network-refs --site hq --id <networkId>\n\n# sdwan-config / sdwan-status: list configs first to get an ID\npython3 {baseDir}/scripts/unifi.py sdwan\npython3 {baseDir}/scripts/unifi.py sdwan-config --id <configId>\npython3 {baseDir}/scripts/unifi.py sdwan-status --id <configId>\n```\n\n## Site library\n\nOn every invocation the skill builds a site library by joining:\n- `GET /v1/hosts` — host names (user-set), hardware model, connection state, `apiIntegration` flag\n- `GET /v1/sites` — `siteId` per `hostId`\n\nLabels come directly from the name the user set in the UniFi UI — e.g. \"HQ\" → `hq`, \"Branch Office\" → `branch-office`, \"Remote Site\" → `remote-site`. The library is cached in `~/.unifi-skill.json` for 15 minutes to avoid redundant API calls.\n\nHosts without Network API support (e.g. a NAS device with `apiIntegration: false`) are included in the library but will return a clear error if targeted with NET subcommands.\n\nRun `library` to see the current library including state, hardware, and API capability of each host.\n\n## Site selection\n\nAll NET subcommands accept `--site <hint>`. The hint is matched against label, name, hardware shortname, hardware name, timezone, and IP — partial matches work.\n\n| User says | Use |\n|---|---|\n| \"the main office network\" | `--site hq` |\n| \"remote site firewall\" | `--site remote-site` |\n| \"the branch office\" | `--site branch-office` |\n| \"the Dream Machine Pro\" | `--site udmpro` |\n| \"the warehouse AP\" | `--site warehouse` |\n\nIf `--site` is omitted the first entry in the library is used. If the hint is ambiguous the skill lists the matching labels and asks for a more specific hint.\n\n**Always specify `--site` when the user mentions a location or device.** When the user says \"my network\" without specifying, run `library` first to show what sites are available and ask which one they mean.\n\n## How to give advice\n\n### Devices (`devices`, `device`)\n- `status != \"online\"` → offline or disconnected — surface to user\n- `firmwareStatus: \"updateAvailable\"` → firmware update pending\n- `device-stats` → CPU/memory/uptime signals for performance issues\n\n### Clients (`clients`, `client`)\n- High noise or weak signal → coverage gap, suggest AP placement review\n- Unexpected clients on sensitive VLANs → flag for review\n\n### Firewall (`firewall-policies`, `firewall-zones`, `acl-rules`)\n- Policies allowing all traffic between sensitive zones → flag as overly broad\n- Cross-zone allow rules → confirm intentional with user\n- Check `firewall-ordering` — rules are evaluated in order; misplaced rules cause unexpected behaviour\n\n### DNS (`dns-policies`)\n- Custom DNS policies can bypass filtering — flag any unexpected overrides\n\n### VPN (`vpn-tunnels`, `vpn-servers`)\n- Tunnel state down → connectivity issue to surface\n- Verify expected peers are configured\n\n### ISP metrics (`isp-metrics`)\n- Packet loss > 1% or latency spikes → WAN quality issue, advise checking with ISP\n\n## Notes\n\n- `network-refs` requires `--id` (a network ID). Only networks with active references (devices, clients, or WiFi assigned to them) return data — unused networks return a handled error: `\"Network '...' has no active references\"`. Run `networks` first to list all networks, then pass the ID of one that carries traffic.\n- `firewall-ordering` requires both `--from-zone` and `--to-zone`. Run `firewall-zones` first to list zone IDs. The API returns the ordered policy IDs for traffic flowing from the source zone to the destination zone.\n- `sdwan-config` and `sdwan-status` require `--id`. Run `sdwan` first to list configs and get an ID. These return empty on accounts without SD-WAN configured.\n\n## Constraints\n\n- All operations are GET-only. Never suggest using this skill to make changes.\n- Guide the user to make changes in the UniFi dashboard or mobile app.\n- Do not expose raw API keys in responses.\n\nFile v1.0.0:README.md\n\n# OpenClaw UniFi Skill\n\nA read-only [OpenClaw](https://openclaw.ai) skill that lets your AI assistant query your UniFi network and give advice on devices, clients, firewall configuration, VPN tunnels, ISP performance, and more — GET-only, no writes of any kind.\n\n## What it does\n\nCovers two official UniFi API surfaces:\n\n**Site Manager API** (cloud, cross-site):\n- Lists all consoles, sites, and devices on your UI account\n- ISP performance metrics and SD-WAN configurations\n\n**Network Integration API** (proxied via api.ui.com):\n- Devices, clients, networks, WiFi SSIDs\n- Firewall zones, policies, ACL rules, DNS policies\n- VPN tunnels and servers, WAN interfaces\n- Hotspot vouchers, RADIUS profiles, device tags\n- DPI categories and applications\n\n**All queries are GET-only. No writes, no mutations.**\n\n## Structure\n\n```\nopen_claw-unifi-skill/\n├── SKILL.md           # Skill definition and agent instructions\n└── scripts/\n    └── unifi.py       # Query script\n```\n\n## Requirements\n\n- A UI account at [unifi.ui.com](https://unifi.ui.com)\n- Python 3 on the host running OpenClaw\n\n## Setup\n\n### 1. Generate an API key\n\nSign in at [unifi.ui.com](https://unifi.ui.com) → **Settings → API Keys** → create a new key.\nThe same key works for both the Site Manager and Network Integration APIs.\n\n### 2. Set the API key on your OpenClaw host\n\n```bash\nexport UNIFI_API_KEY=your-api-key-here\n```\n\nThat's it. Host and site IDs are discovered automatically from your UI account on every invocation (cached for 15 minutes). No other env vars needed.\n\n### 3. Install the skill\n\n```bash\n# From ClawHub (once published):\nopenclaw skills install unifi-advisor\n\n# Or locally:\nopenclaw skills install /path/to/open_claw-unifi-skill\n```\n\n## Usage\n\nAsk your assistant naturally:\n\n- *\"Are all my UniFi devices online?\"*\n- *\"Which clients are connected right now?\"*\n- *\"Show me my firewall policies and check for anything too broad\"*\n- *\"Is my VPN tunnel up?\"*\n- *\"How is my ISP performing?\"*\n- *\"What networks and VLANs do I have configured?\"*\n\nIf you have multiple sites, specify which one: *\"Check the firewall on my HQ site\"* or *\"What clients are on the branch office network?\"*\n\nOr call directly for testing:\n\n```bash\npython3 scripts/unifi.py list                         # all available subcommands\npython3 scripts/unifi.py library                      # show discovered sites\npython3 scripts/unifi.py devices --site hq            # adopted devices on a specific site\npython3 scripts/unifi.py clients --limit 20           # connected clients\npython3 scripts/unifi.py firewall-policies            # firewall policies\npython3 scripts/unifi.py isp-metrics --metric-type 1h # ISP performance\n```\n\n## All subcommands\n\n### Site Manager (cloud)\n\n| Subcommand | Description |\n|---|---|\n| `library` | Show discovered sites with labels, state, and API capabilities |\n| `hosts` | All UniFi OS consoles on the UI account |\n| `host` | Console details (`--id` required) |\n| `sites` | All sites across all consoles |\n| `cloud-devices` | All devices across all sites |\n| `isp-metrics` | ISP performance metrics (`--metric-type 1h\\|5m`) |\n| `sdwan` | SD-WAN configurations |\n| `sdwan-config` | SD-WAN config details (`--id` required) |\n| `sdwan-status` | SD-WAN deployment status (`--id` required) |\n\n### Network Integration (per-site, use `--site <label>`)\n\n| Subcommand | Description |\n|---|---|\n| `info` | Controller version and capabilities |\n| `net-sites` | Sites managed by this console |\n| `devices` | Adopted devices overview |\n| `device` | Device details (`--id` required) |\n| `device-stats` | Latest device statistics (`--id` required) |\n| `devices-pending` | Devices pending adoption |\n| `clients` | Connected clients overview |\n| `client` | Client details (`--id` required) |\n| `networks` | Networks overview |\n| `network` | Network details (`--id` required) |\n| `network-refs` | References to a network — devices, clients, WiFi (`--id` required; use a network with active traffic) |\n| `wifi` | WiFi broadcast (SSID) overview |\n| `wifi-details` | WiFi broadcast details (`--id` required) |\n| `firewall-zones` | Firewall zones |\n| `firewall-zone` | Firewall zone details (`--id` required) |\n| `firewall-policies` | Firewall policies |\n| `firewall-policy` | Firewall policy details (`--id` required) |\n| `firewall-ordering` | Firewall policy ordering between two zones (`--from-zone` and `--to-zone` required) |\n| `acl-rules` | ACL rules |\n| `acl-rule` | ACL rule details (`--id` required) |\n| `acl-ordering` | ACL rule ordering |\n| `dns-policies` | DNS policies |\n| `dns-policy` | DNS policy details (`--id` required) |\n| `traffic-lists` | Traffic matching lists |\n| `traffic-list` | Traffic matching list details (`--id` required) |\n| `vouchers` | Hotspot vouchers |\n| `voucher` | Voucher details (`--id` required) |\n| `wans` | WAN interfaces overview |\n| `vpn-tunnels` | Site-to-site VPN tunnels |\n| `vpn-servers` | VPN server configurations |\n| `radius` | RADIUS profiles |\n| `device-tags` | Device tags |\n| `dpi-categories` | DPI application categories |\n| `dpi-applications` | DPI applications |\n| `countries` | Countries list (for geo-IP firewall rules) |\n\n## License\n\nMIT-0 — do whatever you want with it, no attribution required.\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn74nm91h4fsbqyqpypsxv4gj586bqnn\",\n  \"slug\": \"unifi-advisor\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1778239957259\n}","readmeExcerpt":"Skill: UniFi Advisor Owner: arseni-mik Summary: Read-only UniFi network advisor covering the Site Manager cloud API and the Network Integration API. Query devices, clients, networks, firewall zones and pol... Tags: latest:1.0.2 Version history: v1.0.2 | 2026-05-31T13:31:42.431Z | user Move site library cache to ~/.openclaw for backup coverage v1.0.1 | 2026-05-08T11:38:28.791Z | user added refernce to github source v1","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"python3 {baseDir}/scripts/unifi.py <subcommand> [--site SITE] [--id ID] [--limit N] [--next-token TOKEN] [subcommand-specific flags]"},{"language":"bash","snippet":"# List all sites and pick one to work with\npython3 {baseDir}/scripts/unifi.py library\n\n# firewall-ordering: get zone IDs first, then query ordering between two of them\n# --from-zone and --to-zone must be real UUIDs from the firewall-zones output\npython3 {baseDir}/scripts/unifi.py firewall-zones --site hq\npython3 {baseDir}/scripts/unifi.py firewall-ordering --site hq --from-zone <zoneId> --to-zone <zoneId>\n\n# network-refs: get network list first, then query references for a specific network\npython3 {baseDir}/scripts/unifi.py networks --site hq\npython3 {baseDir}/scripts/unifi.py network-refs --site hq --id <networkId>\n\n# sdwan-config / sdwan-status: list configs first to get an ID\npython3 {baseDir}/scripts/unifi.py sdwan\npython3 {baseDir}/scripts/unifi.py sdwan-config --id <configId>\npython3 {baseDir}/scripts/unifi.py sdwan-status --id <configId>"},{"language":"text","snippet":"open_claw-unifi-skill/\n├── SKILL.md           # Skill definition and agent instructions\n└── scripts/\n    └── unifi.py       # Query script"},{"language":"bash","snippet":"export UNIFI_API_KEY=your-api-key-here"},{"language":"bash","snippet":"# From ClawHub (once published):\nopenclaw skills install unifi-advisor\n\n# Or locally:\nopenclaw skills install /path/to/open_claw-unifi-skill"},{"language":"bash","snippet":"python3 scripts/unifi.py list                         # all available subcommands\npython3 scripts/unifi.py library                      # show discovered sites\npython3 scripts/unifi.py devices --site hq            # adopted devices on a specific site\npython3 scripts/unifi.py clients --limit 20           # connected clients\npython3 scripts/unifi.py firewall-policies            # firewall policies\npython3 scripts/unifi.py isp-metrics --metric-type 1h # ISP performance"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: unifi-advisor\ndescription: Read-only UniFi network advisor covering the Site Manager cloud API and the Network Integration API. Query devices, clients, networks, firewall zones and policies, ACL rules, DNS policies, VPN tunnels, DPI, ISP metrics, and related UniFi state. Use when inspecting UniFi environments with GET-only operations and no writes.\nmetadata: {\"openclaw\":{\"requires\":{\"env\":[\"UNIFI_API_KEY\"],\"bins\":[\"python3\"]},\"primaryEnv\":\"UNIFI_API_KEY\"}}\n---\n\n# UniFi Network Advisor\n\nRead-only skill covering two official UniFi API surfaces. All operations are GET-only — no writes, no mutations of any kind.\n\n## API surfaces\n\nEverything goes through `https://api.ui.com`. No direct local connection required.\n\n| Prefix | Surface | Proxied via | Env vars needed |\n|---|---|---|---|\n| SM | Site Manager | `api.ui.com/v1/...` | `UNIFI_API_KEY` |\n| NET | Network Integration | `api.ui.com/v1/connector/consoles/{hostId}/proxy/network/integration/v1/...` | `UNIFI_API_KEY` (host/site resolved automatically) |\n\n## How to call the script\n\n```\npython3 {baseDir}/scripts/unifi.py <subcommand> [--site SITE] [--id ID] [--limit N] [--next-token TOKEN] [subcommand-specific flags]\n```\n\nSome subcommands require additional flags — see the table below. Use `python3 {baseDir}/scripts/unifi.py list` to see all subcommands with descriptions.\n\n## Subcommands\n\n### Site Manager (SM) — cloud, single API key\n\n| Subcommand | Endpoint | Required flags | Description |\n|---|---|---|---|\n| `hosts` | GET /v1/hosts | — | All UniFi OS consoles on the UI account |\n| `host` | GET /v1/hosts/{id} | `--id` | Console details |\n| `sites` | GET /v1/sites | — | All sites across all consoles |\n| `cloud-devices` | GET /v1/devices | — | All devices across all sites |\n| `isp-metrics` | GET /ea/isp-metrics/{type} | — | ISP performance metrics |\n| `sdwan` | GET /v1/sd-wan-configs | — | SD-WAN configurations |\n| `sdwan-config` | GET /v1/sd-wan-configs/{id} | `--id` | Specific SD-WAN config |\n| `sdwan-status` | GET /v1/sd-wan-configs/{id}/status | `--id` | SD-WAN deployment status |\n\n### Network Integration (NET) — proxied via api.ui.com, site resolved automatically\n\n| Subcommand | Endpoint | Required flags | Description |\n|---|---|---|---|\n| `info` | GET /v1/info | — | Controller version and capabilities |\n| `net-sites` | GET /v1/sites | — | Sites managed by this console |\n| `devices` | GET /v1/sites/{siteId}/devices | — | Adopted devices overview |\n| `device` | GET /v1/sites/{siteId}/devices/{id} | `--id` | Device details |\n| `device-stats` | GET /v1/sites/{siteId}/devices/{id}/statistics/latest | `--id` | Latest device statistics |\n| `devices-pending` | GET /v1/pending-devices | — | Devices pending adoption (console-scoped) |\n| `clients` | GET /v1/sites/{siteId}/clients | — | Connected clients overview |\n| `client` | GET /v1/sites/{siteId}/clients/{id} | `--id` | Client details |\n| `networks` | GET /v1/sites/{siteId}/networks | — | Networks overview |\n| `network` | GET /v1/sites/{siteId}/ne"},{"path":"README.md","content":"# OpenClaw UniFi Skill\n\nA read-only [OpenClaw](https://openclaw.ai) skill that lets your AI assistant query your UniFi network and give advice on devices, clients, firewall configuration, VPN tunnels, ISP performance, and more — GET-only, no writes of any kind.\n\n## What it does\n\nCovers two official UniFi API surfaces:\n\n**Site Manager API** (cloud, cross-site):\n- Lists all consoles, sites, and devices on your UI account\n- ISP performance metrics and SD-WAN configurations\n\n**Network Integration API** (proxied via api.ui.com):\n- Devices, clients, networks, WiFi SSIDs\n- Firewall zones, policies, ACL rules, DNS policies\n- VPN tunnels and servers, WAN interfaces\n- Hotspot vouchers, RADIUS profiles, device tags\n- DPI categories and applications\n\n**All queries are GET-only. No writes, no mutations.**\n\n## Structure\n\n```\nopen_claw-unifi-skill/\n├── SKILL.md           # Skill definition and agent instructions\n└── scripts/\n    └── unifi.py       # Query script\n```\n\n## Requirements\n\n- A UI account at [unifi.ui.com](https://unifi.ui.com)\n- Python 3 on the host running OpenClaw\n\n## Setup\n\n### 1. Generate an API key\n\nSign in at [unifi.ui.com](https://unifi.ui.com) → **Settings → API Keys** → create a new key.\nThe same key works for both the Site Manager and Network Integration APIs.\n\n### 2. Set the API key on your OpenClaw host\n\n```bash\nexport UNIFI_API_KEY=your-api-key-here\n```\n\nThat's it. Host and site IDs are discovered automatically from your UI account on every invocation (cached for 15 minutes). No other env vars needed.\n\n### 3. Install the skill\n\n```bash\n# From ClawHub (once published):\nopenclaw skills install unifi-advisor\n\n# Or locally:\nopenclaw skills install /path/to/open_claw-unifi-skill\n```\n\n## Usage\n\nAsk your assistant naturally:\n\n- *\"Are all my UniFi devices online?\"*\n- *\"Which clients are connected right now?\"*\n- *\"Show me my firewall policies and check for anything too broad\"*\n- *\"Is my VPN tunnel up?\"*\n- *\"How is my ISP performing?\"*\n- *\"What networks and VLANs do I have configured?\"*\n\nIf you have multiple sites, specify which one: *\"Check the firewall on my HQ site\"* or *\"What clients are on the branch office network?\"*\n\nOr call directly for testing:\n\n```bash\npython3 scripts/unifi.py list                         # all available subcommands\npython3 scripts/unifi.py library                      # show discovered sites\npython3 scripts/unifi.py devices --site hq            # adopted devices on a specific site\npython3 scripts/unifi.py clients --limit 20           # connected clients\npython3 scripts/unifi.py firewall-policies            # firewall policies\npython3 scripts/unifi.py isp-metrics --metric-type 1h # ISP performance\n```\n\n## All subcommands\n\n### Site Manager (cloud)\n\n| Subcommand | Description |\n|---|---|\n| `library` | Show discovered sites with labels, state, and API capabilities |\n| `hosts` | All UniFi OS consoles on the UI account |\n| `host` | Console details (`--id` required) |\n| `sites` | All sites across all consoles |\n| `cloud-device"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn74nm91h4fsbqyqpypsxv4gj586bqnn\",\n  \"slug\": \"unifi-advisor\",\n  \"version\": \"1.0.2\",\n  \"publishedAt\": 1780234302431\n}"},{"path":"skill-card.md","content":"## Description:\n\nRead-only UniFi network advisor covering the Site Manager cloud API and the Network Integration API for devices, clients, networks, firewall policy, VPN, DPI, ISP metrics, and related UniFi state.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[arseni-mik](https://clawhub.ai/user/arseni-mik)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nNetwork operators, IT administrators, and support engineers use this skill to inspect UniFi environments, query read-only API state, and receive guidance about device health, clients, firewall policy, VPN status, ISP metrics, and related network configuration.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can expose sensitive UniFi account, network inventory, client, firewall, VPN, voucher, IP address, and firmware information.\n\nMitigation: Install and run it only where read access to the UniFi cloud account and returned network details are acceptable, and treat outputs as confidential.\n\nRisk: Site inventory metadata is cached locally for about 15 minutes without explicit permission hardening by the script.\n\nMitigation: Use the skill on trusted hosts and account profiles where local cache files are protected by the surrounding operating system permissions.\n\n## Reference(s):\n\n- [ClawHub Skill Page](https://clawhub.ai/arseni-mik/skills/unifi-advisor)\n- [OpenClaw](https://openclaw.ai)\n- [UniFi Portal](https://unifi.ui.com)\n- [UniFi API Host](https://api.ui.com)\n\n## Skill Output:\n\n**Output Type(s):** [guidance, shell commands, configuration, text]\n\n**Output Format:** [Markdown with inline shell commands and summarized JSON API results]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Outputs may include sensitive network inventory, client, firewall, VPN, IP address, voucher, firmware, and performance details from the user's UniFi account.]\n\n## Skill Version(s):\n\n1.0.2 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1383,"uniquenessScore":43,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T21:02:20.465Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T21:02:20.465Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-14T05:16:33.278Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}