Language intelligence
Diagnostics and navigation from a real language server.
Diagnostics on edit (automatic). After every edit/write, Luxe runs the file’s language
server, waits for it to re-analyze and settle (so results aren’t stale), and appends the
errors/warnings — errors first, capped — to the tool result the model sees. This closes the
edit→verify→fix loop with no prompting or CLAUDE.md rule needed (toggle: LUXE_LSP_ON_EDIT=0).
The lsp_diagnostics, lsp_navigation, and discovery tools (symbol_search, module_report,
read_symbol) drive a warm language server per project. Built-in servers (external binaries you
install — Luxe knows how to launch + detect them): rust-analyzer (.rs),
typescript-language-server (.ts/.tsx/.js/.jsx/.mjs/.cjs), pyright (.py), gopls
(.go), clangd (C/C++), and bash-language-server. A missing server degrades gracefully and
tells you how to install it.
Add any other LSP without a code change via ~/.config/luxe/lsp-servers.json — a JSON object of
language_id → server:
{
"ruby": {
"command": "ruby-lsp",
"extensions": ["rb"],
"root_markers": ["Gemfile", ".ruby-version"],
"install_hint": "gem install ruby-lsp"
}
}
Files route to a server by extensions; root_markers locate the workspace root; install_hint
is shown if the server isn’t found. Entries with a built-in language_id override the default.
Servers are keyed by (language, workspace root) — both the warm clients and the failures. A server that fails to start for one root (a cold-start timeout on a huge tree, a root without the markers it needs) never disables that language for other roots, and the failing pair is retried with backoff (30s, doubling to 10 minutes) rather than being written off for the session.
The agent can install a missing server itself (via bash, using the hint) and Luxe will launch it
on the next call — so a first-time Ruby (or any) project bootstraps its own tooling, with no silent
downloads. The built-in set ships as a data file (crates/luxe-lsp/src/default-lsp-servers.json)
merged with your config through one schema.
Run /lsp in the TUI (slash command or Ctrl+K palette) to see every configured server, which
binaries are installed right now, which are running, and the install command for the missing
ones. The view is rebuilt from the live workspace snapshot, so it reflects config edits and binaries
installed mid-session with no restart.