Shell completion
lakeshore completion <shell> prints a sourceable completion script.
bash, zsh, and fish are accepted (case-insensitively); anything
else exits 2.
Install
Pick your shell and drop the eval into your rc file once:
Restart the shell (or source the rc file).
What the tree covers
The completion script is generated from a hand-maintained table, not introspected from Commander at runtime. Today that table covers these top-level groups:
Groups that exist on the CLI but are missing from the completion
tree: storage, code, queues, exec, run, dreamlake, nymph,
admin, tui, and the compose verbs up / down / ps / status /
logs. They work fine when typed in full — they just do not tab-expand.
The tree also contains two entries you should ignore: --version,
which is not a real flag on this program, and daemon ota, which is a
hidden back-compat alias for daemon update.
Subcommands that do complete, per group:
Long flag names complete per (group, subcommand) pair — only long flags, since short-flag completion is noise.
Dynamic values
Some argument and flag positions complete against real names:
The generated scripts get these by shelling out to a hidden subcommand:
__suggest is an implementation detail, not a user-facing command.
Valid kinds are providers, secrets, modes, tunnels, mounts,
daemons, invocations, ssh-aliases, aws-profiles,
gcloud-configs, kube-contexts, docker-contexts, and job-states.
Server-backed kinds do one GET against the control plane and cache
the result for 30 seconds at
$XDG_CACHE_HOME/lakeshore/completion-<kind>.txt, one name per line,
so repeated tabs don't hammer the server. The invocations list is
capped at 50 entries.
Local kinds (ssh-aliases, aws-profiles, gcloud-configs,
kube-contexts, docker-contexts) skip the cache and read your config
files directly. job-states is a hardcoded static list.
If the control plane is unreachable or auth isn't set up, the suggestion path returns nothing and tab simply does nothing — your shell stays responsive.
Forcing a cache refresh
The 30-second window is usually invisible. If you just registered a provider and want it to tab-complete right now:
…or wait 30 seconds.
Extending it
The subcommand tree, the per-command flag lists, and the
argument→suggestion mapping all live in src/cli/completion/index.ts in
the lakeshore repo. The shell scripts are generated from those
tables, so a new subcommand or flag has to be added there before it
tab-completes.
Read next
lakeshoreCLI — the full command surface, including the groups the completion tree doesn't yet know about.- CLI examples — the runnable cookbook.