{
  "schemaVersion": "1.0",
  "item": {
    "slug": "ez-unifi",
    "name": "EZ Unifi",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/araa47/ez-unifi",
    "canonicalUrl": "https://clawhub.ai/araa47/ez-unifi",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/ez-unifi",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=ez-unifi",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "scripts/unifi.py",
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/ez-unifi"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/ez-unifi",
    "agentPageUrl": "https://openagent3.xyz/skills/ez-unifi/agent",
    "manifestUrl": "https://openagent3.xyz/skills/ez-unifi/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/ez-unifi/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "ez-unifi",
        "body": "Agent-friendly UniFi Network tools powered by the aiounifi library. Supports UDM Pro/SE, Dream Machine, Cloud Key Gen2+, and self-hosted controllers.\n\nRun all commands with: uv run scripts/unifi.py <command> [args]"
      },
      {
        "title": "Setup",
        "body": "Step 1: Ask user to create a dedicated local admin account\n\nTo manage your UniFi network, I need API access. Please create a dedicated local admin account:\n\nOpen your UniFi controller (e.g., https://192.168.1.1)\nGo to Settings → System → Admins & Users\nClick Add Admin\nEnter a username (e.g., agent-api)\nEnter an email and password\nImportant: Disable \"Remote Access\" - local-only avoids MFA issues\nSet Role to Super Admin or Site Admin\nClick Add\n\nThen provide:\n\nController IP (e.g., 192.168.1.1)\nUsername\nPassword\nIs it a UDM Pro/SE/Dream Machine? (yes/no)\n\nStep 2: Save credentials to .env\n\nUNIFI_HOST=https://192.168.1.1\nUNIFI_USERNAME=agent-api\nUNIFI_PASSWORD=the_password\nUNIFI_SITE=default\nUNIFI_IS_UDM=true\n\nSet UNIFI_IS_UDM=false for Cloud Key Gen1 or self-hosted controllers."
      },
      {
        "title": "System & Sites",
        "body": "unifi.py sites                     # List all sites\nunifi.py sysinfo                   # System information\nunifi.py health                    # Site health status (WAN, WLAN, LAN)"
      },
      {
        "title": "Devices (APs, Switches, Gateways)",
        "body": "unifi.py devices                   # List all devices\nunifi.py device MAC                # Device details\nunifi.py restart MAC               # Restart device\nunifi.py restart MAC --hard        # Hard restart (cycles PoE on switches)\nunifi.py upgrade MAC               # Upgrade device firmware\nunifi.py locate MAC                # Blink LED to locate\nunifi.py unlocate MAC              # Stop LED blinking\nunifi.py led MAC on|off|default    # Set LED status\nunifi.py led MAC on --color=#FF0000 --brightness=50  # With color/brightness"
      },
      {
        "title": "Switch Ports",
        "body": "unifi.py ports                     # List all switch ports\nunifi.py port MAC PORT_IDX         # Port details\nunifi.py port-enable MAC PORT_IDX  # Enable switch port\nunifi.py port-disable MAC PORT_IDX # Disable switch port\nunifi.py poe MAC PORT_IDX MODE     # Set PoE mode (auto|off|passthrough|24v)\nunifi.py power-cycle MAC PORT_IDX  # Power cycle a PoE port"
      },
      {
        "title": "Smart Power (PDU/Outlets)",
        "body": "unifi.py outlets                   # List all outlets\nunifi.py outlet MAC IDX on|off     # Control outlet relay\nunifi.py outlet-cycle MAC IDX on|off  # Enable/disable auto-cycle on internet down"
      },
      {
        "title": "Clients",
        "body": "unifi.py clients                   # List active clients\nunifi.py clients-all               # List all clients (including offline/known)\nunifi.py client MAC                # Client details\nunifi.py block MAC                 # Block client from network\nunifi.py unblock MAC               # Unblock client\nunifi.py reconnect MAC             # Kick/reconnect client\nunifi.py forget MAC [MAC2...]      # Forget client(s) permanently"
      },
      {
        "title": "WiFi Networks",
        "body": "unifi.py wlans                     # List wireless networks\nunifi.py wlan ID                   # WLAN details\nunifi.py wlan-enable ID            # Enable WLAN\nunifi.py wlan-disable ID           # Disable WLAN\nunifi.py wlan-password ID NEWPASS  # Change WLAN password\nunifi.py wlan-qr ID                # Generate WiFi QR code (PNG file)\nunifi.py wlan-qr ID -o myqr.png    # Custom output filename"
      },
      {
        "title": "Port Forwarding",
        "body": "unifi.py port-forwards             # List port forwarding rules\nunifi.py port-forward ID           # Port forward details"
      },
      {
        "title": "Traffic Rules",
        "body": "unifi.py traffic-rules             # List traffic rules\nunifi.py traffic-rule ID           # Traffic rule details\nunifi.py traffic-rule-enable ID    # Enable traffic rule\nunifi.py traffic-rule-disable ID   # Disable traffic rule\nunifi.py traffic-rule-toggle ID on|off  # Toggle traffic rule state"
      },
      {
        "title": "Traffic Routes",
        "body": "unifi.py traffic-routes            # List traffic routes\nunifi.py traffic-route ID          # Traffic route details\nunifi.py traffic-route-enable ID   # Enable traffic route\nunifi.py traffic-route-disable ID  # Disable traffic route"
      },
      {
        "title": "Firewall",
        "body": "unifi.py firewall-policies         # List firewall policies\nunifi.py firewall-policy ID        # Firewall policy details\nunifi.py firewall-zones            # List firewall zones\nunifi.py firewall-zone ID          # Firewall zone details"
      },
      {
        "title": "DPI (Deep Packet Inspection)",
        "body": "unifi.py dpi-apps                  # List DPI restriction apps\nunifi.py dpi-app ID                # DPI app details\nunifi.py dpi-app-enable ID         # Enable DPI app restriction\nunifi.py dpi-app-disable ID        # Disable DPI app restriction\nunifi.py dpi-groups                # List DPI restriction groups\nunifi.py dpi-group ID              # DPI group details"
      },
      {
        "title": "Hotspot Vouchers",
        "body": "unifi.py vouchers                  # List vouchers\nunifi.py voucher-create --duration=60 --quota=1 --note=\"Guest\"\nunifi.py voucher-create --duration=1440 --quota=5 --rate-up=5000 --rate-down=10000\nunifi.py voucher-delete ID         # Delete voucher\n\nVoucher options:\n\n--duration - Duration in minutes (default: 60)\n--quota - Number of uses (default: 1)\n--usage-quota - Usage quota in MB\n--rate-up - Upload rate limit in Kbps\n--rate-down - Download rate limit in Kbps\n--note - Note/description"
      },
      {
        "title": "Events",
        "body": "unifi.py events                    # Stream events in real-time (Ctrl+C to stop)"
      },
      {
        "title": "Raw API Access",
        "body": "unifi.py raw GET /stat/health      # Raw GET request\nunifi.py raw POST /cmd/devmgr '{\"cmd\":\"restart\",\"mac\":\"aa:bb:cc:dd:ee:ff\"}'\nunifi.py raw PUT /rest/wlanconf/ID '{\"enabled\":false}'"
      },
      {
        "title": "Output Options",
        "body": "Add --json flag to any list command for JSON output:\n\nunifi.py devices --json            # JSON output\nunifi.py clients --json"
      },
      {
        "title": "Examples",
        "body": "# Check network health\nuv run scripts/unifi.py health\n\n# List all connected clients\nuv run scripts/unifi.py clients\n\n# Block a device\nuv run scripts/unifi.py block \"aa:bb:cc:dd:ee:ff\"\n\n# Restart an access point\nuv run scripts/unifi.py restart \"11:22:33:44:55:66\"\n\n# Disable guest WiFi\nuv run scripts/unifi.py wlan-disable \"5f8b3d2e1a4c7b9e0d6f8a2c\"\n\n# Upgrade device firmware\nuv run scripts/unifi.py upgrade \"11:22:33:44:55:66\"\n\n# Power cycle a PoE port (useful for rebooting PoE devices)\nuv run scripts/unifi.py power-cycle \"switch_mac\" 5\n\n# Create a guest voucher (24 hours, single use)\nuv run scripts/unifi.py voucher-create --duration=1440 --quota=1 --note=\"Guest access\"\n\n# Generate WiFi QR code for easy connection\nuv run scripts/unifi.py wlan-qr \"wlan_id\" -o guest_wifi.png\n\n# Control traffic rule\nuv run scripts/unifi.py traffic-rule-disable \"rule_id\""
      },
      {
        "title": "Finding IDs",
        "body": "WLAN IDs: Run wlans and look for the ID column\nDevice MACs: Run devices and look for the MAC column\nClient MACs: Run clients or clients-all and look for the MAC column\nTraffic Rule IDs: Run traffic-rules and look for the ID column\nVoucher IDs: Run vouchers and look for the ID column"
      },
      {
        "title": "Notes",
        "body": "MAC addresses can be any format (with colons, dashes, or none)\nAll output is JSON for easy parsing\nUsing a dedicated local account avoids MFA issues with cloud-linked accounts\nIf you get rate limited (429 error), wait a few minutes before retrying"
      }
    ],
    "body": "ez-unifi\n\nAgent-friendly UniFi Network tools powered by the aiounifi library. Supports UDM Pro/SE, Dream Machine, Cloud Key Gen2+, and self-hosted controllers.\n\nRun all commands with: uv run scripts/unifi.py <command> [args]\n\nSetup\n\nStep 1: Ask user to create a dedicated local admin account\n\nTo manage your UniFi network, I need API access. Please create a dedicated local admin account:\n\nOpen your UniFi controller (e.g., https://192.168.1.1)\nGo to Settings → System → Admins & Users\nClick Add Admin\nEnter a username (e.g., agent-api)\nEnter an email and password\nImportant: Disable \"Remote Access\" - local-only avoids MFA issues\nSet Role to Super Admin or Site Admin\nClick Add\n\nThen provide:\n\nController IP (e.g., 192.168.1.1)\nUsername\nPassword\nIs it a UDM Pro/SE/Dream Machine? (yes/no)\n\nStep 2: Save credentials to .env\n\nUNIFI_HOST=https://192.168.1.1\nUNIFI_USERNAME=agent-api\nUNIFI_PASSWORD=the_password\nUNIFI_SITE=default\nUNIFI_IS_UDM=true\n\n\nSet UNIFI_IS_UDM=false for Cloud Key Gen1 or self-hosted controllers.\n\nSystem & Sites\nunifi.py sites                     # List all sites\nunifi.py sysinfo                   # System information\nunifi.py health                    # Site health status (WAN, WLAN, LAN)\n\nDevices (APs, Switches, Gateways)\nunifi.py devices                   # List all devices\nunifi.py device MAC                # Device details\nunifi.py restart MAC               # Restart device\nunifi.py restart MAC --hard        # Hard restart (cycles PoE on switches)\nunifi.py upgrade MAC               # Upgrade device firmware\nunifi.py locate MAC                # Blink LED to locate\nunifi.py unlocate MAC              # Stop LED blinking\nunifi.py led MAC on|off|default    # Set LED status\nunifi.py led MAC on --color=#FF0000 --brightness=50  # With color/brightness\n\nSwitch Ports\nunifi.py ports                     # List all switch ports\nunifi.py port MAC PORT_IDX         # Port details\nunifi.py port-enable MAC PORT_IDX  # Enable switch port\nunifi.py port-disable MAC PORT_IDX # Disable switch port\nunifi.py poe MAC PORT_IDX MODE     # Set PoE mode (auto|off|passthrough|24v)\nunifi.py power-cycle MAC PORT_IDX  # Power cycle a PoE port\n\nSmart Power (PDU/Outlets)\nunifi.py outlets                   # List all outlets\nunifi.py outlet MAC IDX on|off     # Control outlet relay\nunifi.py outlet-cycle MAC IDX on|off  # Enable/disable auto-cycle on internet down\n\nClients\nunifi.py clients                   # List active clients\nunifi.py clients-all               # List all clients (including offline/known)\nunifi.py client MAC                # Client details\nunifi.py block MAC                 # Block client from network\nunifi.py unblock MAC               # Unblock client\nunifi.py reconnect MAC             # Kick/reconnect client\nunifi.py forget MAC [MAC2...]      # Forget client(s) permanently\n\nWiFi Networks\nunifi.py wlans                     # List wireless networks\nunifi.py wlan ID                   # WLAN details\nunifi.py wlan-enable ID            # Enable WLAN\nunifi.py wlan-disable ID           # Disable WLAN\nunifi.py wlan-password ID NEWPASS  # Change WLAN password\nunifi.py wlan-qr ID                # Generate WiFi QR code (PNG file)\nunifi.py wlan-qr ID -o myqr.png    # Custom output filename\n\nPort Forwarding\nunifi.py port-forwards             # List port forwarding rules\nunifi.py port-forward ID           # Port forward details\n\nTraffic Rules\nunifi.py traffic-rules             # List traffic rules\nunifi.py traffic-rule ID           # Traffic rule details\nunifi.py traffic-rule-enable ID    # Enable traffic rule\nunifi.py traffic-rule-disable ID   # Disable traffic rule\nunifi.py traffic-rule-toggle ID on|off  # Toggle traffic rule state\n\nTraffic Routes\nunifi.py traffic-routes            # List traffic routes\nunifi.py traffic-route ID          # Traffic route details\nunifi.py traffic-route-enable ID   # Enable traffic route\nunifi.py traffic-route-disable ID  # Disable traffic route\n\nFirewall\nunifi.py firewall-policies         # List firewall policies\nunifi.py firewall-policy ID        # Firewall policy details\nunifi.py firewall-zones            # List firewall zones\nunifi.py firewall-zone ID          # Firewall zone details\n\nDPI (Deep Packet Inspection)\nunifi.py dpi-apps                  # List DPI restriction apps\nunifi.py dpi-app ID                # DPI app details\nunifi.py dpi-app-enable ID         # Enable DPI app restriction\nunifi.py dpi-app-disable ID        # Disable DPI app restriction\nunifi.py dpi-groups                # List DPI restriction groups\nunifi.py dpi-group ID              # DPI group details\n\nHotspot Vouchers\nunifi.py vouchers                  # List vouchers\nunifi.py voucher-create --duration=60 --quota=1 --note=\"Guest\"\nunifi.py voucher-create --duration=1440 --quota=5 --rate-up=5000 --rate-down=10000\nunifi.py voucher-delete ID         # Delete voucher\n\n\nVoucher options:\n\n--duration - Duration in minutes (default: 60)\n--quota - Number of uses (default: 1)\n--usage-quota - Usage quota in MB\n--rate-up - Upload rate limit in Kbps\n--rate-down - Download rate limit in Kbps\n--note - Note/description\nEvents\nunifi.py events                    # Stream events in real-time (Ctrl+C to stop)\n\nRaw API Access\nunifi.py raw GET /stat/health      # Raw GET request\nunifi.py raw POST /cmd/devmgr '{\"cmd\":\"restart\",\"mac\":\"aa:bb:cc:dd:ee:ff\"}'\nunifi.py raw PUT /rest/wlanconf/ID '{\"enabled\":false}'\n\nOutput Options\n\nAdd --json flag to any list command for JSON output:\n\nunifi.py devices --json            # JSON output\nunifi.py clients --json\n\nExamples\n# Check network health\nuv run scripts/unifi.py health\n\n# List all connected clients\nuv run scripts/unifi.py clients\n\n# Block a device\nuv run scripts/unifi.py block \"aa:bb:cc:dd:ee:ff\"\n\n# Restart an access point\nuv run scripts/unifi.py restart \"11:22:33:44:55:66\"\n\n# Disable guest WiFi\nuv run scripts/unifi.py wlan-disable \"5f8b3d2e1a4c7b9e0d6f8a2c\"\n\n# Upgrade device firmware\nuv run scripts/unifi.py upgrade \"11:22:33:44:55:66\"\n\n# Power cycle a PoE port (useful for rebooting PoE devices)\nuv run scripts/unifi.py power-cycle \"switch_mac\" 5\n\n# Create a guest voucher (24 hours, single use)\nuv run scripts/unifi.py voucher-create --duration=1440 --quota=1 --note=\"Guest access\"\n\n# Generate WiFi QR code for easy connection\nuv run scripts/unifi.py wlan-qr \"wlan_id\" -o guest_wifi.png\n\n# Control traffic rule\nuv run scripts/unifi.py traffic-rule-disable \"rule_id\"\n\nFinding IDs\nWLAN IDs: Run wlans and look for the ID column\nDevice MACs: Run devices and look for the MAC column\nClient MACs: Run clients or clients-all and look for the MAC column\nTraffic Rule IDs: Run traffic-rules and look for the ID column\nVoucher IDs: Run vouchers and look for the ID column\nNotes\nMAC addresses can be any format (with colons, dashes, or none)\nAll output is JSON for easy parsing\nUsing a dedicated local account avoids MFA issues with cloud-linked accounts\nIf you get rate limited (429 error), wait a few minutes before retrying"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/araa47/ez-unifi",
    "publisherUrl": "https://clawhub.ai/araa47/ez-unifi",
    "owner": "araa47",
    "version": "1.0.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/ez-unifi",
    "downloadUrl": "https://openagent3.xyz/downloads/ez-unifi",
    "agentUrl": "https://openagent3.xyz/skills/ez-unifi/agent",
    "manifestUrl": "https://openagent3.xyz/skills/ez-unifi/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/ez-unifi/agent.md"
  }
}