tmo-cli is the Tensormesh administrator CLI: a kubectl-familiar tool for
platform/SRE engineers to observe and operate LMCacheEngine resources (the
KV-cache controllers) and their per-GPU-node server pods.
It unifies two surfaces — the Kubernetes CRD (lmcacheengines.lmcache.lmcache.ai)
for engine lifecycle and status, and each server pod’s HTTP control API (reached
through the Kubernetes API-server proxy) for cache state, quotas, and diagnostics.
tmo-cli is the admin/SRE CLI talking directly to your Kubernetes cluster
(the data plane).Install
tmo-cli is distributed privately as part of the gated Tensormesh product — not through
public Homebrew or krew. It installs from the Tensormesh container registry (GHCR)
using the same access token as the operator chart and images: a token scoped to
artifact pull only, which grants no access to Tensormesh source code. If you don’t
have one, request it from the Tensormesh team — it’s the same token used in the
operator install guide.
One-line install (recommended)
/usr/local/bin (falling back
to ~/.local/bin if that isn’t writable — no sudo). To pin a version or change the
target, pass flags after -s --:
Manual install (air-gapped / CI)
Prefer to pull the artifact yourself? Authenticate to GHCR with your token and useoras:
Verify
How it connects
tmo-cli uses your existing kubeconfig — if kubectl works, tmo-cli works.
Resolution precedence: --kubeconfig → $KUBECONFIG → the tmo-cli config
default → ~/.kube/config.
node, cache, diag, quota) reach engine pods through the
Kubernetes API-server proxy by default — no extra network path, and RBAC on
pods/proxy gates them. Pass --direct to reach pod host IPs directly when
running inside the cluster.
Global flags
| Flag | Meaning |
|---|---|
-n, --namespace | namespace (default default) |
-A, --all-namespaces | across all namespaces (list / HTTP commands) |
-e, --engine | restrict HTTP commands to one engine |
-o, --output table|json|yaml | output format; JSON is stable and versioned (tmoOutputVersion: v1) |
--context, --kubeconfig | kube target overrides |
--no-color | disable ANSI color (honors NO_COLOR; auto-off when not a TTY) |
--direct, --workers, --pod-timeout | HTTP fan-out controls |
Exit codes
Stable and scriptable:| Code | Meaning |
|---|---|
0 | success |
1 | generic / unexpected error |
2 | usage error (e.g. a removed engine write-verb → use Helm) |
3 | not found (engine, server, salt) |
4 | validation / guardrail rejection |
5 | timed out (e.g. engine wait) |
6 | confirmation declined / --yes required |
Common tasks
See the fleet
Deploying or changing engines (owned by Helm)
Engine fleet membership and spec are owned by the Helm release —
tmo-cli
does not create, apply, edit, or delete engines. To add, change, or remove an
engine, edit the chart values and helm upgrade.Inspect servers and cache state
Operate (destructive — gated)
Diagnose and file a ticket
diag bundle collects the CR, recent events, and each server’s /conf,
/status, /threads, and /periodic-threads-health into a gzip tarball.
Secrets are redacted by default; /env is included only with --include-env
(and is still redacted). Attach the tarball to a support ticket.
Output and scripting
Tables are for humans;-o json (and -o yaml) is the automation contract,
wrapped in an envelope with tmoOutputVersion: v1:
--no-color or NO_COLOR=1.
Troubleshooting
| Symptom | Cause / fix |
|---|---|
... forbidden ... ask for the 'tensormesh-admin' role | your RBAC lacks a needed verb; run tmo-cli diag preflight to see which |
node list / cache status empty | the engine has no ready endpoints — is a GPU node up and the engine Running? |
unreachable in a health table | that server’s HTTP API didn’t answer; check tmo-cli engine describe + pod status |
engine wait exits 5 | the condition didn’t become true within --timeout |
| HTTP commands hang on a big fleet | tune --workers / --pod-timeout; partial results still render |
tmo-cli does not phone home — there is no telemetry in the default build.
