Debugging
A native debugger, driven by the agent.
The debug tool is a first-class, always-available tool (the model sees it in every request, like
read/bash) and its description steers the model to prefer it over print-debugging. To reinforce
that for models that default to edit-and-retry, Luxe also nudges toward the debugger when tests
keep failing: after 3 consecutive failing test runs (the test tool or a bash test command) it
appends a one-time hint suggesting a breakpoint-and-inspect pass (toggle: LUXE_DEBUG_NUDGE=0).
While a session is live, the Context Dock shows a DEBUG section (program + running/stopped).
Full guide: docs/guide/debugging-guide.md.
The debug tool drives a real debugger (DAP). Built-in adapters (shipped as a data file,
crates/luxe-dap/src/default-debug-adapters.json, merged with your config through one schema):
debugpy (Python, .py), CodeLLDB/lldb-dap/gdb (Rust/C/C++ binaries), and Delve (Go,
.go). Run /debug in the TUI to see the adapters, which are installed, and any active debug
sessions. Add more languages without a code change via ~/.config/luxe/debug-adapters.json — a
JSON array reusing a built-in launch dialect:
[
{
"id": "ruby",
"command": ["rdbg", "--open", "--port", "${DAP_ADDR}"],
"extensions": ["rb"],
"dialect": "debugpy",
"transport": "tcp_dial_in"
}
]
dialect is the launch-arg shape (debugpy | lldb | gdb | delve); transport is stdio
(default) or tcp_dial_in (the adapter dials back into a loopback port Luxe binds, with
${DAP_ADDR} replaced by host:port). A configured extensions entry auto-routes matching files;
any adapter is also selectable via the tool’s adapter argument.