Install
openclaw skills install @zw008/fabric-aiopsUse this skill whenever the user needs to operate a network fabric through a controller API — Cisco Meraki Dashboard (full read+write), Cisco Catalyst Center / DNA Center (read subset), Arista CloudVision Portal / CVP (read subset), or UniFi Network (self-hosted controller / UniFi OS console; read subset + device restart) — a one-shot fabric health overview; organization/site/container reads (list/get, licensing, admins, org-wide device statuses, API usage); network reads (list/get, VLANs, health alerts, traffic); device reads (inventory by model MX/MS/MR/MV/MG, status, uplinks, switch ports / interface stats, wireless SSIDs); client reads (list, detail, usage, connectivity); three flagship analyses — uplink loss & latency RCA (rank worst MX WAN uplinks + cause/action), network health score (composite per-network), and config template drift (settings drifted from a bound template); and eight guarded writes (reboot, blink LEDs, update device, update VLAN, claim/remove devices, bind/unbind a config template — Meraki-only except device restart, which unifi also maps; other unmapped writes return a teaching "not supported yet" error). Always use this skill for "Meraki org overview", "which uplinks are worst", "uplink loss and latency", "WAN degradation RCA", "network health score", "config template drift", "list Meraki networks/devices/clients", "reboot a Meraki device", "blink device LEDs", "claim a device into a network", "bind a network to a template", "Catalyst Center site health / device health / issues", "DNA Center inventory", "CloudVision inventory / compliance / events", "UniFi site health / alarms / clients", "restart a UniFi AP or switch" when the context is a controller-managed network fabric. Do NOT use when the target is OT / industrial equipment (Modbus, OPC-UA, PLCs — use industrial-aiops), a hypervisor, a storage appliance, a backup product, a container/cluster orchestrator, or device-level CLI/SSH network automation (negative routing hints only). Covers common controller fabric operations with a built-in governance harness (audit, policy, token budget, undo, risk-tiers). The test suite is mock-based; no platform has yet been exercised against a live controller (see docs/VERIFICATION.md).
openclaw skills install @zw008/fabric-aiopsDisclaimer: Community-maintained open-source project, not affiliated with, endorsed by, or sponsored by Cisco, Meraki, Arista, Ubiquiti, or any network-controller vendor. Product and trademark names belong to their owners. Source at github.com/AIops-tools/Fabric-AIops under the MIT license.
Governed network-fabric controller operations — 34 MCP tools over four platforms (Cisco Meraki Dashboard: full read+write; Cisco Catalyst Center and Arista CloudVision Portal: read subsets; UniFi Network: read subset + device restart), every one wrapped with the bundled @governed_tool harness: a local unified audit log under ~/.fabric-aiops/, token/runaway budget guard, undo-token recording, and descriptive risk tiers. The controller secret is stored encrypted (~/.fabric-aiops/secrets.enc, Fernet + scrypt) — never plaintext on disk.
Standalone: the governance harness is bundled in the package (
fabric_aiops.governance) — fabric-aiops has no external skill-family dependency. The test suite is mock-based; no platform has yet been exercised against a live controller (seedocs/VERIFICATION.md).
| Platform | platform: | Coverage | Auth |
|---|---|---|---|
| Cisco Meraki Dashboard | meraki | full (all reads + all 8 writes) | API key (Bearer / X-Cisco-Meraki-API-Key) |
| Cisco Catalyst Center | catalyst | read subset: sites (as orgs/networks), device+site+client health, issues→alerts, inventory, interface stats | username:password → short-lived X-Auth-Token (auto-refresh on 401) |
| Arista CloudVision Portal | cvp | read subset: containers (as orgs/networks), inventory (+ complianceCode drift signal), events→alerts, users→admins | service-account token (Bearer) |
| UniFi Network | unifi | read subset: sites (as orgs/networks), stat/device inventory+statuses, stat/health, alarms→alerts, stat/sta clients, device port_table→switch ports; plus the device-restart write (cmd/devmgr) | API key (X-API-KEY, stateless); base_url = classic https://<host>:8443 or UniFi OS console https://<console>/proxy/network |
Ops a platform does not map — and every write on catalyst/cvp (on unifi, every write except reboot) — return a teaching "not supported on <platform> yet — open an issue or PR" error, never a silent no-op. Full matrix in the repo README.
| Domain | Tools | Count | Read or Write |
|---|---|---|---|
| Overview | fabric fleet overview | 1 | 1 read |
| Organizations | list/get, licensing, admins, device statuses, API usage | 6 | 6 read |
| Networks | list/get, VLANs, health alerts, traffic | 5 | 5 read |
| Devices | inventory (by model), status, uplinks, switch ports, SSIDs | 5 | 5 read |
| Clients | list, detail, usage, connectivity | 4 | 4 read |
| Health (flagship) | uplink loss/latency RCA, network health score, config template drift | 3 | 3 read |
| Remediation | reboot, claim, remove, bind, unbind | 5 | 5 write (high) |
| update device, update VLAN | 2 | 2 write (medium) | |
| blink LEDs | 1 | 1 write (low) | |
| Undo | list recorded reversible writes | 1 | 1 read |
apply a recorded inverse (governed, single-use, dry_run) | 1 | 1 write (medium) |
network_health_score and config_template_drift are injected-only (they score data you already hold); uplink_loss_and_latency_rca accepts injected records for offline analysis, or pulls live from a configured target. Meraki device models carry a product-type prefix: MX appliance, MS switch, MR wireless AP, MV camera, MG cellular gateway.
uv tool install fabric-aiops
fabric-aiops init # interactive wizard: platform choice (meraki/catalyst/cvp/unifi) + encrypted secret
fabric-aiops doctor
overview): network count + device status/product rolluphealth uplink-rca / uplink_loss_and_latency_rca): ranked by loss + latency with a likely cause and actionhealth score / network_health_score): a composite 0-100, worst first, every component shownDo NOT use when the target is OT/industrial equipment (use industrial-aiops), a hypervisor, a storage appliance, a backup product, a container cluster, or device-level CLI/SSH network automation.
| If the user wants… | Use |
|---|---|
| Cisco Meraki fabric: uplinks, health, config templates, device lifecycle | fabric-aiops (this skill) |
| Cisco Catalyst Center (DNA Center): site/device/client health, issues, inventory | fabric-aiops (this skill, platform: catalyst) |
| Arista CloudVision Portal: inventory, compliance drift signal, events | fabric-aiops (this skill, platform: cvp) |
| UniFi Network (self-hosted controller / UniFi OS console): site health, alarms, clients, device restart | fabric-aiops (this skill, platform: unifi) |
| OT / industrial edge (Modbus, OPC-UA, PLC, PROFINET) | the industrial-aiops line |
| Hypervisor VM lifecycle (power, snapshot, migrate) | a hypervisor ops skill |
| Container/cluster lifecycle | a cluster ops skill |
fabric-aiops health uplink-rca → worst MX WAN uplinks ranked by avg loss + latency, each citing the measured numbers plus a likely cause and actionfabric-aiops health uplink-rca --loss-pct 2 --latency-ms 100 → tighten the thresholds if nothing crosses the defaults but users still complainfabric-aiops device uplinks → the raw per-appliance uplink statuses across the org (WAN1/WAN2, active vs failover) behind the ranking — confirm the flagged appliance rather than trusting the summaryfabric-aiops network alerts <networkId> → check whether the controller already raised a matching alert (independent corroboration before you touch anything)fabric-aiops doctor and re-check the org id with fabric-aiops org list rather than assuming the WAN is healthy.fabric-aiops overview → org-level rollup: network count and device status/product mixfabric-aiops health score → composite 0-100 per network, worst first, with every scoring component shownfabric-aiops org device-statuses → find the offline/alerting devices dragging the worst network's scorefabric-aiops device status <serial> → confirm the device before changing itfabric-aiops remediate update-device <serial> '{"name":"branch-ap-01"}' --dry-run → preview the exact PUT /devices/<serial> call; then run without --dry-run (double confirmation). The real before-state is fetched first and recorded as a faithful inversefabric-aiops undo list, then fabric-aiops undo apply <id> restores the captured prior attributes. Re-run fabric-aiops device status <serial> to confirm the restore landed rather than trusting the undo's success message.fabric-aiops network list → the networks in scope and their idsconfig_template_drift(template=..., networks=[...]) → the settings that deviate, per networkfabric-aiops network vlans <networkId> → confirm the drifted VLAN's current values before changing anythingfabric-aiops remediate update-vlan <networkId> <vlanId> '{"name":"data"}' --dry-run, then for real — or re-establish the binding itself: fabric-aiops remediate bind <networkId> <templateId> --dry-run, then without --dry-run (double confirmation). Both capture the real before-state and record an inverse descriptor (for bind, the inverse is unbind or a rebind to the prior template)fabric-aiops undo apply <id> returns the network to its captured prior binding; fabric-aiops remediate unbind <networkId> is the manual escape hatch. Re-run config_template_drift to confirm the drift actually cleared instead of trusting the write's success message.fabric-aiops device inventory → confirm the replacement serial is in the org inventory and unassignedfabric-aiops network get <networkId> → confirm the target networkfabric-aiops remediate claim <networkId> <serial> --dry-run → preview POST /networks/<networkId>/devices/claim; then run for real (double confirmation) — the inverse (remove from network) is recordedfabric-aiops remediate blink-leds <serial> --duration 30 → low-risk physical confirmation that you are at the right box in the rackfabric-aiops health score → confirm the network's score recovers once the device reports infabric-aiops undo apply <id> or fabric-aiops remediate remove <networkId> <serial>. Note fabric-aiops remediate reboot <serial> is no undo by construction (a reboot has no safe inverse); it records only the before-state, so use it last, not as a first response.uplink_loss_and_latency_rca(records=[...]), network_health_score(device_statuses=[...]), config_template_drift(template=..., networks=[...]) — no connection or credentials requiredThe skill delivers reads and writes and records them; it does not decide whether a write is permitted. That is your agent's judgement, or the permission of the account you connect it with (a Meraki API key whose admin has read-only organization access — writes then fail at the controller). There is no read-only switch, policy file, or approval gate.
~/.fabric-aiops/audit.db (relocatable via FABRIC_AIOPS_HOME): params, result, status, duration, and the risk tier. The CLI writes the same row the MCP path does.FABRIC_AUDIT_APPROVED_BY / FABRIC_AUDIT_RATIONALE are optional annotations recorded on the audit row (who/why); they are never required and never block.FABRIC_RUNAWAY_MAX=0.--dry-run / dry_run=True and double confirmation at the CLI.update_device/update_network_vlan→restore prior values, claim↔remove, bind↔unbind/rebind); irreversible ops (reboot_device, blink_device_leds) record only the before-state.references/capabilities.md — full tool + field referencereferences/cli-reference.md — CLI command referencereferences/setup-guide.md — onboarding, credentials, and connectivity