tmo-cli. It covers two surfaces:
- the Kubernetes CRD (
lmcacheengines.lmcache.lmcache.ai), for engine status, conditions, and endpoints - each server pod’s HTTP control API, reached through the Kubernetes API-server proxy, for cache state, quotas, and diagnostics
This is the cluster-side administrator CLI. It is not the Tensormesh CLI
(
tm), which manages accounts, billing, and serverless inference against the
hosted API.Install
The CLI ships with the gated Tensormesh Platform distribution rather than through public Homebrew or krew. It installs from the Tensormesh container registry (GHCR) using the same access token as the Platform chart and images. That token is scoped to artifact pull and grants no access to Tensormesh source code; if you don’t have one, request it from the Tensormesh team. It is the same token used in the install guide. The install script needscurl, tar, and either shasum or sha256sum.
One-line install
/usr/local/bin, falling back to ~/.local/bin when that isn’t writable so no
sudo is required. To pin a version or change the target, pass flags after -s --:
--version takes a release tag including the leading v, and defaults to latest.
Each flag also has an environment-variable form: TMO_TOKEN, TMO_VERSION,
TMO_INSTALL_DIR.
Manual install (air-gapped or CI)
To pull the artifact yourself, authenticate to GHCR and useoras:
tmo-cli_<version>_<os>_<arch>.tar.gz, where <version> drops
the leading v of the release tag. Builds are published for linux and darwin, on
amd64 and arm64.
Verify
Shell completion
tmo-cli completion <shell> --help and follow the
instructions for your shell and platform.
How it connects
tmo-cli uses your existing kubeconfig. If kubectl works, tmo-cli works.
Resolution order is --kubeconfig, then $KUBECONFIG, then the tmo-cli config
default, then ~/.kube/config.
node, cache, quota, diag) go through the
Kubernetes API-server proxy by default, so they need no network path beyond the one
kubectl already uses and RBAC on pods/proxy gates them. Pass --direct to reach
pod host IPs instead, which is useful when running inside the cluster.
Flags
Four flags are accepted by every command:
The rest are command-scoped, and the scoping matters when you script:
Exit codes
Stable and scriptable. Changing one is a breaking change.diag health overloads 1: it exits 0 when every pod in scope is reachable and
healthy, and 1 when any pod is unhealthy or unreachable. That makes it usable
directly as a health gate in CI.
Common tasks
See the fleet
engine describe looks up recent events by default; pass --no-events to skip that
call on a busy cluster.
Deploy or change engines (owned by Helm)
Fleet membership and engine spec belong to the Helm release.
tmo-cli cannot
create, apply, edit, or delete engines; those verbs exit 2 and point you at
Helm. To add, change, or remove an engine, edit the chart values and run
helm upgrade.--for accepts Available, AllInstancesReady, or ConfigValid, and defaults to
AllInstancesReady. --timeout defaults to 5m. A timeout exits 5.
Inspect servers and cache state
engine logs shows the last 100 lines per pod; change that with --tail (-1 for
the whole log).
Operate (destructive, gated)
Quotas are enforced only on engines running the
IsolatedLRU eviction policy.
Against any other policy the CLI accepts the command and warns, but the budget
has no effect. Quota commands query one server (the first ready endpoint, or
--node), since every server of an engine shares the same quota config.Diagnose and file a ticket
diag loglevel set takes a logger and one of DEBUG, INFO, WARNING, ERROR,
and applies to one server with --node or the whole engine with --all.
diag bundle collects the CR, recent events, and each server’s /conf, /status,
/threads, and /periodic-threads-health into a gzip tarball, writing to
tmo-bundle-<engine>-<timestamp>.tgz unless you pass --output-file. Secret-looking
values are redacted, and /env is excluded entirely unless you pass --include-env
(it is still redacted). Attach the tarball to a support ticket.
Output and scripting
Table output is for reading.-o json and -o yaml are the automation contract,
wrapped in an envelope carrying tmoOutputVersion: v1:
.item, lists under .items. Color is disabled
automatically in pipes and non-terminals, and never appears in JSON or YAML.
Troubleshooting
tmo-cli does not phone home. There is no active telemetry in the shipped build.
