Skip to content
Back to skills

Hcloud Setup

DSecurity

Use when the user needs to install, configure, or set up hcloud CLI, manage contexts/API tokens, configure default settings, set up shell completion, or understand output formatting options.

  • 3 stars
  • 0 votes
  • 0 copies
  • 5 views
  • Added May 27, 2026
devopsgoshellbashexpressdockergitapi

Works with

  • cli
  • api

Security analysis

D46/100
  • mediumUses curl or wget to download content
  • criticalModifies startup scripts or system services for persistence
  • criticalModifies startup scripts or system services for persistence

Pro shows the line behind each finding and how to fix it

Scanned May 27, 2026

npx -y skills add danjdewhurst/hcloud-skills --skill hcloud-setup --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Hcloud Setup?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Hcloud Setup
[![Security: D — Skills Directory](https://www.skillsdirectory.com/api/skills/danjdewhurst-hcloud-setup/badge)](https://www.skillsdirectory.com/skills/danjdewhurst-hcloud-setup)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: hcloud-setup
description: "Use when the user needs to install, configure, or set up hcloud CLI, manage contexts/API tokens, configure default settings, set up shell completion, or understand output formatting options."
---

# hcloud CLI Setup and Configuration

## Installation

### Manual (GitHub Releases)

Download pre-built binaries from [GitHub releases](https://github.com/hetznercloud/cli/releases). Extract and move the binary to a directory in your `PATH`.

Example for 64-bit Linux:

```bash
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

```bash
go install github.com/hetznercloud/cli/cmd/hcloud@latest
```

Note: Binaries built with Go will not have the correct version embedded.

### Homebrew (Linux / macOS)

```bash
brew install hcloud
```

### Windows

WinGet:

```bash
winget install HetznerCloud.CLI
```

Scoop:

```bash
scoop install hcloud
```

Note: The WinGet and Scoop package entries are not maintained by Hetzner.

### Docker

```bash
docker run --rm -e HCLOUD_TOKEN="<token>" hetznercloud/cli:latest <command>
```

To persist configuration, mount the config file:

```bash
docker run --rm -v ~/.config/hcloud/cli.toml:/config.toml hetznercloud/cli:latest <command>
```

Interactive shell:

```bash
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:

```bash
source <(hcloud completion bash)
```

Make permanent by adding the line above to `~/.bashrc`.

### Zsh

Generate the completion file:

```bash
mkdir -p ~/.config/hcloud/completion/zsh
hcloud completion zsh > ~/.config/hcloud/completion/zsh/_hcloud
```

Add to `~/.zshrc` (the `fpath` line must come **before** `compinit`):

```bash
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:

```bash
hcloud completion fish > ~/.config/fish/completions/hcloud.fish
```

Load into current shell only:

```bash
hcloud completion fish | source
```

### PowerShell

Save completion script:

```powershell
hcloud completion powershell > hcloud.ps1
```

Load into current shell:

```powershell
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

```bash
hcloud context create <name>
```

Prompts interactively for an API token. To use the `HCLOUD_TOKEN` environment variable instead:

```bash
hcloud context create --token-from-env <name>
```

| Flag | Description |
|------|-------------|
| `--token-from-env` | Use `HCLOUD_TOKEN` from environment without prompting |

### Switch context

```bash
hcloud context use <context>
```

### Show active context

```bash
hcloud context active
```

### List all contexts

```bash
hcloud context list [options]
```

| Flag | Description |
|------|-------------|
| `-o, --output stringArray` | Output options: `noheader\|columns=...` |

Available columns: `active`, `name`.

### Delete a context

```bash
hcloud context delete <context>
```

### Rename a context

```bash
hcloud context rename <context> <name>
```

### Unset active context

```bash
hcloud context unset
```

## Config Management

Configuration file location: `~/.config/hcloud/cli.toml`

### Config hierarchy (highest to lowest priority)

1. Flags
2. Environment variables
3. Configuration file (context)
4. Configuration file (global)
5. Default values

### Set a value

```bash
hcloud config set <key> <value>...
```

| Flag | Description |
|------|-------------|
| `--global` | Set the value globally (for all contexts) |

### Get a value

```bash
hcloud config get <key>
```

| Flag | Description |
|------|-------------|
| `--allow-sensitive` | Allow showing sensitive values |
| `--global` | Get the value globally |

### List configuration

```bash
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

```bash
hcloud config add <key> <value>...
```

| Flag | Description |
|------|-------------|
| `--global` | Set the value globally (for all contexts) |

### Remove values from a list

```bash
hcloud config remove <key> <value>...
```

| Flag | Description |
|------|-------------|
| `--global` | Remove the value(s) globally (for all contexts) |

### Unset a value

```bash
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.

```bash
hcloud server list --output json
hcloud server describe my-server --output json
```

Use with `jq` for filtering:

```bash
hcloud server list -o json | jq '.[] | .name'
```

### YAML output

Supported by `describe`, `list`, and `create` commands.

```bash
hcloud server list --output yaml
```

Use with `yq` for filtering:

```bash
hcloud server list --output yaml | yq '.[] | .name'
```

### Go template format (describe only)

```bash
hcloud server describe my-server --output format='{{.ServerType.Cores}}'
```

### Table options (list only)

Remove the table header:

```bash
hcloud server list --output noheader
```

Select specific columns:

```bash
hcloud server list --output columns=id,name
```

Combine options:

```bash
hcloud server list --output noheader --output columns=id,name
```

Use `--help` on any list command to see all available columns.

## Other Commands

### Print version

```bash
hcloud version
```

### List all resources

```bash
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` |

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.