zw008
VMware-AIops
Python

VMware vCenter/ESXi AI-powered monitoring and operations. Two skills: vmware-monitor (read-only, safe) and vmware-aiops (full operations) | Claude Code Skill

Last updated Jul 9, 2026
57
Stars
9
Forks
0
Issues
+2
Stars/day
Attention Score
52
Language breakdown
Python 99.9%
Dockerfile 0.1%
โ–ธ Files click to expand
README

VMware AIops

Author: Wei Zhou, VMware by Broadcom โ€” wei-wz.zhou@broadcom.com
This is a community-driven project by a VMware engineer, not an official VMware product.
For official VMware developer tools see developer.broadcom.com.

English | ไธญๆ–‡

AI-powered VMware vCenter/ESXi VM lifecycle and deployment tool โ€” 31 tools across 6 categories.

Companion skills handle everything else:
>
| Skill | Scope | Install |
|-------|-------|---------|
| vmware-monitor | Read-only: inventory, health, alarms, events, metrics | uv tool install vmware-monitor |
| vmware-storage | Datastores, iSCSI, vSAN management | uv tool install vmware-storage |
| vmware-vks | Tanzu Namespaces, TKC cluster lifecycle | uv tool install vmware-vks |
>
Need read-only monitoring only? Use VMware-Monitor โ€” zero destructive code in the codebase.

ClawHub Skills.sh Claude Code Marketplace License: MIT

Quick Install (Recommended)

Works with Claude Code, Cursor, Codex, Gemini CLI, Trae, and 30+ AI agents:

# Via Skills.sh
npx skills add zw008/VMware-AIops

Via ClawHub

clawhub install vmware-aiops

PyPI Install (No GitHub Access Required)

# Install via uv (recommended)
uv tool install vmware-aiops

Or via pip

pip install vmware-aiops

China mainland mirror (faster)

pip install vmware-aiops -i https://pypi.tuna.tsinghua.edu.cn/simple

Claude Code Plugin Install

# Add marketplace
/plugin marketplace add zw008/VMware-AIops

Install plugin

/plugin install vmware-ops

Use the skill

/vmware-ops:vmware-aiops

Why this over other VMware MCP servers

Most open-source VMware MCP servers (e.g. bright8192/esxi-mcp-server, giuliolibrando/vmware-vsphere-mcp-server) are single-vCenter VM wrappers: list/power/snapshot a VM, basic monitoring, a confirm=True flag. They explicitly do not cover networking, storage, Kubernetes, ops analytics, load balancing, or compliance โ€” and "logging is documented" is not an audit trail.

This is one skill in an 11-package family that covers the whole estate and runs every tool through a governed harness:

| | Other VMware MCP servers | This family | |---|:---:|:---:| | VM lifecycle + monitoring | โœ… | โœ… | | NSX networking (segments/gateways/NAT/routing/IPAM) | โŒ | โœ… vmware-nsx | | NSX security (DFW/groups/IDS-IPS/traceflow) | โŒ | โœ… vmware-nsx-security | | Storage (datastore/iSCSI/vSAN) | โŒ | โœ… vmware-storage | | Tanzu Kubernetes (Supervisor/Namespace/TKC) | โŒ | โœ… vmware-vks | | Aria Operations (metrics/alerts/capacity) | โŒ | โœ… vmware-aria | | AVI / NSX ALB load balancing + AKO | โŒ | โœ… vmware-avi | | Compliance baselines + drift (CIS/SCG/็ญ‰ไฟ/PCI) | โŒ | โœ… vmware-harden | | Governed harness (unified audit, policy engine, token budget + runaway breaker, graduated risk tiers, undo-token, prompt-injection sanitize) | โŒ | โœ… vmware-policy on every tool |

If you only ever power-cycle VMs in one vCenter, a single-file server is fine. If you run a real (regulated, NSX-segmented, multi-domain) VMware estate and need an AI operator an auditor can sign off on, that's what this family is for โ€” see docs/compliance-ready.md.

Capabilities Overview

What This Skill Does

| Category | Tools | Count | |----------|-------|:-----:| | VM Lifecycle | power on/off, TTL auto-delete, clean slate | 6 | | Deployment | OVA, template, linked clone, batch clone/deploy | 8 | | Guest Ops | exec commands, upload/download files, provision | 5 | | Plan/Apply | multi-step planning with rollback | 4 | | Cluster | create, delete, HA/DRS config, add/remove hosts | 6 | | Datastore | browse files, scan for images | 2 |

CLI vs MCP: Which Mode to Use

| Scenario | Recommended | Why | |----------|:-----------:|-----| | Local/small models (Ollama, Qwen <32B) | CLI | ~2K tokens context vs ~10K for MCP; small models struggle with many tool schemas | | Token-sensitive workflows | CLI | SKILL.md + Bash tool = minimal overhead | | Cloud models (Claude, GPT-4o) | Either | Both work; MCP gives structured JSON I/O | | Automated pipelines / Agent chaining | MCP | Type-safe parameters, structured output, no shell parsing | | Monitoring / storage / K8s | Companion skills | See vmware-monitor, vmware-storage, vmware-vks |

Rule of thumb: Use CLI for cost efficiency and small models. Use MCP for structured automation with large models.

Architecture

User (Natural Language)
  โ†“
AI CLI Tool (Claude Code / Gemini / Codex / Aider / Continue / Trae / Kimi)
  โ†“ reads SKILL.md / AGENTS.md / rules
  โ†“
