Operate
Use these commands to operate a healthy install after Configure & Validate.
CLI daily-drivers
Section titled “CLI daily-drivers”| Command | Purpose |
|---|---|
kindo status | Show install state and live release versions |
kindo doctor | Read-only diagnosis of a degraded install |
kindo config edit | Edit the cluster secrets config (credentials, service overrides) in $EDITOR |
kindo config apply | Regenerate the per-app Secrets from the secrets config and restart the affected services |
kindo config validate --preflight | Check the schema and infrastructure connectivity |
kindo config override list | set | unset | Manage per-service environment-variable overrides |
kindo config override edit | diff | apply | Edit overrides, preview changes, and apply them to the cluster |
kindo config helm-override list | set | unset | Manage Helm chart value overrides that persist across upgrades |
kindo config helm-override edit | diff | apply | Edit, preview, and apply persistent Helm chart value overrides |
kindo config backup | Export the install’s configuration and secrets to an encrypted bundle |
kindo restore <bundle> | Restore an install from a backup bundle onto an empty cluster |
kindo config log-level set | show | unset | Set the log level for the Kindo applications |
kindo db list | List the Postgres databases |
kindo db tunnel <database> | Open a port-forward tunnel to a database |
kindo db prompt <database> | Open an interactive psql session over a tunnel |
kindo db reset [database] | Drop all tables (destructive; resetting all databases requires two confirmations) |
kindo integrations list | Show available and enabled MCP integrations |
kindo integrations enable <name> | Enable an integration in the contract |
kindo integrations disable <name> | Disable an integration in the contract |
kindo integrations apply | Register and deploy enabled integrations |
kindo integrations bootstrap | Re-run integration registration against the cluster |
kindo integrations status | Show live integration status from the cluster |
kindo uninstall all | applications | peripheries | Tear down a group of releases |
Register and review models in the superadmin dashboard at https://superadmin.<domain>.
kindo status
Section titled “kindo status”Check install state:
kindo statusState is stored in the cluster, so any workstation with cluster access sees the same answer. The table has one row per install step. Anything other than completed on a fresh install means stop and investigate. After fixing the cause, resume from the failed step:
kindo install --resumeBelow the table, a Superadmin: line shows ✓ bootstrapped, ✗ not bootstrapped, or ? unknown with the reason. If it reports ✗ not bootstrapped, run:
kindo install --step superadmin-bootstrapUse kindo status --no-live to skip the live checks: the superadmin line and the live release/version table.
kindo config edit and kindo config apply
Section titled “kindo config edit and kindo config apply”Use these commands to change the cluster secrets config and restart affected services:
-
Run the pre-change check. It checks the schema and connectivity to Postgres, Redis, RabbitMQ, and object storage:
Terminal window kindo config validate --preflight -
Open the secrets config:
Terminal window kindo config editThis loads the
kindo-secrets-configSecret fromkindo-system, opens it as YAML in$EDITOR(orvi), and saves it back. It includes sensitive values. The command checks only that the result is valid YAML and a mapping; there is no schema validation, so a typo is saved as-is. Saving does not restart services. -
Regenerate each app’s Secret and rolling-restart the affected deployments:
Terminal window kindo config applyTo limit regeneration and restarts, pass a comma-separated list of app names with
--only:Terminal window kindo config apply --only api,nextkindo config applyalso accepts--contextto select the cluster.
Service overrides win over the values Kindo generates. With an external secrets store, values in the store take precedence over the ones kindo config apply generates.
Apply configuration changes
Section titled “Apply configuration changes”kindo config edit edits the secrets config, and kindo config apply reads that config only. Choose the apply command for the setting you changed:
| Change | Apply with |
|---|---|
| Secrets config or service overrides | kindo config apply or kindo config override apply <service> |
| Helm chart values | kindo config helm-override apply |
Contract ingress: block | The next kindo upgrade |
| Contract SMTP settings or sandbox settings | The next kindo upgrade |
Contract integrations: | kindo integrations apply |
| Reset every feature flag to the shipped defaults | kindo install --step post-install; reapply your flag changes afterward |
kindo config override
Section titled “kindo config override”Use service overrides to change environment variables, such as SUPERADMIN_API_KEY_TTL_DAYS or NEXT_PUBLIC_NANGO_CONNECT_URL. Overrides are stored under serviceOverrides.<service>.<KEY> in the secrets config and persist across upgrades. Service overrides win over the values Kindo generates.
# Set one or more environment variableskindo config override set api SUPERADMIN_API_KEY_TTL_DAYS=30
# Apply the staged change and restart the servicekindo config override apply api
# Preview changes with values redactedkindo config override diff api
# Edit all overrides or one service in $EDITORkindo config override editkindo config override edit api
# Remove an override and apply the changekindo config override unset api SUPERADMIN_API_KEY_TTL_DAYSkindo config override apply api
# Inspect staged overrideskindo config override listkindo config override list next --format=yamlIf the live Secret holds keys that no override set, apply stops for that service. Pass --force to apply anyway; those keys are kept.
With an external secrets store, kindo config override set, unset, edit, and apply refuse to run and change nothing. kindo config override list still runs and flags any leftover entries as inactive. kindo config apply leaves staged overrides out and warns about them.
Supply credentials through the external store. For non-secret chart settings, use kindo config helm-override, which works with an external store. To remove leftover serviceOverrides entries, open the raw secrets config with kindo config edit and delete them there.
kindo config helm-override
Section titled “kindo config helm-override”Use Helm overrides for chart settings such as replica counts, resources, autoscaling, log collection namespaces, telemetry retention, and envData.<KEY> values. Keep the Helm customizations reported by the upgrade plan here. Overrides are stored under helmValueOverrides in the cluster secrets config and re-applied on every install and upgrade. This command also works with an external secrets store. For which values to change, see Scaling and Tuning.
-
Stage the settings for a release:
Terminal window kindo config helm-override set api autoscaling.enabled=true autoscaling.minReplicas=2 resources.limits.memory=8Gi -
Preview and apply the changes:
Terminal window kindo config helm-override diff apikindo config helm-override apply api -
Review the stored overrides:
Terminal window kindo config helm-override list -
To remove a setting, unset it and apply again:
Terminal window kindo config helm-override unset api autoscaling.minReplicaskindo config helm-override apply api
Use the Helm release name, such as api, next, task-worker-ts, litellm, otel-collector, clickhouse, hatchet, or unleash. All subcommands accept --kube-context.
| Subcommand | Use |
|---|---|
list [release] [--format yaml|json|table] | Show stored overrides for one release or all releases |
set <release> PATH=VALUE... | Stage values using dot notation; use [N] for list elements, such as securityContext.capabilities.drop[0]=ALL |
unset <release> PATH... | Remove staged overrides at the specified paths |
diff [release] | Preview changes for one release or all releases |
edit [release] | Open YAML in $EDITOR, using nested YAML or dotted paths |
apply [release] | Push overrides to the live cluster; omit the release to apply every release with overrides |
set validates each path against the chart and rejects paths the chart never reads. set and unset only stage changes; run apply to deploy them.
kindo config log-level
Section titled “kindo config log-level”Set application logging to debug, info, warn, or error. The setting applies to api, task-worker-ts, next, credits, and litellm; LiteLLM receives the equivalent Python log level.
For a fresh install, set logLevel: in install-contract.yaml. On a running install, use:
kindo config log-level set debugkindo config log-level showkindo config log-level unsetset and unset accept --no-restart to update Secrets without restarting pods. All three commands accept --kube-context. unset --no-apply changes only the stored config.
Precedence is per-service override > global log level > the app’s default. To pin an individual service, set and apply its override:
kindo config override set api LOG_LEVEL=debugkindo config override apply apikindo config override set litellm LITELLM_LOG=DEBUGkindo config override apply litellmThese overrides remain in effect when you set or unset the global level. If set or unset fails on one service, it continues with the others and exits non-zero. Fix the reported issue and re-run the command.
The same logger controls access logs: api and credits write them at info, so a global warn or error also suppresses their access logs. Pin a service to info with a per-service override to keep its access logs.
A log level set on a running install persists across kindo upgrade.
With an external secrets store, kindo config log-level set and unset refuse to run. Set LOG_LEVEL, or LITELLM_LOG for LiteLLM, in the app’s store entry instead; a value in the store takes precedence.
kindo doctor
Section titled “kindo doctor”Diagnose a degraded install:
kindo doctorThe command is read-only by default. It checks the secrets config, Helm releases stuck in a pending state, the external secrets store and External Secrets Operator when used, per-app Secrets, workload references to missing Secrets, and whether a superadmin exists. A missing superadmin is a warning.
To attempt repairs, run:
kindo doctor --fixAfter confirmation, it rolls pending Helm releases back to their last deployed revision and recovers a missing or incomplete secrets config and missing per-app Secrets. If a release’s first install never completed, it leaves that release alone and prints the command to clear it. Other findings require manual resolution.
| Flag | Use |
|---|---|
--yes / -y | Skip confirmation prompts |
--force with --fix | Restore even if required keys are missing |
--context | Select the cluster context |
The exit code is 0 for no findings or warnings only, and 1 when a critical finding is present. With --fix, exit code 1 means a critical finding remains after recovery.
kindo upgrade refuses to run while kindo doctor reports a critical finding. Run kindo doctor --fix or resolve the finding manually before upgrading.
kindo db
Section titled “kindo db”Use these database names with tunnel, prompt, and reset:
| Database | Stores |
|---|---|
main | Kindo application data |
litellm | LiteLLM proxy and model catalog |
hatchet | Background task data |
nango | Integration connection data |
unleash | Feature flags |
openshell | Sandbox gateway state |
Open a database tunnel on localhost:15432, or choose a port with --port. The command prints a ready-to-use psql URL. Press Ctrl+C to close the tunnel:
kindo db tunnel mainFor an interactive psql session, run:
kindo db prompt litellmkindo db reset drops every table, sequence, and enum type in the named database’s public schema. Use it only when you intend to discard that data. Resetting one database requires one confirmation; --all requires two:
kindo db reset hatchetkindo db reset --allAfter a reset:
-
Recreate the schema:
Terminal window kindo install --step migrations -
Re-create your superadmin:
Terminal window kindo install --step superadmin-bootstrap -
Restore feature flags:
Terminal window kindo install --step post-installThis sets every flag to the shipped default. Reapply your flag changes afterward.
-
Register models again in the superadmin dashboard at
https://superadmin.<domain>.
kindo integrations
Section titled “kindo integrations”Integrations are declared under integrations: in install-contract.yaml. Use the CLI to enable, disable, and deploy them:
# List available and enabled integrationskindo integrations list
# Enable integrations and supply OAuth credentials when promptedkindo integrations enable github slack
# Register and deploy enabled integrationskindo integrations apply
# Re-run registration after a Nango resetkindo integrations bootstrap
# Check live integration statuskindo integrations status
# Disable an integration and apply the changekindo integrations disable slackkindo integrations applyDisabling an integration and running apply stops deploying it, but its Nango configuration and existing connections are retained. To fully remove an integration, also delete its auth instance in the Nango dashboard and re-run kindo integrations apply.
Back up and restore
Section titled “Back up and restore”Take a configuration backup and database snapshots before every upgrade.
-
From the install directory containing
install-contract.yamlandenvironment-bindings.yaml, run:Terminal window kindo config backupYou can specify the files with
--contractand--bindings. The encrypted bundle contains the secrets config,install-contract.yaml,environment-bindings.yaml, and the install version. Its default name iskindo-backup-<version>-<timestamp>.kindo-backup; use--output/-oto choose another path. -
Supply a passphrase of at least 8 characters at the prompt, or through
KINDO_BACKUP_PASSPHRASE. -
Take Postgres snapshots at the same time. Store the bundle and passphrase separately, away from the cluster.
The backup refuses to proceed if the cluster config is missing keys needed for a full restore. Recover them with kindo doctor --fix first. --allow-incomplete overrides the check, but that bundle cannot fully restore the install.
To restore onto an empty cluster:
-
Restore the Postgres databases from the snapshots taken with the bundle.
-
Extract
install-contract.yamlandenvironment-bindings.yaml:Terminal window kindo config extract <bundle>This writes
install-contract.yamlandenvironment-bindings.yaml. Edit the bindings if the restored databases have new endpoints. -
Restore the install:
Terminal window kindo restore <bundle>The command checks that the cluster is empty, the bundle is complete, and the contract’s
appVersionmatches the bundle’s version.--forcepermits overwriting existing cluster state;--versionoverrides the version. Review the plan and confirm to run the standard install against the restored configuration.--yesskips confirmation. -
Verify the restored install:
Terminal window kindo statuskindo doctor
The bundle excludes Qdrant embeddings, ClickHouse telemetry, HyperDX dashboards, and the object-storage bucket. Restore these from their own backups if needed.
kindo uninstall
Section titled “kindo uninstall”Choose the scope to remove. Each command asks for confirmation unless you pass --force:
# Remove applications and keep peripheries and databaseskindo uninstall applications
# Remove peripherieskindo uninstall peripheries
# Remove releases and preserve PVCs and the secrets configkindo uninstall all --keep-data
# Remove releases, secrets config, and all Kindo namespaceskindo uninstall all --delete-namespacesuninstall all removes releases in reverse install order. The kindo-secrets-config Secret and install state are preserved by default so you can reinstall against the same infrastructure with the same credentials. Pass --delete-namespaces to remove them too.
