Installing the library adds the gwenlake command, its shorter alias gwl, and gwenlake-train.

gwenlake

The same resources as the Python client, in noun-verb form:
Listings print as a table; --json prints what the API answered, ready for jq. gwenlake --help lists the resources, gwenlake <resource> --help the commands of one.

Names

A dataset is named <project>.<dataset>, with the slugs the platform shows (fleetsight.aisdk_positions), or by its id (res.dataset.…). A project is named by its slug or its id. Other resources (builds, schedules, transforms, repositories, queries) are named by id; their list commands show the ids.

Resources and commands

Destructive commands (delete, empty) ask for confirmation; pass --yes in a script.

Builds

builds run builds a dataset and every producer upstream of it, whether its data changed or not; --target-only builds the dataset alone. With --wait, each step is printed on stderr as it settles, with its duration, and the table of the batch on stdout once it is over:
A failed step prints its error and the end of its log, and the waiting stops there: the platform cancels the steps after it. --follow (-f) prints each build’s log as it runs, and builds logs --follow prints one build’s log until it ends. builds run, retry and propagate with --wait or --follow, builds wait and builds logs --follow exit with status 1 when a build failed or was cancelled, so a script can stop there.
  • --dry-run asks the platform for the plan a run would follow (the steps in order, what each one waits for, the other datasets a step rewrites) and starts nothing. It is refused where the build would be.
  • Several datasets give one batch each; a dataset the platform refuses does not stop the others.
  • retry builds the target of a finished build again, on the same data branch: retrying the last build of a failed batch runs the batch again.
  • propagate builds again every dataset downstream of one, not the dataset itself; see Workflows.
  • cancel --batch cancels every build of the batch still pending or running, the last steps first.
  • list shows each target as <project>.<dataset> and each build’s duration. --project keeps the builds of a project’s datasets and models, --trigger those of one kind (manual, schedule, event), --since those started after a date, a time or an age (2026-11-01, 2026-11-01T08:00, 90m, 6h, 3d).

Credentials

The command resolves its API key in the same order as the client:
  1. --api-key;
  2. --profile NAME, a section of the credentials file (or GWENLAKE_PROFILE);
  3. GWENLAKE_API_KEY in the environment — a .env file in the current directory is read first, which is how a project keeps its key next to its code;
  4. the default profile of the credentials file.
The credentials file is ~/.gwenlake/credentials (%APPDATA%\.gwenlake\credentials on Windows), an INI file with one section per profile. gwenlake config manages it without opening an editor:
~/.gwenlake/credentials
A profile holds a static token (an API key) or an OAuth2 client_id and client_secret (see Authentication), and may carry the endpoint it is for as base_url (or host for a bare host). hostname is the OAuth server, not the API. The file is written readable by you only.

Endpoints

gwenlake config endpoints prints this table with the endpoint in use. The endpoint is chosen, in order of precedence, by:
  1. --base-url on the command: a short name (--base-url atlas), a host (--base-url atlas.acme.example) or a URL;
  2. the GWENLAKE_BASE_URL environment variable;
  3. the base_url (or host) key of the selected profile;
  4. api.
A profile that carries both its token and its base_url makes a tenant one option away: gwenlake --profile acme datasets list. A deployment serves the API under a version prefix: an API host under /v1 (https://api.gwenlake.com/v1), an Atlas application host under /api/v1 (https://atlas.gwenlake.com/api/v1, or a tenant’s own host). The command completes what is missing: a bare host gets /v1, a host with /api gets /api/v1, any other path is used as given (http://localhost:8000/v1). Since a tenant’s host may serve the API either way, gwenlake config set-profile --base-url atlas.acme.example probes both and stores the one that answers; --no-probe stores the URL as completed. A URL that answers the application’s HTML page instead of JSON is reported as such.

gwenlake-train

Finds the function decorated with @train in a project and runs it. This is what the GPU pool runs, and what you run locally to test a training.
--steps and --eval-every override the defaults set on the decorator without touching the code. See Models.