vmware-aiops CLI
  โ†“ pyVmomi (vSphere SOAP API)
  โ†“
vCenter Server โ”€โ”€โ†’ ESXi Cluster โ”€โ”€โ†’ VM
    or
ESXi Standalone Host โ”€โ”€โ†’ VM

Version Compatibility

| vSphere / VCF Version | Support | Notes | |----------------|---------|-------| | VCF 9.1 / vSphere 9.1 | โœ… Full | Released 2026-05-12. pyVmomi <10.0 resolves and connects via SOAP; new REST-only features (PATCH /deployment/size, IPv6-only GOSC) not yet wrapped โ€” see VCF Python SDK for those. | | VCF 9.0 / vSphere 9.0 | โœ… Full | pyVmomi 8.0.3+ connects against vSphere 9 SOAP API. From VCF 9, pyVmomi is also bundled inside the unified VCF Python SDK. | | 8.0 / 8.0U1-U3 | โœ… Full | CreateSnapshotTask deprecated โ†’ use CreateSnapshotExTask | | 7.0 / 7.0U1-U3 | โœ… Full | All APIs supported | | 6.7 | โœ… Compatible | Backward-compatible, tested | | 6.5 | โœ… Compatible | Backward-compatible, tested |

pyVmomi auto-negotiates the API version during SOAP handshake โ€” no manual configuration needed. The same codebase manages 7.0 / 8.0 / 9.0 / 9.1 environments seamlessly.

Official Broadcom References

  • SDKs: โ€” VCF Python SDK (recommended for VCF 9+, bundles pyVmomi + vSAN SDK), vSphere Automation SDK for Python (REST APIs)
  • REST APIs: โ€” vSphere Automation API, VCF API, SDDC Manager API
  • CLI Tools: โ€” PowerCLI 9.1, ESXCLI, OVF Tool

Common Workflows

Deploy a Lab Environment

  • Browse datastore for OVA images โ†’ vmware-aiops datastore browse <ds> --pattern "*.ova"
  • Deploy VM from OVA โ†’ vmware-aiops deploy ova ./image.ova --name lab-vm --datastore ds1
  • Install software inside VM โ†’ vmware-aiops vm guest-exec lab-vm --cmd /bin/bash --args "-c 'apt-get install -y nginx'" --user root
  • Create baseline snapshot โ†’ vmware-aiops vm snapshot-create lab-vm --name baseline
  • Set TTL for auto-cleanup โ†’ vmware-aiops vm set-ttl lab-vm --minutes 480

Batch Clone for Testing

  • Create plan: vmcreateplan with multiple clone + reconfigure steps
  • Review plan with user (shows affected VMs, irreversible warnings)
  • Apply: vmapplyplan executes sequentially, stops on failure
  • If failed: vmrollbackplan reverses executed steps
  • Set TTL on all clones for auto-cleanup

Migrate VM to Another Host

  • Check VM info via vmware-monitor โ†’ verify power state and current host
  • Migrate: vmware-aiops vm migrate my-vm --to-host esxi-02
  • Verify migration completed

VM Lifecycle

| Operation | Command | Confirmation | vCenter | ESXi | |-----------|---------|:------------:|:-------:|:----:| | Power On | vm power-on <name> | โ€” | โœ… | โœ… | | Graceful Shutdown | vm power-off <name> | Double | โœ… | โœ… | | Force Power Off | vm power-off <name> --force | Double | โœ… | โœ… | | Reset | vm reset <name> | โ€” | โœ… | โœ… | | Suspend | vm suspend <name> | โ€” | โœ… | โœ… | | Create VM | vm create <name> --cpu --memory --disk | โ€” | โœ… | โœ… | | Delete VM | vm delete <name> | Double | โœ… | โœ… | | Reconfigure | vm reconfigure <name> --cpu --memory | Double | โœ… | โœ… | | Create Snapshot | vm snapshot-create <name> --name <snap> | โ€” | โœ… | โœ… | | List Snapshots | vm snapshot-list <name> | โ€” | โœ… | โœ… | | Revert Snapshot | vm snapshot-revert <name> --name <snap> | โ€” | โœ… | โœ… | | Delete Snapshot | vm snapshot-delete <name> --name <snap> [--no-wait] | โ€” | โœ… | โœ… | | Task Status | vm task-status <task-id> | โ€” | โœ… | โœ… | | Clone VM | vm clone <name> --new-name <new> | โ€” | โœ… | โœ… | | vMotion | vm migrate <name> --to-host <host> | โ€” | โœ… | โŒ | | Set TTL | vm set-ttl <name> --minutes <n> | โ€” | โœ… | โœ… | | Cancel TTL | vm cancel-ttl <name> | โ€” | โœ… | โœ… | | List TTLs | vm list-ttl | โ€” | โœ… | โœ… | | Clean Slate | vm clean-slate <name> [--snapshot baseline] | Double | โœ… | โœ… | | Guest Exec | vm guest-exec <name> --cmd /bin/bash --args "..." | โ€” | โœ… | โœ… | | Guest Exec (with output) | vm guest-exec-output <name> --cmd "df -h" | โ€” | โœ… | โœ… | | Guest Upload | vm guest-upload <name> --local f.sh --guest /tmp/f.sh | โ€” | โœ… | โœ… | | Guest Download | vm guest-download <name> --guest /var/log/syslog --local ./syslog | โ€” | โœ… | โœ… |

Guest Operations require VMware Tools running inside the guest OS. guest-exec-output auto-detects Linux/Windows shell and captures stdout/stderr.

