Reference
llx in other agents
llx extends the agent you already use (Claude Code, Codex, a script of yours): it does not replace it. Your agent stays in charge, thinks, edits and checks; it calls llx from its own shell for what it lacks or what costs too much. Each block is a command, so the agent composes them as its task needs, and its own permission prompt shows every call.
| Block | What your agent gets | Command |
|---|---|---|
| window | Real browser pages and terminals as tabs of one window the person watches; a goal carried out by llx's fast decision model; the person's comments on a page |
llx window |
| helpers | A whole task handed to an agent on any provider and model, in the background and in parallel, with an answer in your JSON shape | llx exec |
| decide | A quick, cheap choice about some text: yes or no, or one of your options | llx decide |
| sessions | The same helper again, with its conversation | llx exec resume ID |
In Claude Code
The plugin llx teaches Claude these blocks (its skill, llx:guide), brings the comments you send from the window as a turn of their own, and closes the session's tabs when it ends. Install llx, then, at Claude Code's prompt:
/plugin install llx --marketplace rsaryev/llxAllow llx window always when Claude Code first asks for it. /llx shows the binary, the daemon and this project's tabs; /llx end closes them. See plugins/claude-code.
window
llx window is one call of the window tool per process. Its argument is the tool's arguments as one JSON object; llx window alone prints the tool's whole description and its arguments as a JSON Schema.
llx window '{"action": "open", "kind": "browser", "url": "https://example.com"}'
llx window '{"action": "interact", "tab": "w1", "goal": "accept only the necessary cookies"}'
llx window '{"action": "screenshot", "tab": "w1"}' # the picture is saved; its path is printed
llx window '{"action": "open", "kind": "terminal", "command": "python3 -q", "wait_for": ">>>"}'
llx window '{"action": "interact", "tab": "t1", "input": "2 ** 20\n", "wait_for": ">>>"}'
llx window '{"action": "list"}'
llx window --end # the owner's tabs close- The tabs stay between calls for their owner: the project (the nearest directory with a
.git, else the current one), or--as NAME. They close withllx window --end, when the person closes them, or when the daemon stops (llx serve stop). - It runs in the daemon (started if none runs), so its tabs share the one window with your llx sessions, under the owner's project; its terminals run where it was called, with the caller's environment.
- The report is printed on stdout. A screenshot is written to a file in a directory only you can read, and its path is printed: read that file to see it.
- Exit 0 when done, 1 when the call failed (the output says why), 3 when llx could not be reached or the argument is not a JSON object.
- Your agent approves each call (its permission prompt for the command): llx asks nothing more for them. Killing the process stops the call.
- A
goalneeds an OpenRouter key (/loginin llx, orOPENROUTER_API_KEY); everything else works without one. Your agent's model does the rest of the thinking: no chat model is used. - Comments the person sends from the owner's tabs (Comment, then Send, in the window's strip) come back with its next call, after that call's report, under
### What the person sent from the window. A quietlistasks for them without doing anything else. - While an owner has a tab open, the daemon is in use: a newer llx does not replace it.
llx window --end, then the next call starts the new build. - Unix only. The headless Linux build has no browser, so its
windowhas terminal tabs only.
Helpers on any model
llx exec runs one task to its end and prints the answer alone on stdout. It thinks with any provider and model of the catalog, so your agent can hand bulk work to a cheaper one and keep its own tokens for what needs it:
llx exec --provider openrouter -m deepseek/deepseek-chat "List the public functions in src/ that have no test"
llx exec --schema @answer.json "Summarize the failing CI log in ci.log"
llx exec --allow 'bash(cargo test *)' "Run the tests and say which fail and why"
llx exec --allow browser "On example.com, find the pricing page and give its plans"- With no rule it only reads: commands, file changes and browser actions are refused.
--allowand--denysay what it may do (modes and rules). --jsonprints its events; the last,run.completed, has the answer, the session id, the cost and the time.exec resume ID "…"goes on with the same helper.- Several at once: start each in the background and read their answers when they end.
- Check what a helper says before you act on it, as you would a colleague's.
decide
llx decide asks llx's decision model one question about stdin and prints the option it picked, in about a second:
git diff | llx decide "Does this change touch the public API?" # yes or no
llx decide --choices patch,minor,major "Which version bump?" < CHANGES.mdThe rules behind it are W9 and K7 in ARCHITECTURE.md.