# DreamLake — Full documentation > Lakeshore runs your Python functions on remote GPUs — decorate a function, call it, and Lakeshore provisions the host, ships your code, executes it, and streams the result back. Generated from https://lakeshore.dreamlake.ai. 79 pages. --- Source: https://lakeshore.dreamlake.ai/admin/happy-paths # Happy Paths — Operator Five paths across the operator surface: bringing the stack up locally, putting a daemon on a remote host, declarative cluster management, cloud provisioning, and watching it all from the dashboard. These are the paths that exercise *everything together*. If they are green, the system can be trusted with real workloads. ## The list | # | Path | Verifies | | - | ---- | -------- | | 03 | [Hello, local stack](/admin/happy-paths/03-hello-local-stack.md) | Control plane + Mongo + nymph on `localhost` via mprocs | | 08 | [Bootstrap a daemon on a remote host](/admin/happy-paths/08-bootstrap-daemon-remote.md) | `lakeshore daemon install` onto a bare SSH host | | 12 | [Compose a cluster declaratively](/admin/happy-paths/12-compose-cluster.md) | `lakeshore up` / `down` against a `lakeshore.yaml` | | 13 | [Cloud provider launch](/admin/happy-paths/13-cloud-provider-launch.md) | EC2 / GCE / Kube provisioning through the control plane | | 14 | [Dashboard observability](/admin/happy-paths/14-dashboard-observability.md) | Reactive view of an in-flight invocation | ## Cross-surface prerequisites | For path | You also need green | | -------- | ------------------- | | 08 | [07 · SSH provider smoke](/cli/happy-paths/07-ssh-provider-smoke.md) | | 12 | A provider registered, plus its credentials as secrets | | 13 | Cloud credentials stored as a Lakeshore secret | | 14 | A submitted invocation — pick any from [Python SDK](/python-sdk/happy-paths.md) | ## The cascade `03` is the foundation — everything else assumes you can stand the stack up. `08` proves daemon-on-remote bootstrap, which the cloud paths later automate. `12` is the declarative story. `13` is the most complex and the only one that spends real money, so verify it last, not first. `14` ties it together by showing the system from the user's reactive view. → Switch surface: [Python SDK](/python-sdk/happy-paths.md) · [CLI](/cli/happy-paths.md) --- Source: https://lakeshore.dreamlake.ai/cli/examples # CLI examples Shell-by-shell walkthroughs of common operator tasks, grouped by what you're trying to do. Start with the auth page — the rest assume the shell setup it describes. | Page | Covers | | ---- | ------ | | [Auth + setup](/cli/examples/auth.md) | One-time login, shell environment, `$D` seeding | | [Providers + discover](/cli/examples/providers-and-discover.md) | Register cloud, SSH, SLURM, Kube targets; the local discovery helpers | | [Queues + jobs](/cli/examples/queues-and-jobs.md) | Named work queues and inspecting invocations | | [Daemons + exec/run](/cli/examples/daemons-and-exec.md) | Worker daemons, compose, and one-off command execution | | [Storage, code, mounts](/cli/examples/storage-code-mounts.md) | S3 storage entries, code archives, mount declarations | | [Secrets, modes, tunnels, config, nymph](/cli/examples/secrets-modes-tunnels-config-nymph.md) | The long tail of management commands | If you want a guided narrative instead, see the [CLI happy paths](/cli/happy-paths.md). ## Conventions used across these pages - Names for providers, secrets, modes, tunnels, mounts, storage entries, and queues all validate against `^[a-z0-9][a-z0-9-]*$`. - Every action calls `process.exit(rc)`. `2` is the conventional "bad usage / not configured" code and `1` is the failure code, so these blocks are safe under `set -e`. - `--json` is available on most read commands and is the intended scripting surface; the table output is for humans and not stable. ## What's not on these pages - **Provider-driven dispatch from Python** — the `@dls.udf` decorator, modes, capacity matching — lives on [`/python-sdk`](/python-sdk.md). The CLI's role there is to **register** the targets; the Python API runs the jobs. - **Lower-level daemon internals** — capability publishing, hibernate semantics, OTA self-replace — are documented at [`/nymph/daemons`](/nymph/daemons.md) and [`/nymph/protocol`](/nymph/protocol.md). - **The `dreamlake` group** — a separate data plane with its own servers, its own credential store (`~/.dreamlake/`), and its own connection flags. It is not covered by this cookbook. ## Read next - [`/cli`](/cli.md) — the overview and the full command surface. - [`/cli/tui`](/cli/tui.md) — the interactive dashboard over the same data. - [`/python-sdk`](/python-sdk.md) — what you can launch from Python. - [`/nymph/daemon-lifecycle`](/nymph/daemon-lifecycle.md) — install → list → kill → cleanup. - [`docs.dreamlake.ai/lakeshore/providers`](https://docs.dreamlake.ai/lakeshore/providers) — the EC2 / GCE / SLURM / Kube / SSH launchers. - [`/cli/completion`](/cli/completion.md) — the full completion installation guide. --- Source: https://lakeshore.dreamlake.ai/cli/happy-paths # Happy Paths — CLI Five paths covering the CLI surface end-to-end: the auth wire, command execution, provider invocation, storage round-trip, and the token lifecycle. Walk top-down. The CLI is the user-facing entry point for almost every Lakeshore action — these paths are the ones that fail loudest when something breaks. ## The list | # | Path | Verifies | | - | ---- | -------- | | 02 | [Hello, hosted CP](/cli/happy-paths/02-hello-hosted-cp.md) | `auth login` + `auth status` against a real control plane | | 04 | [Smoke-exec cascade](/cli/happy-paths/04-smoke-exec-cascade.md) | The whole `daemon exec` surface — stdout, stderr, exit codes, env, stdin, timeout, long-poll | | 07 | [SSH provider smoke](/cli/happy-paths/07-ssh-provider-smoke.md) | `ssh upload` / `providers add` + `providers test` against a real host | | 09 | [Storage round-trip](/cli/happy-paths/09-storage-round-trip.md) | `storage add` + `presign` + `credentials` against a real bucket | | 15 | [Token lifecycle](/cli/happy-paths/15-token-lifecycle.md) | `admin tokens create` + `auth login` against a token-enforced control plane | ## Cross-surface prereqs | For path | You also need green | | -------- | ------------------- | | 04 | [03 · Hello, local stack](/admin/happy-paths/03-hello-local-stack.md) (Operator) | | 07 | An SSH-reachable host | | 09 | S3/R2 credentials registered as a Lakeshore secret | | 15 | A control plane with `LAKESHORE_ADMIN_TOKEN` set (not open mode) | ## The cascade `02` is the wire test against the hosted control plane — it proves auth works. `04` exercises the entire `daemon exec` contract in one shell script and bails on the first failure, which makes it cheap and comprehensive. `07` validates the provider abstraction without involving a daemon. `09` covers the storage record plus the presign and STS credential paths. `15` is the auth-mode story: admin token → client token → SDK. → Switch surface: [Python SDK](/python-sdk/happy-paths.md) · [Operator](/admin/happy-paths.md) --- Source: https://lakeshore.dreamlake.ai/cli/installation # Install the CLI ```bash npm i -g @dreamlake/lakeshore ``` > **Note:** On macOS: `brew install node && npm i -g @dreamlake/lakeshore` The package is ESM. The `lakeshore` bin prefers the compiled `dist/cli/index.js`; in a source checkout without a build it falls back to running `src/cli/index.ts` directly (under Bun) or via the `tsx` ESM loader (under Node). Verify the install with `lakeshore --help`. There is **no** `lakeshore --version` — the program never registers one, so Commander rejects it as an unknown option. Use `npm ls -g @dreamlake/lakeshore` to see which version you have. ## Authenticate Your admin will give you a **token** and a **namespace** (e.g. `fortyfive`). ```bash lakeshore auth login \ --server https://api.lakeshore.dreamlake.ai \ --namespace \ --token ``` `login` validates the token by calling `GET /v1/namespaces//whoami` with a Bearer header before it saves anything. On success it writes YAML to `$XDG_CONFIG_HOME/lakeshore/auth.yml` (default `~/.config/lakeshore/auth.yml`) with mode `600`: ```yaml file="~/.config/lakeshore/auth.yml" server: https://api.lakeshore.dreamlake.ai namespace: your-namespace token: dlk_xxxxxxxx… ``` > **Warning:** `--namespace` must match the namespace the token was minted for. > Without it the CLI defaults to `default`, and the control plane > rejects the call because the token does not grant access to that > namespace. Omit `--token` to be prompted interactively. If `LAKESHORE_ADMIN_TOKEN` is exported, `login` instead mints a fresh per-namespace token on the server for you and saves that; `--name