Manage VergeOS infrastructure using the vrg CLI. Use when asked to manage VMs, virtual machines, networks, firewall rules, DNS, tenants, NAS, snapshots, storage, certificates, or any VergeOS/Verge.io operations. Triggers on "vrg", "verge", "vergeos", "create a VM", "list VMs", "manage network", "firewall rule", "tenant", "NAS share", "snapshot", or any infrastructure management task targeting a VergeOS environment.
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
A direct command skips the review prompt. Inspect the source before running it.
Manage VergeOS infrastructure using the vrg CLI. Use when asked to manage VMs, virtual machines, networks, firewall rules, DNS, tenants, NAS, snapshots, storage, certificates, or any VergeOS/Verge.io operations. Triggers on "vrg", "verge", "vergeos", "create a VM", "list VMs", "manage network", "firewall rule", "tenant", "NAS share", "snapshot", or any infrastructure management task targeting a VergeOS environment.
allowed-tools
Bash, Read, Write, Edit, Grep, Glob
VergeOS CLI (vrg)
Manage VergeOS infrastructure from the terminal. The vrg CLI covers 200+ commands across compute, networking, tenants, NAS, identity, automation, and monitoring.
vrg <domain> list # List all resources
vrg <domain> get <ID|NAME> # Get by key or name
vrg <domain> create --name foo ... # Create
vrg <domain> update <ID|NAME> ... # Update
vrg <domain> delete <ID|NAME> --yes# Delete (requires --yes)
Destructive operations (delete, reset) require --yes to skip confirmation.
Global Options
Option
Short
Purpose
--profile
-p
Config profile
--host
-H
VergeOS host URL override
--output
-o
Format: table, wide, json, csv
--query
Extract field via dot notation
--verbose
-v
Verbosity (-v, -vv, -vvv)
--quiet
-q
Suppress non-essential output
Use --output json when you need to parse results programmatically. Use --query to extract specific fields (e.g., --query status).
Domain Reference
Compute
# VM lifecycle
vrg vm list [--status running|stopped] [--filter "name eq 'web'"]
vrg vm get <ID|NAME>
vrg vm create --name <name> --os linux --cpu 4 --ram 8192
vrg vm create -f template.vrg.yaml [--dry-run] [--set vm.ram="16 GB"]
vrg vm start|stop|restart|reset <ID|NAME>
vrg vm clone <ID|NAME> --name <new-name> [--preserve-macs]
vrg vm migrate <ID|NAME> [--node <target>] # Live migrate (VM must be running)
vrg vm hibernate|console <ID|NAME>
vrg vm favorite|unfavorite <ID|NAME>
vrg vm tag|untag <ID|NAME> <TAG>
vrg vm delete <ID|NAME> --yes
vrg vm validate -f template.vrg.yaml
# Drives, NICs, devices, snapshots
vrg vm drive list|get|create|update|delete <VM> [options]
vrg vm nic list|get|create|update|delete <VM> [options]
vrg vm device list|get|create|delete <VM> [options] # TPM (--model tis --version 2), GPU passthrough
vrg vm snapshot list|get|create|delete|restore <VM> [options]
# Import/Export
vrg vm export list|get|create|start|stop|delete|cleanup [options]
vrg vm import list|get|create|start|cancel|delete [options]
Networking
# Networks (create requires --name, --type; add --cidr for internal)
vrg network list|get|create|update|delete|start|stop|restart|status [options]
vrg network apply-rules <ID|NAME> # Apply pending firewall changes
vrg network apply-dns <ID|NAME> # Apply pending DNS changes# Firewall rules (--name required on create, --direction is incoming/outgoing, use --dest-ports/--source-ports)
vrg network rule list|get|create|update|delete|enable|disable <NETWORK> [options]
# DNS (views -> zones -> records) — NETWORK, VIEW, ZONE are positional args
vrg network dns view list|get|create|update|delete <NETWORK> [options]
vrg network dns zone list|get|create|update|delete <NETWORK> <VIEW> [options]
vrg network dns record list|get|create|update|delete <NETWORK> <VIEW> <ZONE> [options]
# DHCP & aliases
vrg network host list|get|create|update|delete <NETWORK> [options]
vrg network alias list|get|create|update|delete <NETWORK> [options]
# Diagnostics
vrg network diag leases|addresses|stats <NETWORK>
Create VMs from declarative .vrg.yaml files instead of long command lines:
apiVersion:v4kind:VirtualMachinevars:VM_NAME:web-serverNETWORK:prod-netvm:name:"${VM_NAME}"description:"Production web server"os_family:linuxcpu_cores:4ram:8GBmachine_type:q35boot_order:cddrives:-name:"OS Disk"media:diskinterface:virtio-scsisize:50GBnics:-name:"Primary"network:"${NETWORK}"interface:virtiodevices:-type:tpmmodel:tisversion:2
vrg vm validate -f web-server.vrg.yaml # Validate
vrg vm create -f web-server.vrg.yaml --dry-run # Preview
vrg vm create -f web-server.vrg.yaml # Create
vrg vm create -f web-server.vrg.yaml --set vm.ram="16 GB"# Override
Batch provisioning: Use kind: VirtualMachineSet with defaults: and vms: array. Each VM inherits defaults; list fields (drives, nics, devices) replace entirely, not merge.
See references/templates.md for the full field reference.
Common Workflows
Create a VM with network access:
vrg vm create --name web-01 --os linux --cpu 2 --ram 4096
vrg vm drive create web-01 --name "OS Disk" --media disk --interface virtio-scsi --size 50GB
vrg vm nic create web-01 --network "Production" --interface virtio
vrg vm start web-01
vrg network dns view create my-net --name "Internal"
vrg network dns zone create my-net Internal --domain "lab.local" --type master
vrg network dns record create my-net Internal lab.local --name "app" --type A --value "10.0.0.10"
vrg network apply-dns my-net
Snapshot and restore:
vrg vm snapshot create my-vm --name "pre-upgrade"# ... do work ...
vrg vm snapshot restore my-vm --name "pre-upgrade"
Check what's running:
vrg -o wide vm list --status running
vrg -o wide node list
vrg alarm summary
vrg system info
Output Tips
-o is a global option — place it BEFORE the command:
vrg -o json vm list for scripting and piping to jq
vrg -o csv vm list for spreadsheet export
vrg -o wide vm list for all columns in table format
vrg --query name vm get web-01 to extract a single field as plain text
Chain with jq: vrg -o json vm get web-01 | jq '.status'
Edge Cases
Name vs ID: Most commands accept either. If a name matches multiple resources, use the numeric ID instead.
Firewall/DNS changes are staged. After creating/updating rules or records, run apply-rules or apply-dns on the network to activate them.
Destructive commands require --yes — don't add it unless explicitly confirmed by the user.
Template variables use ${VAR} syntax and can be overridden by environment variables or --set.
Configuration
Config lives in ~/.vrg/config.toml. Precedence: CLI args > env vars > config profile > defaults.
vrg configure setup # Interactive wizard
vrg configure show # Show current profile
vrg configure list # List all profiles
vrg system info # Verify connection
Multiple profiles supported — switch with vrg -p <profile> <command>.