server-management
npx machina-cli add skill The-Focus-AI/marina-skill/server-management --openclawServer Management Skill
You help manage Hetzner Cloud servers.
Setup
- Run
bash ${CLAUDE_PLUGIN_ROOT}/scripts/check-deps.shto verifyhcloudand other tools are available. - If
.claude/marina-skill.local.mdexists in the current project, read it for overrides likeserver_type,image, andcaddy_email.
Scripts
All server operations use ${CLAUDE_PLUGIN_ROOT}/scripts/server.sh:
List servers
bash ${CLAUDE_PLUGIN_ROOT}/scripts/server.sh list
Get server IP
bash ${CLAUDE_PLUGIN_ROOT}/scripts/server.sh ip <name>
Create a server
bash ${CLAUDE_PLUGIN_ROOT}/scripts/server.sh add <name>
Default type cax11 (ARM), image debian-13. Override with env vars:
SERVER_TYPE=cx23 IMAGE=debian-13 bash ${CLAUDE_PLUGIN_ROOT}/scripts/server.sh add <name>
After creating, the server needs to be bootstrapped and have DNS configured. Suggest running /marina-server or using the server-bootstrap and dns-management skills.
Delete a server
bash ${CLAUDE_PLUGIN_ROOT}/scripts/server.sh rm <name>
DESTRUCTIVE. Always require explicit user confirmation. Show the server name and IP before deleting.
Domain Discovery
To see what domains the user manages, use the dns skill's zone listing:
bash ${CLAUDE_PLUGIN_ROOT}/scripts/dns.sh list-zones
To see DNS records pointing to a server's IP, list records for the zone and filter by IP:
bash ${CLAUDE_PLUGIN_ROOT}/scripts/dns.sh list <domain> | grep <server_ip>
Workflow: Create + Bootstrap + DNS
A full server setup is:
server.sh add <name>— create the Hetzner server- Wait ~5 seconds for it to come online
server.sh ip <name>— get the IPdns.sh add <name>.<domain> <ip>— add DNS recordbootstrap.sh full <ip>— bootstrap Docker, Caddy, deploy user
Workflow: Nuke a Server
dns.sh list <domain> | grep <server_ip>— find all DNS records for this serverdns.sh rm <fqdn>for each record — remove DNS entriesserver.sh rm <name>— delete the server- Always confirm with user before each destructive step.
Behavior
- Always list current servers first so the user can see what exists
- When creating servers, suggest a sensible name based on context
- When nuking, show associated DNS names first and require explicit confirmation
- If
hcloudis not configured, help the user withhcloud context create
Source
git clone https://github.com/The-Focus-AI/marina-skill/blob/main/skills/server-management/SKILL.mdView on GitHub Overview
Manages Hetzner Cloud servers using the provided server.sh suite. You can list existing servers, create new ones with sensible defaults or overrides, fetch IP addresses, and delete servers with explicit confirmation. After creation, you should bootstrap and configure DNS as part of the full workflow.
How This Skill Works
Operations are executed through ${CLAUDE_PLUGIN_ROOT}/scripts/server.sh with commands like list, ip, add, and rm. Setup verifies dependencies (hcloud and friends) and can read overrides from .claude/marina-skill.local.md to customize server_type and image. Destructive actions require explicit user confirmation and display the target server details before proceeding.
When to Use It
- When you need a current list of all Hetzner servers.
- When you want to create a new server with optional type and image overrides.
- When you need the IP address for a specific server.
- When you must delete a server with explicit confirmation.
- When performing a full create, bootstrap, and DNS workflow.
Quick Start
- Step 1: list existing servers with bash ${CLAUDE_PLUGIN_ROOT}/scripts/server.sh list
- Step 2: create a new server, e.g. SERVER_TYPE=cx23 IMAGE=debian-13 bash ${CLAUDE_PLUGIN_ROOT}/scripts/server.sh add <name>
- Step 3: get the IP with bash ${CLAUDE_PLUGIN_ROOT}/scripts/server.sh ip <name> (then wire DNS and bootstrap as needed)
Best Practices
- Always list current servers first before taking action.
- Use the overrides file (.claude/marina-skill.local.md) to customize server_type and image.
- Require explicit confirmation before any destructive delete.
- Wait a few seconds after creation before querying IPs.
- After creating, bootstrap the server and configure DNS as described by the workflow.
Example Use Cases
- A user asks to list servers and receives the current roster.
- A server named 'web-prod' is created using default or overridden type/image.
- The IP of server 'web-prod' is retrieved with server.sh ip <name>.
- The user nukes a server only after confirming and inspecting its DNS entries.
- A full create–bootstrap–DNS sequence is executed: create, wait, get IP, add DNS, bootstrap.