Install
openclaw skills install syself-autopilot-hetznerUse for SySelf Autopilot on Hetzner: management kubeconfig setup, organization namespace, Hetzner account preparation, ClusterStack and Cluster manifests, bare metal worker onboarding with HetznerBareMetalHost, day-2 cluster operations, and support-boundary-aware troubleshooting. Invoke for SySelf Autopilot, Hetzner, bare metal workers, HetznerBareMetalHost, ClusterStack, management cluster, workload cluster, Robot, and HCloud-backed cluster tasks.
openclaw skills install syself-autopilot-hetznerHetznerBareMetalHost.ClusterStack, HetznerClusterStackReleaseTemplate, and Cluster manifests.kind, clusterctl init, or clusterctl move.Load hetzner-cloud whenever the task involves HCloud CLI work.
Use hetzner-cloud for:
hcloud commandsInherit these rules from hetzner-cloud:
hcloud command before executionsyself-autopilot-hetzner is the source of truth for the SySelf workflow and support boundaries.
hetzner-cloud is the source of truth for safe HCloud CLI usage inside that workflow.
Use only official SySelf Autopilot docs as authoritative guidance.
Core starting points:
Core concepts:
Core bare metal and operations guides:
Core troubleshooting:
If the docs do not cover a step, say so explicitly and stop short of improvising.
Assume the managed SySelf Autopilot model unless the user explicitly says otherwise.
Managed by SySelf:
Owned by the user or operator:
kind, clusterctl init, bootstrap clusters, or pivoting, explain that those are self-managed CAPH patterns and not the default path for this skill.kubeconfig.yaml resource on the official access page if the user is authenticated there.chmod 600.KUBECONFIG.kubectl get clusters.Important:
kubeconfig.yaml resource.Expected tools:
kubectlkubeloginhelmhcloud when automating Hetzner stepsRecommended checks:
kubectl version --client
kubectl oidc-login --help >/dev/null
helm version
hcloud version
hetzner-cloud before recommending or executing hcloud commands.Expected variables:
HCLOUD_TOKENHETZNER_ROBOT_USERHETZNER_ROBOT_PASSWORDSSH_KEY_NAMEHETZNER_SSH_PUB_PATHHETZNER_SSH_PRIV_PATHCLUSTER_NAMEHCLOUD_REGIONCONTROL_PLANE_MACHINE_TYPE_HCLOUDCreate:
hetzner secret for HCloud and Robot credentialsrobot-ssh secret for bare metal SSH provisioningPreferred asset:
scripts/02-create-management-secrets.shBefore any bare metal onboarding, verify all of the following.
Stop if:
HetznerBareMetalHost per server.rootDeviceHints.wwn when known.Preferred assets:
templates/hetznerbaremetalhost.yamlscripts/04-register-baremetal-hosts.shUseful checks:
kubectl get hetznerbaremetalhost
kubectl describe hetznerbaremetalhost <name>
kubectl get hbmh <name> -o yaml | yq .status.hardwareDetails.storage
lsblk -o name,WWN
ClusterStack and HetznerClusterStackReleaseTemplate.ClusterStackRelease to become ready before creating the workload cluster.Preferred asset:
templates/clusterstack.yamlUseful checks:
kubectl get clusterstack
kubectl get clusterstackreleases
kubectl get HetznerNodeImageReleases
workeramd64baremetal workers.workerHostSelectorBareMetal with matchLabels.Preferred assets:
templates/cluster.yamlscripts/05-apply-cluster.shUseful checks:
kubectl get cluster
kubectl get machines
kubectl get machines -w
Preferred asset:
scripts/06-verify-workload-access.shUseful checks:
kubectl cluster-info
kubectl get nodes -o wide
kubectl get pods -A
Add bare metal workers:
HetznerBareMetalHost resourcesworkeramd64baremetal MachineDeploymentsworkerHostSelectorBareMetal with matchLabelsScale HCloud workers:
spec.topology.workers.machineDeployments[].replicasIncrease control plane HA:
spec.topology.controlPlane.replicas to an odd numberRemove specific nodes:
Machine with cluster.x-k8s.io/delete-machine=""Reboot bare metal nodes in-place:
Machine in the management clusterAutoscaling:
Upgrades:
Treat these as hard rules unless official SySelf docs or SySelf support explicitly supersede them.
Supported response for that CSI case:
Do not claim support for:
Bare metal registration or bootstrap failure:
HetznerBareMetalHost status and hardware detailsMachineHealthCheck loops:
Stuck HCloud control plane provisioning:
templates/management-kubeconfig.yamltemplates/clusterstack.yamltemplates/cluster.yamltemplates/hetznerbaremetalhost.yamlscripts/01-validate-access.shscripts/02-create-management-secrets.shscripts/03-prepare-management-kubeconfig.shscripts/04-register-baremetal-hosts.shscripts/05-apply-cluster.shscripts/06-verify-workload-access.shkind, clusterctl init, or clusterctl move for the managed Autopilot path.When using this skill, respond in this order:
Consider the main flow complete when all of the following are true:
HetznerBareMetalHost resources are applied and validatedClusterStackRelease is readyThis skill equips an agent to act as a reliable execution and guidance layer for the official SySelf Autopilot workflow on Hetzner, with special attention to bare metal worker nodes.
This skill is for the managed SySelf Autopilot model, not for self-managed CAPH bootstrap clusters. Use it when the goal is to create or manage a workload cluster through the SySelf-hosted management cluster.
Use only official SySelf Autopilot documentation as the primary source of truth:
If a task would require assumptions not covered by the official docs, state that explicitly and stop short of inventing behavior.
This skill must actively rely on the hetzner-cloud skill for all HCloud CLI
operations and HCloud safety practices.
Use hetzner-cloud whenever the task includes any of the following:
When relying on hetzner-cloud, inherit these rules from it:
hcloud command before executionsyself remains the source of truth for the SySelf Autopilot workflow and
support boundaries. hetzner-cloud is the source of truth for safe HCloud CLI
usage inside that workflow.
The skill must keep the distinction below explicit at all times.
SySelf Autopilot manages:
The user or operator remains responsible for:
Treat the following as hard operational constraints for this skill.
kubectl output, Machine state, HetznerBareMetalHost status, and
ClusterStackRelease readiness as the authoritative runtime truth.Before execution, collect or confirm all of the following.
kubelogin.HCLOUD_TOKENHETZNER_ROBOT_USERHETZNER_ROBOT_PASSWORDSSH_KEY_NAMEHETZNER_SSH_PUB_PATHHETZNER_SSH_PRIV_PATHCLUSTER_NAMEGoal: ensure the agent uses the managed Autopilot flow.
Checklist:
kind, clusterctl init, bootstrap clusters, or pivoting,
clarify that those belong to self-managed CAPH and are not the default path
for this skill.Required tools from official docs:
kubectlkubeloginhelmhcloud CLI when automating Hetzner preparationRecommended verification:
kubectl version --client
kubectl oidc-login --help >/dev/null
helm version
hcloud version
This is mandatory and must happen before any cluster operations.
kubeconfig.yaml resource on the Autopilot access
page, but it is gated behind login. If the user is authenticated in the docs
portal, they may be able to copy or download it there. Do not assume a
public direct URL exists.management-kubeconfig.yaml.chmod 600 management-kubeconfig.yaml
export KUBECONFIG="$PWD/management-kubeconfig.yaml"
kubectl get clusters
This should open the browser for OIDC login if needed.
If no clusters exist yet, No resources found in the organization namespace is
not an error.
Follow the official Hetzner account preparation flow.
At this phase, the agent should also load and apply the hetzner-cloud skill
before issuing or recommending hcloud commands.
Recommended environment variables:
export HCLOUD_TOKEN="<hcloud-token>"
export SSH_KEY_NAME="<ssh-key-name-in-hcloud-and-robot>"
export HETZNER_SSH_PUB_PATH="$HOME/.ssh/<key>.pub"
export HETZNER_SSH_PRIV_PATH="$HOME/.ssh/<key>"
export HETZNER_ROBOT_USER="<robot-user>"
export HETZNER_ROBOT_PASSWORD="<robot-password>"
export CLUSTER_NAME="mycluster"
export HCLOUD_REGION="nbg1"
export CONTROL_PLANE_MACHINE_TYPE_HCLOUD="cpx42"
Create the secrets in the SySelf Autopilot management cluster.
The official flow requires:
hetzner secret for HCloud and Robot credentials.robot-ssh secret for bare metal provisioning via SSH.Use the helper script:
scripts/02-create-management-secrets.shBefore onboarding bare metal workers, explicitly check the following.
Stop conditions:
Create a HetznerBareMetalHost per server in the management cluster.
Use the template:
templates/hetznerbaremetalhost.yamlRules:
serverID.rootDeviceHints.wwn when known.Recommended commands:
kubectl apply -f templates/hetznerbaremetalhost.yaml
kubectl get hetznerbaremetalhost
kubectl describe hetznerbaremetalhost <name>
If WWN is unknown:
kubectl get hbmh <name> -o yaml | yq .status.hardwareDetails.storage
or on the server itself:
lsblk -o name,WWN
Use the helper script:
scripts/04-register-baremetal-hosts.shApply the official-style ClusterStack and HetznerClusterStackReleaseTemplate.
Use the template:
templates/clusterstack.yamlNotes:
controlplaneamd64hcloud and
workeramd64hcloud node images.HetznerBareMetalHost resources, not through a separate bootstrap-cluster
workflow in this skill.Recommended verification:
kubectl apply -f templates/clusterstack.yaml
kubectl get clusterstack
kubectl get clusterstackreleases
kubectl get HetznerNodeImageReleases
Do not proceed until the intended ClusterStackRelease is ready.
Apply the cluster manifest through the management cluster.
Use the template:
templates/cluster.yamlFor the main supported bare metal worker flow:
workeramd64baremetalworkerHostSelectorBareMetalRecommended verification:
kubectl apply -f templates/cluster.yaml
kubectl get cluster
kubectl get machines
Use the helper script:
scripts/05-apply-cluster.shThe official docs include a workload kubeconfig retrieval step after cluster creation. Use the documented command from the current Autopilot docs version available to the user.
Then:
export KUBECONFIG="$PWD/<workload-kubeconfig-file>"
kubectl get nodes -o wide
kubectl get pods -A
Use the helper script:
scripts/06-verify-workload-access.shHetznerBareMetalHost resources.workeramd64baremetal MachineDeployments.workerHostSelectorBareMetal with matchLabels.spec.topology.workers.machineDeployments[].replicas.spec.topology.controlPlane.replicas to an odd number.Machine object with:kubectl annotate machine <machine-name> "cluster.x-k8s.io/delete-machine"=""
Only for controlled maintenance.
Management cluster:
kubectl annotate machine <machine-name> cluster.x-k8s.io/paused=true
Workload cluster:
kubectl drain <node-name> --ignore-daemonsets
kubectl get pods --all-namespaces --field-selector spec.nodeName=<node-name>
kubectl uncordon <node-name>
Management cluster after maintenance:
kubectl annotate machine <machine-name> cluster.x-k8s.io/paused-
When the cluster has cloud control planes and only bare metal workers:
Pending.Do not silently patch add-ons in a way that fights ClusterAddon reconciliation unless the user explicitly wants a temporary workaround and understands it may be overwritten.
Check in this order:
HetznerBareMetalHost status and hardware details.templates/management-kubeconfig.yaml:
local template for the kubeconfig file received from SySelf admins.templates/clusterstack.yaml:
official-style ClusterStack and HetznerClusterStackReleaseTemplate.templates/cluster.yaml:
workload cluster manifest for HCloud control planes and bare metal workers.templates/hetznerbaremetalhost.yaml:
one or more bare metal hosts with labels and WWN placeholders.scripts/01-validate-access.sh:
validate tooling and management-cluster access.scripts/03-prepare-management-kubeconfig.sh:
copy the kubeconfig received from SySelf admins and set the organization namespace.scripts/02-create-management-secrets.sh:
create hetzner and robot-ssh secrets.scripts/04-register-baremetal-hosts.sh:
apply host manifests and print follow-up checks.scripts/05-apply-cluster.sh:
apply ClusterStack and Cluster manifests and print watch commands.scripts/06-verify-workload-access.sh:
validate workload-cluster access after kubeconfig retrieval.Never do these without explicit user override and risk acknowledgment.
clusterctl init as part of the Autopilot flow.clusterctl move or pivoting for managed Autopilot.The skill has completed its main job when all of the following are true:
HetznerBareMetalHost resources are applied and validated