Luxe

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.