ltb (also installed as letthembuild) is the app from a terminal. It runs the installed app with its window left out, so the seats, keys, settings, team rules and plan are the ones the app has. A seat backed by a CLI subscription costs nothing extra. What it starts appears in the app like any other discussion.
Where to find it. Mac: Settings → This Mac → Workspace → Outside this window → Install the command…, or the Homebrew cask. Linux: the deb and rpm packages put it on your path. Windows: the app installs ltb.cmd. ltb --help lists every command by section; ltb help <command> or ltb <command> --help explains one.
Doing work
| Command | What it does |
|---|---|
ltb run "…" | The room does it, in this checkout |
ltb review "…" | The same room, asked to review. With no task, or --staged, --unstaged or --branch NAME, it reviews that change and edits nothing |
ltb ask "…" | One question, no folder, nothing changed; the answer prints |
ltb chat | A conversation with no folder: type follow-ups. Ctrl-C stops a turn; /quit or Ctrl-D ends it |
ltb continue GPU-12 "…" | A follow-up in a discussion the app has. With no key, or --latest, the newest discussion in this folder |
ltb logs GPU-12 --follow | Its turns, and each new one as the app saves it, until the run is over |
ltb stop GPU-12 | Stops its run, as Stop in the app does |
ltb "…" | The same as ltb run, for two or more words. One unknown word is an error, never a run |
ltb cloud start "…" | Hands the work in this checkout to the cloud worker; see Cloud Runs |
ltb cloud status [RUN], stop RUN, approve [RUN] HASH, decline [RUN] HASH | Watch, stop and answer your cloud runs |
Options
- --permission: plan, manual, edits, smart, auto or bypass. Default auto; plan for
ask,chat,guest,prand a review of a change. - --rounds N: rounds of review; 0 means until they agree.
- --cwd PATH: work in exactly this folder. --new [NAME]: a new project folder, named NAME or after the task; put it after the task.
- --json: one JSON event per line, and every command answers in JSON. --quiet: only the verdict and the errors.
For one run only, never saved:
- --model ID: the model the leading seat uses (
ltb modelslists them). --effort L: how hard every seat thinks: minimal, low, medium or high. - --dollars N: stop the run once it has spent N dollars through keys or credit.
- --attach PATH: a file or picture with the message; repeat it for more.
- --add-dir PATH: another folder the run may read and change, as it does the workspace; repeat it for more.
- --append-prompt TEXT: words added to the lead's instructions.
- --schema FILE: the answer ends with JSON that fits this JSON Schema (a file, or the JSON itself). The JSON is printed on stdout, and the exit code is 1 when it does not fit.
- --allow RULE and --deny RULE: tool rules for this run, as in Settings → Policies:
--allow "git status*",--deny "edit **/*.env". A rule with no kind is about commands. Your team's rules still apply. - --verbose (or --debug): every event, and the whole output of each command. --debug-file FILE: every event written to FILE, one JSON line each.
In ltb chat, /model ID and /effort LEVEL change the rest of the chat the same way; /seats shows the room, /cost what the chat has spent, /new starts a new chat, and /help lists the rest.
Where a run works
Without --cwd, run and review look at the folder you are in:
- A git checkout, or an empty folder: there.
- Your home folder, / or a system folder: never there. A new project folder is made in the app's workspaces folder (~/Documents/LetThemBuild unless you changed it), named the way the app names a new workspace, with
git init. The first line says where; with--jsonit is aworkdirevent. - Another folder that is not a checkout: a new project folder when the task is to build something new. Otherwise it asks in a terminal (new folder, here, or stop), and in a script stops with exit 2 and names
--cwd .and--new NAME.
The new folder is not filed into a project by the command; file the discussion in the app if you want it there.
Approvals and exit codes
In a terminal, what the permission mode would ask about is asked there: y allows, anything else refuses. In a script, or with --json, nobody can answer, so it is refused and said in the output.
Every command exits 0 when it is done (for a run: the reviewers agreed), 1 when the answer is no (they did not agree, nothing was there to stop, signed out) and 2 when it could not be done (a mistyped command, not found, not signed in where the server is needed, the run failed).
An older copy. A command installed from Settings is a copy of the app's. If ltb run says unknown command, the copy predates it: Settings → This Mac → Workspace → Outside this window → Reinstall.