hcloud-cli — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited hcloud-cli (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
List/Show operations before creating or modifying anything. Avoid duplicates. Reuse existing infrastructure when possible.--dryrun create/update/delete calls first. Show the user what will happen. Only execute after confirmation or when the user has explicitly asked to proceed.--cli-query to filter output and keep token usage minimal. Never dump full API responses when you only need a few fields.--cli-waiter for async operations (ECS create, RDS create, CCE create, etc.). Never poll manually with sleep loops.hcloud <Service> --help to find operations; hcloud <Service> <Operation> --help to find parameters. Never guess API names or parameters.hcloud obs is obsutil, not a standard hcloud API. It uses single-dash flags (-flag=value), obs://bucket/key URLs, its own config (~/.obsutilconfig), and has no JMESPath/JSON output. See references/obs.md.# Check CLI is available
hcloud version
# Verify authentication
hcloud configure test
# Discover available services
hcloud --help
# Discover operations for a service
hcloud ECS --help
# Discover parameters for an operation
hcloud ECS ListServersDetails --help
# List existing resources (the "snapshot")
hcloud VPC ListVpcs --cli-region=la-north-2 --cli-output=json --cli-query='vpcs[].{name:name,id:id,cidr:cidr}'
# Preview a create call without executing
hcloud --dryrun VPC CreateVpc --cli-region=la-north-2 --vpc.name=demo-vpc --vpc.cidr=10.0.0.0/16
# Generate a parameter skeleton for complex operations
hcloud --skeleton ECS CreateServers
# Execute with waiter for async operations
hcloud ECS CreateServers --cli-region=la-north-2 --cli-waiter='{"expr":"server.status","to":"ACTIVE","timeout":300}' ...hcloud <Service> <Operation> --param1=value1 --param2=value2--param=value format (always --param=value, never --param value)--name=demo-vpc--vpc.name=demo-vpc --vpc.cidr=10.0.0.0/16--nics.1.subnet_id=xxx --nics.1.vpc_id=yyy--cli-jsonInput=./params.json# Preview without executing
hcloud --dryrun ECS CreateServers ...
# Generate parameter skeleton in JSON
hcloud --skeleton ECS CreateServers
# Debug mode — print full request/response
hcloud --debug ECS ListServersDetails --cli-region=la-north-2
# Region override
hcloud ECS ListServersDetails --cli-region=ap-southeast-1
# Profile override
hcloud ECS ListServersDetails --cli-profile=prod
# Output format
hcloud VPC ListVpcs --cli-output=json # JSON (default for scripting)
hcloud VPC ListVpcs --cli-output=table # ASCII table
hcloud VPC ListVpcs --cli-output=tsv # Tab-separated
# JMESPath query — filter and project output
hcloud VPC ListVpcs --cli-query='vpcs[].{name:name,id:id}'
# Async polling
hcloud ECS CreateServers --cli-waiter='{"expr":"server.status","to":"ACTIVE","timeout":300}'
# Row numbers in table output
hcloud VPC ListVpcs --cli-output=table --cli-output-num
# Custom endpoint
hcloud ECS ListServersDetails --cli-endpoint=https://ecs.custom.example.com
# Timeouts and retries
hcloud ECS ListServersDetails --cli-connect-timeout=10 --cli-read-timeout=30 --cli-retry-count=3
# Skip SSL verification (not recommended)
hcloud ECS ListServersDetails --cli-skip-secure-verify=true
# JSON input file for complex parameters
hcloud ECS CreateServers --cli-jsonInput=./create-ecs-params.jsonAlways query before acting. See references/discovery.md for full patterns.
# Networking
hcloud VPC ListVpcs --cli-region=X --cli-output=json --cli-query='vpcs[].{name:name,id:id,cidr:cidr}'
hcloud VPC ListSubnets --cli-region=X --vpc_id=VPC_ID --cli-output=json --cli-query='subnets[].{name:name,id:id,cidr:cidr}'
hcloud VPC ListSecurityGroups --cli-region=X --cli-output=json --cli-query='security_groups[].{name:name,id:id}'
hcloud EIP ListPublicips --cli-region=X --cli-output=json
# Compute
hcloud ECS ListServersDetails --cli-region=X --cli-output=json --cli-query='servers[].{name:name,id:id,status:status,flavor:flavor.id}'
hcloud ECS ListFlavors --cli-region=X --cli-output=json --cli-query='flavors[].{id:id,vcpus:vcpus,ram:ram}'
hcloud IMS ListImages --cli-region=X --__imagetype=gold --__os_type=Linux --cli-output=json --cli-query='images[].{id:id,name:name}'
# Database
hcloud RDS ListDatastores --cli-region=X --database_name=MySQL --cli-output=json
hcloud RDS ListFlavors --cli-region=X --database_name=MySQL --cli-output=json
# IAM
hcloud IAM KeystoneListUsers --cli-output=json --cli-query='users[].{name:name,id:id}'
hcloud IAM KeystoneListProjects --cli-output=json --cli-query='projects[].{name:name,id:id}'Always dryrun first. See references/resource-creation.md for full patterns.
# Step 1: Discover existing resources
hcloud VPC ListVpcs --cli-region=la-north-2 --cli-output=json --cli-query='vpcs[].{name:name,id:id}'
# Step 2: Dryrun the create
hcloud --dryrun VPC CreateVpc --cli-region=la-north-2 --vpc.name=demo-vpc --vpc.cidr=10.0.0.0/16
# Step 3: Execute
hcloud VPC CreateVpc --cli-region=la-north-2 --vpc.name=demo-vpc --vpc.cidr=10.0.0.0/16
# Step 4: Verify
hcloud VPC ListVpcs --cli-region=la-north-2 --cli-query='vpcs[?name==`demo-vpc`].{id:id,cidr:cidr}'For async operations, add --cli-waiter:
hcloud ECS CreateServers --cli-region=la-north-2 \
--cli-waiter='{"expr":"server.status","to":"ACTIVE","timeout":300}' \
--server.name=demo-ecs \
--server.flavor_ref=c6.large.2 \
--server.image_ref=IMAGE_ID \
--server.availability_zone=la-north-2a \
--nics.1.subnet_id=SUBNET_ID \
--nics.1.vpc_id=VPC_ID \
--security_groups.1.id=SG_IDSee references/profile-management.md for details.
# Initialize a profile (interactive)
hcloud configure init
# Set AK/SK and region
hcloud configure set --cli-profile=default --access-key=XXX --secret-key=YYY --region=la-north-2
# List profiles
hcloud configure list
# Show current profile
hcloud configure show
# Test connectivity
hcloud configure test
# Delete a profile
hcloud configure delete --cli-profile=old
# SSO authentication
hcloud configure sso# Full JSON output
hcloud VPC ListVpcs --cli-region=X --cli-output=json
# Project specific fields with JMESPath
hcloud VPC ListVpcs --cli-region=X --cli-output=json --cli-query='vpcs[].{name:name,id:id,cidr:cidr}'
# Filter by name
hcloud VPC ListVpcs --cli-region=X --cli-output=json --cli-query='vpcs[?name==`prod-vpc`].{id:id,cidr:cidr}'
# Table output for human review
hcloud VPC ListVpcs --cli-region=X --cli-output=table --cli-output-num
# JMESPath with nested fields
hcloud ECS ListServersDetails --cli-region=X --cli-output=json --cli-query='servers[].{name:name,status:status,flavor:flavor.id,ips:addresses.private[0].addr}'See references/waiter-patterns.md for per-service patterns.
# Generic waiter pattern
hcloud <Service> <AsyncOperation> --cli-waiter='{"expr":"<jmespath>","to":"<target>","timeout":<seconds>,"interval":<seconds>}'
# ECS — wait for server to become ACTIVE
hcloud ECS CreateServers ... --cli-waiter='{"expr":"server.status","to":"ACTIVE","timeout":300}'
# RDS — wait for instance to become ACTIVE
hcloud RDS CreateInstance ... --cli-waiter='{"expr":"instances[0].status","to":"ACTIVE","timeout":600}'
# CCE — wait for cluster to become Available
hcloud CCE CreateCluster ... --cli-waiter='{"expr":"status.phase","to":"Available","timeout":600}'OBS is handled by obsutil — a separate tool with its own commands, config, and syntax. See references/obs.md for full reference.
# Configure OBS separately (different from hcloud configure)
hcloud obs config -e=https://obs.la-north-2.myhuaweicloud.com -i=AK -k=SK
# List buckets
hcloud obs ls -s
# List objects in a bucket
hcloud obs ls obs://my-bucket/ -s
# Upload a file
hcloud obs cp ./file.txt obs://my-bucket/file.txt
# Upload a folder
hcloud obs cp ./folder/ obs://my-bucket/prefix/ -r
# Download
hcloud obs cp obs://my-bucket/file.txt ./file.txt
# Sync (incremental)
hcloud obs sync ./folder/ obs://my-bucket/prefix/
# Create bucket
hcloud obs mb obs://my-bucket -location=la-north-2
# Delete objects
hcloud obs rm obs://my-bucket/old-prefix/ -r -f
# Generate presigned URL
hcloud obs sign obs://my-bucket/file.txt -e=3600# Debug — print full request/response details
hcloud --debug ECS ListServersDetails --cli-region=la-north-2
# Download latest API metadata
hcloud meta download
# Clear cached metadata
hcloud meta clear
# Configure logging
hcloud log set
hcloud log show
# Update KooCLI
hcloud update
# Version
hcloud versionhcloud configure init # Interactive profile setup
hcloud configure set # Set profile values
hcloud configure list # List all profiles
hcloud configure show # Show current profile details
hcloud configure delete # Delete a profile
hcloud configure test # Test authentication
hcloud configure clear # Clear all profiles
hcloud configure sso # SSO authentication
hcloud meta download # Download API metadata
hcloud meta clear # Clear metadata cache
hcloud log set # Configure logging
hcloud log show # Show log config
hcloud update # Update KooCLI
hcloud version # Print version
hcloud auto-complete on # Enable shell autocomplete
hcloud auto-complete off # Disable shell autocomplete# 1. Discover existing networking
hcloud VPC ListVpcs --cli-region=la-north-2 --cli-output=json --cli-query='vpcs[].{name:name,id:id,cidr:cidr}'
# → prod-vpc (10.0.0.0/16) id=e00f74ba-...
hcloud VPC ListSubnets --cli-region=la-north-2 --vpc_id=e00f74ba-59ec-4609-9522-981d8273522f --cli-output=json --cli-query='subnets[].{name:name,id:id,cidr:cidr}'
hcloud VPC ListSecurityGroups --cli-region=la-north-2 --cli-output=json --cli-query='security_groups[].{name:name,id:id}'
# 2. Discover compute options
hcloud ECS ListFlavors --cli-region=la-north-2 --availability_zone=la-north-2a --cli-output=json --cli-query='flavors[].{id:id,name:name,vcpus:vcpus,ram:ram}'
hcloud IMS ListImages --cli-region=la-north-2 --__imagetype=gold --__os_type=Linux --__platform=Ubuntu --cli-output=json --cli-query='images[].{id:id,name:name}'
# 3. Generate skeleton for create
hcloud --skeleton ECS CreateServers
# 4. Dryrun
hcloud --dryrun ECS CreateServers --cli-region=la-north-2 \
--server.name=demo-ecs \
--server.flavor_ref=c6.large.2 \
--server.image_ref=IMAGE_ID \
--server.availability_zone=la-north-2a \
--nics.1.subnet_id=SUBNET_ID \
--nics.1.vpc_id=VPC_ID \
--security_groups.1.id=SG_ID
# 5. Execute with waiter
hcloud ECS CreateServers --cli-region=la-north-2 \
--cli-waiter='{"expr":"server.status","to":"ACTIVE","timeout":300}' \
--server.name=demo-ecs \
--server.flavor_ref=c6.large.2 \
--server.image_ref=IMAGE_ID \
--server.availability_zone=la-north-2a \
--nics.1.subnet_id=SUBNET_ID \
--nics.1.vpc_id=VPC_ID \
--security_groups.1.id=SG_ID
# 6. Verify
hcloud ECS ListServersDetails --cli-region=la-north-2 --name=demo-ecs --cli-output=json --cli-query='servers[].{name:name,id:id,status:status}'# Query the same resource across regions (parallel)
hcloud VPC ListVpcs --cli-region=la-north-2 --cli-output=json --cli-query='vpcs[].{name:name,id:id}'
hcloud VPC ListVpcs --cli-region=ap-southeast-1 --cli-output=json --cli-query='vpcs[].{name:name,id:id}'
hcloud VPC ListVpcs --cli-region=eu-west-101 --cli-output=json --cli-query='vpcs[].{name:name,id:id}'# 1. Find by name
hcloud VPC ListVpcs --cli-region=la-north-2 --cli-output=json --cli-query='vpcs[?name==`old-vpc`].id'
# 2. Dryrun delete
hcloud --dryrun VPC DeleteVpc --cli-region=la-north-2 --vpc_id=VPC_ID
# 3. Execute
hcloud VPC DeleteVpc --cli-region=la-north-2 --vpc_id=VPC_ID
# 4. Verify it's gone
hcloud VPC ListVpcs --cli-region=la-north-2 --cli-output=json --cli-query='vpcs[?name==`old-vpc`]'# 1. Configure OBS (if not already done)
hcloud obs config -e=https://obs.la-north-2.myhuaweicloud.com -i=AK -k=SK
# 2. List existing buckets
hcloud obs ls -s
# 3. Create bucket if needed
hcloud obs mb obs://my-bucket -location=la-north-2
# 4. Dryrun upload
hcloud obs cp ./data/ obs://my-bucket/data/ -r -dryRun
# 5. Upload
hcloud obs cp ./data/ obs://my-bucket/data/ -r
# 6. Verify
hcloud obs ls obs://my-bucket/data/ -s~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.