How Luxe talks to you
The communication contract, and how to change it.
Current models are extraordinary and extraordinarily wordy. Left alone they open with “Great question!”, narrate every tool call, recap the diff you can already see, and reach for leverage where use would do. You are reading all of that at the speed the model writes it, on top of the diffs and tool output you actually asked for.
So Luxe’s system prompt carries a communication contract alongside its engineering standards — always on, and it survives a role switch, because a planner and a reviewer talk to the same person a developer does:
- Answer first, then the why, then the caveats.
- Length tracks the question. Most replies are a few sentences.
- No filler, no process narration, no announcing tool calls the UI already shows.
- Plain words over impressive ones, and varied sentence length.
- Real terms, explained. The word stays (it’s what you’ll search for later); the gloss comes with it. Simplifying by going vague is not a kindness.
- Uncertainty in one line — “I didn’t verify the migration path” beats three hedged paragraphs.
- One question at a time, with two or three options and a marked recommendation.
- Finished work in a couple of lines: what changed, what was verified, what was left.
Asking you things
When the agent needs a decision it opens a picker rather than burying the question in prose. Each option carries its own one-line reason, the one the agent would pick is badged, and the cursor starts there — so agreeing is one keypress:
╭ · Question ────────────────────────────────────────────────────╮
│ │
│ Should the migration run before the index rebuild? │
│ │
│ ❯ 1. Before the rebuild recommended │
│ the index is built from already-migrated rows │
│ 2. After the rebuild │
│ faster, but a failed migration leaves a stale index │
│ ✎ Type your own answer │
│ │
│ ↑↓ move · Enter answer · Esc cancel │
╰────────────────────────────────────────────────────────────────╯
Free text is always the last row, so the agent never has to offer an “Other” option — and four options is the hard ceiling, because a list of seven means the agent hasn’t decided anything yet. Narrow or short terminals drop the rationale before they drop an option.
Changing the register
The how much is explained half is yours to set; the less is more half is not
negotiable. In ~/.config/luxe/config.json (or a project’s .luxe/config.json):
{
"agent": {
"communication": "plain"
}
}
| value | what changes |
|---|---|
plain (default) | keeps the real term and glosses it in plain words on first use |
teaching | assumes no background: term, plain-words meaning, and one analogy or short example |
technical | peer register — standard terms pass without a gloss |
None of them licenses padding: teaching explains more, it does not write more. For a
one-off, just say so (“go technical with me”); to make it durable for a repo, put it in
that repo’s AGENTS.md.