Plan โ†’ Apply (Multi-step Operations)

For complex operations involving 2+ steps or 2+ VMs, use the plan/apply workflow instead of executing individually:

| Step | What Happens | |------|-------------| | 1. Create Plan | AI calls vmcreateplan โ€” validates actions, checks targets in vSphere, generates plan with rollback info | | 2. Review | AI shows plan to user: steps, affected VMs, irreversible warnings | | 3. Apply | vmapplyplan executes sequentially; stops on failure | | 4. Rollback (if failed) | Asks user whether to rollback, then vmrollbackplan reverses executed steps (irreversible steps skipped) |

Plans stored in ~/.vmware-aiops/plans/, auto-deleted on success, auto-cleaned after 24h.

VM Deployment & Provisioning

| Operation | Command | Speed | vCenter | ESXi | |-----------|---------|:-----:|:-------:|:----:| | Deploy from OVA | deploy ova <path> --name <vm> | Minutes | โœ… | โœ… | | Deploy from Template | deploy template <tmpl> --name <vm> | Minutes | โœ… | โœ… | | Linked Clone | deploy linked-clone --source <vm> --snapshot <snap> --name <new> | Seconds | โœ… | โœ… | | Attach ISO | deploy iso <vm> --iso "[ds] path/to.iso" | Instant | โœ… | โœ… | | Convert to Template | deploy mark-template <vm> | Instant | โœ… | โœ… | | Batch Clone | deploy batch-clone --source <vm> --count <n> | Minutes | โœ… | โœ… | | Batch Deploy (YAML) | deploy batch spec.yaml | Auto | โœ… | โœ… |

Cluster Management

| Operation | Command | Confirmation | vCenter | ESXi | |-----------|---------|:------------:|:-------:|:----:| | Cluster Info | cluster info <name> | โ€” | โœ… | โŒ | | Create Cluster | cluster create <name> [--ha] [--drs] | โ€” | โœ… | โŒ | | Delete Cluster | cluster delete <name> | Double | โœ… | โŒ | | Add Host | cluster add-host <cluster> --host <host> | Double | โœ… | โŒ | | Remove Host | cluster remove-host <cluster> --host <host> | Double | โœ… | โŒ | | Configure HA/DRS | cluster configure <name> [--ha/--no-ha] [--drs/--no-drs] | Double | โœ… | โŒ |

remove-host requires the host to be in maintenance mode first; the host is moved out of the cluster into the datacenter's host folder as a standalone host.

Alarm Management

| Operation | Command | Confirmation | vCenter | ESXi | |-----------|---------|:------------:|:-------:|:----:| | List Triggered Alarms | alarm list [--target <t>] | โ€” | โœ… | โŒ | | Acknowledge Alarm | alarm acknowledge <entity> <alarm> | โ€” | โœ… | โŒ | | Clear (Reset) Alarms | alarm reset <entity> <alarm> | Double | โœ… | โŒ |

Blast radius: vSphere has no per-alarm clear API. alarm reset uses AlarmManager.ClearTriggeredAlarms, which clears all triggered alarms matching the named alarm's entity type (host/VM/all) and current status (red/yellow) โ€” not just the named one. The named alarm is looked up first (typos fail fast), and the output's scope field reports exactly what was cleared. Cleared alarms re-trigger automatically if their underlying condition persists.

Datastore Browser

| Feature | vCenter | ESXi | Details | |---------|:-------:|:----:|---------| | Browse Files | โœ… | โœ… | List files/folders in any datastore path | | Scan Images | โœ… | โœ… | Discover ISO, OVA, OVF, VMDK across all datastores |

Scheduled Scanning & Notifications

| Feature | Details | |---------|---------| | Daemon | APScheduler-based, configurable interval (default 15 min) | | Multi-target Scan | Sequentially scan all configured vCenter/ESXi targets | | Scan Content | Alarms + Events + Host logs (hostd, vmkernel, vpxd) | | Log Analysis | Regex pattern matching: error, fail, critical, panic, timeout, corrupt | | Structured Log | JSONL output to ~/.vmware-aiops/scan.log | | Webhook | Slack, Discord, or any HTTP endpoint | | Daemon Management | daemon start/stop/status, PID file, graceful shutdown |

Safety Features

| Feature | Details | |---------|---------| | Dry-Run Mode | --dry-run on any destructive command prints exact API calls without executing | | Plan โ†’ Confirm โ†’ Execute โ†’ Log | Structured workflow: show current state, confirm changes, execute, audit log | | Double Confirmation | All destructive ops (power-off, delete, reconfigure, snapshot-revert/delete, clone, migrate) require 2 sequential confirmations โ€” no bypass flags | | Rejection Logging | Declined confirmations are recorded in the audit trail | | Audit Trail | All operations logged to ~/.vmware-aiops/audit.log (JSONL) with before/after state | | Input Validation | VM name, CPU (1-128), memory (128-1048576 MB), disk (1-65536 GB) validated | | Password Protection | .env file loading with permission check; never in shell history | | SSL Self-signed Support | disableSslCertValidation โ€” only for ESXi with self-signed certs in isolated labs; production should use CA-signed certificates | | Prompt Injection Protection | vSphere event messages and host logs are truncated, stripped of control characters, and wrapped in boundary markers before output | | Webhook Data Scope | Sends notifications to user-configured URLs only โ€” no third-party services by default | | Task Waiting | All async operations wait for completion and report result | | State Validation | Pre-operation checks (VM exists, power state correct) |

vCenter vs ESXi Comparison

