Luxe

Extending Luxe

Which kind of extension you need, how to install one, and what stays stable across updates.

View as Markdown

Luxe extends through files and programs, never through code loaded into Luxe itself. A file carries instructions or settings; a program carries behavior, and runs with the same access you have. Installing an extension is copying a file.

Which one you need

ToUseRuns
Change how Luxe looks, or which tools existConfiguration and themesNothing
Teach the agent a procedure or house styleSkills and AGENTS.mdNothing
Point the agent at your tracker or runbooks with @Mention sourcesYour program, when its tab opens
Give the agent new toolsAn MCP serverYour program, when the agent calls it
Block, rewrite, audit or react to what the agent doesHooksYour program, at points in a turn
Use an endpoint or model Luxe does not knowCustom providersNothing, or your !command for a key
Drive Luxe from your own program, or build a new front end: conversation, Guided Review and GitHubThe RPC protocolYour program, driving Luxe
Open another terminal tool with a keyLaunchersYour program, on a key

The rows are in order of effort; the first that fits is usually right. Recipes puts several together: Asana in the @ picker, subagents, a classifier guard, running in Herdr, and a local model in LM Studio.

Where extensions live

~/.config/luxe/
├── config.json           settings, launchers, mention sources
├── keybindings.json      keys
├── models.json           endpoints and models
├── permissions.json      what the agent may do
├── agents.md             instructions for every project
├── skills/
│   └── <name>/           a skill
├── hooks.json            hooks
├── mcp.json              MCP servers
├── themes/
│   └── <name>.json       a theme
├── lsp-servers.json      language servers
└── debug-adapters.json   debug adapters

<project>/
├── .agents/skills/       skills committed with the repository
├── .mcp.json             MCP servers
└── .luxe/
    ├── config.json       settings, less what a project cannot change
    ├── keybindings.json
    ├── skills/
    │   └── <name>/
    ├── mcp.json
    ├── hooks.json        only with --trust-project
    └── permissions.json  can only tighten yours, unless --trust-project

What a project’s config.json cannot change is listed in Configuration. On Windows, your own folder is %APPDATA%\luxe, and LUXE_CONFIG_DIR moves it anywhere. These paths do not change between releases.

.luxe/ writes its own .gitignore, which keeps everything in it out of Git except permissions.json, mcp.json, hooks.json and skills/. To share more with your team, such as the project’s config.json, write that .gitignore yourself: Luxe rewrites its own copy, but leaves alone one it did not write.

Trust

A repository does not choose what runs on your machine. Its hooks and its loop gate.commands run only with --trust-project, and its permission rules can only make yours stricter. MCP servers, language servers and formatters it brings start, by default, only in an interactive session or with --trust-project; lsp.project_servers in your own config changes that, see Tools. This is about which programs Luxe starts. A language server itself may run project code, as rust-analyzer does with build.rs, so open an unfamiliar repository in Luxe the way you would build it.

A repository can still write instructions. Its AGENTS.md and skills reach the model. Luxe removes text a reviewer cannot see, but plain text is still instructions, so read an unfamiliar repository’s AGENTS.md as you would its Makefile.

What stays stable across updates

Across updates
config.json, models.json, keybindings.json, lsp-servers.json, debug-adapters.jsonOnly added to. An old file always loads. An unknown key is ignored, and no key changes meaning.
Sessions in .luxe/sessions/A newer Luxe reads every older session. An older Luxe skips what it does not know in a newer one.
The RPC protocolAdding to it changes nothing. Removing or renaming anything changes protocol_version.
Hook pointsAdded, never renamed. An unknown point skips that hook alone, with a warning in the log.
Tool argumentsA renamed argument still accepts its old name.
Skills and AGENTS.mdPlain markdown
The paths aboveDo not move

Before 1.0, a minor release may change the RPC protocol and the hook points, and its release notes will say so. Config files and sessions keep the stronger promise regardless, since they are the two you cannot regenerate.

What Luxe will not add

  • Plugins loaded into Luxe. A plugin would have all of Luxe’s access, however it was sandboxed.
  • A network listener for RPC. It would turn a local program into a service that needs authentication.