Luxe

Tools

Better than the shell.

An agent can do almost anything with a shell, and that's the trouble. A find in a real project returns half a megabyte, a sed that matches nothing reports success, and the model pays for all of it in tokens and turns.

So every tool in Luxe has to beat the command it replaces: by sending less, by getting it right the first time, or by doing something the shell can't.

Measured in a checkout of Django at 04ac9b45a3, the codebase the harness eval runs in, with its virtualenv in place. The shell row is the command's raw output; tightest cut is the least any other agent sends its model of it, which is Codex's 10 KB, head and tail kept. Pi and OpenCode keep up to 50 KB and Claude Code 30,000 characters. A token is about four bytes.

Those are single calls, and across a whole task the bars shrink, because most calls are small to begin with. What a whole task costs is below.

Whole tasks

Luxe, Claude Code, Codex, OpenCode and Pi each ran the first twelve Django tasks of SWE-bench Verified Mini, with the same model, the same prompt and the same keys, every call metered at the network and priced from one list. Each figure is what the other agent spent on the same task, as a multiple of what Luxe spent: above 1× costs more than Luxe.

Model Claude Code or Codex OpenCode Pi
claude-haiku-5-5 1.71× 1.16× 0.60×
claude-sonnet-5-5 1.98× 1.15× 0.44×
claude-opus-5-5 1.76× 1.14× 0.48×
gpt-6-luna 1.23× 0.97× 0.45×
gpt-6.1-sol 1.73× 1.05× 0.44×

Every run is charged as a cold start, the way a session begins after a break. Run side by side on a warm cache, Claude Code and OpenCode cost up to 2.6× what Luxe does on Claude models. Pass rates overlapped on every model. Pi is the cheapest by design: four tools and a short prompt, with web search, MCP and the rest left to extensions. Graded on one machine rather than in SWE-bench's own containers, so these are not leaderboard scores. Measured at 5b58b8b0.

Files

read

instead of cat, head, sed -n

Several files in one call, with numbered lines. An image comes back as a picture.

Shell
Sends the whole file, however long, and the model can't see an image.
Luxe
A page at a time, stopping at a line boundary and saying where to pick up.

edit

instead of sed -i

Changes exact text, several edits in one call, all or none. It won't touch a file the agent hasn't read, or one that changed since.

Shell
Exits 0 when the pattern matches nothing, so a missed edit looks like a done one.
Luxe
Refuses a miss and points at the closest line, refuses an ambiguous match, and shows the diff after formatting.

write

instead of cat > file

Creates or replaces a whole file, and shows what it wrote.

Shell
Replaces whatever was there, unseen.
Luxe
Won't overwrite a file the agent hasn't read, keeps its line endings, and formats it.

Shell and tests

bash

instead of sh

Long output comes back as the lines that matter, with every gap marked and the untouched text saved to a file, each stream whole up to 8 MB. A command that runs out of time returns what it printed so far.

$ git log --stat -n 30 3.1k tokens
tightest cut 2.6k tokens
bash 810 tokens
3.9× less than the shell · 3.2× less than the tightest cut

test

instead of cargo test, npm test, pytest

One line when everything passes. When something fails, each failure with its file:line, and which ones your change broke. Tests run the project's way, through its own .venv or package manager.

$ cd tests && ../.venv/bin/python runtests.py --settings=test_sqlite --parallel 1 delete 90 tokens
tightest cut 90 tokens
test 60 tokens
1.6× less than the shell · 1.6× less than the tightest cut

Git

git

instead of git, gh

The last ten commits, with a note when there are more. Diffs are capped and say how to narrow them. Pull requests, issues and CI checks come through gh.

$ git log 2052k tokens
tightest cut 2.6k tokens
git 240 tokens
8,454× less than the shell · 11× less than the tightest cut

Code intelligence

read_symbol

instead of cat

One function, struct or method by name, instead of the file it lives in.

$ cat django/db/models/deletion.py 3.8k tokens
tightest cut 2.6k tokens
read_symbol 420 tokens
9.1× less than the shell · 6.1× less than the tightest cut

module_report

instead of cat

A file's outline: each symbol and the lines it spans, so the agent reads only what it needs.

$ cat django/db/models/query.py 20k tokens
tightest cut 2.6k tokens
module_report 490 tokens
41× less than the shell · 5.2× less than the tightest cut

impact

instead of nothing

What else a change touches, before the agent makes it.

Shell
Callers of callers is a search per hop, and tests don't say what they cover.
Luxe
Lists what calls a symbol, what depends on a file, and which tests cover it, a few hops out.

lsp_diagnostics

instead of cargo check, tsc

Errors and warnings for the files you name. They also come back on their own after every edit.

Shell
Builds the whole project, one language at a time.
Luxe
Asks the language server about one file, in any language that has a server.

lsp_navigation

instead of grep for a name

Definitions, references, types and renames, from the language server.

Shell
Every line that spells the same name.
Luxe
The definition and the real references, by meaning rather than spelling.

Debugging

debug

instead of print statements

Drives a real debugger, with breakpoints, stepping and variables, for Rust, C, C++, Python and Go.

Shell
Add a print, rebuild, rerun, repeat.
Luxe
Stops at a breakpoint and shows the frame and its locals, with library frames folded away.

The web

web_fetch

instead of curl

Pages come back as markdown, not HTML. A GitHub repository is cloned into the project, with its links flattened and no language server started in it, so the agent can search the real files.

$ curl -sL https://docs.rs/tokio/latest/tokio/ 14k tokens
tightest cut 2.6k tokens
web_fetch 5.4k tokens
2.6× less than the shell · 2.1× more than the tightest cut, with nothing cut out

screenshot

instead of chrome --headless --screenshot

Captures a page, so the agent can check the UI it just built.

Shell
Writes a file the model never sees.
Luxe
Returns the picture to the model, from your dev server or any page.

Beyond the shell

  • todo

    A checklist that survives compaction, shown in the dock's PLAN.

  • question

    Stops to ask you, with choices, instead of guessing.

  • skill

    Loads a skill's instructions when the task calls for them.

  • mcp

    Your MCP servers behind one tool, every call checked against your permissions.

Every tool

  • Time limits

    Every call has one, and ctrl+esc stops the whole batch.

  • Forgiving

    A call with an argument the tool doesn't know still runs, and says which it ignored.

  • Yours to change

    /tools shows what the agent can use, and any tool but the core four can be turned off. See the guide.