| Capability | vCenter | ESXi Standalone | |------------|:-------:|:----:| | vMotion migration | โœ… | โŒ | | Cross-host clone | โœ… | โŒ | | Cluster management | โœ… | โŒ | | All VM lifecycle ops | โœ… | โœ… | | OVA/Template/Linked Clone deploy | โœ… | โœ… | | Datastore browsing & image scan | โœ… | โœ… | | Snapshots | โœ… | โœ… | | Guest operations | โœ… | โœ… |

Inventory, alarms, events, sensors, host services, and scanning are now in vmware-monitor.

Troubleshooting

"VM not found" error

VM names are case-sensitive in vSphere. Use exact name from vmware-monitor inventory vms.

Guest exec returns empty output

Use vmguestexecoutput instead of vmguestexec โ€” it auto-captures stdout/stderr. Basic vmguest_exec only returns exit code.

Deploy OVA times out

Large OVA files (>10GB) may exceed the default 120s timeout. The upload happens via HTTP NFC lease โ€” ensure network between the machine running vmware-aiops and ESXi is stable.

Plan apply fails mid-way

Run vmware-aiops plan list to see failed plan status. Ask user if they want to rollback with vmrollbackplan. Irreversible steps (delete_vm) are skipped during rollback.

Connection refused / SSL error

  • Verify target is reachable: vmware-aiops doctor
  • For self-signed certs: set disableSslCertValidation: true in config.yaml (lab environments only)

Supported AI Platforms

| Platform | Status | Config File | AI Model | |----------|--------|-------------|----------| | Claude Code | โœ… Native Skill | skills/vmware-aiops/SKILL.md | Anthropic Claude | | Gemini CLI | โœ… Extension | gemini-extension/GEMINI.md | Google Gemini | | OpenAI Codex CLI | โœ… Skill + AGENTS.md | codex-skill/AGENTS.md | OpenAI GPT | | Aider | โœ… Conventions | codex-skill/AGENTS.md | Any (cloud + local) | | Continue CLI | โœ… Rules | codex-skill/AGENTS.md | Any (cloud + local) | | Trae IDE | โœ… Rules | trae-rules/project_rules.md | Claude/DeepSeek/GPT-4o/Doubao | | Kimi Code CLI | โœ… Skill | kimi-skill/SKILL.md | Moonshot Kimi | | MCP Server | โœ… MCP Protocol | mcp_server/ | Any MCP client | | Python CLI | โœ… Standalone | N/A | N/A |

Platform Comparison

| Feature | Claude Code | Gemini CLI | Codex CLI | Aider | Continue | Trae IDE | Kimi CLI | |---------|-------------|------------|-----------|-------|----------|----------|----------| | Cloud AI | Anthropic | Google | OpenAI | Any | Any | Multi | Moonshot | | Local models | โ€” | โ€” | โ€” | Ollama | Ollama | โ€” | โ€” | | Skill system | SKILL.md | Extension | SKILL.md | โ€” | Rules | Rules | SKILL.md | | MCP support | Native | Native | Via Skills | Third-party | Native | โ€” | โ€” | | Free tier | โ€” | 60 req/min | โ€” | Self-hosted | Self-hosted | โ€” | โ€” |

MCP Server Integrations

The vmware-aiops MCP server works with any MCP-compatible agent or tool. Ready-to-use configuration templates are in examples/mcp-configs/.

| Agent / Tool | Local Model Support | Config Template | Integration Guide | |-------------|:-------------------:|-----------------|-------------------| | Goose | โœ… Ollama, LM Studio | goose.json | Guide | | LocalCowork | โœ… Fully offline | localcowork.json | Guide | | mcp-agent | โœ… Ollama, vLLM | mcp-agent.yaml | Guide | | VS Code Copilot | โ€” | vscode-copilot.json | Guide | | Cursor | โ€” | cursor.json | Guide | | Continue | โœ… Ollama | continue.yaml | Guide | | Claude Code | โ€” | claude-code.json | โ€” |

Fully local operation (no cloud API required):

# Aider + Ollama + vmware-aiops (via AGENTS.md)
aider --conventions codex-skill/AGENTS.md --model ollama/qwen2.5-coder:32b

Any MCP agent + local model + vmware-aiops MCP server

See examples/mcp-configs/ for your agent's config format


Installation

Step 0: Prerequisites

# Python 3.10+ required
python3 --version

Node.js 18+ required for Gemini CLI and Codex CLI

node --version

Step 1: Clone & Install Python Backend

All platforms share the same Python backend.

git clone https://github.com/zw008/VMware-AIops.git
cd VMware-AIops
python3 -m venv .venv
source .venv/bin/activate
pip install -e .

Step 2: Configure

mkdir -p ~/.vmware-aiops
cp config.example.yaml ~/.vmware-aiops/config.yaml

Edit config.yaml with your vCenter/ESXi targets

Set passwords via .env file (recommended):

# Use the template cp .env.example ~/.vmware-aiops/.env

Edit and fill in your passwords, then lock permissions

chmod 600 ~/.vmware-aiops/.env
Security note: Prefer .env file over command-line export to avoid passwords appearing in shell history. The .env file should have chmod 600 (owner-only read/write).

Password environment variable naming convention:

VMWARE{TARGETNAMEUPPER}PASSWORD 

Replace hyphens with underscores, UPPERCASE

Example: target "home-esxi" โ†’ VMWAREHOMEESXI_PASSWORD

Example: target "prod-vcenter" โ†’ VMWAREPRODVCENTER_PASSWORD

