Luxe

Tools

What the model can reach, and the bar a tool has to clear.

Luxe ships with a comprehensive set of tools:

  • read/write/edit: File operations with safety guards (read-before-edit, staleness, and blind-overwrite guards). edit returns a compact, colored inline diff — line-numbered rows with a few lines of context and where the file was skipped, drawn side by side on a wide terminal — so you see exactly what changed in the tool card, no separate viewer needed. A write card shows the file it wrote, syntax-highlighted, taken from the call itself rather than from the tool’s token-bounded result (which is why it can count lines honestly and expand in full). A rejected edit says why on its card instead (± edit src/lib.rs <1ms · edited before reading the file, with the tool’s own instruction under it): the guards are recoverable by design, and a card that says nothing but “failed” invites the model to work around them. The read record is per Luxe process — a resumed session starts with none, because the fingerprint that made the earlier read trustworthy is gone with it — and the rejection says that too.
  • bash: Execute shell commands with timeout + deterministic output compression
  • grep/glob: Search and pattern matching, with output bounded before it reaches the model
  • web_search/web_fetch: Pluggable search backends (Brave, Tavily, Exa)
  • question: Opens a real interactive modal in the TUI — single/multi-select with [✓] checkboxes, number-key shortcuts, and an always-available free-text row (Space toggle · Enter submit · Esc cancel). Headless/loop runs resolve to a default instead of blocking.
  • skill: Discover and load SKILL.md files (also auto-listed in the system prompt); an activated skill shows a distinct purple tool card
  • git: Repository operations with optional GitHub CLI integration
  • task/todo: Durable task memory and todo tracking
  • ast_grep: AST-aware structural search/replace. Requires the ast-grep CLI (cargo install ast-grep --locked or npm i -g @ast-grep/cli); on Linux note that /usr/bin/sg is the unrelated shadow-utils group tool, so the ast-grep binary itself must be on PATH.

Tools resolve relative paths against the directory Luxe was launched in — that’s the project scope everything else (sessions, task memory, permissions, the code graph) keys off, and it does not follow a cd inside a bash command. Point Luxe at the project you want to work on rather than navigating there from inside a session. The offline code index likewise walks the project without following symlinks, so a tree reached through a symlink is not indexed.

Every optional tool can be turned off in config (tools.disabled, written by luxe init); the essential read/write/edit/bash always stay on.