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).
editreturns 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. Awritecard 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 --lockedornpm i -g @ast-grep/cli); on Linux note that/usr/bin/sgis the unrelated shadow-utils group tool, so theast-grepbinary itself must be onPATH.
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.