Security Best Practices

  • NEVER hardcode passwords in scripts or config files
  • NEVER pass passwords as command-line arguments (visible in ps)
  • ALWAYS use ~/.vmware-aiops/.env with chmod 600
  • ALWAYS configure connections via config.yaml โ€” credentials are loaded from .env automatically
  • Config File Contents: config.yaml stores target hostnames, ports, and a reference to the .env file. It does not contain passwords or tokens. All secrets are stored exclusively in .env
  • TLS: Enabled by default. Disable only for ESXi hosts with self-signed certificates in isolated lab environments
  • Webhook: Disabled by default. When enabled, sends monitoring summaries to your own configured URL only โ€” payloads contain no credentials, IPs, or PII, only aggregated alert metadata. No data sent to third-party services
  • Least Privilege: Use a dedicated vCenter service account with minimal permissions. For monitoring-only use cases, prefer the read-only VMware-Monitor
  • Prompt Injection Protection: All vSphere-sourced content is truncated, stripped of control characters, and wrapped in boundary markers before output
  • Code Review: We recommend reviewing the source code and commit history before deploying in production
  • Production Safety: For production environments, use the read-only VMware-Monitor instead. AI agents can misinterpret context and execute unintended destructive operations โ€” real-world incidents have shown that AI-driven infrastructure tools without proper isolation can delete production databases and entire environments. VMware-Monitor eliminates this risk at the code level: no destructive functions exist in its codebase

Step 3: Connect Your AI Tool

Choose one (or more) of the following:


Option A: Claude Code (Marketplace)

Method 1: Marketplace (recommended)

In Claude Code, run:

/plugin marketplace add zw008/VMware-AIops /plugin install vmware-ops

Then use:

/vmware-ops:vmware-aiops > Show me all VMs on esxi-lab.example.com

Method 2: Local install

# Clone and symlink
git clone https://github.com/zw008/VMware-AIops.git
ln -sf $(pwd)/VMware-AIops ~/.claude/plugins/marketplaces/vmware-aiops

Register marketplace

python3 -c " import json, pathlib f = pathlib.Path.home() / '.claude/plugins/known_marketplaces.json' d = json.loads(f.read_text()) if f.exists() else {} d['vmware-aiops'] = { 'source': {'source': 'github', 'repo': 'zw008/VMware-AIops'}, 'installLocation': str(pathlib.Path.home() / '.claude/plugins/marketplaces/vmware-aiops') } f.write_text(json.dumps(d, indent=2)) "

Enable plugin

python3 -c " import json, pathlib f = pathlib.Path.home() / '.claude/settings.json' d = json.loads(f.read_text()) if f.exists() else {} d.setdefault('enabledPlugins', {})['vmware-ops@vmware-aiops'] = True f.write_text(json.dumps(d, indent=2)) "

Restart Claude Code, then:

/vmware-ops:vmware-aiops

Submit to Official Marketplace

This plugin can also be submitted to the Anthropic official plugin directory for public discovery.


Option B: Gemini CLI

# Install Gemini CLI
npm install -g @google/gemini-cli

Install the extension from the cloned repo

gemini extensions install ./gemini-extension

Or install directly from GitHub

gemini extensions install https://github.com/zw008/VMware-AIops

Then start Gemini CLI:

gemini > Show me all VMs on my ESXi host


Option C: OpenAI Codex CLI

# Install Codex CLI
npm i -g @openai/codex

Or on macOS:

brew install --cask codex

Copy skill to Codex skills directory

mkdir -p ~/.codex/skills/vmware-aiops cp codex-skill/SKILL.md ~/.codex/skills/vmware-aiops/SKILL.md

Copy AGENTS.md to project root

cp codex-skill/AGENTS.md ./AGENTS.md

Then start Codex CLI:

codex --enable skills > List all VMs on my ESXi


Option D: Aider (supports local models)

# Install Aider
pip install aider-chat

Install Ollama for local models (optional)

macOS:

brew install ollama ollama pull qwen2.5-coder:32b

Run with cloud API

aider --conventions codex-skill/AGENTS.md

Or with local model via Ollama

aider --conventions codex-skill/AGENTS.md \ --model ollama/qwen2.5-coder:32b

Option E: Continue CLI (supports local models)

# Install Continue CLI
npm i -g @continuedev/cli

Copy rules file

mkdir -p .continue/rules cp codex-skill/AGENTS.md .continue/rules/vmware-aiops.md

Configure ~/.continue/config.yaml for local model:

models:   - name: local-coder     provider: ollama     model: qwen2.5-coder:32b

Then:

cn > Check ESXi health and alarms


Option F: Trae IDE

Copy the rules file to your project's .trae/rules/ directory:

mkdir -p .trae/rules
cp trae-rules/projectrules.md .trae/rules/projectrules.md

Trae IDE's Builder Mode reads .trae/rules/ Markdown files at startup.

Note: You can also install Claude Code extension in Trae IDE and use .claude/skills/ format directly.

Option G: Kimi Code CLI

# Copy skill file to Kimi skills directory
mkdir -p ~/.kimi/skills/vmware-aiops
cp kimi-skill/SKILL.md ~/.kimi/skills/vmware-aiops/SKILL.md

Option H: MCP Server (Smithery / Glama / Claude Desktop)

The MCP server exposes VMware operations as tools via the Model Context Protocol. Works with any MCP-compatible client (Claude Desktop, Cursor, etc.).

After uv tool install vmware-aiops, start the MCP server with one command (v1.5.15+):

