v0.4.0
Cluster Access (RBAC) and Provider-Agnostic Cloud Verbs
Per-user cluster access management, cloud-agnostic lifecycle verbs that auto-detect the provider, and the deprecation of the provider-specific equivalents.Cluster access (RBAC)
ankra cluster access list | grant | revoke manages who can reach a cluster’s Kubernetes API through the Ankra kube gateway (the access used by cluster kubeconfig and cluster kube-token). A grant maps an organisation member (by email) to a Kubernetes role - view, edit, admin, or cluster-admin - cluster-wide or limited to one namespace with --namespace. list shows each grant’s RBAC reconcile status; revoke accepts a grant ID or an email (revoking every grant that member has on the cluster). Managing access requires organisation admin rights.Provider-agnostic cloud cluster verbs
New cloud-agnostic verbs detect the provider (Hetzner, OVH, UpCloud) automatically from the cluster, so you no longer pick a provider namespace:ankra cluster upgrade <cluster_id> <target_version>- upgrade the Kubernetes (k3s) version.ankra cluster scale <cluster_id> <worker_count>- scale the default worker pool.ankra cluster node-group <list|add|scale|upgrade|delete>- manage node groups.ankra cluster k3s-versions- list the k3s versions available forcluster upgrade, with the stable channel highlighted.
ankra cluster deprovision now accepts a cluster ID or name (previously name-only) and routes cloud clusters to the provider-specific teardown so cloud resources are released.Agent Skills for Claude Code
ankra skills install | list | uninstall gained an --editor flag so the curated Agent Skills can target Claude Code as well as Cursor. It defaults to cursor (.cursor/skills, unchanged); pass --editor claude-code to install into .claude/skills, for both the personal (~/…) and --project scopes.Support review before submit
ankra support create now shows the AI review before submitting: the reasons a request was flagged, clarifying questions that would speed up triage, and any existing ticket that may already track the same problem. When the review flags the request or finds a possible duplicate you’re asked to confirm; --force skips the prompt, and -o json|yaml callers get a --force-guidance error instead of a prompt.Isolated --config state
--config <file> now fully isolates per-invocation state: a config file with an unfamiliar or missing extension is parsed as YAML (instead of reading empty and dropping the saved token), and the active-cluster selection is keyed to the explicit --config path rather than $HOME, so parallel runs against different config files no longer clobber each other. If you previously ran with --config and relied on the $HOME-keyed selection, re-run ankra cluster select once.Deprecated
The provider-specificankra cluster {hetzner,ovh,upcloud} upgrade | scale | node-group | deprovision commands are deprecated in favour of the cloud-agnostic verbs above. They still work and now print a runtime warning pointing at the replacement; they are scheduled for removal in v0.5.0. OVH’s node-group labels / node-group taints remain - they have no provider-agnostic equivalent yet.v0.3.0
kubectl, Metrics, Support, Stack Profiles, and Cluster Validation
The first stable v0.3.0 release rounds out end-to-end terminal control of an Ankra cluster: connect kubectl directly, query metrics, file support tickets, manage reusable stack profiles, validate and stage cluster YAML, and self-update the CLI.Connect kubectl directly
ankra cluster kubeconfig add | remove | list and ankra cluster kube-token wire kubectl straight to an Ankra cluster through the kube gateway. kube-token prints a short-lived Kubernetes ExecCredential for use as a credential plugin; kubeconfig add writes an ankra-* context (exec-based by default, or --embed-token) with atomic 0600 writes that leave foreign entries untouched and use collision-safe context naming.Cluster metrics
ankra cluster metrics query | query-range proxies a PromQL query (instant or range) to the cluster’s Prometheus metrics source, with table | json | yaml output for ad-hoc inspection and CI.Support requests
ankra support create | list | get | comment | attach | close opens and tracks Ankra support requests from the CLI, including image/screenshot attachments. Each request goes through a mandatory AI review; use --force to submit a request the reviewer flags.Stack profiles
ankra stack-profiles list | export-iac | import manages reusable, organisation-level stack profiles as ClusterInfrastructureAsCode YAML (export a profile version, import one from a file).Validate and stage cluster YAML
ankra cluster validate -f cluster.yamlruns the offlineapply --dry-runchecks plus server-side chart-existence, plaintext-secret, and parent-reference validation, with CI-friendly exit codes and--strict-secrets.ankra cluster draft -f cluster.yamlstages every stack as a reviewable draft instead of applying it - nothing is deployed by the command.ankra cluster applygained offline dependency-tree and referenced-file validation, and--dry-runforapply/delete clusteris fully offline (no token), so it drops into pre-merge CI.
Self-update and beta channel
ankra upgrade downloads, SHA-256-verifies, and atomically swaps the binary, with --version pinning for upgrade, downgrade, and rollback (--allow-unverified for releases that predate published checksums). ankra config beta enable|disable|status opts into pre-release builds with semver-aware precedence (a stable release outranks its release candidates).Cloud create parity and OVH commands
cluster ovh | upcloud | hetzner creategained--external-cloud-provider(per-cloud CCM + CSI) and--include-networking(Traefik + cert-manager), installed by default and reconciled directly, and committed to Git when--gitops-credential-name/--gitops-repository/--gitops-branchare set.- OVH reached web-UI parity:
ovh regions,ovh stop/ovh start,ovh access-info,ovh ssh-keys get|set,ovh node-group labels|taints, andovh control-plane/ovh nodes.
Operations and machine-readable output
ankra cluster operations list gained --watch / -w (with a configurable --interval), and both operations list and operations steps gained -o json|yaml. A shared -o json|yaml flag now spans the commands that read or return data.Security
ankra cluster encrypt manifest | addon no longer produces files that only look encrypted: a dotted --key (e.g. data.password) is normalised to its last segment, and after every encryption the CLI verifies the target value is real ENC[...] ciphertext - hard-failing before any write or stack PATCH when SOPS encrypted nothing.v0.2.5
Variables, Live-Cluster SOPS, Dependency Parents, and Multi-Org
Rounds out stack CRUD from the CLI: template variables at every scope, SOPS encryption against live clusters, dependency-parent editing, read/delete commands, a global organisation override, and offline-installable Agent Skills.Variables (org / cluster / stack scopes)
Full CRUD for the template variables substituted into stack manifests and addon values at deploy time, at three scopes:ankra org variables list|get|set|delete- organisation-wide, available to every cluster.ankra cluster variables list|get|set|delete [--cluster <name|id>]- per cluster; shadows org variables on that cluster.ankra cluster stacks variables list|get|set|delete <stack>- per stack; the most specific scope.
set is an upsert (create or update). Values can be read from stdin with - for piping secrets, list / get support -o json|yaml, and delete prompts for confirmation (--yes to skip). Resolution at deploy time is stack > cluster > organisation - a more specific scope shadows less specific ones for the same name.SOPS encrypt/decrypt against live clusters
ankra cluster encrypt and ankra cluster decrypt now operate directly on a live cluster, with no local cluster.yaml required.ankra cluster encrypt manifest <name> --key <key> [--cluster <name|id>]ankra cluster encrypt addon --name <addon> --key <key> [--cluster <name|id>] [--stack <stack>]ankra cluster decrypt manifest <name> [--cluster <name|id>]ankra cluster decrypt addon --name <addon> [--cluster <name|id>] [--stack <stack>]
encrypted_paths updated. The -f cluster.yaml file mode is unchanged for GitOps workflows; the two modes are mutually exclusive and cluster mode is the default. decrypt addon is new, bringing the addon variant to parity with manifests.Dependency parents on upgrade
ankra cluster addons upgrade and ankra cluster manifests upgrade now edit the dependency parents that control deployment ordering inside a stack, without re-applying the whole cluster.yaml:--add-parent name=<n>,kind=<manifest|addon>- repeatable;kinddefaults tomanifest.--remove-parent name=<n>,kind=<manifest|addon>- repeatable; removing the last parent clears the link.--set-parent name=<n>,kind=<manifest|addon>- replaces ALL parents; mutually exclusive with--add-parent/--remove-parent.
Read and delete
ankra cluster addons values <name>- print an addon’s current Helm values (decoded;-o rawfor the base64 form).ankra cluster manifests get <name>- print a manifest’s current YAML (decoded;-o rawfor the base64 form).ankra cluster manifests delete <name>- disconnect a manifest from its stack and remove its resources; the owning stack is resolved automatically and a confirmation prompt protects the operation (--yesto skip,--dry-runto preview).
Run a command against another organisation
A global--org <name|id> flag (or the ANKRA_ORG environment variable) runs a single command against any organisation you belong to, without changing your selected organisation:ankra org switch selection. You must be an active member of the target organisation.Install Ankra Agent Skills
ankra skills installs the curated Ankra Agent Skills into a Cursor/Claude skills directory. The skills are embedded in the binary, so installation works offline and is versioned with the release.--force to overwrite existing skills and --source <dir> to install from a local directory instead of the embedded copy. This is separate from ankra openclaw skill, which generates a per-cluster SKILL.md.v0.2.4
Surgical Addon and Manifest Upgrades
Two new subcommands for in-place updates that go through the same partial-stack endpoint as the UI. Atomic, locked, single git commit per invocation.Addon Upgrade
ankra cluster addons upgrade <addon> --chart-version <version>- bump the chart version.ankra cluster addons upgrade <addon> --set <key>=<value>- mutate a single Helm values field (helm-style; supports dotted paths,[idx]indexing, and[key=value]list selectors such asenv[name=LOG_LEVEL].value).ankra cluster addons upgrade <addon> --values-from-file <path>- replace the entire values document.ankra cluster addons upgrade <addon> --registry-name,--registry-url,--registry-credential-name- atomically retag the addon’s registry.ankra cluster addons upgrade <addon> --namespace <new>- destructive Helm reinstall in a new namespace; requires--yesor an interactive confirmation.
--set and --values-from-file are mutually exclusive: --set* MUTATES the existing values document, --values-from-file REPLACES it. Use --set-string to force a value to remain a string, and --set-file key=path to load a value from a file.Manifest Upgrade
ankra cluster manifests upgrade <manifest> --from-file <path>- replace the manifest content.ankra cluster manifests upgrade <manifest> --manifest -- read manifest YAML from stdin.ankra cluster manifests upgrade <manifest> --set <key>=<value>- mutate a single path in the manifest YAML (helm-style; supports dotted paths,[idx]indexing, and[key=value]list selectors such ascontainers[name=app].image).ankra cluster manifests upgrade <manifest> --target-kind <kind> --target-name <name>- with--set, pick which document to edit when the manifest holds multiple Kubernetes resources.ankra cluster manifests upgrade <manifest> --namespace <new>- change the manifest’s namespace.
--set* MUTATE the existing manifest and are mutually exclusive with --from-file / --manifest -, which REPLACE it. Use --set-string to force a value to remain a string, and --set-file key=path to load a value from a file.Addon and manifest field selectors
Bothaddons upgrade and manifests upgrade --set paths can address a list item by a stable field instead of a numeric index - for example env[name=LOG_LEVEL].value=debug or spec.template.spec.containers[name=app].image=nginx:1.27. A selector that matches nothing fails with a clear error rather than guessing.Common Options
--cluster <name|id>- defaults to the active selection.--stack <name>- addons only, required when the same addon name exists in multiple stacks. Manifest names are globally unique on a cluster, somanifests upgradehas no--stackflag.--dry-run- print before/after without writing.-o json|yaml- machine-readable output (the--dry-runenvelope is{before, after, notices}).
Example: bump image.tag for the website addon
Example: bump a Deployment image tag in a manifest
v0.2.0
Helm, Kubernetes Resources & Security Hardening
Helm management, Kubernetes resource access, direct cluster selection, and client hardening.Helm Release Commands
Commands for managing Helm releases in the active cluster:ankra cluster helm releases- List Helm releases (--namespace,--all-namespaces,--output json)ankra cluster helm uninstall <release> --namespace <ns>- Uninstall a Helm release
Helm Registry Commands
ankra helm registries list- List Helm registriesankra helm registries get <name>- Get registry detailsankra helm registries create --name <name> --url <url>- Create a registryankra helm registries delete <name>- Delete a registry
Helm Credential Commands
ankra helm credentials list- List registry credentialsankra helm credentials create --name <name>- Create a credential with secure promptsankra helm credentials delete <name>- Delete a credential
Kubernetes Resource Commands
Commands for accessing Kubernetes resources in the active cluster:ankra cluster pods- List pods (--namespace,--all-namespaces,--output json)ankra cluster resources <kind>- Get resources by kind (--namespace,--name,--output json)ankra cluster logs <pod>- Stream pod logs (--namespace,--container,--follow,--tail,--previous)
Cluster Selection & Info
ankra cluster select <name>- Select a cluster directly by name without the interactive pickerankra cluster info [name]- Show cluster details (defaults to selected cluster; replacescluster get)
Security & Reliability
- HTTP client timeouts and response body size limits
- URL encoding for all API path and query parameters
- Config file permissions restricted to owner-only (0600)
- Machine ID hashed with SHA-256
- Browser URL validation before opening
v0.1.129
Node Groups, UpCloud & OVH
Node group management commands and new UpCloud/OVH commands for cluster and credential management.Node Group Commands
Available for all three providers (hetzner, ovh, upcloud):ankra cluster <provider> node-group list <cluster_id>- List node groupsankra cluster <provider> node-group add <cluster_id> --name <name> --instance-type <type> --count <n>- Add a groupankra cluster <provider> node-group scale <cluster_id> <group_name> <count>- Scale a groupankra cluster <provider> node-group upgrade <cluster_id> <group_name> <instance_type>- Upgrade instance typeankra cluster <provider> node-group delete <cluster_id> <group_name>- Delete a group
UpCloud Commands
Credentials:ankra credentials upcloud list- List UpCloud API credentialsankra credentials upcloud create --name <name>- Create credential with secure token promptankra credentials upcloud ssh-key list- List SSH key credentialsankra credentials upcloud ssh-key create --name <name> --generate- Create SSH key
ankra cluster upcloud create- Create an UpCloud clusterankra cluster upcloud deprovision <cluster_id>- Deprovision a clusterankra cluster upcloud workers <cluster_id>- Get worker countankra cluster upcloud scale <cluster_id> <count>- Scale workersankra cluster upcloud k8s-version <cluster_id>- Get Kubernetes versionankra cluster upcloud upgrade <cluster_id> <version>- Upgrade Kubernetes version
OVH Commands
Credentials:ankra credentials ovh list- List OVH API credentialsankra credentials ovh create --name <name> --project-id <id>- Create credential with secure promptsankra credentials ovh ssh-key list- List SSH key credentialsankra credentials ovh ssh-key create --name <name> --generate- Create SSH key
ankra cluster ovh create- Create an OVH clusterankra cluster ovh deprovision <cluster_id>- Deprovision a clusterankra cluster ovh workers <cluster_id>- Get worker countankra cluster ovh scale <cluster_id> <count>- Scale workersankra cluster ovh k8s-version <cluster_id>- Get Kubernetes versionankra cluster ovh upgrade <cluster_id> <version>- Upgrade Kubernetes version
v0.1.127
OVH Cloud Support
OVH Cloud commands for cluster and credential management.OVH Credential Commands
ankra credentials ovh list- List OVH API credentialsankra credentials ovh create --name <name> --project-id <id>- Create credential with secure promptsankra credentials ovh ssh-key list- List SSH key credentialsankra credentials ovh ssh-key create --name <name> --generate- Create SSH key
OVH Cluster Commands
ankra cluster ovh create- Create an OVH cluster with configurable control planes, workers, networking, and gatewayankra cluster ovh deprovision <cluster_id>- Deprovision a clusterankra cluster ovh workers <cluster_id>- Get worker countankra cluster ovh scale <cluster_id> <count>- Scale workersankra cluster ovh k8s-version <cluster_id>- Get Kubernetes versionankra cluster ovh upgrade <cluster_id> <version>- Upgrade Kubernetes version
v0.1.125
SOPS Encryption & API Tokens
New SOPS encryption commands and API token management.SOPS Encryption
ankra cluster sops-config- Display the SOPS encryption configurationankra cluster encrypt manifest <name> --key <key> -f <file>- Encrypt a manifest keyankra cluster encrypt addon --name <addon> --key <key> -f <file>- Encrypt an addon keyankra cluster decrypt manifest <name> -f <file>- Decrypt a manifest
API Tokens
ankra tokens list- List API tokensankra tokens create <name>- Create a tokenankra tokens revoke <id>- Revoke a tokenankra tokens delete <id>- Delete a revoked token