Infrastructure management using the device profile. Servers are stored in profile.servers[], deployments reference .env.local files via profile.deployments{}. Use when: managing server inventory, provisioning infrastructure, deploying to cloud providers.
This skill inherits all available tools. When active, it can use any tool Claude has access to.
README.mdassets/agent-devops.env.templateassets/env-spec.txtassets/env-templateassets/provider-infrastructure-templateinput-schema.jsonreferences/DEPLOYMENT_WORKFLOWS.mdreferences/EXAMPLE_INVENTORY.mdreferences/INVENTORY_FORMAT.mdreferences/PROVIDER_DISCOVERY.mdreferences/TROUBLESHOOTING.mdscripts/agentDevopsInventory.tsscripts/agent_devops_inventory.pyPurpose: Coordinate server provisioning and deployment across admin-infra-* and admin-app-* skills using the unified profile.
Servers are in the profile, not a separate inventory file.
# PowerShell
. scripts/Load-Profile.ps1
Load-AdminProfile -Export
$AdminProfile.servers | Format-Table id, name, host, role, provider, status
# Bash
source scripts/load-profile.sh
load_admin_profile
jq '.servers[] | {id, name, host, role, provider, status}' "$ADMIN_PROFILE_PATH"
Get-AdminServer | Format-Table
get_admin_server all ""
Get-AdminServer -Role "coolify"
get_admin_server role "coolify"
Get-AdminServer -Provider "contabo"
get_admin_server provider "contabo"
Get-AdminServer -Id "cool-two"
get_admin_server id "cool-two"
Profile contains all SSH details:
$server = Get-AdminServer -Id "cool-two"
ssh -i $server.keyPath -p $server.port "$($server.username)@$($server.host)"
ssh_to_server "cool-two" # Helper from load-profile.sh
$AdminProfile.servers += @{
id = "new-server"
name = "NEW_SERVER"
host = "192.168.1.100"
port = 22
username = "root"
authMethod = "key"
keyPath = "C:/Users/Owner/.ssh/id_rsa"
provider = "hetzner"
role = "coolify"
domain = "example.com"
status = "active"
addedAt = (Get-Date).ToString("o")
lastConnected = $null
notes = "Provisioned via admin-infra-hetzner"
}
# Save
$AdminProfile | ConvertTo-Json -Depth 10 | Set-Content $AdminProfile.paths.deviceProfile
Deployments reference .env.local files containing provider credentials and config.
$AdminProfile.deployments.PSObject.Properties | ForEach-Object {
[PSCustomObject]@{
Name = $_.Name
Type = $_.Value.type
Provider = $_.Value.provider
Status = $_.Value.status
HasEnvFile = [bool]$_.Value.envFile
}
}
Load-AdminProfile -Deployment "vibeskills-oci" -Export
$DeploymentEnv # Contains .env.local variables
load_admin_profile
load_deployment "vibeskills-oci"
# Variables exported to environment
$AdminProfile.deployments["my-new-deploy"] = @{
envFile = "D:/projects/my-deploy/.env.local"
type = "coolify"
provider = "hetzner"
status = "pending"
serverIds = @("new-server")
lastDeployed = $null
notes = $null
}
| Provider | Skill | Notes |
|---|---|---|
| OCI | admin-infra-oci | Free tier ARM |
| Hetzner | admin-infra-hetzner | Best price/perf |
| Contabo | admin-infra-contabo | Budget VPS |
| DigitalOcean | admin-infra-digitalocean | Simple |
| Vultr | admin-infra-vultr | Global |
| Linode | admin-infra-linode | Akamai |
Copy template and fill provider section:
cp templates/env-template.env ./my-deploy/.env.local
# Edit with provider credentials
$AdminProfile.deployments["my-deploy"] = @{
envFile = "D:/projects/my-deploy/.env.local"
type = "coolify"
provider = "hetzner"
status = "pending"
serverIds = @()
}
# Route to appropriate skill
admin-infra-hetzner → Provisions server
# Returns server details
# Add server
$AdminProfile.servers += @{ ... }
# Link to deployment
$AdminProfile.deployments["my-deploy"].serverIds += "new-server-id"
$AdminProfile.deployments["my-deploy"].status = "active"
# Save
$AdminProfile | ConvertTo-Json -Depth 10 | Set-Content $AdminProfile.paths.deviceProfile
| App | Skill | Prerequisites |
|---|---|---|
| Coolify | admin-app-coolify | Server with Docker |
| KASM | admin-app-kasm | Server with Docker |
Load-AdminProfile -Deployment "my-deploy" -Export$server = Get-AdminServer -Id $DeploymentEnv.SERVER_IDadmin-app-* skill# Find server
$idx = $AdminProfile.servers.FindIndex({ param($s) $s.id -eq "cool-two" })
# Update status
$AdminProfile.servers[$idx].status = "stopped"
$AdminProfile.servers[$idx].lastConnected = (Get-Date).ToString("o")
# Save
$AdminProfile | ConvertTo-Json -Depth 10 | Set-Content $AdminProfile.paths.deviceProfile
| Task | Route To |
|---|---|
| Provision OCI | admin-infra-oci |
| Provision Hetzner | admin-infra-hetzner |
| Provision others | admin-infra-{provider} |
| Install Coolify | admin-app-coolify |
| Install KASM | admin-app-kasm |
| Windows tasks | admin-windows |
| WSL tasks | admin-wsl |
references/DEPLOYMENT_WORKFLOWS.md - Detailed deployment stepsreferences/TROUBLESHOOTING.md - Common issues