# Recommended โ€” single command, no network re-resolve
vmware-aiops mcp

With a custom config path

VMWAREAIOPSCONFIG=/path/to/config.yaml vmware-aiops mcp

Claude Desktop config (claudedesktopconfig.json):

{   "mcpServers": {     "vmware-aiops": {       "command": "vmware-aiops",       "args": ["mcp"],       "env": {         "VMWAREAIOPSCONFIG": "/path/to/config.yaml"       }     }   } }

Alternative: uvx (no install) or legacy entry point

# Run without installing (requires PyPI access each launch)
uvx --from vmware-aiops vmware-aiops mcp

Legacy entry point (still works, kept for backward compatibility)

vmware-aiops-mcp
Behind a corporate TLS proxy? uvx may fail with invalid peer certificate: UnknownIssuer.
Use the recommended vmware-aiops mcp form above (no network needed), or set UVNATIVETLS=true.

Install via Smithery:

npx -y @smithery/cli install @zw008/VMware-AIops --client claude


Option I: Standalone CLI (no AI)

# Already installed in Step 1
source .venv/bin/activate

vmware-aiops vm power-on my-vm --target home-esxi vmware-aiops deploy ova ./ubuntu.ova --name my-vm --target home-esxi vmware-aiops datastore browse datastore1 --target home-esxi


Update / Upgrade

Already installed? Re-run the install command for your channel to get the latest version:

| Install Channel | Update Command | |----------------|----------------| | ClawHub | clawhub install vmware-aiops | | Skills.sh | npx skills add zw008/VMware-AIops | | Claude Code Plugin | /plugin marketplace add zw008/VMware-AIops | | Git clone | cd VMware-AIops && git pull origin main && uv pip install -e . | | uv | uv tool install vmware-aiops --force |

Check your current version: vmware-aiops --version


Chinese Cloud Models

For users in China who prefer domestic cloud APIs or have limited access to overseas services.

DeepSeek

Cost-effective, strong coding capability.

# Set DeepSeek API key (get from https://platform.deepseek.com)
export DEEPSEEKAPIKEY="your-key"

Run with Aider

aider --conventions codex-skill/AGENTS.md \ --model deepseek/deepseek-coder

Persistent config ~/.aider.conf.yml:

model: deepseek/deepseek-coder conventions: codex-skill/AGENTS.md

Qwen (Alibaba Cloud)

Alibaba Cloud's coding model, free tier available.

# Set DashScope API key (get from https://dashscope.console.aliyun.com)
export DASHSCOPEAPIKEY="your-key"

aider --conventions codex-skill/AGENTS.md \ --model qwen/qwen-coder-plus

Or via OpenAI-compatible endpoint:

export OPENAIAPIBASE="https://dashscope.aliyuncs.com/compatible-mode/v1" export OPENAIAPIKEY="your-dashscope-key"

aider --conventions codex-skill/AGENTS.md \ --model qwen-coder-plus-latest

Doubao (ByteDance)

export OPENAIAPIBASE="https://ark.cn-beijing.volces.com/api/v3"
export OPENAIAPIKEY="your-ark-key"

aider --conventions codex-skill/AGENTS.md \ --model your-doubao-endpoint-id

With Continue CLI

Configure ~/.continue/config.yaml:

# DeepSeek
models:
  - name: deepseek-coder
    provider: openai-compatible
    apiBase: https://api.deepseek.com/v1
    apiKey: your-deepseek-key
    model: deepseek-coder

Qwen

models: - name: qwen-coder provider: openai-compatible apiBase: https://dashscope.aliyuncs.com/compatible-mode/v1 apiKey: your-dashscope-key model: qwen-coder-plus-latest

Local Models (Aider + Ollama)

For fully offline operation โ€” no cloud API, no internet, full privacy.

Aider + Ollama + local Qwen/DeepSeek is ideal for air-gapped environments.

Step 1: Install Ollama

# macOS
brew install ollama

Linux โ€” download from https://ollama.com/download and install manually

See https://github.com/ollama/ollama for platform-specific instructions

Step 2: Pull a model

| Model | Command | Size | Note | |-------|---------|------|------| | Qwen 2.5 Coder 32B | ollama pull qwen2.5-coder:32b | ~20GB | Best local coding model | | Qwen 2.5 Coder 7B | ollama pull qwen2.5-coder:7b | ~4.5GB | Low-memory option | | DeepSeek Coder V2 | ollama pull deepseek-coder-v2 | ~8.9GB | Strong reasoning | | CodeLlama 34B | ollama pull codellama:34b | ~19GB | Meta coding model |

Hardware: 32B โ†’ ~20GB VRAM (or 32GB RAM for CPU). 7B โ†’ 8GB RAM.

Step 3: Run with Aider

pip install aider-chat
ollama serve

Aider + local Qwen (recommended)

aider --conventions codex-skill/AGENTS.md \ --model ollama/qwen2.5-coder:32b

Aider + local DeepSeek

aider --conventions codex-skill/AGENTS.md \ --model ollama/deepseek-coder-v2

Low-memory option

aider --conventions codex-skill/AGENTS.md \ --model ollama/qwen2.5-coder:7b

Persistent config ~/.aider.conf.yml:

model: ollama/qwen2.5-coder:32b conventions: codex-skill/AGENTS.md

Local Architecture

