hcloud-setup
Scannednpx machina-cli add skill danjdewhurst/hcloud-skills/hcloud-setup --openclawhcloud CLI Setup and Configuration
Installation
Manual (GitHub Releases)
Download pre-built binaries from GitHub releases. Extract and move the binary to a directory in your PATH.
Example for 64-bit Linux:
curl -sSLO https://github.com/hetznercloud/cli/releases/latest/download/hcloud-linux-amd64.tar.gz
sudo tar -C /usr/local/bin --no-same-owner -xzf hcloud-linux-amd64.tar.gz hcloud
rm hcloud-linux-amd64.tar.gz
Go
go install github.com/hetznercloud/cli/cmd/hcloud@latest
Note: Binaries built with Go will not have the correct version embedded.
Homebrew (Linux / macOS)
brew install hcloud
Windows
WinGet:
winget install HetznerCloud.CLI
Scoop:
scoop install hcloud
Note: The WinGet and Scoop package entries are not maintained by Hetzner.
Docker
docker run --rm -e HCLOUD_TOKEN="<token>" hetznercloud/cli:latest <command>
To persist configuration, mount the config file:
docker run --rm -v ~/.config/hcloud/cli.toml:/config.toml hetznercloud/cli:latest <command>
Interactive shell:
docker run -it --rm --entrypoint /bin/sh hetznercloud/cli:latest
Debian-based distributions (using apt) provide outdated versions of the hcloud CLI. Use one of the other installation methods instead.
Shell Completion
Bash
Load into current shell:
source <(hcloud completion bash)
Make permanent by adding the line above to ~/.bashrc.
Zsh
Generate the completion file:
mkdir -p ~/.config/hcloud/completion/zsh
hcloud completion zsh > ~/.config/hcloud/completion/zsh/_hcloud
Add to ~/.zshrc (the fpath line must come before compinit):
fpath+=(~/.config/hcloud/completion/zsh)
# ... anything else that needs to be done before compinit
autoload -Uz compinit; compinit
Restart the shell for changes to take effect.
Fish
Permanent installation:
hcloud completion fish > ~/.config/fish/completions/hcloud.fish
Load into current shell only:
hcloud completion fish | source
PowerShell
Save completion script:
hcloud completion powershell > hcloud.ps1
Load into current shell:
hcloud completion powershell | Out-String | Invoke-Expression
Source the saved file from your PowerShell profile for persistence.
Context Management
Contexts manage multiple Hetzner Cloud API tokens and per-project configuration.
Create a context
hcloud context create <name>
Prompts interactively for an API token. To use the HCLOUD_TOKEN environment variable instead:
hcloud context create --token-from-env <name>
| Flag | Description |
|---|---|
--token-from-env | Use HCLOUD_TOKEN from environment without prompting |
Switch context
hcloud context use <context>
Show active context
hcloud context active
List all contexts
hcloud context list [options]
| Flag | Description |
|---|---|
-o, --output stringArray | Output options: noheader|columns=... |
Available columns: active, name.
Delete a context
hcloud context delete <context>
Rename a context
hcloud context rename <context> <name>
Unset active context
hcloud context unset
Config Management
Configuration file location: ~/.config/hcloud/cli.toml
Config hierarchy (highest to lowest priority)
- Flags
- Environment variables
- Configuration file (context)
- Configuration file (global)
- Default values
Set a value
hcloud config set <key> <value>...
| Flag | Description |
|---|---|
--global | Set the value globally (for all contexts) |
Get a value
hcloud config get <key>
| Flag | Description |
|---|---|
--allow-sensitive | Allow showing sensitive values |
--global | Get the value globally |
List configuration
hcloud config list
| Flag | Description |
|---|---|
-a, --all | Also show default values |
--allow-sensitive | Allow showing sensitive values |
-g, --global | Only show global values |
-o, --output stringArray | Output options: noheader|columns=...|json|yaml |
Add values to a list
hcloud config add <key> <value>...
| Flag | Description |
|---|---|
--global | Set the value globally (for all contexts) |
Remove values from a list
hcloud config remove <key> <value>...
| Flag | Description |
|---|---|
--global | Remove the value(s) globally (for all contexts) |
Unset a value
hcloud config unset <key>
| Flag | Description |
|---|---|
--global | Unset the value globally (for all contexts) |
Preference keys
These keys can be used with set, unset, add, and remove:
| Key | Description | Type | Config key | Env variable |
|---|---|---|---|---|
debug | Enable debug output | boolean | debug | HCLOUD_DEBUG |
debug-file | File to write debug output to | string | debug_file | HCLOUD_DEBUG_FILE |
default-ssh-keys | Default SSH Keys for new Servers and Storage Boxes | string list | default_ssh_keys | HCLOUD_DEFAULT_SSH_KEYS |
endpoint | Hetzner Cloud API endpoint | string | endpoint | HCLOUD_ENDPOINT |
hetzner-endpoint | Hetzner API endpoint | string | hetzner_endpoint | HETZNER_ENDPOINT |
no-experimental-warnings | Suppress experimental warnings | boolean | no_experimental_warnings | HCLOUD_NO_EXPERIMENTAL_WARNINGS |
poll-interval | Polling interval for action progress | duration | poll_interval | HCLOUD_POLL_INTERVAL |
quiet | Only print error messages | boolean | quiet | HCLOUD_QUIET |
sort.<resource> | Default sorting for a resource | string list | sort.<resource> | HCLOUD_SORT_<RESOURCE> |
Non-preference keys (read-only via config)
| Key | Description | Type | Config key | Env variable |
|---|---|---|---|---|
config | Config file path | string | HCLOUD_CONFIG | |
context | Currently active context | string | active_context | HCLOUD_CONTEXT |
token | Hetzner Cloud API token | string | token | HCLOUD_TOKEN |
These cannot be modified with hcloud config set or hcloud config unset, but can be retrieved with hcloud config get and hcloud config list.
Global Flags
These flags are inherited by all commands:
| Flag | Description | Default |
|---|---|---|
--config string | Config file path | ~/.config/hcloud/cli.toml |
--context string | Currently active context | |
--debug | Enable debug output | |
--debug-file string | File to write debug output to | |
--endpoint string | Hetzner Cloud API endpoint | https://api.hetzner.cloud/v1 |
--hetzner-endpoint string | Hetzner API endpoint | https://api.hetzner.com/v1 |
--no-experimental-warnings | Suppress experimental warnings | |
--poll-interval duration | Polling interval for action progress | 500ms |
--quiet | Only print error messages |
Output Formatting
JSON output
Supported by describe, list, and create commands. Lists return an array, describe returns an object.
hcloud server list --output json
hcloud server describe my-server --output json
Use with jq for filtering:
hcloud server list -o json | jq '.[] | .name'
YAML output
Supported by describe, list, and create commands.
hcloud server list --output yaml
Use with yq for filtering:
hcloud server list --output yaml | yq '.[] | .name'
Go template format (describe only)
hcloud server describe my-server --output format='{{.ServerType.Cores}}'
Table options (list only)
Remove the table header:
hcloud server list --output noheader
Select specific columns:
hcloud server list --output columns=id,name
Combine options:
hcloud server list --output noheader --output columns=id,name
Use --help on any list command to see all available columns.
Other Commands
Print version
hcloud version
List all resources
hcloud all list [options]
Lists all resources in the project (Servers, Images, Placement Groups, Primary IPs, ISOs, Volumes, Load Balancers, Floating IPs, Networks, Firewalls, Certificates, SSH Keys, Storage Boxes, Zones). Does not include static/public resources like Locations or public ISOs.
| Flag | Description |
|---|---|
--paid | Only list resources that cost money |
-l, --selector string | Selector to filter by labels |
-o, --output stringArray | Output options: json|yaml |
Source
git clone https://github.com/danjdewhurst/hcloud-skills/blob/main/skills/hcloud-setup/SKILL.mdView on GitHub Overview
The hcloud-setup skill covers installing the Hetzner Cloud CLI (hcloud), configuring defaults, and managing contexts and tokens. It also guides enabling shell completion and locating or editing the CLI config file to persist settings across sessions.
How This Skill Works
Install the hcloud CLI via binaries, Go, Homebrew, Windows package managers, or Docker. Create and switch contexts to manage multiple API tokens, including options to use tokens from the environment. The CLI reads configuration from flags, environment variables, and config files (with a defined hierarchy) and supports shell completion for Bash, Zsh, Fish, and PowerShell.
When to Use It
- You need to install the hcloud CLI on Linux, macOS, or Windows using the preferred method (manual binary, Go, Homebrew, WinGet, or Scoop, or Docker).
- You want to enable and configure shell completion for Bash, Zsh, Fish, or PowerShell to speed up commands.
- You work with multiple Hetzner Cloud projects and manage tokens with separate contexts for each project.
- You need to locate or edit the CLI config file at ~/.config/hcloud/cli.toml and understand the priority of config sources.
- You want to run commands using a token from the HCLOUD_TOKEN environment variable instead of interactive prompts.
Quick Start
- Step 1: Install the hcloud CLI using your preferred method (e.g., brew install hcloud or go install github.com/hetznercloud/cli/cmd/hcloud@latest).
- Step 2: Create or switch a context; you can use a token interactively or via --token-from-env: hcloud context create my-context or hcloud context create --token-from-env my-context.
- Step 3: Enable shell completion and verify: hcloud completion bash > ~/.config/hcloud/completion/bash/_hcloud; source ~/.bashrc; hcloud context active.
Best Practices
- Choose the installation method best suited to your OS; Debian-based apt can be outdated—prefer manual binaries, Go, Homebrew, or Docker.
- Use hcloud context create with --token-from-env to securely source tokens from your environment variable HCLOUD_TOKEN.
- When using Docker, persist configuration by mounting ~/.config/hcloud/cli.toml into the container.
- Enable shell completion for your shell to reduce typos and improve command discovery.
- Leverage the output formatting options (-o/--output) to tailor displayed data for scripts and dashboards.
Example Use Cases
- Install hcloud on macOS with Homebrew: brew install hcloud; verify with hcloud version.
- Create a new context and enter the API token when prompted: hcloud context create my-prod.
- Create a context from env token: hcloud context create --token-from-env my-prod.
- Generate and load Bash completion: source <(hcloud completion bash); add to .bashrc to persist.
- Run hcloud in Docker and persist config: docker run --rm -v ~/.config/hcloud/cli.toml:/config.toml hetznercloud/cli:latest <command>.