px
A coding agent built around DeepSeek's prefix cache, where the repo's own tests decide when the work is done, not the model.

Set it up
bun install
mkdir -p ~/.px && printf 'PX_DEEPSEEK_API_KEY=sk-...\n' > ~/.px/env && chmod 600 ~/.px/env
bun run doctor # probe the live API against every assumption px encodes
bun link # put `px` on PATH
Use a DeepSeek key that nothing else uses. px writes every call to a local ledger and checks it against the account balance; a shared key makes that check meaningless.
Give it a task
px run "make the failing auth test pass"
- px makes a git worktree on its own branch. Your checkout and uncommitted work are out of reach.
- It finds the verify command:
.px/verify.tomlfirst, thenpackage.jsontest scripts, pytest files,Cargo.toml,go.modor a Makefiletest:target. With none, it exits before the first API call. - It runs that command once on the untouched worktree and records what already fails.
- The model works with thinking off, on a frozen prompt prefix, so nearly every turn is a cache hit. When it needs depth it asks a separate reasoning lane one question, and the answer comes back as a tool result.
- When the model calls finish, px runs verify. If anything that passed at baseline now fails, the model gets the failing output instead of a finish, and keeps going.
- The run ends
passed,partial,blocked,budgetorerror. Onlypassedexits 0.
Land it
px land px/<taskId>
Fast-forward only. px never resolves a conflict or rewrites history for you; if your branch moved, rebase it yourself or run px again.
Watch the money
px cost 7 shows spend by day, lane and cache tier from the ledger. px spend shows the account balance and today’s spend against the daily ceiling. --budget caps a single task (default $0.15) and --budget-day caps the day (default $1.00).
DeepSeek charges double on weekday mornings UTC, and px shows the model the current multiplier every turn.
The tests
169 tests across 7 files run in under three seconds.
The API research behind it: What DeepSeek’s API won’t tell you.