Luxe

The agent loop

Turn limits, tool selection, and what runs when.

Agent loop

{
  "agent": {
    "max_tool_iterations": 200,
    "remember_model": true,
    "communication": "plain"
  }
}

communication picks the register the agent writes in. See How Luxe talks to you — it takes effect on the next turn, no relaunch.

remember_model (on by default) makes the model and thinking level you pick in a session the next launch’s starting point, so a choice you already made is not one you re-make every morning. Precedence, highest first: --model / --thinking flags → LUXE_MODEL / LUXE_PROVIDERwhat you last pickeddefault_model in models.json → a built-in workhorse. Flags stay one-offs: they never overwrite the memory. The record is machine-written and lives in $XDG_STATE_HOME/luxe/state.json (~/.local/state/luxe/state.json by default) — never in models.json, which is yours and holds secrets. Delete it any time; the only consequence is forgetting. Set remember_model to false to always start from the configured default.

max_tool_iterations bounds the tool-call round-trips inside a single turn. It is unset by default — a turn runs until the model stops calling tools or you cancel it. A blind counter is a poor runaway guard; the real ones react to actual failure signals (the repeated-identical-call doom-loop check, Esc/cancel, context-aware termination).

Set a number when you want a cost ceiling. Reaching it doesn’t cut the turn off mid-flight: the final round-trip runs with the tools withheld and an instruction to wrap up, so you get a summary of what happened and what’s left instead of a dangling error. LUXE_MAX_TOOL_ITERATIONS overrides the config for one run — a positive integer to set a cap, or 0/off/none/unlimited to lift a configured one.

Tool selection

luxe init writes a tools block that turns individual optional tools off. It’s a deny-list — every built-in stays enabled unless named, so a new release’s tools are on by default — and the essential read/write/edit/bash are never disabled even if listed:

{
  "tools": {
    "disabled": ["screenshot", "web_search", "debug"]
  }
}

Run luxe init for an interactive checklist (Y/n per optional tool), or edit this block by hand. Project .luxe/config.json can disable more tools on top of the global list (the two deny-lists union). Disabling mcp drops the MCP gateway; disabling web_search/web_fetch removes web access, and so on — keep only what you use.