uninstall-kube-agents · git:20261020.83f98e5 · 2026-10-20 · sha256 8b2d389ee76c0975

uninstall-kube-agents git:20261020.83f98e5B

Immutable. This exact content never changes and is served at /api/v1/blob/8b2d389ee76c0975.

---
name: uninstall-kube-agents
description: Uninstall kube-agents (the Kubernetes Agentic Harness) — discover and remove the GCP/GKE infrastructure an install provisioned. Use when asked to uninstall, remove, or tear down kube-agents from a project or cluster.
---

# Uninstall Kubernetes Agentic Harness (kube-agents)

Use this skill when asked to remove or uninstall `kube-agents` infrastructure from a GCP project or GKE cluster.

## One-Liner Uninstall Command (Non-Interactive)

To run the project teardown non-interactively, use the `uninstall.sh` published for the release
the install runs, substituting `<RELEASE_VERSION>` with a release tag from
[GitHub Releases](https://github.com/gke-labs/kube-agents/releases). The release-pinned script
tears the install down with its own release's engine; a copy carrying no baked version falls back
to the engine on `main`, which is not the one that built the install:

```bash
curl -fsSL https://raw.githubusercontent.com/gke-labs/kube-agents/<RELEASE_VERSION>/uninstall.sh | bash -s -- \
  --non-interactive \
  --gcp-project-id="<PROJECT_ID>" \
  --gke-cluster-name="<CLUSTER_NAME>" \
  --gcp-region="<REGION>"
```

On a GitLab install, the installer creates the token Secret, and the CA Secret for a private CA,
outside the Helm release. A teardown that deletes the cluster deletes them too. On a cluster that
the teardown keeps, tell the operator that the Secrets stay, and give the command in "What a teardown
leaves" on the site's uninstall page (`docs/site/src/content/docs/install/uninstall.md`), or tell
the operator to delete the namespace. That command sources
the install's `install.env` in a subshell, the same way the installer reads it, so renamed Secrets
or a non-default namespace are found. Then tell the operator to revoke the token in GitLab, and the read-only token too, if the operator
made one.

The installer finds `install.env` in this order: `KUBE_AGENTS_INSTALL_ENV`, beside `install.sh`,
in the current directory, then the source directory (`$HOME/kube-agents` under `curl … | bash`).

Also tell the operator to revoke the token in GitLab, and the read-only token too, if the operator
made one.

The engine is `lifecycle.sh destroy` in `terraform/examples/full-install`, run against the
install's Terraform state in GCS (bucket `<project>-kube-agents-tfstate`, prefix
`kube-agents/<cluster>` — derived from the coordinates, so a fresh clone finds it). Before
`terraform destroy` it handles the asymmetries a bare destroy trips over: it forgets the
undeletable KMS resources from state (kept usable in GCP, re-adopted on the next apply), deletes
the `PlatformAgent` CR and force-clears its finalizer if the operator is wedged, uninstalls the
Helm releases with the `helm` CLI on a cluster the install did not create, purges every
backup the GKE BackupPlan owns, and clears the cluster's deletion protection.

When the command does not run from a local `kube-agents` checkout, the teardown engine is fetched:
at the script's own baked release when it has one, and from `main` when it does not.
`--source-ref="<SEMVER_TAG_OR_FULL_COMMIT_SHA>"` names a revision instead, which is how an
unstamped copy is pointed at the release that was installed.

`terraform` must be on `PATH` — the teardown engine, which this script never installs for you.
On an install made onto a cluster it did not create, put `helm` on `PATH` too: without it the
teardown only warns and leaves the releases to Terraform's Helm provider.
See the site's [uninstall page](../../../docs/site/src/content/docs/install/uninstall.md).

**No Terraform state anywhere** (none in GCS, none locally) means one of two things, and the
uninstaller exits **3** without touching anything either way: nothing is installed against
these coordinates, or the install was made by a pre-Terraform release. Only the second is
recoverable here — re-run with `--source-ref=<that release>` so that release's own teardown
runs instead. Check whether the cluster exists before reaching for a release tag.

Exit 3 is the one non-zero exit that is not a failure; exit 1 means the teardown could not
start or started and did not finish. On a cluster the install did not create, a `helm list` or
`helm uninstall` failure stops the teardown before Terraform removes anything: restore access to
the cluster and re-run, or run the `helm uninstall` command it prints. `./uninstall.sh --help` is
the contract.

Machine-readable JSON status reports are generated at `/tmp/kube-agents-uninstall-report.json`.