当用户需要管理 Proxmox VE 上的虚拟机和容器时使用此技能 — 列出/检查/配置虚拟机、电源与生命周期(启动/停止/关机/重启)。
Disclaimer: This is a community-maintained open-source project and is not affiliated with, endorsed by, or sponsored by Proxmox Server Solutions GmbH. "Proxmox" is a trademark of its owner. Source code is publicly auditable at github.com/AIops-tools/Proxmox-AIops under the MIT license.
Governed VM and container lifecycle operations for Proxmox VE — 43 MCP tools, every one wrapped with the bundled @governed_tool harness: a local unified audit log under ~/.proxmox-aiops/, token/runaway budget guard, undo-token recording, and descriptive risk-tier labels.
Standalone: the governance harness is bundled in the package (
proxmox_aiops.governance) — proxmox-aiops has no external skill-family dependency. Coverage focuses on common Proxmox operations and is not yet exhaustive.
CategoryToolsCountRead or WriteVM Lifecyclelist, get, config, start, stop, shutdown, reboot, reconfigure, clone, delete, migrate113 read / 8 writeSnapshotscreate, delete, list, rollback41 read / 3 writeDiskresize (grow-only), move20 read / 2 writeBackups (vzdump)create, list, restore31 read / 2 writeLXC Containerslist, start, stop31 read / 2 writeCluster / Tasksnode list, cluster status, task poll, cluster resources, node status, task log, next vmid77 readHAstatus, resource list22 readPoolslist, members22 readFirewallvm rules, cluster status22 readGuest Agentping11 readStoragelist pools, list content22 readDiagnostics / RCAnode-pressure, guest-health22 read
bash
uv tool install proxmox-aiops
proxmox-aiops doctor
Or as an OpenClaw plugin, which installs this skill and its MCP server together:
bash
openclaw plugins install clawhub:@zw008/proxmox-aiops
openclaw skills info proxmox-aiops # expect: Visible to model: yes
Needs uvx on PATH: the MCP server is fetched with uv, pinned to this release.
/cluster/resources inventory, node load/mem, and poll async tasks + fetch their logs by UPID; get a free VMIDDo NOT use when the target is not Proxmox VE (other hypervisors, Kubernetes, or cloud providers are out of scope for this skill).
proxmox-aiops diagnose node-pressure → worst-first table of nodes over the CPU/mem/disk thresholds, each row citing the measured % and the fixproxmox-aiops diagnose guest-health → guests near their memory ceiling or with disks near full, plus the list of stopped guestsproxmox-aiops vm migrate <vmid> --to-node <n> to shed load off a hot node, or vm reconfigure <vmid> --memory ... for a RAM-starved guest. All of these route through the governed path (audited, undo recorded).proxmox-aiops vm list → find the vmid and confirm it is the right VM/nodeproxmox-aiops vm snapshot-create <vmid> --name pre-change → baseline before any risky changeproxmox-aiops vm reconfigure <vmid> --cores 8 --memory 16384 → the harness captures the prior cores/memory as the undo descriptor_undo_id — reverse it with proxmox-aiops undo apply <id>, or roll back with proxmox-aiops vm snapshot-rollback <vmid> --name pre-change.proxmox-aiops diagnose node-pressure → identify the node flagged high memoryproxmox-aiops cluster resources --type vm → find a movable guest on that nodeproxmox-aiops vm migrate <vmid> --to-node <other> --dry-run → preview, then run without --dry-run (migrate is high risk; the inverse migrate-back is recorded)diagnose node-pressure to confirm the pressure cleared.proxmox-aiops vm get <vmid> → confirm current status is runningproxmox-aiops vm stop <vmid> --dry-run → preview the exact API callproxmox-aiops vm stop <vmid> → double confirmation required; vm_stop records an inverse vm_start undo descriptordoctor shows the node unreachable or the secret env var is missing, fix credentials with proxmox-aiops secret set <target> before retrying — the stop is never issued against an unauthenticated session.ScenarioRecommendedWhyLocal/small modelsCLIfewer tokens than MCPCloud models (Claude, GPT)EitherMCP gives structured JSON I/OAutomated pipelinesMCPtype-safe parameters, audited
CategoryToolsR/WVM Lifecyclevm_list, vm_get, vm_configReadvm_start, vm_stop, vm_shutdown, vm_reboot, vm_reconfigure, vm_clone, vm_delete, vm_migrateWriteSnapshotsvm_list_snapshotsReadvm_snapshot_create, vm_snapshot_delete, vm_snapshot_rollbackWriteDiskvm_resize_disk (grow-only), vm_move_diskWriteBackupsbackup_listReadvm_backup, backup_restore (high)WriteLXC Containersct_listReadct_start, ct_stopWriteCluster / Tasksnode_list, cluster_status, task_status, cluster_resources, node_status, task_log, next_vmidReadHAha_status, ha_resource_listReadPoolspool_list, pool_membersReadFirewallvm_firewall_rules_list, cluster_firewall_statusReadGuest Agentvm_agent_pingReadStoragestorage_list, storage_contentReadDiagnostics / RCAnode_pressure_rca, guest_health_rcaReadUndoundo_listReadundo_applyWrite
Harness features that light up: write tools with a clean inverse ( vm_start/ vm_stop/ vm_shutdown/ vm_reconfigure/ vm_clone/ vm_migrate/ vm_snapshot_create/ vm_move_disk/ ct_start/ ct_stop) pass an undo= lambda so the harness records an inverse descriptor (with _undo_id) to the undo store — vm_reconfigure captures the prior cores/memory, vm_clone's inverse is vm_delete(newid), vm_migrate's is migrate-back, vm_move_disk's is move-back to the captured source storage. backup_restore records a vm_delete inverse only when it restored into a free VMID (a forced overwrite is destructive and declares none). Irreversible writes ( vm_delete, vm_snapshot_rollback, backup_restore with force) declare no undo and are tagged risk_level=high; vm_resize_disk is grow-only and refuses shrink before any API call. All 43 tools are audit-logged under ~/.proxmox-aiops/ and pass through the budget/runaway guard + risk-tier tagging. Proxmox writes are async (return a task UPID) — poll with task_status (and read lines with task_log) instead of re-issuing (the runaway breaker backs this up).
bash
proxmox-aiops vm list [--target <t>] [--node <n>]
proxmox-aiops vm get <vmid> [--node <n>]
proxmox-aiops vm start <vmid> [--node <n>]
proxmox-aiops vm stop <vmid> [--dry-run] # double confirm
proxmox-aiops vm resize-disk <vmid> --disk scsi0 --size +10G # grow-only
proxmox-aiops vm move-disk <vmid> --disk scsi0 --storage ceph [--delete]
proxmox-aiops vm agent-ping <vmid>
proxmox-aiops vm snapshot-create <vmid> --name <snap>
proxmox-aiops vm snapshot-delete <vmid> --name <snap> [--dry-run] # double confirm
proxmox-aiops vm snapshot-list <vmid>
proxmox-aiops backup create <vmid> --storage <s> [--mode snapshot]
proxmox-aiops backup list <storage> [--vmid <id>]
proxmox-aiops backup restore <vmid> --archive <volid> --storage <s> [--force] [--dry-run] # double confirm
proxmox-aiops cluster resources [--type vm|node|storage]
proxmox-aiops cluster node-status <node>
proxmox-aiops cluster task-log <upid>
proxmox-aiops cluster next-vmid
proxmox-aiops ha status
proxmox-aiops pool list
proxmox-aiops firewall vm-rules <vmid>
proxmox-aiops storage list [--node <n>]
proxmox-aiops diagnose node-pressure # rank nodes by CPU/mem/disk pressure (read-only RCA)
proxmox-aiops diagnose guest-health # stopped guests, mem saturation, disks near full
proxmox-aiops undo apply <id> # reverse a recorded governed write
proxmox-aiops init # onboarding wizard (encrypted creds)
proxmox-aiops secret set <target> # manage encrypted secret store
proxmox-aiops doctor
proxmox-aiops mcp # start MCP server (stdio)
Credentials are managed by the
proxmox-aiops initonboarding wizard and theproxmox-aiops secretcommands, which back an encrypted secret store (no plaintext passwords inconfig.yaml).
Create ~/.proxmox-aiops/config.yaml with a targets: list (see README), and put secrets in ~/.proxmox-aiops/.env (chmod 600).
Each target needs a per-target secret env var. For target pve-lab, set PROXMOX_PVE_LAB_SECRET=<token-uuid> in .env.
For API-token auth (recommended, least privilege), user must include the token id after !, e.g. root@pam!claude. For password auth set auth_kind: password and use user@realm.
Either pass --node <name> / node=<name>, or set node: on the target in config.yaml. VM operations can auto-locate a vmid across nodes, but storage listing needs an explicit node.
The 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 — use a Proxmox VE user or API token granted only read privileges (no VM. /Datastore. write roles), and writes then fail at the server. There is no read-only switch, policy file, or approval gate.
~/.proxmox-aiops/audit.db (relocatable via PROXMOX_AIOPS_HOME): params, result, status, duration, and the risk tier. The CLI writes the same row the MCP path does.PROXMOX_AUDIT_APPROVED_BY / PROXMOX_AUDIT_RATIONALE are optional annotations recorded on the audit row (who/why); they are never required and never block.PROXMOX_RUNAWAY_MAX=0; optional hard ceilings via PROXMOX_MAX_TOOL_CALLS / PROXMOX_MAX_TOOL_SECONDS.--dry-run / dry_run=True and double confirmation at the CLI.The harness is bundled in the package — no external dependency, no manual setup.
Coverage is intentionally focused. Missing a device, action, or feature you need? Open an issue or pull request at github.com/AIops-tools/Proxmox-AIops — feature requests, contributions, and comments are all welcome.