{"id":"829584cf-3470-44af-b2dd-39f94ea55fb7","slug":"bartek-filipiuk-vps-deploy-skill","name":"vps-deploy","description":"Deploy any Dockerized app to your own VPS via SSH + Docker + Caddy. Use when the user says \"deploy to vps\", \"vps deploy\", \"deploy to my server\", \"ship to vps\". Also handles \"show vps apps\", \"vps logs\", \"vps env\", \"redeploy vps\", \"delete vps app\", \"vps status\", \"setup my vps\". Requires VPS_HOST in project .env.","canonicalUrl":"https://www.xpersona.co/skill/bartek-filipiuk-vps-deploy-skill","sourceUrl":"https://github.com/bartek-filipiuk/vps-deploy-skill","homepage":null,"source":"GITHUB_OPENCLEW","vendor":{"slug":"bartek-filipiuk","label":"Bartek Filipiuk","url":"https://github.com/bartek-filipiuk/vps-deploy-skill"},"protocols":["OPENCLEW"],"capabilities":["before","output","do","be"],"trustScore":null,"trustConfidence":"unknown","artifactCount":0,"benchmarkCount":0,"lastRelease":null,"freshnessAt":"2026-04-14T22:26:04.131Z","freshnessLabel":"Apr 14, 2026","securityReviewed":true,"openapiReady":false,"stats":[{"label":"Trust score","value":"Unknown"},{"label":"Compatibility","value":"OpenClaw"},{"label":"Freshness","value":"Apr 14, 2026"},{"label":"Vendor","value":"Bartek Filipiuk"},{"label":"Artifacts","value":"0"},{"label":"Benchmarks","value":"0"},{"label":"Last release","value":"Unpublished"}],"factsPreview":[{"factKey":"docs_crawl","category":"integration","label":"Crawlable docs","value":"6 indexed pages on the official domain","href":"https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar","sourceUrl":"https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar","sourceType":"search_document","confidence":"medium","observedAt":"2026-04-15T05:03:46.393Z","isPublic":true},{"factKey":"vendor","category":"vendor","label":"Vendor","value":"Bartek Filipiuk","href":"https://github.com/bartek-filipiuk/vps-deploy-skill","sourceUrl":"https://github.com/bartek-filipiuk/vps-deploy-skill","sourceType":"profile","confidence":"medium","observedAt":"2026-04-14T22:26:04.417Z","isPublic":true},{"factKey":"protocols","category":"compatibility","label":"Protocol compatibility","value":"OpenClaw","href":"https://www.xpersona.co/api/v1/agents/bartek-filipiuk-vps-deploy-skill/contract","sourceUrl":"https://www.xpersona.co/api/v1/agents/bartek-filipiuk-vps-deploy-skill/contract","sourceType":"contract","confidence":"medium","observedAt":"2026-04-14T22:26:04.417Z","isPublic":true},{"factKey":"handshake_status","category":"security","label":"Handshake status","value":"UNKNOWN","href":"https://www.xpersona.co/api/v1/agents/bartek-filipiuk-vps-deploy-skill/trust","sourceUrl":"https://www.xpersona.co/api/v1/agents/bartek-filipiuk-vps-deploy-skill/trust","sourceType":"trust","confidence":"medium","observedAt":null,"isPublic":true}],"highlights":["Trust evidence available"],"agentCard":{"name":"vps-deploy","description":"Deploy any Dockerized app to your own VPS via SSH + Docker + Caddy. Use when the user says \"deploy to vps\", \"vps deploy\", \"deploy to my server\", \"ship to vps\". Also handles \"show vps apps\", \"vps logs\", \"vps env\", \"redeploy vps\", \"delete vps app\", \"vps status\", \"setup my vps\". Requires VPS_HOST in project .env.","source":"GITHUB_OPENCLEW","sourceId":"github:1166946456","repository":"https://github.com/bartek-filipiuk/vps-deploy-skill","documentation":"https://www.xpersona.co/skill/bartek-filipiuk-vps-deploy-skill/agent/bartek-filipiuk-vps-deploy-skill","protocols":["OPENCLEW"],"capabilities":["before","output","do","be"],"languages":["typescript"],"install":{"command":"git clone https://github.com/bartek-filipiuk/vps-deploy-skill.git","ecosystem":"git"},"examples":[{"kind":"example","language":"bash","snippet":"set -euo pipefail\n\nread_env() {\n  local key=\"$1\"\n  awk -F= -v k=\"$key\" '$1==k {sub(/^[^=]*=/, \"\", $0); gsub(/\\r$/, \"\", $0); print; exit}' .env\n}\n\nVPS_HOST=\"$(read_env VPS_HOST)\"\nVPS_USER=\"$(read_env VPS_USER)\"\nVPS_USER=${VPS_USER:-root}\nVPS_SSH_KEY_PATH=\"$(read_env VPS_SSH_KEY_PATH)\"\nVPS_SSH_KEY_PATH=${VPS_SSH_KEY_PATH:-$HOME/.ssh/id_ed25519}\nVPS_PORT=\"$(read_env VPS_PORT)\"\nVPS_PORT=${VPS_PORT:-22}\nVPS_APP_DOMAIN=\"$(read_env VPS_APP_DOMAIN)\"\nVPS_HOST_FINGERPRINT=\"$(read_env VPS_HOST_FINGERPRINT)\"\n\n# Expand leading ~ safely\nVPS_SSH_KEY_PATH=\"${VPS_SSH_KEY_PATH/#\\~/$HOME}\"\n\n# Strict validation to block command/path injection\n[[ \"$VPS_HOST\" =~ ^[A-Za-z0-9._:-]+$ ]] || { echo \"Invalid VPS_HOST\"; exit 1; }\n[[ \"$VPS_USER\" =~ ^[A-Za-z_][A-Za-z0-9._-]*$ ]] || { echo \"Invalid VPS_USER\"; exit 1; }\n[[ \"$VPS_PORT\" =~ ^[0-9]+$ ]] || { echo \"Invalid VPS_PORT\"; exit 1; }\n[ \"$VPS_PORT\" -ge 1 ] && [ \"$VPS_PORT\" -le 65535 ] || { echo \"VPS_PORT out of range\"; exit 1; }\n[[ \"$VPS_SSH_KEY_PATH\" =~ ^/[-A-Za-z0-9._/]+$ ]] || { echo \"Invalid VPS_SSH_KEY_PATH\"; exit 1; }"},{"kind":"example","language":"text","snippet":"> VPS_HOST=your.vps.ip.address\n> VPS_USER=root\n> VPS_SSH_KEY_PATH=~/.ssh/id_ed25519\n> VPS_APP_DOMAIN=myapp.example.com\n>"}]}}