User โ†’ Aider CLI โ†’ Ollama (localhost:11434) โ†’ Qwen / DeepSeek local model
  โ”‚                                                    โ†“
  โ”‚                                          reads AGENTS.md instructions
  โ”‚                                                    โ†“
  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ†’ vmware-aiops CLI โ”€โ”€โ†’ ESXi / vCenter
Tip: Local models are fully offline โ€” perfect for air-gapped environments or strict data compliance.

CLI Reference

# Diagnostics
vmware-aiops doctor                   # Check environment, config, connectivity
vmware-aiops doctor --skip-auth       # Skip vSphere auth check (faster)

MCP Config Generator

vmware-aiops mcp-config generate --agent goose # Generate config for Goose vmware-aiops mcp-config generate --agent claude-code # Generate config for Claude Code vmware-aiops mcp-config list # List all supported agents

VM operations

vmware-aiops vm power-on my-vm # Power on vmware-aiops vm power-off my-vm # Graceful shutdown (2x confirm) vmware-aiops vm power-off my-vm --force # Force power off (2x confirm) vmware-aiops vm create my-new-vm --cpu 4 --memory 8192 --disk 100 # Create VM vmware-aiops vm delete my-vm --confirm # Delete VM (2x confirm) vmware-aiops vm reconfigure my-vm --cpu 4 --memory 8192 # Reconfigure (2x confirm) vmware-aiops vm snapshot-create my-vm --name "before-upgrade" # Create snapshot vmware-aiops vm snapshot-list my-vm # List snapshots vmware-aiops vm snapshot-revert my-vm --name "before-upgrade" # Revert snapshot vmware-aiops vm snapshot-delete my-vm --name "before-upgrade" # Delete snapshot (waits โ‰ค30 min for consolidation) vmware-aiops vm snapshot-delete my-vm --name "old-big" --no-wait # Fire async, return a task id vmware-aiops vm task-status task-1234 # Poll an async task by id vmware-aiops vm clone my-vm --new-name my-vm-clone # Clone VM vmware-aiops vm migrate my-vm --to-host esxi-02 # vMotion vmware-aiops vm set-ttl my-vm --minutes 60 # Auto-delete in 60 min vmware-aiops vm cancel-ttl my-vm # Cancel TTL vmware-aiops vm list-ttl # Show all TTLs vmware-aiops vm clean-slate my-vm --snapshot baseline # Revert to baseline (2x confirm)

Guest Operations (requires VMware Tools in guest)

vmware-aiops vm guest-exec my-vm --cmd /bin/bash --args "-c 'whoami'" --user root vmware-aiops vm guest-upload my-vm --local ./script.sh --guest /tmp/script.sh --user root vmware-aiops vm guest-download my-vm --guest /var/log/syslog --local ./syslog.txt --user root

Plan โ†’ Apply (multi-step operations)

vmware-aiops plan list # List pending/failed plans

Deploy

vmware-aiops deploy ova ./ubuntu.ova --name my-vm --datastore ds1 # Deploy from OVA vmware-aiops deploy template golden-ubuntu --name new-vm # Deploy from template vmware-aiops deploy linked-clone --source base-vm --snapshot clean --name test-vm # Linked clone (seconds) vmware-aiops deploy iso my-vm --iso "[datastore1] iso/ubuntu-22.04.iso" # Attach ISO vmware-aiops deploy mark-template golden-vm # Convert VM to template vmware-aiops deploy batch-clone --source base-vm --count 5 --prefix lab # Batch clone vmware-aiops deploy batch deploy.yaml # Batch deploy from YAML spec

Cluster

vmware-aiops cluster info my-cluster # Cluster details (HA/DRS status) vmware-aiops cluster create my-cluster --ha --drs # Create cluster with HA+DRS vmware-aiops cluster delete my-cluster # Delete cluster (2x confirm) vmware-aiops cluster add-host my-cluster --host esxi-03 # Add host to cluster (2x confirm) vmware-aiops cluster remove-host my-cluster --host esxi-03 # Remove host (2x confirm) vmware-aiops cluster configure my-cluster --ha --drs # Configure HA/DRS (2x confirm)

Alarm management

vmware-aiops alarm list # List triggered alarms vmware-aiops alarm acknowledge esxi-01 "Host memory usage" # Acknowledge alarm vmware-aiops alarm reset esxi-01 "Host memory usage" # Clear alarms (2x confirm; clears ALL matching entity type + status)

Datastore (browse and scan only โ€” iSCSI/vSAN moved to vmware-storage)

vmware-aiops datastore browse datastore1 --path "iso/" # Browse datastore vmware-aiops datastore scan-images --target home-esxi # Scan all datastores for images

Scan

vmware-aiops scan now # One-time scan

Daemon

vmware-aiops daemon start # Start scanner vmware-aiops daemon status # Check status vmware-aiops daemon stop # Stop daemon

Companion skills for other operations:

vmware-monitor: inventory, alarms, events, sensors

vmware-storage: datastores, iSCSI, vSAN

vmware-vks: Tanzu/TKC cluster lifecycle


Configuration

See config.example.yaml for all options.

| Section | Key | Default | Description | |---------|-----|---------|-------------| | targets | name | โ€” | Friendly name | | targets | host | โ€” | vCenter/ESXi hostname or IP | | targets | type | vcenter | vcenter or esxi | | targets | port | 443 | Connection port | | targets | verify_ssl | false | SSL certificate verification | | scanner | interval_minutes | 15 | Scan frequency | | scanner | severity_threshold | warning | Min severity: critical/warning/info | | scanner | lookback_hours | 1 | How far back to scan | | scanner | log_types | [vpxd, hostd, vmkernel] | Log sources | | notify | log_file | ~/.vmware-aiops/scan.log | JSONL log output | | notify | webhook_url | โ€” | Webhook endpoint (Slack, Discord, etc.) |


