VMware Monitor (Read-Only)
Safe, read-only VMware vCenter and ESXi monitoring skill. Query your entire VMware infrastructure using natural language through any AI coding assistant — without risk of accidental modifications.
Code-level safety: This is an independent repository (zw008/VMware-Monitor). No destructive code paths exist — no power off, delete, create, reconfigure, snapshot-create/revert/delete, clone, or migrate functions are present in the codebase. For full operations, use the separate VMware-AIops repo. Install: clawhub install vmware-aiops
When to Use This Skill
- Query VM, host, datastore, cluster, and network inventory
- Check health status, active alarms, hardware sensors, and event logs
- View VM details and existing snapshot lists (read-only)
- Run scheduled log scanning with webhook notifications (Slack, Discord)
- You need zero-risk monitoring — no accidental power-off, delete, or reconfigure possible
Quick Install
Works with Claude Code, Cursor, Codex, Gemini CLI, Trae, Kimi, and 30+ AI agents:
# Via Skills.sh
npx skills add zw008/VMware-Monitor
# Via ClawHub
clawhub install vmware-monitor
Claude Code
/plugin marketplace add zw008/VMware-Monitor
/plugin install vmware-monitor
/vmware-monitor:vmware-monitor
Usage Mode
Choose the best mode based on your AI tool:
| Platform |
Recommended Mode |
Why |
| Claude Code, Cursor |
MCP |
Structured tool calls, no interactive confirmation needed, seamless experience |
| Aider, Codex, Gemini CLI, Continue |
CLI |
Lightweight, low context overhead, universal compatibility |
| Ollama + local models |
CLI |
Minimal context usage, works with any model size |
Calling Priority
- MCP-native tools (Claude Code, Cursor): MCP first, CLI fallback
- All other tools: CLI first (MCP not needed)
Tip: If your AI tool supports MCP, check whether vmware-monitor MCP server is loaded (/mcp in Claude Code). If not, configure it first — MCP provides the best hands-free experience.
CLI Examples
# Activate venv first
source /path/to/VMware-Monitor/.venv/bin/activate
# Inventory
vmware-monitor inventory vms --target home-esxi
vmware-monitor inventory hosts --target home-esxi
# Health
vmware-monitor health alarms --target home-esxi
vmware-monitor health events --hours 24 --severity warning --target home-esxi
# VM info (read-only)
vmware-monitor vm info my-vm --target home-esxi
MCP Mode (Optional)
For Claude Code / Cursor users who prefer structured tool calls, add to ~/.claude/settings.json:
{
"mcpServers": {
"vmware-monitor": {
"command": "/path/to/VMware-Monitor/.venv/bin/python",
"args": ["-m", "mcp_server"],
"cwd": "/path/to/VMware-Monitor",
"env": {
"VMWARE_MONITOR_CONFIG": "~/.vmware-monitor/config.yaml"
}
}
}
}
MCP exposes 7 read-only tools: list_virtual_machines, list_esxi_hosts, list_all_datastores, list_all_clusters, get_alarms, get_events, vm_info. All accept optional target parameter.
list_virtual_machines supports limit, sort_by, power_state, fields for compact context in large inventories.
Architecture
User (Natural Language)
↓
AI Tool (Claude Code / Aider / Gemini / Codex / Cursor / Trae / Kimi)
↓
├─ CLI mode (default): vmware-monitor CLI ──→ pyVmomi ──→ vSphere API
│
└─ MCP mode (optional): MCP Server (stdio) ──→ pyVmomi ──→ vSphere API
↓
vCenter Server ──→ ESXi Clusters ──→ VMs
or
ESXi Standalone ──→ VMs
First Interaction: Environment Selection
When the user starts a conversation, always ask first:
- Which environment do they want to monitor? (vCenter Server or standalone ESXi host)
- Which target from their config? (e.g.,
prod-vcenter, lab-esxi)
- If no config exists yet, guide them through creating
~/.vmware-monitor/config.yaml
Capabilities (Read-Only)
1. Inventory
| Feature |
vCenter |
ESXi |
Details |
| List VMs |
✅ |
✅ |
Name, power state, CPU, memory, guest OS, IP |
| List Hosts |
✅ |
⚠️ Self only |
CPU cores, memory, ESXi version, VM count, uptime |
| List Datastores |
✅ |
✅ |
Capacity, free/used, type (VMFS/NFS), usage % |
| List Clusters |
✅ |
❌ |
Host count, DRS/HA status |
| List Networks |
✅ |
✅ |
Network name, associated VM count |
2. Health & Monitoring
| Feature |
vCenter |
ESXi |
Details |
| Active Alarms |
✅ |
✅ |
Severity, alarm name, entity, timestamp |
| Event/Log Query |
✅ |
✅ |
Filter by time range, severity; 50+ event types |
| Hardware Sensors |
✅ |
✅ |
Temperature, voltage, fan status |
| Host Services |
✅ |
✅ |
hostd, vpxa running/stopped status |
Monitored Event Types:
| Category |
Events |
| VM Failures |
VmFailedToPowerOnEvent, VmDiskFailedEvent, VmFailoverFailed |
| Host Issues |
HostConnectionLostEvent, HostShutdownEvent, HostIpChangedEvent |
| Storage |
DatastoreCapacityIncreasedEvent, SCSI high latency |
| HA/DRS |
DasHostFailedEvent, DrsVmMigratedEvent, DrsSoftRuleViolationEvent |
| Auth |
UserLoginSessionEvent, BadUsernameSessionEvent |
3. VM Info & Snapshot List (Read-Only)
| Feature |
Details |
| VM Info |
Name, power state, guest OS, CPU, memory, IP, VMware Tools, disks, NICs |
| Snapshot List |
List existing snapshots with name and creation time (no create/revert/delete) |
4. 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 |
| Webhook |
Slack, Discord, or any HTTP endpoint |
FORBIDDEN Operations — DO NOT EXIST IN CODEBASE
These operations cannot be performed with this skill — zero destructive code paths exist:
- ❌
vm power-on/off, vm reset, vm suspend
- ❌
vm create/delete/reconfigure
- ❌
vm snapshot-create/revert/delete
- ❌
vm clone/migrate
Direct users to VMware-AIops (clawhub install vmware-aiops) for these.
Safety Features
| Feature |
Details |
| Code-Level Isolation |
Independent repository — zero destructive functions in codebase |
| Audit Trail |
All queries logged to ~/.vmware-monitor/audit.log (JSONL) |
| Password Protection |
.env file loading with permission check (warn if not 600) |
| SSL Self-signed Support |
disableSslCertValidation — only for ESXi hosts with self-signed certificates in isolated lab/home environments. Production environments should use CA-signed certificates with full TLS verification enabled. |
Version Compatibility
| vSphere Version |
Support |
Notes |
| 8.0 / 8.0U1-U3 |
✅ Full |
pyVmomi 8.0.3+ |
| 7.0 / 7.0U1-U3 |
✅ Full |
All read-only 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.
Supported AI Platforms
| Platform |
Status |
Config File |
| Claude Code |
✅ Native Skill |
plugins/.../SKILL.md |
| Gemini CLI |
✅ Extension |
gemini-extension/GEMINI.md |
| OpenAI Codex CLI |
✅ Skill + AGENTS.md |
codex-skill/AGENTS.md |
| Aider |
✅ Conventions |
codex-skill/AGENTS.md |
| Continue CLI |
✅ Rules |
codex-skill/AGENTS.md |
| Trae IDE |
✅ Rules |
trae-rules/project_rules.md |
| Kimi Code CLI |
✅ Skill |
kimi-skill/SKILL.md |
| MCP Server |
✅ MCP Protocol |
mcp_server/ |
| Python CLI |
✅ Standalone |
N/A |
MCP Server — Local Agent Compatibility
The MCP server works with any MCP-compatible agent via stdio transport. All 8 tools are read-only. Config templates in examples/mcp-configs/:
| Agent |
Local Models |
Config Template |
| Goose (Block) |
✅ Ollama, LM Studio |
goose.json |
| LocalCowork (Liquid AI) |
✅ Fully offline |
localcowork.json |
| mcp-agent (LastMile AI) |
✅ Ollama, vLLM |
mcp-agent.yaml |
| VS Code Copilot |
— |
vscode-copilot.json |
| Cursor |
— |
cursor.json |
| Continue |
✅ Ollama |
continue.yaml |
| Claude Code |
— |
claude-code.json |
# Example: Aider + Ollama (fully local, no cloud API)
aider --conventions codex-skill/AGENTS.md --model ollama/qwen2.5-coder:32b
CLI Reference
# Diagnostics
vmware-monitor doctor [--skip-auth]
# MCP Config Generator
vmware-monitor mcp-config generate --agent <goose|cursor|claude-code|continue|vscode-copilot|localcowork|mcp-agent>
vmware-monitor mcp-config list
# Inventory
vmware-monitor inventory vms [--target <name>] [--limit <n>] [--sort-by name|cpu|memory_mb|power_state] [--power-state poweredOn|poweredOff]
vmware-monitor inventory hosts [--target <name>]
vmware-monitor inventory datastores [--target <name>]
vmware-monitor inventory clusters [--target <name>]
# Health
vmware-monitor health alarms [--target <name>]
vmware-monitor health events [--hours 24] [--severity warning]
# VM Info (read-only)
vmware-monitor vm info <vm-name>
vmware-monitor vm snapshot-list <vm-name>
# Scanning & Daemon
vmware-monitor scan now [--target <name>]
vmware-monitor daemon start
vmware-monitor daemon stop
vmware-monitor daemon status
Setup
# 1. Install via uv (recommended) or pip
uv tool install vmware-monitor
# Or: pip install vmware-monitor
# 2. Configure
mkdir -p ~/.vmware-monitor
vmware-monitor init # generates config.yaml and .env templates
chmod 600 ~/.vmware-monitor/.env
# Edit ~/.vmware-monitor/config.yaml and .env with your target details
Development Install
git clone https://github.com/zw008/VMware-Monitor.git
cd VMware-Monitor
uv venv && source .venv/bin/activate
uv pip install -e .
Security
- Read-Only by Design: This is an independent repository with zero destructive code paths. No power off, delete, create, reconfigure, or migrate functions exist in the codebase.
- Source Code: Fully open source at github.com/zw008/VMware-Monitor. The
uv installer (vmware-monitor) installs from this repository. We recommend reviewing the source code and commit history before deploying in production.
- TLS Verification: Enabled by default. The
disableSslCertValidation option exists solely for ESXi hosts using self-signed certificates (common in home labs). In production, always use CA-signed certificates with full TLS verification.
- Config File Contents:
~/.vmware-monitor/config.yaml stores target hostnames, ports, and a reference to the .env file. It does not contain passwords or tokens. All secrets (vCenter username/password) are stored exclusively in ~/.vmware-monitor/.env (chmod 600), loaded via python-dotenv. We recommend using a least-privilege read-only vCenter service account.
- Webhook Data Scope: Webhook notifications are disabled by default. When enabled, they send monitoring summaries (alarm counts, event types, host status) to user-configured URLs only (Slack, Discord, or any HTTP endpoint you control). No data is sent to third-party services. Webhook payloads contain no credentials, IPs, or personally identifiable information — only aggregated alert metadata.
- Prompt Injection Protection: All vSphere-sourced content (event messages, host logs) is truncated, stripped of control characters, and wrapped in boundary markers (
[VSPHERE_EVENT]/[VSPHERE_HOST_LOG]) before output to prevent prompt injection when consumed by LLM agents.
License
MIT
1---2name: vmware-monitor3description: VMware vCenter/ESXi read-only monitoring skill. Code-level enforced safety — no destructive operations exist in this codebase. Query inventory, check health/alarms/events, view VM info and snapshots, scan logs.4---56# VMware Monitor (Read-Only)78Safe, read-only VMware vCenter and ESXi monitoring skill. Query your entire VMware infrastructure using natural language through any AI coding assistant — without risk of accidental modifications.910> **Code-level safety**: This is an independent repository (`zw008/VMware-Monitor`). No destructive code paths exist — no power off, delete, create, reconfigure, snapshot-create/revert/delete, clone, or migrate functions are present in the codebase. For full operations, use the separate [VMware-AIops](https://github.com/zw008/VMware-AIops) repo. Install: `clawhub install vmware-aiops`1112## When to Use This Skill1314- Query VM, host, datastore, cluster, and network inventory15- Check health status, active alarms, hardware sensors, and event logs16- View VM details and existing snapshot lists (read-only)17- Run scheduled log scanning with webhook notifications (Slack, Discord)18- **You need zero-risk monitoring** — no accidental power-off, delete, or reconfigure possible1920## Quick Install2122Works with Claude Code, Cursor, Codex, Gemini CLI, Trae, Kimi, and 30+ AI agents:2324```bash25# Via Skills.sh26npx skills add zw008/VMware-Monitor2728# Via ClawHub29clawhub install vmware-monitor30```3132### Claude Code3334```35/plugin marketplace add zw008/VMware-Monitor36/plugin install vmware-monitor37/vmware-monitor:vmware-monitor38```3940## Usage Mode4142Choose the best mode based on your AI tool:4344| Platform | Recommended Mode | Why |45|----------|-----------------|-----|46| Claude Code, Cursor | **MCP** | Structured tool calls, no interactive confirmation needed, seamless experience |47| Aider, Codex, Gemini CLI, Continue | **CLI** | Lightweight, low context overhead, universal compatibility |48| Ollama + local models | **CLI** | Minimal context usage, works with any model size |4950### Calling Priority5152- **MCP-native tools** (Claude Code, Cursor): MCP first, CLI fallback53- **All other tools**: CLI first (MCP not needed)5455> **Tip**: If your AI tool supports MCP, check whether `vmware-monitor` MCP server is loaded (`/mcp` in Claude Code). If not, configure it first — MCP provides the best hands-free experience.5657### CLI Examples5859```bash60# Activate venv first61source /path/to/VMware-Monitor/.venv/bin/activate6263# Inventory64vmware-monitor inventory vms --target home-esxi65vmware-monitor inventory hosts --target home-esxi6667# Health68vmware-monitor health alarms --target home-esxi69vmware-monitor health events --hours 24 --severity warning --target home-esxi7071# VM info (read-only)72vmware-monitor vm info my-vm --target home-esxi73```7475### MCP Mode (Optional)7677For Claude Code / Cursor users who prefer structured tool calls, add to `~/.claude/settings.json`:7879```json80{81 "mcpServers": {82 "vmware-monitor": {83 "command": "/path/to/VMware-Monitor/.venv/bin/python",84 "args": ["-m", "mcp_server"],85 "cwd": "/path/to/VMware-Monitor",86 "env": {87 "VMWARE_MONITOR_CONFIG": "~/.vmware-monitor/config.yaml"88 }89 }90 }91}92```9394MCP exposes 7 read-only tools: `list_virtual_machines`, `list_esxi_hosts`, `list_all_datastores`, `list_all_clusters`, `get_alarms`, `get_events`, `vm_info`. All accept optional `target` parameter.9596`list_virtual_machines` supports `limit`, `sort_by`, `power_state`, `fields` for compact context in large inventories.9798## Architecture99100```101User (Natural Language)102 ↓103AI Tool (Claude Code / Aider / Gemini / Codex / Cursor / Trae / Kimi)104 ↓105 ├─ CLI mode (default): vmware-monitor CLI ──→ pyVmomi ──→ vSphere API106 │107 └─ MCP mode (optional): MCP Server (stdio) ──→ pyVmomi ──→ vSphere API108 ↓109vCenter Server ──→ ESXi Clusters ──→ VMs110 or111ESXi Standalone ──→ VMs112```113114## First Interaction: Environment Selection115116When the user starts a conversation, **always ask first**:1171181. **Which environment** do they want to monitor? (vCenter Server or standalone ESXi host)1192. **Which target** from their config? (e.g., `prod-vcenter`, `lab-esxi`)1203. If no config exists yet, guide them through creating `~/.vmware-monitor/config.yaml`121122## Capabilities (Read-Only)123124### 1. Inventory125126| Feature | vCenter | ESXi | Details |127|---------|:-------:|:----:|---------|128| List VMs | ✅ | ✅ | Name, power state, CPU, memory, guest OS, IP |129| List Hosts | ✅ | ⚠️ Self only | CPU cores, memory, ESXi version, VM count, uptime |130| List Datastores | ✅ | ✅ | Capacity, free/used, type (VMFS/NFS), usage % |131| List Clusters | ✅ | ❌ | Host count, DRS/HA status |132| List Networks | ✅ | ✅ | Network name, associated VM count |133134### 2. Health & Monitoring135136| Feature | vCenter | ESXi | Details |137|---------|:-------:|:----:|---------|138| Active Alarms | ✅ | ✅ | Severity, alarm name, entity, timestamp |139| Event/Log Query | ✅ | ✅ | Filter by time range, severity; 50+ event types |140| Hardware Sensors | ✅ | ✅ | Temperature, voltage, fan status |141| Host Services | ✅ | ✅ | hostd, vpxa running/stopped status |142143**Monitored Event Types:**144145| Category | Events |146|----------|--------|147| VM Failures | `VmFailedToPowerOnEvent`, `VmDiskFailedEvent`, `VmFailoverFailed` |148| Host Issues | `HostConnectionLostEvent`, `HostShutdownEvent`, `HostIpChangedEvent` |149| Storage | `DatastoreCapacityIncreasedEvent`, SCSI high latency |150| HA/DRS | `DasHostFailedEvent`, `DrsVmMigratedEvent`, `DrsSoftRuleViolationEvent` |151| Auth | `UserLoginSessionEvent`, `BadUsernameSessionEvent` |152153### 3. VM Info & Snapshot List (Read-Only)154155| Feature | Details |156|---------|---------|157| VM Info | Name, power state, guest OS, CPU, memory, IP, VMware Tools, disks, NICs |158| Snapshot List | List existing snapshots with name and creation time (no create/revert/delete) |159160### 4. Scheduled Scanning & Notifications161162| Feature | Details |163|---------|---------|164| Daemon | APScheduler-based, configurable interval (default 15 min) |165| Multi-target Scan | Sequentially scan all configured vCenter/ESXi targets |166| Scan Content | Alarms + Events + Host logs (hostd, vmkernel, vpxd) |167| Log Analysis | Regex pattern matching: error, fail, critical, panic, timeout |168| Webhook | Slack, Discord, or any HTTP endpoint |169170## FORBIDDEN Operations — DO NOT EXIST IN CODEBASE171172These operations **cannot** be performed with this skill — zero destructive code paths exist:173174- ❌ `vm power-on/off`, `vm reset`, `vm suspend`175- ❌ `vm create/delete/reconfigure`176- ❌ `vm snapshot-create/revert/delete`177- ❌ `vm clone/migrate`178179Direct users to **VMware-AIops** (`clawhub install vmware-aiops`) for these.180181## Safety Features182183| Feature | Details |184|---------|---------|185| Code-Level Isolation | Independent repository — zero destructive functions in codebase |186| Audit Trail | All queries logged to `~/.vmware-monitor/audit.log` (JSONL) |187| Password Protection | `.env` file loading with permission check (warn if not 600) |188| SSL Self-signed Support | `disableSslCertValidation` — **only** for ESXi hosts with self-signed certificates in isolated lab/home environments. Production environments should use CA-signed certificates with full TLS verification enabled. |189190## Version Compatibility191192| vSphere Version | Support | Notes |193|----------------|---------|-------|194| 8.0 / 8.0U1-U3 | ✅ Full | pyVmomi 8.0.3+ |195| 7.0 / 7.0U1-U3 | ✅ Full | All read-only APIs supported |196| 6.7 | ✅ Compatible | Backward-compatible, tested |197| 6.5 | ✅ Compatible | Backward-compatible, tested |198199> pyVmomi auto-negotiates the API version during SOAP handshake — no manual configuration needed.200201## Supported AI Platforms202203| Platform | Status | Config File |204|----------|--------|-------------|205| Claude Code | ✅ Native Skill | `plugins/.../SKILL.md` |206| Gemini CLI | ✅ Extension | `gemini-extension/GEMINI.md` |207| OpenAI Codex CLI | ✅ Skill + AGENTS.md | `codex-skill/AGENTS.md` |208| Aider | ✅ Conventions | `codex-skill/AGENTS.md` |209| Continue CLI | ✅ Rules | `codex-skill/AGENTS.md` |210| Trae IDE | ✅ Rules | `trae-rules/project_rules.md` |211| Kimi Code CLI | ✅ Skill | `kimi-skill/SKILL.md` |212| MCP Server | ✅ MCP Protocol | `mcp_server/` |213| Python CLI | ✅ Standalone | N/A |214215### MCP Server — Local Agent Compatibility216217The MCP server works with any MCP-compatible agent via stdio transport. All 8 tools are **read-only**. Config templates in `examples/mcp-configs/`:218219| Agent | Local Models | Config Template |220|-------|:----------:|-----------------|221| Goose (Block) | ✅ Ollama, LM Studio | `goose.json` |222| LocalCowork (Liquid AI) | ✅ Fully offline | `localcowork.json` |223| mcp-agent (LastMile AI) | ✅ Ollama, vLLM | `mcp-agent.yaml` |224| VS Code Copilot | — | `vscode-copilot.json` |225| Cursor | — | `cursor.json` |226| Continue | ✅ Ollama | `continue.yaml` |227| Claude Code | — | `claude-code.json` |228229```bash230# Example: Aider + Ollama (fully local, no cloud API)231aider --conventions codex-skill/AGENTS.md --model ollama/qwen2.5-coder:32b232```233234## CLI Reference235236```bash237# Diagnostics238vmware-monitor doctor [--skip-auth]239240# MCP Config Generator241vmware-monitor mcp-config generate --agent <goose|cursor|claude-code|continue|vscode-copilot|localcowork|mcp-agent>242vmware-monitor mcp-config list243244# Inventory245vmware-monitor inventory vms [--target <name>] [--limit <n>] [--sort-by name|cpu|memory_mb|power_state] [--power-state poweredOn|poweredOff]246vmware-monitor inventory hosts [--target <name>]247vmware-monitor inventory datastores [--target <name>]248vmware-monitor inventory clusters [--target <name>]249250# Health251vmware-monitor health alarms [--target <name>]252vmware-monitor health events [--hours 24] [--severity warning]253254# VM Info (read-only)255vmware-monitor vm info <vm-name>256vmware-monitor vm snapshot-list <vm-name>257258# Scanning & Daemon259vmware-monitor scan now [--target <name>]260vmware-monitor daemon start261vmware-monitor daemon stop262vmware-monitor daemon status263```264265## Setup266267```bash268# 1. Install via uv (recommended) or pip269uv tool install vmware-monitor270# Or: pip install vmware-monitor271272# 2. Configure273mkdir -p ~/.vmware-monitor274vmware-monitor init # generates config.yaml and .env templates275chmod 600 ~/.vmware-monitor/.env276# Edit ~/.vmware-monitor/config.yaml and .env with your target details277```278279### Development Install280281```bash282git clone https://github.com/zw008/VMware-Monitor.git283cd VMware-Monitor284uv venv && source .venv/bin/activate285uv pip install -e .286```287288## Security289290- **Read-Only by Design**: This is an independent repository with zero destructive code paths. No power off, delete, create, reconfigure, or migrate functions exist in the codebase.291- **Source Code**: Fully open source at [github.com/zw008/VMware-Monitor](https://github.com/zw008/VMware-Monitor). The `uv` installer (`vmware-monitor`) installs from this repository. We recommend reviewing the source code and commit history before deploying in production.292- **TLS Verification**: Enabled by default. The `disableSslCertValidation` option exists solely for ESXi hosts using self-signed certificates (common in home labs). In production, always use CA-signed certificates with full TLS verification.293- **Config File Contents**: `~/.vmware-monitor/config.yaml` stores target hostnames, ports, and a reference to the `.env` file. It does **not** contain passwords or tokens. All secrets (vCenter username/password) are stored exclusively in `~/.vmware-monitor/.env` (`chmod 600`), loaded via `python-dotenv`. We recommend using a least-privilege read-only vCenter service account.294- **Webhook Data Scope**: Webhook notifications are **disabled by default**. When enabled, they send monitoring summaries (alarm counts, event types, host status) to **user-configured URLs only** (Slack, Discord, or any HTTP endpoint you control). No data is sent to third-party services. Webhook payloads contain no credentials, IPs, or personally identifiable information — only aggregated alert metadata.295- **Prompt Injection Protection**: All vSphere-sourced content (event messages, host logs) is truncated, stripped of control characters, and wrapped in boundary markers (`[VSPHERE_EVENT]`/`[VSPHERE_HOST_LOG]`) before output to prevent prompt injection when consumed by LLM agents.296297## License298299MIT