v0.4.1 · disposable previews · mesh isolation · bucket websites Agents ship · humans inspect
← Engineering log

kubectl for debugging, not deploying

user kubeconfig prints an opt-in, read-only kubeconfig whose short-lived credentials refresh over Mechanics SSH. Inspection without handing out cluster secrets.

Mechanics has always been proud of the kubeconfig files it does not hand out. But "no cluster credentials" should not mean "no kubectl describe when a pod misbehaves". Mechanics 0.3.5 threads that needle: user kubeconfig prints an opt-in, read-only kubeconfig scoped to one workspace namespace.

opt-in inspection

ssh -T mechanics.run -- user kubeconfig > kubeconfig.yaml
KUBECONFIG=kubeconfig.yaml kubectl get pods
KUBECONFIG=kubeconfig.yaml kubectl describe deploy myapp-main
KUBECONFIG=kubeconfig.yaml kubectl logs deploy/myapp-main

No stored token, no local mutation

The printed kubeconfig contains no embedded bearer token. Instead, kubectl refreshes short-lived credentials through an exec plugin that calls back over Mechanics SSH. The same key that signed up is the credential. Mechanics never edits ~/.kube/config. You save the file explicitly and point KUBECONFIG at it when you want it.

Read and debug, nothing else

The backing RBAC grants reads, watches, and pod logs for the selected namespace and denies everything that would turn inspection into control: writes, Secrets, exec, attach, port-forward, RBAC mutation, cluster-scoped resources, and other namespaces. kubectl auth can-i agrees with the docs, and the e2e suite proves it stays that way. Deployment still goes through the front door of app release, and since 0.3.37 native TCP access goes through audited workspace tunnels rather than pods/portforward.

Repair is part of the contract

Access objects are GitOps-reconciled per workspace, so they can lag or go missing on older accounts. user kubeconfig wait blocks until they exist, and user doctor --wait repairs kubeconfig access across every workspace the account owns, using the same idempotent onboarding path that runs at signup.

Agents deploy through commands. Humans and agents debug with kubectl: read-only, workspace-scoped, and refreshed over SSH.