TheDocumentation Index
Fetch the complete documentation index at: https://docs.definite.app/llms.txt
Use this file to discover all available pages before exploring further.
definite CLI is a single static binary with two layers:
- Admin / cluster ops —
init,upgrade,status,doctor,logs,bootstrap,export-helm. Talks tokubectlandhelmagainst your cluster. These are covered in Agent setup and the per-cloud guides (AWS, GCP, Azure). - API client —
definite run …. Talks to the deployed API over HTTPS using a bearer token. This page is mostly about that layer: querying the lakehouse, loading files, kicking off Fi, managing data apps, and so on.
Installation
The CLI ships as a single static binary. The fastest install is the public installer script — it detects your OS + arch, downloads the matching release, verifies its SHA256, and drops the binary into~/.local/bin/definite.
Run via Docker (Windows, CI, air-gapped)
If you’d rather not install natively — Windows hosts, ephemeral CI runners, or an environment where you don’t want a~/.local/bin mutation — the same binary is available as a public container image. The tag matches your deployment’s API version.
~/.definite so definite login (below) persists across runs:
Pin to your deployment’s exact tag
To track whatever version the cluster is currently on:Authenticate
The API client uses bearer-token auth. Sessions are opaque ~43-character tokens with a ~14-day TTL. The recommended flow isdefinite login, which prompts for credentials and writes the session token to ~/.definite/credentials.json (mode 0600). Every subsequent definite run … call picks it up automatically — no flags or env vars needed.
https://; pass an explicit http://… for a TLS-disabled deployment. Other useful forms:
Without definite login (env-var fallback)
When you can’t (or don’t want to) write a credentials file — ephemeral containers, sandboxes, one-off scripts — definite run also honors DEFINITE_API_URL + DEFINITE_TOKEN. Mint a token by calling /api/v1/auth/login directly:
Export it
--api-url / --token flags on a definite run invocation override both env vars and the stored credentials file.Commands
Everydefinite run subcommand respects DEFINITE_API_URL and DEFINITE_TOKEN. For an exhaustive list of flags, run:
run query
Execute SQL against the lakehouse.
--format defaults to table on a TTY and json when stdout is piped. csv is also valid.
run load
Upload a local file. Two modes:
--table is set, --mode is required: either replace (drop and recreate) or append (insert into the existing table). Format auto-detects from the extension (.csv, .parquet, .json, .ndjson, .jsonl) and is overridable with --file-format.
run drive get
Fetch a file back from Drive. Accepts either a full gs://…/drive/<id>/<name> URL or just the bare file id.
run app
Manage data apps.
run fi
Kick off the Fi agent in a new or existing thread.
run automation
Trigger a manual run of an automation pipeline by id.
run integration
List, inspect, and test saved integrations. Secrets are never echoed back — inspect shows config shape only.
run agent
Manage autonomous agents (long-running, scheduled, or event-driven Fi runners).
run script
Manage reusable Python automation scripts.
run maintenance
Run DuckLake table maintenance (compaction, vacuum, expire-snapshots).
run event-source
Manage browser-safe event ingest sources.
run permission
Manage app roles, sharing, and data-access roles.
Output formats and scripting
Most subcommands take--format table|json|csv. The default depends on context:
- On a TTY (interactive shell):
table. - Piped or redirected stdout (CI, scripts, agent sandboxes):
json.
jq without specifying --format json every time:
Troubleshooting
`invalid or expired token` from /auth/me
`invalid or expired token` from /auth/me
Tokens expire after ~14 days. Run
definite login <host> again — the new token overwrites the stored one. If you’re on the env-var fallback, re-mint and re-export DEFINITE_TOKEN.`cargo` warnings about ~/.cargo/registry/index/.../.cache permissions
`cargo` warnings about ~/.cargo/registry/index/.../.cache permissions
Harmless. Only relevant if you ever build the CLI from source on a machine with a partially-shared
~/.cargo. The shipped binary doesn’t touch ~/.cargo at runtime.Connection refused / DNS failure
Connection refused / DNS failure
Sanity-check
$DEFINITE_API_URL resolves and is reachable from where you’re running the CLI. If your deployment is on private DNS, run the CLI from inside the VPC (a bastion, or a one-off kubectl run pod).Next
- Agent setup — let Claude Code, Cursor, or Windsurf drive a fresh install using the admin side of the CLI.
- AWS install guide — provision with Terraform, install with
definite init.