Project Structure

VMware-AIops/
โ”œโ”€โ”€ .claude-plugin/                # Claude Code marketplace manifest
โ”‚   โ””โ”€โ”€ marketplace.json
โ”œโ”€โ”€ plugins/                       # Claude Code plugin
โ”‚   โ””โ”€โ”€ vmware-ops/
โ”‚       โ”œโ”€โ”€ .claude-plugin/
โ”‚       โ”‚   โ””โ”€โ”€ plugin.json
โ”‚       โ””โ”€โ”€ skills/
โ”‚           โ””โ”€โ”€ vmware-aiops/
โ”‚               โ””โ”€โ”€ SKILL.md       # Full operations skill
โ”œโ”€โ”€ skills/                        # Skills index (npx skills add)
โ”‚   โ””โ”€โ”€ vmware-aiops/
โ”‚       โ”œโ”€โ”€ SKILL.md               # Slimmed-down skill (progressive disclosure)
โ”‚       โ””โ”€โ”€ references/            # Detailed docs loaded on-demand
โ”‚           โ”œโ”€โ”€ capabilities.md    # Full capabilities tables
โ”‚           โ”œโ”€โ”€ cli-reference.md   # Complete CLI reference
โ”‚           โ””โ”€โ”€ setup-guide.md     # Install, security, AI platforms
โ”œโ”€โ”€ vmware_aiops/                  # Python backend
โ”‚   โ”œโ”€โ”€ config.py                  # YAML + .env config
โ”‚   โ”œโ”€โ”€ connection.py              # Multi-target pyVmomi
โ”‚   โ”œโ”€โ”€ cli.py                     # Typer CLI (double confirm)
โ”‚   โ”œโ”€โ”€ ops/                       # Operations
โ”‚   โ”‚   โ”œโ”€โ”€ inventory.py           # VMs, hosts, datastores, clusters
โ”‚   โ”‚   โ”œโ”€โ”€ health.py              # Alarms, events, sensors
โ”‚   โ”‚   โ”œโ”€โ”€ vm_lifecycle.py        # VM CRUD, snapshots, clone, migrate
โ”‚   โ”‚   โ”œโ”€โ”€ vm_deploy.py           # OVA, template, linked clone, batch deploy
โ”‚   โ”‚   โ””โ”€โ”€ datastore_browser.py   # Datastore browsing, image discovery
โ”‚   โ”œโ”€โ”€ scanner/                   # Log scanning daemon
โ”‚   โ””โ”€โ”€ notify/                    # Notifications (JSONL + webhook)
โ”œโ”€โ”€ gemini-extension/              # Gemini CLI extension
โ”‚   โ”œโ”€โ”€ gemini-extension.json
โ”‚   โ””โ”€โ”€ GEMINI.md
โ”œโ”€โ”€ codex-skill/                   # Codex + Aider + Continue
โ”‚   โ”œโ”€โ”€ SKILL.md
โ”‚   โ””โ”€โ”€ AGENTS.md
โ”œโ”€โ”€ trae-rules/                    # Trae IDE rules
โ”‚   โ””โ”€โ”€ project_rules.md
โ”œโ”€โ”€ kimi-skill/                    # Kimi Code CLI skill
โ”‚   โ””โ”€โ”€ SKILL.md
โ”œโ”€โ”€ mcp_server/                    # MCP server wrapper
โ”‚   โ”œโ”€โ”€ server.py                  # FastMCP server with tools
โ”‚   โ””โ”€โ”€ main.py
โ”œโ”€โ”€ smithery.yaml                  # Smithery marketplace config
โ”œโ”€โ”€ RELEASE_NOTES.md
โ”œโ”€โ”€ config.example.yaml
โ””โ”€โ”€ pyproject.toml

API Coverage

Built on pyVmomi (vSphere Web Services API / SOAP).

| API Object | Usage | |------------|-------| | vim.VirtualMachine | VM lifecycle, snapshots, clone, migrate | | vim.HostSystem | ESXi host info, sensors, services | | vim.Datastore | Storage capacity, type, accessibility | | vim.host.DatastoreBrowser | File browsing, image discovery (ISO/OVA/VMDK) | | vim.OvfManager | OVA import and deployment | | vim.ClusterComputeResource | Cluster, DRS, HA | | vim.Network | Network listing | | vim.alarm.AlarmManager | Active alarm monitoring | | vim.event.EventManager | Event/log queries |

Related Projects

| Skill | Scope | Tools | Install | |-------|-------|:-----:|---------| | vmware-monitor | Read-only monitoring, alarms, events | 8 | uv tool install vmware-monitor | | vmware-aiops | VM lifecycle, deployment, guest ops, cluster, datastore browse | 31 | uv tool install vmware-aiops | | vmware-storage | Datastores, iSCSI, vSAN | 11 | uv tool install vmware-storage | | vmware-vks | Tanzu Namespaces, TKC cluster lifecycle | 20 | uv tool install vmware-vks |


Troubleshooting & Contributing

If you encounter any errors or issues, please send the error message, logs, or screenshots to zhouwei008@gmail.com. Contributions are welcome โ€” feel free to join us in maintaining and improving this project!

License

MIT

๐Ÿ”— More in this category

ยฉ 2026 GitRepoTrend ยท zw008/VMware-AIops ยท Updated daily from GitHub